Krita Source Code Documentation
Loading...
Searching...
No Matches
ComboEventFilter Class Reference
+ Inheritance diagram for ComboEventFilter:

Public Member Functions

 ComboEventFilter (KisColorFilterCombo *parent)
 

Protected Member Functions

bool eventFilter (QObject *obj, QEvent *event) override
 

Private Attributes

bool m_buttonPressed
 
KisColorFilterCombom_parent
 

Detailed Description

Definition at line 57 of file kis_color_filter_combo.cpp.

Constructor & Destructor Documentation

◆ ComboEventFilter()

ComboEventFilter::ComboEventFilter ( KisColorFilterCombo * parent)
inline

Definition at line 60 of file kis_color_filter_combo.cpp.

60: m_parent(parent), m_buttonPressed(false) {}
KisColorFilterCombo * m_parent

Member Function Documentation

◆ eventFilter()

bool ComboEventFilter::eventFilter ( QObject * obj,
QEvent * event )
inlineoverrideprotected

We should eat the first event that arrives exactly when the drop down appears on screen.

Definition at line 63 of file kis_color_filter_combo.cpp.

63 {
64 if (event->type() == QEvent::Leave) {
65 m_buttonPressed = false;
66
67 } else if (event->type() == QEvent::MouseButtonPress) {
68 QMouseEvent *mevent = static_cast<QMouseEvent*>(event);
69 m_buttonPressed = mevent->button() == Qt::LeftButton;
70
71 } else if (event->type() == QEvent::MouseButtonRelease) {
72 QMouseEvent *mevent = static_cast<QMouseEvent*>(event);
73 QModelIndex index = m_parent->view()->indexAt(mevent->pos());
74 if (!index.isValid()) return false;
75
80 if (!m_buttonPressed) return true;
81
82 const bool toUncheckedState = index.data(Qt::CheckStateRole) == Qt::Checked;
83
84 if (toUncheckedState) {
85 m_parent->model()->setData(index, Qt::Unchecked, Qt::CheckStateRole);
86 } else {
87 m_parent->model()->setData(index, Qt::Checked, Qt::CheckStateRole);
88 }
89
90 if (index.data(OriginalLabelIndex).toInt() == -1) {
91 for (int i = 0; i < m_parent->model()->rowCount(); i++) {
92 const QModelIndex &other = m_parent->model()->index(i, 0);
93 if (other.data(OriginalLabelIndex) != -1) {
94 m_parent->model()->setData(other, toUncheckedState ? Qt::Unchecked : Qt::Checked, Qt::CheckStateRole);
95 }
96 }
97 } else {
98 bool prevChecked = false;
99 bool checkedVaries = false;
100 QModelIndex allLabelsIndex;
101
102 for (int i = 0; i < m_parent->model()->rowCount(); i++) {
103 const QModelIndex &other = m_parent->model()->index(i, 0);
104 if (other.data(OriginalLabelIndex) != -1) {
105 const bool currentChecked = other.data(Qt::CheckStateRole) == Qt::Checked;
106
107 if (i == 0) {
108 prevChecked = currentChecked;
109 } else {
110 if (prevChecked != currentChecked) {
111 checkedVaries = true;
112 break;
113 }
114 }
115 } else {
116 allLabelsIndex = other;
117 }
118 }
119
120 const bool allLabelsIndexShouldBeChecked =
121 prevChecked && !checkedVaries;
122
123 if (allLabelsIndexShouldBeChecked !=
124 (allLabelsIndex.data(Qt::CheckStateRole) == Qt::Checked)) {
125
126 m_parent->model()->setData(allLabelsIndex, allLabelsIndexShouldBeChecked ? Qt::Checked : Qt::Unchecked, Qt::CheckStateRole);
127 }
128 }
129
131
132 m_buttonPressed = false;
133 return true;
134 }
135
136 return QObject::eventFilter(obj, event);
137 }
void selectedColorsChanged()

References m_buttonPressed, m_parent, OriginalLabelIndex, and KisColorFilterCombo::selectedColorsChanged().

Member Data Documentation

◆ m_buttonPressed

bool ComboEventFilter::m_buttonPressed
private

Definition at line 141 of file kis_color_filter_combo.cpp.

◆ m_parent

KisColorFilterCombo* ComboEventFilter::m_parent
private

Definition at line 140 of file kis_color_filter_combo.cpp.


The documentation for this class was generated from the following file: