[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [calligra] krita: Fix the checkbox behavior of the composite op
From: Silvio Heinrich <plassy () web ! de>
Date: 2011-09-14 13:42:15
Message-ID: 20110914134215.1E379A607A () git ! kde ! org
[Download RAW message or body]
Git commit 8d7c720adfed69ec93b8440b8d1448397910af53 by Silvio Heinrich.
Committed on 14/09/2011 at 15:40.
Pushed by heinrich into branch 'master'.
Fix the checkbox behavior of the composite op combobox.
M +1 -1 krita/plugins/paintops/libpaintop/kis_paintop_options_widget.cpp
M +33 -22 krita/ui/kis_categorized_item_delegate.cpp
M +4 -5 krita/ui/kis_categorized_item_delegate.h
M +2 -0 krita/ui/kis_categorized_list_model.h
M +21 -3 krita/ui/widgets/kis_categorized_list_view.cpp
M +6 -1 krita/ui/widgets/kis_categorized_list_view.h
M +20 -3 krita/ui/widgets/kis_cmb_composite.cc
M +4 -0 krita/ui/widgets/kis_cmb_composite.h
M +1 -1 krita/ui/widgets/kis_paintop_list_widget.cpp
http://commits.kde.org/calligra/8d7c720adfed69ec93b8440b8d1448397910af53
diff --git a/krita/plugins/paintops/libpaintop/kis_paintop_options_widget.cpp \
b/krita/plugins/paintops/libpaintop/kis_paintop_options_widget.cpp index \
a15543b..5c18451 100644
--- a/krita/plugins/paintops/libpaintop/kis_paintop_options_widget.cpp
+++ b/krita/plugins/paintops/libpaintop/kis_paintop_options_widget.cpp
@@ -47,7 +47,7 @@ KisPaintOpOptionsWidget::KisPaintOpOptionsWidget(QWidget * parent)
setObjectName("KisPaintOpPresetsWidget");
m_d->model = new KisPaintOpOptionListModel();
- m_d->delegate = new KisCategorizedItemDelegate(m_d->model, false);
+ m_d->delegate = new KisCategorizedItemDelegate(false);
m_d->optionsList = new KisCategorizedListView();
m_d->optionsList->setModel(m_d->model);
m_d->optionsList->setItemDelegate(m_d->delegate);
diff --git a/krita/ui/kis_categorized_item_delegate.cpp \
b/krita/ui/kis_categorized_item_delegate.cpp index f1185b1..764acd4 100644
--- a/krita/ui/kis_categorized_item_delegate.cpp
+++ b/krita/ui/kis_categorized_item_delegate.cpp
@@ -19,37 +19,48 @@
#include "kis_categorized_item_delegate.h"
#include "kis_categorized_list_model.h"
+
+// #include <kicon.h>
+// #include <kstandardguiitem.h>
+
#include <QPainter>
+#include <QStyle>
+#include <QStyleOptionMenuItem>
+#include <QApplication>
-KisCategorizedItemDelegate::KisCategorizedItemDelegate(QAbstractListModel* model, \
bool indicateError):
- m_model(model),
+KisCategorizedItemDelegate::KisCategorizedItemDelegate(bool indicateError):
m_indicateError(indicateError),
m_minimumItemHeight(0)
{
+// m_errorIcon = \
KStandardGuiItem::cancel().icon();//KIcon("dialog-warning");//QIcon::fromTheme("dialog-warning");
m_errorIcon = QIcon::fromTheme("dialog-warning");
}
void KisCategorizedItemDelegate::paint(QPainter* painter, const \
QStyleOptionViewItem& option, const QModelIndex& index) const {
- qint32 border = 0;//4;
- qint32 xpos = border + option.rect.x() + option.rect.height();
- qint32 ypos = option.rect.y();
- qint32 size = option.rect.height();
- QRect rect(xpos, ypos, option.rect.width()-xpos, option.rect.height());
-
painter->resetTransform();
- if(!m_model->data(index, IsHeaderRole).toBool()) {
-// QStyledItemDelegate::paint(painter, option, index);
- QStyleOptionViewItem sovi = option;
-
- if(m_indicateError)
- sovi.rect = rect;
-
- QStyledItemDelegate::paint(painter, sovi, index);
-
- if(m_indicateError && !(m_model->flags(index) & Qt::ItemIsEnabled))
- m_errorIcon.paint(painter, 0, ypos, size, size, Qt::AlignCenter, \
QIcon::Normal, QIcon::On); + if(!index.data(IsHeaderRole).toBool()) {
+ if(m_indicateError) {
+ QStyleOptionMenuItem item;
+ item.text = index.data().toString();
+ item.rect = option.rect;
+ item.font = option.font;
+ item.state = option.state;
+ item.palette = option.palette;
+ item.fontMetrics = option.fontMetrics;
+
+ if(!(index.flags() & Qt::ItemIsEnabled))
+ item.icon = m_errorIcon;
+
+ if(index.flags() & Qt::ItemIsUserCheckable) {
+ item.checked = (index.data(Qt::CheckStateRole).toInt() == Qt::Checked);
+ item.checkType = QStyleOptionMenuItem::NonExclusive;
+ }
+
+ QApplication::style()->drawControl(QStyle::CE_MenuItem, &item, painter);
+ }
+ else QStyledItemDelegate::paint(painter, option, index);
}
else {
if(option.state & QStyle::State_MouseOver)
@@ -57,14 +68,14 @@ void KisCategorizedItemDelegate::paint(QPainter* painter, const \
QStyleOptionView else
painter->fillRect(option.rect, Qt::lightGray);
- painter->drawText(option.rect, m_model->data(index).toString(), \
QTextOption(Qt::AlignVCenter|Qt::AlignHCenter)); + \
painter->drawText(option.rect, index.data().toString(), \
QTextOption(Qt::AlignVCenter|Qt::AlignHCenter));
paintTriangle(
painter,
option.rect.x(),
option.rect.y(),
- size,
- !m_model->data(index, ExpandCategoryRole).toBool()
+ option.rect.height(),
+ !index.data(ExpandCategoryRole).toBool()
);
}
diff --git a/krita/ui/kis_categorized_item_delegate.h \
b/krita/ui/kis_categorized_item_delegate.h index f4efecf..c3bb2b9 100644
--- a/krita/ui/kis_categorized_item_delegate.h
+++ b/krita/ui/kis_categorized_item_delegate.h
@@ -30,7 +30,7 @@
class KRITAUI_EXPORT KisCategorizedItemDelegate: public QStyledItemDelegate
{
public:
- KisCategorizedItemDelegate(QAbstractListModel* model, bool indicateError);
+ KisCategorizedItemDelegate(bool indicateError);
virtual void paint(QPainter* painter, const QStyleOptionViewItem& option, const \
QModelIndex& index) const;
virtual QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& \
index) const;
@@ -38,10 +38,9 @@ private:
void paintTriangle(QPainter* painter, qint32 x, qint32 y, qint32 size, bool \
rotate) const;
private:
- QAbstractListModel* m_model;
- QIcon m_errorIcon;
- bool m_indicateError;
- mutable qint32 m_minimumItemHeight;
+ QIcon m_errorIcon;
+ bool m_indicateError;
+ mutable qint32 m_minimumItemHeight;
};
#endif // _KIS_CATEGORIZED_ITEM_DELEGATE_H_
diff --git a/krita/ui/kis_categorized_list_model.h \
b/krita/ui/kis_categorized_list_model.h index 3b125a2..fbd15c8 100644
--- a/krita/ui/kis_categorized_list_model.h
+++ b/krita/ui/kis_categorized_list_model.h
@@ -312,6 +312,7 @@ public:
if(isHeader(index)) {
switch(role)
{
+ case Qt::ToolTipRole:
case Qt::DisplayRole:
return categoryToString(m_categories[index.first].data);
case IsHeaderRole:
@@ -321,6 +322,7 @@ public:
else {
switch(role)
{
+ case Qt::ToolTipRole:
case Qt::DisplayRole:
return \
entryToString(m_categories[index.first].entries[index.second].data); case \
IsHeaderRole:
diff --git a/krita/ui/widgets/kis_categorized_list_view.cpp \
b/krita/ui/widgets/kis_categorized_list_view.cpp index aacc58d..730acf5 100644
--- a/krita/ui/widgets/kis_categorized_list_view.cpp
+++ b/krita/ui/widgets/kis_categorized_list_view.cpp
@@ -18,6 +18,7 @@
#include "kis_categorized_list_view.h"
#include "../kis_categorized_list_model.h"
+#include <QMouseEvent>
KisCategorizedListView::KisCategorizedListView(QWidget* parent):
QListView(parent)
@@ -61,6 +62,23 @@ void KisCategorizedListView::rowsInserted(const QModelIndex& \
parent, int start, QListView::rowsInserted(parent, start, end);
updateRows(0, model()->rowCount());
}
-// void KisCategorizedListView::mousePressEvent(QMouseEvent* event)
-// {
-// }
+
+void KisCategorizedListView::mousePressEvent(QMouseEvent* event)
+{
+ QModelIndex index = QListView::indexAt(event->pos());
+
+ if(index.isValid() && (event->pos().x() < 25) && (model()->flags(index) & \
Qt::ItemIsUserCheckable)) { + int role = model()->data(index, \
Qt::CheckStateRole).toInt(); +
+ if(role == Qt::Checked) { model()->setData(index, Qt::Unchecked, \
Qt::CheckStateRole); } + else { model()->setData(index, \
Qt::Checked , Qt::CheckStateRole); } +
+ emit sigEntryChecked(index);
+ }
+ else QListView::mousePressEvent(event);
+}
+
+void KisCategorizedListView::mouseReleaseEvent(QMouseEvent* event)
+{
+ QListView::mouseReleaseEvent(event);
+}
\ No newline at end of file
diff --git a/krita/ui/widgets/kis_categorized_list_view.h \
b/krita/ui/widgets/kis_categorized_list_view.h index 9bd8ed8..dd9e9c2 100644
--- a/krita/ui/widgets/kis_categorized_list_view.h
+++ b/krita/ui/widgets/kis_categorized_list_view.h
@@ -35,12 +35,17 @@ public:
signals:
void sigCategoryToggled(const QModelIndex& index, bool toggled);
+ void sigEntryChecked(const QModelIndex& index);
protected slots:
void slotIndexChanged(const QModelIndex& index);
virtual void dataChanged(const QModelIndex& topLeft, const QModelIndex& \
bottomRight); virtual void rowsInserted(const QModelIndex& parent, int start, int \
end);
-// virtual void mousePressEvent(QMouseEvent* event);
+ virtual void mousePressEvent(QMouseEvent* event);
+ virtual void mouseReleaseEvent(QMouseEvent* event);
+
+private:
+ bool m_EntryWasChecked;
};
diff --git a/krita/ui/widgets/kis_cmb_composite.cc \
b/krita/ui/widgets/kis_cmb_composite.cc index 4be0b7d..34d4cdd 100644
--- a/krita/ui/widgets/kis_cmb_composite.cc
+++ b/krita/ui/widgets/kis_cmb_composite.cc
@@ -25,6 +25,8 @@
#include "kis_categorized_list_model.h"
#include "../kis_categorized_item_delegate.h"
+#include <QMouseEvent>
+
//////////////////////////////////////////////////////////////////////////////////////////
// ---- KisCompositeOpListWidget \
------------------------------------------------------ //
@@ -32,7 +34,7 @@ KisCompositeOpListWidget::KisCompositeOpListWidget(QWidget* \
parent): KisCategorizedListView(parent)
{
m_model = KisCompositeOpListModel::sharedInstance();
- m_delegate = new KisCategorizedItemDelegate(m_model, true);
+ m_delegate = new KisCategorizedItemDelegate(true);
setModel(m_model);
setItemDelegate(m_delegate);
@@ -49,11 +51,11 @@ KisCompositeOpListWidget::~KisCompositeOpListWidget()
// ---- KisCompositeOpComboBox \
-------------------------------------------------------- //
KisCompositeOpComboBox::KisCompositeOpComboBox(QWidget* parent):
- QComboBox(parent)
+ QComboBox(parent), m_allowToHidePopup(true)
{
m_model = KisCompositeOpListModel::sharedInstance();
m_view = new KisCategorizedListView();
- m_delegate = new KisCategorizedItemDelegate(m_model, true);
+ m_delegate = new KisCategorizedItemDelegate(true);
setMaxVisibleItems(100);
setSizeAdjustPolicy(AdjustToContents);
@@ -64,6 +66,7 @@ KisCompositeOpComboBox::KisCompositeOpComboBox(QWidget* parent):
setItemDelegate(m_delegate);
connect(m_view, SIGNAL(sigCategoryToggled(const QModelIndex&, bool)), \
SLOT(slotCategoryToggled(const QModelIndex&, bool))); + connect(m_view, \
SIGNAL(sigEntryChecked(const QModelIndex&)) , SLOT(slotEntryChecked(const \
QModelIndex&))); }
KisCompositeOpComboBox::~KisCompositeOpComboBox()
@@ -84,3 +87,17 @@ void KisCompositeOpComboBox::slotCategoryToggled(const \
QModelIndex& index, bool // Thre is nothing written about this in the docs.
showPopup();
}
+
+void KisCompositeOpComboBox::slotEntryChecked(const QModelIndex& index)
+{
+ Q_UNUSED(index);
+ m_allowToHidePopup = false;
+}
+
+void KisCompositeOpComboBox::hidePopup()
+{
+ if(m_allowToHidePopup) { QComboBox::hidePopup(); }
+ else { QComboBox::showPopup(); }
+
+ m_allowToHidePopup = true;
+}
diff --git a/krita/ui/widgets/kis_cmb_composite.h \
b/krita/ui/widgets/kis_cmb_composite.h index d18e69b..4df0d1f 100644
--- a/krita/ui/widgets/kis_cmb_composite.h
+++ b/krita/ui/widgets/kis_cmb_composite.h
@@ -44,11 +44,15 @@ public:
KisCompositeOpComboBox(QWidget* parent=0);
~KisCompositeOpComboBox();
+ virtual void hidePopup();
+
private slots:
void slotCategoryToggled(const QModelIndex& index, bool toggled);
+ void slotEntryChecked(const QModelIndex& index);
private:
KisCategorizedListView* m_view;
+ bool m_allowToHidePopup;
};
#endif // KIS_COMPOSITEOP_WIDGETS_H_
diff --git a/krita/ui/widgets/kis_paintop_list_widget.cpp \
b/krita/ui/widgets/kis_paintop_list_widget.cpp index f09ec06..4d4d3f5 100644
--- a/krita/ui/widgets/kis_paintop_list_widget.cpp
+++ b/krita/ui/widgets/kis_paintop_list_widget.cpp
@@ -33,7 +33,7 @@ KisPaintOpListWidget::KisPaintOpListWidget(QWidget* parent, const \
char* name):
connect(this, SIGNAL(activated(QModelIndex)), this, \
SLOT(slotOpActivated(QModelIndex)));
m_model = new KisPaintOpListModel();
- m_delegate = new KisCategorizedItemDelegate(m_model, false);
+ m_delegate = new KisCategorizedItemDelegate(false);
setModel(m_model);
setItemDelegate(m_delegate);
}
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic