14#include <QStyleOption>
18#include <QButtonGroup>
42 QHBoxLayout *layout =
new QHBoxLayout(
this);
43 layout->setAlignment(Qt::AlignLeft);
45 layout->setContentsMargins(0,0,0,0);
46 layout->setSpacing(2);
49 m_d->colorButtonGroup->setExclusive(
true);
50 m_d->colorButtonGroup->setMinimumRequiredChecked(0);
51 QSet<int> viableColors;
53 for (
int id = 0;
id <
m_d->colors.count();
id++) {
55 btn->setChecked(
false);
57 m_d->colorButtonGroup->addButton(btn,
id);
58 layout->addWidget(btn);
62 m_d->colorButtonGroup->setViableLabels(viableColors);
64 connect(
m_d->colorButtonGroup, QOverload<QAbstractButton*, bool>::of(&QButtonGroup::buttonToggled),
65 [
this](QAbstractButton *
button,
bool state)
67 const int index = m_d->colorButtonGroup->id(button);
68 Q_EMIT buttonToggled(index, state);
69 if (m_d->colorButtonGroup->exclusive()) {
73 Q_EMIT currentIndexChanged(index);
75 Q_EMIT selectionChanged();
87 return m_d->colorButtonGroup->button(index)->isChecked();
92 m_d->colorButtonGroup->button(index)->setChecked(state);
97 if (!
m_d->colorButtonGroup->exclusive()) {
100 return m_d->colorButtonGroup->checkedId();
105 if (!
m_d->colorButtonGroup->exclusive()) {
109 QAbstractButton* btn =
m_d->colorButtonGroup->checkedButton();
111 btn->group()->setExclusive(
false);
112 btn->setChecked(
false);
113 btn->group()->setExclusive(
true);
115 }
else if (index !=
m_d->colorButtonGroup->checkedId()) {
116 QAbstractButton* btn =
m_d->colorButtonGroup->button(index);
118 btn->setChecked(
true);
128 for (QAbstractButton *
button :
m_d->colorButtonGroup->buttons()) {
129 if (
button->isChecked()) {
130 indices <<
m_d->colorButtonGroup->id(
button);
139 for (QAbstractButton *
button :
m_d->colorButtonGroup->buttons()) {
140 button->setChecked(
false);
142 for (
int index : indices) {
143 m_d->colorButtonGroup->button(index)->setChecked(
true);
150 return m_d->colorButtonGroup->exclusive();
172 if (
dynamic_cast<QHBoxLayout*
>(layout())) {
175 newLayout =
new QHBoxLayout;
177 newLayout->setContentsMargins(0,0,0,0);
178 newLayout->setSpacing(2);
179 for (QAbstractButton *
button :
m_d->colorButtonGroup->buttons()) {
180 newLayout->addWidget(
button);
183 setLayout(newLayout);
188 return m_d->dragFilter;
194 if (
m_d->dragFilter) {
198 for (QAbstractButton *
button :
m_d->colorButtonGroup->buttons()) {
199 button->installEventFilter(
m_d->dragFilter);
202 if (!
m_d->dragFilter) {
205 for (QAbstractButton *
button :
m_d->colorButtonGroup->buttons()) {
206 button->removeEventFilter(
m_d->dragFilter);
208 delete m_d->dragFilter;
209 m_d->dragFilter =
nullptr;
217 qobject_cast<KisColorLabelButton*>(
218 m_d->colorButtonGroup->button(0)
219 )->selectionVisType()
225 for (QAbstractButton *
button :
m_d->colorButtonGroup->buttons()) {
226 qobject_cast<KisColorLabelButton*>(
button)->setSelectionVisType(
234 return m_d->buttonSize;
239 if (size ==
m_d->buttonSize) {
242 m_d->buttonSize = size;
243 for (QAbstractButton *
button :
m_d->colorButtonGroup->buttons()) {
244 qobject_cast<KisColorLabelButton*>(
button)->setSize(
static_cast<uint>(size));
261 m_d->menuAlignmentOffset =
new QSpacerItem(0, 0);
262 QHBoxLayout *layout =
new QHBoxLayout(
this);
263 layout->setContentsMargins(0, 1, 0, 1);
264 layout->setSpacing(0);
265 layout->addItem(
m_d->menuAlignmentOffset);
266 layout->addWidget(
m_d->colorLabelSelector);
274 return m_d->colorLabelSelector;
281 m_d->menuAlignmentOffset->changeSize(menuOffset, height());
286 bool hasWideItems =
false;
287 QMenu *menu = qobject_cast<QMenu*>(parent());
288 bool hasCheckable =
false;
289 bool hasIcon =
false;
294 Q_FOREACH(QAction *action, menu->actions()) {
295 hasCheckable |= action->isCheckable();
296 hasIcon |= action->icon().isNull();
297 hasWideItems |= (hasCheckable || hasIcon);
309 const int hMargin = style()->pixelMetric(QStyle::PM_MenuHMargin, &opt,
this);
310 const int iconSize = style()->pixelMetric(QStyle::PM_SmallIconSize, &opt,
this);
311 menuOffset = (hMargin +
iconSize + 6);
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
int iconSize(qreal width, qreal height)
QVector< QColor > allColorLabels() const
QString button(const QWheelEvent &ev)