36
36
#include <lib/semanticinfo/tagmodel.h>
40
41
TagItemDelegate::TagItemDelegate(QAbstractItemView* view)
41
42
: KWidgetItemDelegate(view, view)
43
#define pm(x) view->style()->pixelMetric(QStyle::x)
44
mMargin = pm(PM_ToolBarItemMargin);
45
mSpacing = pm(PM_ToolBarItemSpacing);
47
const int iconSize = KIconLoader::global()->currentSize(KIconLoader::Toolbar);
48
const QSize sz = view->style()->sizeFromContents(QStyle::CT_ToolButton, 0, QSize(iconSize, iconSize));
49
mButtonSize = qMax(sz.width(), sz.height());
53
QList<QWidget*> TagItemDelegate::createItemWidgets() const {
55
#define initButton(x) \
56
(x)->setAutoRaise(true); \
57
setBlockedEventTypes((x), QList<QEvent::Type>() \
58
<< QEvent::MouseButtonPress \
59
<< QEvent::MouseButtonRelease \
60
<< QEvent::MouseButtonDblClick);
62
QToolButton* assignToAllButton = new QToolButton;
63
initButton(assignToAllButton);
64
assignToAllButton->setIcon(KIcon("fill-color")); /* FIXME: Probably not the appropriate icon */
65
assignToAllButton->setToolTip(i18n("Assign this tag to all selected images"));
66
connect(assignToAllButton, SIGNAL(clicked()), SLOT(slotAssignToAllButtonClicked()));
68
QToolButton* removeButton = new QToolButton;
69
initButton(removeButton);
70
removeButton->setIcon(KIcon("list-remove"));
71
connect(removeButton, SIGNAL(clicked()), SLOT(slotRemoveButtonClicked()));
75
return QList<QWidget*>() << removeButton << assignToAllButton;
79
void TagItemDelegate::updateItemWidgets(const QList<QWidget*> widgets, const QStyleOptionViewItem& option, const QPersistentModelIndex& index) const {
80
const bool fullyAssigned = index.data(TagModel::AssignmentStatusRole).toInt() == int(TagModel::FullyAssigned);
82
QToolButton* removeButton = static_cast<QToolButton*>(widgets[0]);
83
QToolButton* assignToAllButton = static_cast<QToolButton*>(widgets[1]);
85
QSize buttonSize(mButtonSize, option.rect.height() - 2 * mMargin);
87
removeButton->resize(buttonSize);
88
assignToAllButton->resize(buttonSize);
90
removeButton->move(option.rect.width() - mButtonSize - mMargin, mMargin);
93
assignToAllButton->hide();
95
assignToAllButton->move(removeButton->x() - mButtonSize - mSpacing, mMargin);
100
void TagItemDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const {
101
if (!index.isValid()) {
104
const bool selected = option.state & QStyle::State_Selected;
105
const bool fullyAssigned = index.data(TagModel::AssignmentStatusRole).toInt() == int(TagModel::FullyAssigned);
107
itemView()->style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &option, painter, 0);
109
QRect textRect = option.rect;
110
textRect.setLeft(textRect.left() + mMargin);
111
textRect.setWidth(textRect.width() - mButtonSize - mMargin - mSpacing);
112
if (!fullyAssigned) {
113
textRect.setWidth(textRect.width() - mButtonSize - mSpacing);
116
painter->setPen(option.palette.color(QPalette::Normal,
118
? QPalette::HighlightedText
120
painter->drawText(textRect, Qt::AlignLeft | Qt::AlignVCenter, index.data().toString());
124
QSize TagItemDelegate::sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const {
125
const int width = option.fontMetrics.width(index.data().toString());
126
const int height = qMax(mButtonSize, option.fontMetrics.height());
127
return QSize(width + 2 * mMargin, height + 2 * mMargin);
131
void TagItemDelegate::slotRemoveButtonClicked() {
132
const QModelIndex index = focusedIndex();
133
if (!index.isValid()) {
134
kWarning() << "!index.isValid()";
137
emit removeTagRequested(index.data(TagModel::TagRole).toString());
141
void TagItemDelegate::slotAssignToAllButtonClicked() {
142
const QModelIndex index = focusedIndex();
143
if (!index.isValid()) {
144
kWarning() << "!index.isValid()";
147
emit assignTagToAllRequested(index.data(TagModel::TagRole).toString());
44
#define pm(x) view->style()->pixelMetric(QStyle::x)
45
mMargin = pm(PM_ToolBarItemMargin);
46
mSpacing = pm(PM_ToolBarItemSpacing);
48
const int iconSize = KIconLoader::global()->currentSize(KIconLoader::Toolbar);
49
const QSize sz = view->style()->sizeFromContents(QStyle::CT_ToolButton, 0, QSize(iconSize, iconSize));
50
mButtonSize = qMax(sz.width(), sz.height());
53
QList<QWidget*> TagItemDelegate::createItemWidgets() const
56
#define initButton(x) \
57
(x)->setAutoRaise(true); \
58
setBlockedEventTypes((x), QList<QEvent::Type>() \
59
<< QEvent::MouseButtonPress \
60
<< QEvent::MouseButtonRelease \
61
<< QEvent::MouseButtonDblClick);
63
QToolButton* assignToAllButton = new QToolButton;
64
initButton(assignToAllButton);
65
assignToAllButton->setIcon(KIcon("fill-color")); /* FIXME: Probably not the appropriate icon */
66
assignToAllButton->setToolTip(i18n("Assign this tag to all selected images"));
67
connect(assignToAllButton, SIGNAL(clicked()), SLOT(slotAssignToAllButtonClicked()));
69
QToolButton* removeButton = new QToolButton;
70
initButton(removeButton);
71
removeButton->setIcon(KIcon("list-remove"));
72
connect(removeButton, SIGNAL(clicked()), SLOT(slotRemoveButtonClicked()));
76
return QList<QWidget*>() << removeButton << assignToAllButton;
79
void TagItemDelegate::updateItemWidgets(const QList<QWidget*> widgets, const QStyleOptionViewItem& option, const QPersistentModelIndex& index) const
81
const bool fullyAssigned = index.data(TagModel::AssignmentStatusRole).toInt() == int(TagModel::FullyAssigned);
83
QToolButton* removeButton = static_cast<QToolButton*>(widgets[0]);
84
QToolButton* assignToAllButton = static_cast<QToolButton*>(widgets[1]);
86
QSize buttonSize(mButtonSize, option.rect.height() - 2 * mMargin);
88
removeButton->resize(buttonSize);
89
assignToAllButton->resize(buttonSize);
91
removeButton->move(option.rect.width() - mButtonSize - mMargin, mMargin);
94
assignToAllButton->hide();
96
assignToAllButton->move(removeButton->x() - mButtonSize - mSpacing, mMargin);
100
void TagItemDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const
102
if (!index.isValid()) {
105
const bool selected = option.state & QStyle::State_Selected;
106
const bool fullyAssigned = index.data(TagModel::AssignmentStatusRole).toInt() == int(TagModel::FullyAssigned);
108
itemView()->style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &option, painter, 0);
110
QRect textRect = option.rect;
111
textRect.setLeft(textRect.left() + mMargin);
112
textRect.setWidth(textRect.width() - mButtonSize - mMargin - mSpacing);
113
if (!fullyAssigned) {
114
textRect.setWidth(textRect.width() - mButtonSize - mSpacing);
117
painter->setPen(option.palette.color(QPalette::Normal,
119
? QPalette::HighlightedText
121
painter->drawText(textRect, Qt::AlignLeft | Qt::AlignVCenter, index.data().toString());
124
QSize TagItemDelegate::sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const
126
const int width = option.fontMetrics.width(index.data().toString());
127
const int height = qMax(mButtonSize, option.fontMetrics.height());
128
return QSize(width + 2 * mMargin, height + 2 * mMargin);
131
void TagItemDelegate::slotRemoveButtonClicked()
133
const QModelIndex index = focusedIndex();
134
if (!index.isValid()) {
135
kWarning() << "!index.isValid()";
138
emit removeTagRequested(index.data(TagModel::TagRole).toString());
141
void TagItemDelegate::slotAssignToAllButtonClicked()
143
const QModelIndex index = focusedIndex();
144
if (!index.isValid()) {
145
kWarning() << "!index.isValid()";
148
emit assignTagToAllRequested(index.data(TagModel::TagRole).toString());