/[svn]/qsampler/trunk/src/qsamplerPaletteForm.cpp
ViewVC logotype

Contents of /qsampler/trunk/src/qsamplerPaletteForm.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3824 - (show annotations) (download)
Sat Sep 26 18:49:03 2020 UTC (3 years, 6 months ago) by capela
File size: 40748 byte(s)
- Simplified git version string extraction.
1 // qsamplerPaletteForm.cpp
2 //
3 /****************************************************************************
4 Copyright (C) 2004-2020, rncbc aka Rui Nuno Capela. All rights reserved.
5 Copyright (C) 2007, Christian Schoenebeck
6
7 This program is free software; you can redistribute it and/or
8 modify it under the terms of the GNU General Public License
9 as published by the Free Software Foundation; either version 2
10 of the License, or (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License along
18 with this program; if not, write to the Free Software Foundation, Inc.,
19 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20
21 *****************************************************************************/
22
23 #include "qsamplerAbout.h"
24 #include "qsamplerPaletteForm.h"
25
26 #include "ui_qsamplerPaletteForm.h"
27
28 #include <QMetaProperty>
29 #include <QToolButton>
30 #include <QHeaderView>
31 #include <QLabel>
32
33 #include <QHash>
34
35 #include <QPainter>
36 #include <QStyle>
37 #include <QStyleOption>
38
39 #include <QColorDialog>
40 #include <QFileDialog>
41 #include <QMessageBox>
42
43
44 namespace QSampler {
45
46 // Local static consts.
47 static const char *ColorThemesGroup = "/ColorThemes/";
48
49 static const char *PaletteEditorGroup = "/PaletteEditor/";
50 static const char *DefaultDirKey = "DefaultDir";
51 static const char *ShowDetailsKey = "ShowDetails";
52 static const char *DefaultSuffix = "conf";
53
54
55 static struct
56 {
57 const char *key;
58 QPalette::ColorRole value;
59
60 } g_colorRoles[] = {
61
62 { "Window", QPalette::Window },
63 { "WindowText", QPalette::WindowText },
64 { "Button", QPalette::Button },
65 { "ButtonText", QPalette::ButtonText },
66 { "Light", QPalette::Light },
67 { "Midlight", QPalette::Midlight },
68 { "Dark", QPalette::Dark },
69 { "Mid", QPalette::Mid },
70 { "Text", QPalette::Text },
71 { "BrightText", QPalette::BrightText },
72 { "Base", QPalette::Base },
73 { "AlternateBase", QPalette::AlternateBase },
74 { "Shadow", QPalette::Shadow },
75 { "Highlight", QPalette::Highlight },
76 { "HighlightedText", QPalette::HighlightedText },
77 { "Link", QPalette::Link },
78 { "LinkVisited", QPalette::LinkVisited },
79 { "ToolTipBase", QPalette::ToolTipBase },
80 { "ToolTipText", QPalette::ToolTipText },
81 #if QT_VERSION >= QT_VERSION_CHECK(5, 12, 0)
82 { "PlaceholderText", QPalette::PlaceholderText },
83 #endif
84 { "NoRole", QPalette::NoRole },
85
86 { nullptr, QPalette::NoRole }
87 };
88
89
90 //-------------------------------------------------------------------------
91 // Qsampler::PaletteForm
92
93 PaletteForm::PaletteForm ( QWidget *parent, const QPalette& pal )
94 : QDialog(parent), p_ui(new Ui::qsamplerPaletteForm), m_ui(*p_ui)
95 {
96 m_ui.setupUi(this);
97
98 m_settings = nullptr;
99 m_owner = false;
100
101 m_modelUpdated = false;
102 m_paletteUpdated = false;
103 m_dirtyCount = 0;
104 m_dirtyTotal = 0;
105
106 updateGenerateButton();
107
108 m_paletteModel = new PaletteModel(this);
109 m_ui.paletteView->setModel(m_paletteModel);
110 ColorDelegate *delegate = new ColorDelegate(this);
111 m_ui.paletteView->setItemDelegate(delegate);
112 m_ui.paletteView->setEditTriggers(QAbstractItemView::AllEditTriggers);
113 // m_ui.paletteView->setAlternatingRowColors(true);
114 m_ui.paletteView->setSelectionBehavior(QAbstractItemView::SelectRows);
115 m_ui.paletteView->setDragEnabled(true);
116 m_ui.paletteView->setDropIndicatorShown(true);
117 m_ui.paletteView->setRootIsDecorated(false);
118 m_ui.paletteView->setColumnHidden(2, true);
119 m_ui.paletteView->setColumnHidden(3, true);
120
121 QObject::connect(m_ui.nameCombo,
122 SIGNAL(editTextChanged(const QString&)),
123 SLOT(nameComboChanged(const QString&)));
124 QObject::connect(m_ui.saveButton,
125 SIGNAL(clicked()),
126 SLOT(saveButtonClicked()));
127 QObject::connect(m_ui.deleteButton,
128 SIGNAL(clicked()),
129 SLOT(deleteButtonClicked()));
130
131 QObject::connect(m_ui.generateButton,
132 SIGNAL(changed()),
133 SLOT(generateButtonChanged()));
134 QObject::connect(m_ui.resetButton,
135 SIGNAL(clicked()),
136 SLOT(resetButtonClicked()));
137 QObject::connect(m_ui.detailsCheck,
138 SIGNAL(clicked()),
139 SLOT(detailsCheckClicked()));
140 QObject::connect(m_ui.importButton,
141 SIGNAL(clicked()),
142 SLOT(importButtonClicked()));
143 QObject::connect(m_ui.exportButton,
144 SIGNAL(clicked()),
145 SLOT(exportButtonClicked()));
146
147 QObject::connect(m_paletteModel,
148 SIGNAL(paletteChanged(const QPalette&)),
149 SLOT(paletteChanged(const QPalette&)));
150
151 QObject::connect(m_ui.dialogButtons,
152 SIGNAL(accepted()),
153 SLOT(accept()));
154 QObject::connect(m_ui.dialogButtons,
155 SIGNAL(rejected()),
156 SLOT(reject()));
157
158 setPalette(pal, pal);
159
160 QDialog::adjustSize();
161 }
162
163
164 PaletteForm::~PaletteForm (void)
165 {
166 setSettings(nullptr);
167 }
168
169
170 void PaletteForm::setPalette ( const QPalette& pal )
171 {
172 m_palette = pal;
173 #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
174 const uint mask = pal.resolveMask();
175 #else
176 const uint mask = pal.resolve();
177 #endif
178 for (int i = 0; g_colorRoles[i].key; ++i) {
179 if ((mask & (1 << i)) == 0) {
180 const QPalette::ColorRole cr = QPalette::ColorRole(i);
181 m_palette.setBrush(QPalette::Active, cr,
182 m_parentPalette.brush(QPalette::Active, cr));
183 m_palette.setBrush(QPalette::Inactive, cr,
184 m_parentPalette.brush(QPalette::Inactive, cr));
185 m_palette.setBrush(QPalette::Disabled, cr,
186 m_parentPalette.brush(QPalette::Disabled, cr));
187 }
188 }
189 #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
190 m_palette.setResolveMask(mask);
191 #else
192 m_palette.resolve(mask);
193 #endif
194
195 updateGenerateButton();
196
197 m_paletteUpdated = true;
198 if (!m_modelUpdated)
199 m_paletteModel->setPalette(m_palette, m_parentPalette);
200 m_paletteUpdated = false;
201 }
202
203
204 void PaletteForm::setPalette ( const QPalette& pal, const QPalette& parentPal )
205 {
206 m_parentPalette = parentPal;
207
208 setPalette(pal);
209 }
210
211
212 const QPalette& PaletteForm::palette (void) const
213 {
214 return m_palette;
215 }
216
217
218 void PaletteForm::setSettings ( QSettings *settings, bool owner )
219 {
220 if (m_settings && m_owner)
221 delete m_settings;
222
223 m_settings = settings;
224 m_owner = owner;
225
226 m_ui.detailsCheck->setChecked(isShowDetails());
227
228 updateNamedPaletteList();
229 updateDialogButtons();
230 }
231
232
233 QSettings *PaletteForm::settings (void) const
234 {
235 return m_settings;
236 }
237
238
239 void PaletteForm::nameComboChanged ( const QString& name )
240 {
241 if (m_dirtyCount > 0 || m_ui.nameCombo->findText(name) < 0) {
242 updateDialogButtons();
243 } else {
244 setPaletteName(name);
245 ++m_dirtyTotal;
246 }
247 }
248
249
250 void PaletteForm::saveButtonClicked (void)
251 {
252 const QString& name = m_ui.nameCombo->currentText();
253 if (!name.isEmpty()) {
254 saveNamedPalette(name, m_palette);
255 setPalette(m_palette, m_palette);
256 updateNamedPaletteList();
257 resetButtonClicked();
258 }
259 }
260
261
262 void PaletteForm::deleteButtonClicked (void)
263 {
264 const QString& name = m_ui.nameCombo->currentText();
265 if (m_ui.nameCombo->findText(name) >= 0) {
266 deleteNamedPalette(name);
267 updateNamedPaletteList();
268 updateDialogButtons();
269 }
270 }
271
272
273 void PaletteForm::generateButtonChanged (void)
274 {
275 const QColor& color
276 = m_ui.generateButton->brush().color();
277 const QPalette& pal = QPalette(color);
278 setPalette(pal);
279
280 ++m_dirtyCount;
281 updateDialogButtons();
282 }
283
284
285 void PaletteForm::resetButtonClicked (void)
286 {
287 const bool blocked = blockSignals(true);
288
289 for (int i = 0; g_colorRoles[i].key; ++i) {
290 const QPalette::ColorRole cr = g_colorRoles[i].value;
291 const QModelIndex& index = m_paletteModel->index(cr, 0);
292 m_paletteModel->setData(index, false, Qt::EditRole);
293 }
294
295 m_dirtyCount = 0;
296 updateDialogButtons();
297
298 blockSignals(blocked);
299 }
300
301
302 void PaletteForm::detailsCheckClicked (void)
303 {
304 const int cw = (m_ui.paletteView->viewport()->width() >> 2);
305 QHeaderView *header = m_ui.paletteView->header();
306 header->resizeSection(0, cw);
307 if (m_ui.detailsCheck->isChecked()) {
308 m_ui.paletteView->setColumnHidden(2, false);
309 m_ui.paletteView->setColumnHidden(3, false);
310 header->resizeSection(1, cw);
311 header->resizeSection(2, cw);
312 header->resizeSection(3, cw);
313 m_paletteModel->setGenerate(false);
314 } else {
315 m_ui.paletteView->setColumnHidden(2, true);
316 m_ui.paletteView->setColumnHidden(3, true);
317 header->resizeSection(1, cw * 3);
318 m_paletteModel->setGenerate(true);
319 }
320 }
321
322
323 void PaletteForm::importButtonClicked (void)
324 {
325 const QString& title
326 = tr("Import File - %1").arg(QDialog::windowTitle());
327
328 QStringList filters;
329 filters.append(tr("Palette files (*.%1)").arg(DefaultSuffix));
330 filters.append(tr("All files (*.*)"));
331
332 const QString& filename
333 = QFileDialog::getOpenFileName(this,
334 title, defaultDir(), filters.join(";;"));
335
336 if (filename.isEmpty())
337 return;
338
339 int imported = 0;
340 QSettings settings(filename, QSettings::IniFormat);
341 settings.beginGroup(ColorThemesGroup);
342 QStringListIterator name_iter(settings.childGroups());
343 while (name_iter.hasNext()) {
344 const QString& name = name_iter.next();
345 if (!name.isEmpty()) {
346 QPalette pal;
347 int result = 0;
348 #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
349 uint mask = pal.resolveMask();
350 #else
351 uint mask = pal.resolve();
352 #endif
353 settings.beginGroup(name + '/');
354 QStringListIterator iter(settings.childKeys());
355 while (iter.hasNext()) {
356 const QString& key = iter.next();
357 const QPalette::ColorRole cr
358 = PaletteForm::colorRole(key);
359 const QStringList& clist
360 = settings.value(key).toStringList();
361 if (clist.count() == 3) {
362 pal.setColor(QPalette::Active, cr, QColor(clist.at(0)));
363 pal.setColor(QPalette::Inactive, cr, QColor(clist.at(1)));
364 pal.setColor(QPalette::Disabled, cr, QColor(clist.at(2)));
365 mask &= ~(1 << int(cr));
366 ++result;
367 }
368 }
369 #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
370 pal.setResolveMask(mask);
371 #else
372 pal.resolve(mask);
373 #endif
374 settings.endGroup();
375 if (result > 0) {
376 saveNamedPalette(name, pal);
377 setPaletteName(name);
378 ++imported;
379 }
380 }
381 }
382 settings.endGroup();
383
384 if (imported > 0) {
385 updateNamedPaletteList();
386 resetButtonClicked();
387 setDefaultDir(QFileInfo(filename).absolutePath());
388 } else {
389 QMessageBox::warning(this,
390 tr("Warning - %1").arg(QDialog::windowTitle()),
391 tr("Could not import from file:\n\n"
392 "%1\n\nSorry.").arg(filename));
393 }
394 }
395
396
397 void PaletteForm::exportButtonClicked (void)
398 {
399 const QString& title
400 = tr("Export File - %1").arg(QDialog::windowTitle());
401
402 QStringList filters;
403 filters.append(tr("Palette files (*.%1)").arg(DefaultSuffix));
404 filters.append(tr("All files (*.*)"));
405
406 QString dirname = defaultDir();
407 if (!dirname.isEmpty())
408 dirname.append(QDir::separator());
409 dirname.append(paletteName() + '.' + DefaultSuffix);
410
411 const QString& filename
412 = QFileDialog::getSaveFileName(this,
413 title, dirname, filters.join(";;"));
414
415 if (filename.isEmpty())
416 return;
417
418 const QPalette& pal = m_palette;
419
420 QSettings settings(filename, QSettings::IniFormat);
421 settings.beginGroup(ColorThemesGroup);
422 settings.beginGroup(QFileInfo(filename).baseName() + '/');
423 for (int i = 0; g_colorRoles[i].key; ++i) {
424 const QString& key
425 = QString::fromLatin1(g_colorRoles[i].key);
426 const QPalette::ColorRole cr
427 = g_colorRoles[i].value;
428 QStringList clist;
429 clist.append(pal.color(QPalette::Active, cr).name());
430 clist.append(pal.color(QPalette::Inactive, cr).name());
431 clist.append(pal.color(QPalette::Disabled, cr).name());
432 settings.setValue(key, clist);
433 }
434 settings.endGroup();
435 settings.endGroup();
436
437 setDefaultDir(QFileInfo(filename).absolutePath());
438 }
439
440
441 void PaletteForm::paletteChanged ( const QPalette& pal )
442 {
443 m_modelUpdated = true;
444 if (!m_paletteUpdated)
445 setPalette(pal);
446 m_modelUpdated = false;
447
448 ++m_dirtyCount;
449 updateDialogButtons();
450 }
451
452
453 void PaletteForm::setPaletteName ( const QString& name )
454 {
455 const bool blocked = m_ui.nameCombo->blockSignals(true);
456
457 m_ui.nameCombo->setEditText(name);
458
459 QPalette pal;
460
461 if (namedPalette(m_settings, name, pal, true))
462 setPalette(pal, pal);
463
464 m_dirtyCount = 0;
465 updateDialogButtons();
466
467 m_ui.nameCombo->blockSignals(blocked);
468 }
469
470
471 QString PaletteForm::paletteName (void) const
472 {
473 return m_ui.nameCombo->currentText();
474 }
475
476
477 void PaletteForm::updateNamedPaletteList (void)
478 {
479 const bool blocked = m_ui.nameCombo->blockSignals(true);
480 const QString old_name = m_ui.nameCombo->currentText();
481
482 m_ui.nameCombo->clear();
483 m_ui.nameCombo->insertItems(0, namedPaletteList());
484 // m_ui.nameCombo->model()->sort(0);
485
486 const int i = m_ui.nameCombo->findText(old_name);
487 if (i >= 0)
488 m_ui.nameCombo->setCurrentIndex(i);
489 else
490 m_ui.nameCombo->setEditText(old_name);
491
492 m_ui.nameCombo->blockSignals(blocked);
493 }
494
495
496 void PaletteForm::updateGenerateButton (void)
497 {
498 m_ui.generateButton->setBrush(
499 m_palette.brush(QPalette::Active, QPalette::Button));
500 }
501
502
503 void PaletteForm::updateDialogButtons (void)
504 {
505 const QString& name = m_ui.nameCombo->currentText();
506 const int i = m_ui.nameCombo->findText(name);
507 m_ui.saveButton->setEnabled(!name.isEmpty() && (m_dirtyCount > 0 || i < 0));
508 m_ui.deleteButton->setEnabled(i >= 0);
509 m_ui.resetButton->setEnabled(m_dirtyCount > 0);
510 m_ui.exportButton->setEnabled(!name.isEmpty() || i >= 0);
511 m_ui.dialogButtons->button(QDialogButtonBox::Ok)->setEnabled(i >= 0);
512 if (name == "Wonton Soup" || name == "KXStudio") {
513 m_ui.saveButton->setEnabled(false);
514 m_ui.deleteButton->setEnabled(false);
515 m_ui.exportButton->setEnabled(false);
516 }
517 }
518
519
520 bool PaletteForm::namedPalette ( const QString& name, QPalette& pal )
521 {
522 return namedPalette(m_settings, name, pal);
523 }
524
525
526 bool PaletteForm::namedPalette (
527 QSettings *settings, const QString& name, QPalette& pal, bool fixup )
528 {
529 int result = 0;
530 #if QT_VERSION < QT_VERSION_CHECK(5, 15, 0)
531 uint mask = pal.resolve();
532 #endif
533
534 // Custom color themes...
535 if (name == "Wonton Soup") {
536 pal.setColor(QPalette::Active, QPalette::Window, QColor(73, 78, 88));
537 pal.setColor(QPalette::Inactive, QPalette::Window, QColor(73, 78, 88));
538 pal.setColor(QPalette::Disabled, QPalette::Window, QColor(64, 68, 77));
539 pal.setColor(QPalette::Active, QPalette::WindowText, QColor(182, 193, 208));
540 pal.setColor(QPalette::Inactive, QPalette::WindowText, QColor(182, 193, 208));
541 pal.setColor(QPalette::Disabled, QPalette::WindowText, QColor(97, 104, 114));
542 pal.setColor(QPalette::Active, QPalette::Base, QColor(60, 64, 72));
543 pal.setColor(QPalette::Inactive, QPalette::Base, QColor(60, 64, 72));
544 pal.setColor(QPalette::Disabled, QPalette::Base, QColor(52, 56, 63));
545 pal.setColor(QPalette::Active, QPalette::AlternateBase, QColor(67, 71, 80));
546 pal.setColor(QPalette::Inactive, QPalette::AlternateBase, QColor(67, 71, 80));
547 pal.setColor(QPalette::Disabled, QPalette::AlternateBase, QColor(59, 62, 70));
548 pal.setColor(QPalette::Active, QPalette::ToolTipBase, QColor(182, 193, 208));
549 pal.setColor(QPalette::Inactive, QPalette::ToolTipBase, QColor(182, 193, 208));
550 pal.setColor(QPalette::Disabled, QPalette::ToolTipBase, QColor(182, 193, 208));
551 pal.setColor(QPalette::Active, QPalette::ToolTipText, QColor(42, 44, 48));
552 pal.setColor(QPalette::Inactive, QPalette::ToolTipText, QColor(42, 44, 48));
553 pal.setColor(QPalette::Disabled, QPalette::ToolTipText, QColor(42, 44, 48));
554 pal.setColor(QPalette::Active, QPalette::Text, QColor(210, 222, 240));
555 pal.setColor(QPalette::Inactive, QPalette::Text, QColor(210, 222, 240));
556 pal.setColor(QPalette::Disabled, QPalette::Text, QColor(99, 105, 115));
557 pal.setColor(QPalette::Active, QPalette::Button, QColor(82, 88, 99));
558 pal.setColor(QPalette::Inactive, QPalette::Button, QColor(82, 88, 99));
559 pal.setColor(QPalette::Disabled, QPalette::Button, QColor(72, 77, 87));
560 pal.setColor(QPalette::Active, QPalette::ButtonText, QColor(210, 222, 240));
561 pal.setColor(QPalette::Inactive, QPalette::ButtonText, QColor(210, 222, 240));
562 pal.setColor(QPalette::Disabled, QPalette::ButtonText, QColor(111, 118, 130));
563 pal.setColor(QPalette::Active, QPalette::BrightText, QColor(255, 255, 255));
564 pal.setColor(QPalette::Inactive, QPalette::BrightText, QColor(255, 255, 255));
565 pal.setColor(QPalette::Disabled, QPalette::BrightText, QColor(255, 255, 255));
566 pal.setColor(QPalette::Active, QPalette::Light, QColor(95, 101, 114));
567 pal.setColor(QPalette::Inactive, QPalette::Light, QColor(95, 101, 114));
568 pal.setColor(QPalette::Disabled, QPalette::Light, QColor(86, 92, 104));
569 pal.setColor(QPalette::Active, QPalette::Midlight, QColor(84, 90, 101));
570 pal.setColor(QPalette::Inactive, QPalette::Midlight, QColor(84, 90, 101));
571 pal.setColor(QPalette::Disabled, QPalette::Midlight, QColor(75, 81, 91));
572 pal.setColor(QPalette::Active, QPalette::Dark, QColor(40, 43, 49));
573 pal.setColor(QPalette::Inactive, QPalette::Dark, QColor(40, 43, 49));
574 pal.setColor(QPalette::Disabled, QPalette::Dark, QColor(35, 38, 43));
575 pal.setColor(QPalette::Active, QPalette::Mid, QColor(63, 68, 76));
576 pal.setColor(QPalette::Inactive, QPalette::Mid, QColor(63, 68, 76));
577 pal.setColor(QPalette::Disabled, QPalette::Mid, QColor(56, 59, 67));
578 pal.setColor(QPalette::Active, QPalette::Shadow, QColor(29, 31, 35));
579 pal.setColor(QPalette::Inactive, QPalette::Shadow, QColor(29, 31, 35));
580 pal.setColor(QPalette::Disabled, QPalette::Shadow, QColor(25, 27, 30));
581 pal.setColor(QPalette::Active, QPalette::Highlight, QColor(120, 136, 156));
582 pal.setColor(QPalette::Inactive, QPalette::Highlight, QColor(81, 90, 103));
583 pal.setColor(QPalette::Disabled, QPalette::Highlight, QColor(64, 68, 77));
584 pal.setColor(QPalette::Active, QPalette::HighlightedText, QColor(209, 225, 244));
585 pal.setColor(QPalette::Inactive, QPalette::HighlightedText, QColor(182, 193, 208));
586 pal.setColor(QPalette::Disabled, QPalette::HighlightedText, QColor(97, 104, 114));
587 pal.setColor(QPalette::Active, QPalette::Link, QColor(156, 212, 255));
588 pal.setColor(QPalette::Inactive, QPalette::Link, QColor(156, 212, 255));
589 pal.setColor(QPalette::Disabled, QPalette::Link, QColor(82, 102, 119));
590 pal.setColor(QPalette::Active, QPalette::LinkVisited, QColor(64, 128, 255));
591 pal.setColor(QPalette::Inactive, QPalette::LinkVisited, QColor(64, 128, 255));
592 pal.setColor(QPalette::Disabled, QPalette::LinkVisited, QColor(54, 76, 119));
593 #if QT_VERSION < QT_VERSION_CHECK(5, 15, 0)
594 mask = 0;
595 #endif
596 ++result;
597 }
598 else
599 if (name == "KXStudio") {
600 pal.setColor(QPalette::Active, QPalette::Window, QColor(17, 17, 17));
601 pal.setColor(QPalette::Inactive, QPalette::Window, QColor(17, 17, 17));
602 pal.setColor(QPalette::Disabled, QPalette::Window, QColor(14, 14, 14));
603 pal.setColor(QPalette::Active, QPalette::WindowText, QColor(240, 240, 240));
604 pal.setColor(QPalette::Inactive, QPalette::WindowText, QColor(240, 240, 240));
605 pal.setColor(QPalette::Disabled, QPalette::WindowText, QColor(83, 83, 83));
606 pal.setColor(QPalette::Active, QPalette::Base, QColor(7, 7, 7));
607 pal.setColor(QPalette::Inactive, QPalette::Base, QColor(7, 7, 7));
608 pal.setColor(QPalette::Disabled, QPalette::Base, QColor(6, 6, 6));
609 pal.setColor(QPalette::Active, QPalette::AlternateBase, QColor(14, 14, 14));
610 pal.setColor(QPalette::Inactive, QPalette::AlternateBase, QColor(14, 14, 14));
611 pal.setColor(QPalette::Disabled, QPalette::AlternateBase, QColor(12, 12, 12));
612 pal.setColor(QPalette::Active, QPalette::ToolTipBase, QColor(4, 4, 4));
613 pal.setColor(QPalette::Inactive, QPalette::ToolTipBase, QColor(4, 4, 4));
614 pal.setColor(QPalette::Disabled, QPalette::ToolTipBase, QColor(4, 4, 4));
615 pal.setColor(QPalette::Active, QPalette::ToolTipText, QColor(230, 230, 230));
616 pal.setColor(QPalette::Inactive, QPalette::ToolTipText, QColor(230, 230, 230));
617 pal.setColor(QPalette::Disabled, QPalette::ToolTipText, QColor(230, 230, 230));
618 pal.setColor(QPalette::Active, QPalette::Text, QColor(230, 230, 230));
619 pal.setColor(QPalette::Inactive, QPalette::Text, QColor(230, 230, 230));
620 pal.setColor(QPalette::Disabled, QPalette::Text, QColor(74, 74, 74));
621 pal.setColor(QPalette::Active, QPalette::Button, QColor(28, 28, 28));
622 pal.setColor(QPalette::Inactive, QPalette::Button, QColor(28, 28, 28));
623 pal.setColor(QPalette::Disabled, QPalette::Button, QColor(24, 24, 24));
624 pal.setColor(QPalette::Active, QPalette::ButtonText, QColor(240, 240, 240));
625 pal.setColor(QPalette::Inactive, QPalette::ButtonText, QColor(240, 240, 240));
626 pal.setColor(QPalette::Disabled, QPalette::ButtonText, QColor(90, 90, 90));
627 pal.setColor(QPalette::Active, QPalette::BrightText, QColor(255, 255, 255));
628 pal.setColor(QPalette::Inactive, QPalette::BrightText, QColor(255, 255, 255));
629 pal.setColor(QPalette::Disabled, QPalette::BrightText, QColor(255, 255, 255));
630 pal.setColor(QPalette::Active, QPalette::Light, QColor(191, 191, 191));
631 pal.setColor(QPalette::Inactive, QPalette::Light, QColor(191, 191, 191));
632 pal.setColor(QPalette::Disabled, QPalette::Light, QColor(191, 191, 191));
633 pal.setColor(QPalette::Active, QPalette::Midlight, QColor(155, 155, 155));
634 pal.setColor(QPalette::Inactive, QPalette::Midlight, QColor(155, 155, 155));
635 pal.setColor(QPalette::Disabled, QPalette::Midlight, QColor(155, 155, 155));
636 pal.setColor(QPalette::Active, QPalette::Dark, QColor(129, 129, 129));
637 pal.setColor(QPalette::Inactive, QPalette::Dark, QColor(129, 129, 129));
638 pal.setColor(QPalette::Disabled, QPalette::Dark, QColor(129, 129, 129));
639 pal.setColor(QPalette::Active, QPalette::Mid, QColor(94, 94, 94));
640 pal.setColor(QPalette::Inactive, QPalette::Mid, QColor(94, 94, 94));
641 pal.setColor(QPalette::Disabled, QPalette::Mid, QColor(94, 94, 94));
642 pal.setColor(QPalette::Active, QPalette::Shadow, QColor(155, 155, 155));
643 pal.setColor(QPalette::Inactive, QPalette::Shadow, QColor(155, 155, 155));
644 pal.setColor(QPalette::Disabled, QPalette::Shadow, QColor(155, 155, 155));
645 pal.setColor(QPalette::Active, QPalette::Highlight, QColor(60, 60, 60));
646 pal.setColor(QPalette::Inactive, QPalette::Highlight, QColor(34, 34, 34));
647 pal.setColor(QPalette::Disabled, QPalette::Highlight, QColor(14, 14, 14));
648 pal.setColor(QPalette::Active, QPalette::HighlightedText, QColor(255, 255, 255));
649 pal.setColor(QPalette::Inactive, QPalette::HighlightedText, QColor(240, 240, 240));
650 pal.setColor(QPalette::Disabled, QPalette::HighlightedText, QColor(83, 83, 83));
651 pal.setColor(QPalette::Active, QPalette::Link, QColor(100, 100, 230));
652 pal.setColor(QPalette::Inactive, QPalette::Link, QColor(100, 100, 230));
653 pal.setColor(QPalette::Disabled, QPalette::Link, QColor(34, 34, 74));
654 pal.setColor(QPalette::Active, QPalette::LinkVisited, QColor(230, 100, 230));
655 pal.setColor(QPalette::Inactive, QPalette::LinkVisited, QColor(230, 100, 230));
656 pal.setColor(QPalette::Disabled, QPalette::LinkVisited, QColor(74, 34, 74));
657 #if QT_VERSION < QT_VERSION_CHECK(5, 15, 0)
658 mask = 0;
659 #endif
660 ++result;
661 }
662 else
663 if (settings) {
664 settings->beginGroup(ColorThemesGroup);
665 settings->beginGroup(name + '/');
666 QStringListIterator iter(settings->childKeys());
667 while (iter.hasNext()) {
668 const QString& key = iter.next();
669 const QPalette::ColorRole cr
670 = PaletteForm::colorRole(key);
671 const QStringList& clist
672 = settings->value(key).toStringList();
673 if (clist.count() == 3) {
674 pal.setColor(QPalette::Active, cr, QColor(clist.at(0)));
675 pal.setColor(QPalette::Inactive, cr, QColor(clist.at(1)));
676 pal.setColor(QPalette::Disabled, cr, QColor(clist.at(2)));
677 #if QT_VERSION < QT_VERSION_CHECK(5, 15, 0)
678 mask &= ~(1 << int(cr));
679 #endif
680 ++result;
681 }
682 }
683 settings->endGroup();
684 settings->endGroup();
685 }
686
687 // Dark themes grayed/disabled color group fix...
688 if (!fixup && pal.base().color().value() < 0x7f) {
689 const QColor& color = pal.window().color();
690 const int groups = int(QPalette::Active | QPalette::Inactive) + 1;
691 for (int i = 0; i < groups; ++i) {
692 const QPalette::ColorGroup cg = QPalette::ColorGroup(i);
693 pal.setBrush(cg, QPalette::Light, color.lighter(140));
694 pal.setBrush(cg, QPalette::Midlight, color.lighter(100));
695 pal.setBrush(cg, QPalette::Mid, color.lighter(90));
696 pal.setBrush(cg, QPalette::Dark, color.darker(160));
697 pal.setBrush(cg, QPalette::Shadow, color.darker(180));
698 }
699 pal.setColorGroup(QPalette::Disabled,
700 pal.windowText().color().darker(),
701 pal.button(),
702 pal.light(),
703 pal.dark(),
704 pal.mid(),
705 pal.text().color().darker(),
706 pal.text().color().lighter(),
707 pal.base(),
708 pal.window());
709 #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
710 pal.setColor(QPalette::Disabled,
711 QPalette::Highlight, pal.mid().color());
712 pal.setColor(QPalette::Disabled,
713 QPalette::ButtonText, pal.mid().color());
714 #endif
715 ++result;
716 }
717
718 #if QT_VERSION < QT_VERSION_CHECK(5, 15, 0)
719 pal.resolve(mask);
720 #endif
721 return (result > 0);
722 }
723
724
725 void PaletteForm::saveNamedPalette (
726 const QString& name, const QPalette& pal )
727 {
728 if (m_settings && name != "KXStudio" && name != "Wonton Soup") {
729 m_settings->beginGroup(ColorThemesGroup);
730 m_settings->beginGroup(name + '/');
731 for (int i = 0; g_colorRoles[i].key; ++i) {
732 const QString& key
733 = QString::fromLatin1(g_colorRoles[i].key);
734 const QPalette::ColorRole cr
735 = g_colorRoles[i].value;
736 QStringList clist;
737 clist.append(pal.color(QPalette::Active, cr).name());
738 clist.append(pal.color(QPalette::Inactive, cr).name());
739 clist.append(pal.color(QPalette::Disabled, cr).name());
740 m_settings->setValue(key, clist);
741 }
742 m_settings->endGroup();
743 m_settings->endGroup();
744 ++m_dirtyTotal;
745 }
746 }
747
748
749 void PaletteForm::deleteNamedPalette ( const QString& name )
750 {
751 if (m_settings) {
752 m_settings->beginGroup(ColorThemesGroup);
753 m_settings->remove(name);
754 m_settings->endGroup();
755 ++m_dirtyTotal;
756 }
757 }
758
759
760 QStringList PaletteForm::namedPaletteList (void)
761 {
762 return namedPaletteList(m_settings);
763 }
764
765
766 QStringList PaletteForm::namedPaletteList ( QSettings *settings )
767 {
768 QStringList list;
769 list.append("Wonton Soup");
770 list.append("KXStudio");
771
772 if (settings) {
773 settings->beginGroup(ColorThemesGroup);
774 list.append(settings->childGroups());
775 settings->endGroup();
776 }
777
778 return list;
779 }
780
781
782 QPalette::ColorRole PaletteForm::colorRole ( const QString& name )
783 {
784 static QHash<QString, QPalette::ColorRole> s_colorRoles;
785
786 if (s_colorRoles.isEmpty()) {
787 for (int i = 0; g_colorRoles[i].key; ++i) {
788 const QString& key
789 = QString::fromLatin1(g_colorRoles[i].key);
790 const QPalette::ColorRole value
791 = g_colorRoles[i].value;
792 s_colorRoles.insert(key, value);
793 }
794 }
795
796 return s_colorRoles.value(name, QPalette::NoRole);
797 }
798
799
800 bool PaletteForm::isDirty (void) const
801 {
802 return (m_dirtyTotal > 0);
803 }
804
805
806 void PaletteForm::accept (void)
807 {
808 setShowDetails(m_ui.detailsCheck->isChecked());
809
810 if (m_dirtyCount > 0)
811 saveButtonClicked();
812
813 QDialog::accept();
814 }
815
816
817 void PaletteForm::reject (void)
818 {
819 if (m_dirtyCount > 0) {
820 const QString& name = paletteName();
821 if (name.isEmpty()) {
822 if (QMessageBox::warning(this,
823 tr("Warning - %1").arg(QDialog::windowTitle()),
824 tr("Some settings have been changed.\n\n"
825 "Do you want to discard the changes?"),
826 QMessageBox::Discard |
827 QMessageBox::Cancel) == QMessageBox::Cancel)
828 return;
829 } else {
830 switch (QMessageBox::warning(this,
831 tr("Warning - %1").arg(QDialog::windowTitle()),
832 tr("Some settings have been changed:\n\n"
833 "\"%1\".\n\nDo you want to save the changes?")
834 .arg(name),
835 QMessageBox::Save |
836 QMessageBox::Discard |
837 QMessageBox::Cancel)) {
838 case QMessageBox::Save:
839 saveButtonClicked();
840 // Fall thru...
841 case QMessageBox::Discard:
842 break;
843 default: // Cancel...
844 return;
845 }
846 }
847 }
848
849 QDialog::reject();
850 }
851
852
853 void PaletteForm::setDefaultDir ( const QString& dir )
854 {
855 if (m_settings) {
856 m_settings->beginGroup(PaletteEditorGroup);
857 m_settings->setValue(DefaultDirKey, dir);
858 m_settings->endGroup();
859 }
860 }
861
862
863 QString PaletteForm::defaultDir (void) const
864 {
865 QString dir;
866
867 if (m_settings) {
868 m_settings->beginGroup(PaletteEditorGroup);
869 dir = m_settings->value(DefaultDirKey).toString();
870 m_settings->endGroup();
871 }
872
873 return dir;
874 }
875
876
877 void PaletteForm::setShowDetails ( bool on )
878 {
879 if (m_settings) {
880 m_settings->beginGroup(PaletteEditorGroup);
881 m_settings->setValue(ShowDetailsKey, on);
882 m_settings->endGroup();
883 }
884 }
885
886
887 bool PaletteForm::isShowDetails (void) const
888 {
889 bool on = false;
890
891 if (m_settings) {
892 m_settings->beginGroup(PaletteEditorGroup);
893 on = m_settings->value(ShowDetailsKey).toBool();
894 m_settings->endGroup();
895 }
896
897 return on;
898 }
899
900
901 void PaletteForm::showEvent ( QShowEvent *event )
902 {
903 QDialog::showEvent(event);
904
905 detailsCheckClicked();
906 }
907
908
909 void PaletteForm::resizeEvent ( QResizeEvent *event )
910 {
911 QDialog::resizeEvent(event);
912
913 detailsCheckClicked();
914 }
915
916
917 //-------------------------------------------------------------------------
918 // PaletteForm::PaletteModel
919
920 PaletteForm::PaletteModel::PaletteModel ( QObject *parent )
921 : QAbstractTableModel(parent)
922 {
923 for (m_nrows = 0; g_colorRoles[m_nrows].key; ++m_nrows) {
924 const QPalette::ColorRole value
925 = g_colorRoles[m_nrows].value;
926 const QString& key
927 = QString::fromLatin1(g_colorRoles[m_nrows].key);
928 m_roleNames.insert(value, key);
929 }
930
931 m_generate = true;
932 }
933
934
935 int PaletteForm::PaletteModel::rowCount ( const QModelIndex& ) const
936 {
937 return m_nrows;
938 }
939
940
941 int PaletteForm::PaletteModel::columnCount ( const QModelIndex& ) const
942 {
943 return 4;
944 }
945
946
947 QVariant PaletteForm::PaletteModel::data ( const QModelIndex& index, int role ) const
948 {
949 if (!index.isValid())
950 return QVariant();
951 if (index.row() < 0 || index.row() >= m_nrows)
952 return QVariant();
953 if (index.column() < 0 || index.column() >= 4)
954 return QVariant();
955
956 if (index.column() == 0) {
957 if (role == Qt::DisplayRole)
958 return m_roleNames.value(QPalette::ColorRole(index.row()));
959 if (role == Qt::EditRole) {
960 #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
961 const uint mask = m_palette.resolveMask();
962 #else
963 const uint mask = m_palette.resolve();
964 #endif
965 return bool(mask & (1 << index.row()));
966 }
967 }
968 else
969 if (role == Qt::BackgroundRole) {
970 return m_palette.color(
971 columnToGroup(index.column()),
972 QPalette::ColorRole(index.row()));
973 }
974
975 return QVariant();
976 }
977
978
979 bool PaletteForm::PaletteModel::setData (
980 const QModelIndex& index, const QVariant& value, int role )
981 {
982 if (!index.isValid())
983 return false;
984
985 if (index.column() != 0 && role == Qt::BackgroundRole) {
986 const QColor& color = value.value<QColor>();
987 const QPalette::ColorRole cr = QPalette::ColorRole(index.row());
988 const QPalette::ColorGroup cg = columnToGroup(index.column());
989 m_palette.setBrush(cg, cr, color);
990 QModelIndex index_begin = PaletteModel::index(cr, 0);
991 QModelIndex index_end = PaletteModel::index(cr, 3);
992 if (m_generate) {
993 m_palette.setBrush(QPalette::Inactive, cr, color);
994 switch (cr) {
995 case QPalette::WindowText:
996 case QPalette::Text:
997 case QPalette::ButtonText:
998 case QPalette::Base:
999 break;
1000 case QPalette::Dark:
1001 m_palette.setBrush(QPalette::Disabled, QPalette::WindowText, color);
1002 m_palette.setBrush(QPalette::Disabled, QPalette::Dark, color);
1003 m_palette.setBrush(QPalette::Disabled, QPalette::Text, color);
1004 m_palette.setBrush(QPalette::Disabled, QPalette::ButtonText, color);
1005 index_begin = PaletteModel::index(0, 0);
1006 index_end = PaletteModel::index(m_nrows - 1, 3);
1007 break;
1008 case QPalette::Window:
1009 m_palette.setBrush(QPalette::Disabled, QPalette::Base, color);
1010 m_palette.setBrush(QPalette::Disabled, QPalette::Window, color);
1011 index_begin = PaletteModel::index(QPalette::Base, 0);
1012 break;
1013 case QPalette::Highlight:
1014 m_palette.setBrush(QPalette::Disabled, QPalette::Highlight, color.darker(120));
1015 break;
1016 default:
1017 m_palette.setBrush(QPalette::Disabled, cr, color);
1018 break;
1019 }
1020 }
1021 emit paletteChanged(m_palette);
1022 emit dataChanged(index_begin, index_end);
1023 return true;
1024 }
1025
1026 if (index.column() == 0 && role == Qt::EditRole) {
1027 #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
1028 uint mask = m_palette.resolveMask();
1029 #else
1030 uint mask = m_palette.resolve();
1031 #endif
1032 const bool masked = value.value<bool>();
1033 const int i = index.row();
1034 if (masked) {
1035 mask |= (1 << i);
1036 } else {
1037 const QPalette::ColorRole cr = QPalette::ColorRole(i);
1038 m_palette.setBrush(QPalette::Active, cr,
1039 m_parentPalette.brush(QPalette::Active, cr));
1040 m_palette.setBrush(QPalette::Inactive, cr,
1041 m_parentPalette.brush(QPalette::Inactive, cr));
1042 m_palette.setBrush(QPalette::Disabled, cr,
1043 m_parentPalette.brush(QPalette::Disabled, cr));
1044 mask &= ~(1 << i);
1045 }
1046 #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
1047 m_palette.setResolveMask(mask);
1048 #else
1049 m_palette.resolve(mask);
1050 #endif
1051 emit paletteChanged(m_palette);
1052 const QModelIndex& index_end = PaletteModel::index(i, 3);
1053 emit dataChanged(index, index_end);
1054 return true;
1055 }
1056
1057 return false;
1058 }
1059
1060
1061 Qt::ItemFlags PaletteForm::PaletteModel::flags ( const QModelIndex& index ) const
1062 {
1063 if (!index.isValid())
1064 return Qt::ItemIsEnabled;
1065 else
1066 return Qt::ItemIsEditable | Qt::ItemIsEnabled;
1067 }
1068
1069
1070 QVariant PaletteForm::PaletteModel::headerData (
1071 int section, Qt::Orientation orientation, int role ) const
1072 {
1073 if (orientation == Qt::Horizontal && role == Qt::DisplayRole) {
1074 if (section == 0)
1075 return tr("Color Role");
1076 else
1077 if (section == groupToColumn(QPalette::Active))
1078 return tr("Active");
1079 else
1080 if (section == groupToColumn(QPalette::Inactive))
1081 return tr("Inactive");
1082 else
1083 if (section == groupToColumn(QPalette::Disabled))
1084 return tr("Disabled");
1085 }
1086
1087 return QVariant();
1088 }
1089
1090
1091 const QPalette& PaletteForm::PaletteModel::palette(void) const
1092 {
1093 return m_palette;
1094 }
1095
1096
1097 void PaletteForm::PaletteModel::setPalette (
1098 const QPalette& palette, const QPalette& parentPalette )
1099 {
1100 m_palette = palette;
1101 m_parentPalette = parentPalette;
1102
1103 const QModelIndex& index_begin = index(0, 0);
1104 const QModelIndex& index_end = index(m_nrows - 1, 3);
1105 emit dataChanged(index_begin, index_end);
1106 }
1107
1108
1109 QPalette::ColorGroup PaletteForm::PaletteModel::columnToGroup ( int index ) const
1110 {
1111 if (index == 1)
1112 return QPalette::Active;
1113 else
1114 if (index == 2)
1115 return QPalette::Inactive;
1116
1117 return QPalette::Disabled;
1118 }
1119
1120
1121 int PaletteForm::PaletteModel::groupToColumn ( QPalette::ColorGroup group ) const
1122 {
1123 if (group == QPalette::Active)
1124 return 1;
1125 else
1126 if (group == QPalette::Inactive)
1127 return 2;
1128
1129 return 3;
1130 }
1131
1132
1133 //-------------------------------------------------------------------------
1134 // QSampler::PaletteForm::ColorDelegate
1135
1136 QWidget *PaletteForm::ColorDelegate::createEditor ( QWidget *parent,
1137 const QStyleOptionViewItem&, const QModelIndex& index ) const
1138 {
1139 QWidget *editor = nullptr;
1140
1141 if (index.column() == 0) {
1142 RoleEditor *ed = new RoleEditor(parent);
1143 QObject::connect(ed,
1144 SIGNAL(changed(QWidget *)),
1145 SIGNAL(commitData(QWidget *)));
1146 // ed->setFocusPolicy(Qt::NoFocus);
1147 // ed->installEventFilter(const_cast<ColorDelegate *>(this));
1148 editor = ed;
1149 } else {
1150 ColorEditor *ed = new ColorEditor(parent);
1151 QObject::connect(ed,
1152 SIGNAL(changed(QWidget *)),
1153 SIGNAL(commitData(QWidget *)));
1154 ed->setFocusPolicy(Qt::NoFocus);
1155 ed->installEventFilter(const_cast<ColorDelegate *>(this));
1156 editor = ed;
1157 }
1158
1159 return editor;
1160 }
1161
1162
1163 void PaletteForm::ColorDelegate::setEditorData (
1164 QWidget *editor, const QModelIndex& index ) const
1165 {
1166 if (index.column() == 0) {
1167 const bool masked
1168 = index.model()->data(index, Qt::EditRole).value<bool>();
1169 RoleEditor *ed = static_cast<RoleEditor *>(editor);
1170 ed->setEdited(masked);
1171 const QString& colorName
1172 = index.model()->data(index, Qt::DisplayRole).value<QString>();
1173 ed->setLabel(colorName);
1174 } else {
1175 const QColor& color
1176 = index.model()->data(index, Qt::BackgroundRole).value<QColor>();
1177 ColorEditor *ed = static_cast<ColorEditor *>(editor);
1178 ed->setColor(color);
1179 }
1180 }
1181
1182
1183 void PaletteForm::ColorDelegate::setModelData ( QWidget *editor,
1184 QAbstractItemModel *model, const QModelIndex& index ) const
1185 {
1186 if (index.column() == 0) {
1187 RoleEditor *ed = static_cast<RoleEditor *>(editor);
1188 const bool masked = ed->edited();
1189 model->setData(index, masked, Qt::EditRole);
1190 } else {
1191 ColorEditor *ed = static_cast<ColorEditor *>(editor);
1192 if (ed->changed()) {
1193 const QColor& color = ed->color();
1194 model->setData(index, color, Qt::BackgroundRole);
1195 }
1196 }
1197 }
1198
1199
1200 void PaletteForm::ColorDelegate::updateEditorGeometry ( QWidget *editor,
1201 const QStyleOptionViewItem& option, const QModelIndex& index ) const
1202 {
1203 QItemDelegate::updateEditorGeometry(editor, option, index);
1204 editor->setGeometry(editor->geometry().adjusted(0, 0, -1, -1));
1205 }
1206
1207
1208 void PaletteForm::ColorDelegate::paint ( QPainter *painter,
1209 const QStyleOptionViewItem& option, const QModelIndex& index ) const
1210 {
1211 QStyleOptionViewItem opt = option;
1212
1213 const bool masked
1214 = index.model()->data(index, Qt::EditRole).value<bool>();
1215 if (index.column() == 0 && masked)
1216 opt.font.setBold(true);
1217
1218 QItemDelegate::paint(painter, opt, index);
1219
1220 // painter->setPen(opt.palette.midlight().color());
1221 painter->setPen(Qt::darkGray);
1222 painter->drawLine(opt.rect.right(), opt.rect.y(),
1223 opt.rect.right(), opt.rect.bottom());
1224 painter->drawLine(opt.rect.x(), opt.rect.bottom(),
1225 opt.rect.right(), opt.rect.bottom());
1226 }
1227
1228
1229 QSize PaletteForm::ColorDelegate::sizeHint (
1230 const QStyleOptionViewItem& option, const QModelIndex &index) const
1231 {
1232 return QItemDelegate::sizeHint(option, index) + QSize(4, 4);
1233 }
1234
1235
1236 //-------------------------------------------------------------------------
1237 // QSampler::PaletteForm::ColorButton
1238
1239 PaletteForm::ColorButton::ColorButton ( QWidget *parent )
1240 : QPushButton(parent), m_brush(Qt::darkGray)
1241 {
1242 QPushButton::setMinimumWidth(48);
1243
1244 QObject::connect(this,
1245 SIGNAL(clicked()),
1246 SLOT(chooseColor()));
1247 }
1248
1249
1250 const QBrush& PaletteForm::ColorButton::brush (void) const
1251 {
1252 return m_brush;
1253 }
1254
1255
1256 void PaletteForm::ColorButton::setBrush ( const QBrush& brush )
1257 {
1258 m_brush = brush;
1259 update();
1260 }
1261
1262
1263 void PaletteForm::ColorButton::paintEvent ( QPaintEvent *event )
1264 {
1265 QPushButton::paintEvent(event);
1266
1267 QStyleOptionButton opt;
1268 opt.initFrom(this);
1269
1270 const QRect& rect
1271 = style()->subElementRect(QStyle::SE_PushButtonContents, &opt, this);
1272
1273 QPainter paint(this);
1274 paint.setBrush(QBrush(m_brush.color()));
1275 paint.drawRect(rect.adjusted(+1, +1, -2, -2));
1276 }
1277
1278
1279 void PaletteForm::ColorButton::chooseColor (void)
1280 {
1281 const QColor color
1282 = QColorDialog::getColor(m_brush.color(), this);
1283 if (color.isValid()) {
1284 m_brush.setColor(color);
1285 emit changed();
1286 }
1287 }
1288
1289
1290 //-------------------------------------------------------------------------
1291 // QSampler::PaletteForm::ColorEditor
1292
1293 PaletteForm::ColorEditor::ColorEditor ( QWidget *parent )
1294 : QWidget(parent)
1295 {
1296 QLayout *layout = new QHBoxLayout(this);
1297 layout->setContentsMargins(0, 0, 0, 0);
1298 m_button = new PaletteForm::ColorButton(this);
1299 layout->addWidget(m_button);
1300 QObject::connect(m_button,
1301 SIGNAL(changed()),
1302 SLOT(colorChanged()));
1303 setFocusProxy(m_button);
1304 m_changed = false;
1305 }
1306
1307
1308 void PaletteForm::ColorEditor::setColor ( const QColor& color )
1309 {
1310 m_button->setBrush(color);
1311 m_changed = false;
1312 }
1313
1314
1315 QColor PaletteForm::ColorEditor::color (void) const
1316 {
1317 return m_button->brush().color();
1318 }
1319
1320
1321 void PaletteForm::ColorEditor::colorChanged (void)
1322 {
1323 m_changed = true;
1324 emit changed(this);
1325 }
1326
1327
1328 bool PaletteForm::ColorEditor::changed (void) const
1329 {
1330 return m_changed;
1331 }
1332
1333
1334 //-------------------------------------------------------------------------
1335 // QSampler::PaletteForm::RoleEditor
1336
1337 PaletteForm::RoleEditor::RoleEditor ( QWidget *parent )
1338 : QWidget(parent)
1339 {
1340 m_edited = false;
1341
1342 QHBoxLayout *layout = new QHBoxLayout(this);
1343 layout->setContentsMargins(0, 0, 0, 0);
1344 layout->setSpacing(0);
1345
1346 m_label = new QLabel(this);
1347 layout->addWidget(m_label);
1348 m_label->setAutoFillBackground(true);
1349 m_label->setIndent(3); // HACK: it should have the same value of textMargin in QItemDelegate
1350 setFocusProxy(m_label);
1351
1352 m_button = new QToolButton(this);
1353 m_button->setToolButtonStyle(Qt::ToolButtonIconOnly);
1354 m_button->setIcon(QPixmap(":/images/itemReset.png"));
1355 m_button->setIconSize(QSize(8, 8));
1356 m_button->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::MinimumExpanding));
1357 layout->addWidget(m_button);
1358
1359 QObject::connect(m_button,
1360 SIGNAL(clicked()),
1361 SLOT(resetProperty()));
1362 }
1363
1364
1365 void PaletteForm::RoleEditor::setLabel ( const QString& label )
1366 {
1367 m_label->setText(label);
1368 }
1369
1370
1371 void PaletteForm::RoleEditor::setEdited ( bool on )
1372 {
1373 QFont font;
1374 if (on)
1375 font.setBold(on);
1376 m_label->setFont(font);
1377 m_button->setEnabled(on);
1378 m_edited = on;
1379 }
1380
1381
1382 bool PaletteForm::RoleEditor::edited (void) const
1383 {
1384 return m_edited;
1385 }
1386
1387
1388 void PaletteForm::RoleEditor::resetProperty (void)
1389 {
1390 setEdited(false);
1391 emit changed(this);
1392 }
1393
1394
1395 } // namespace QSampler
1396
1397 // end of qsamplerPaletteForm.cpp

  ViewVC Help
Powered by ViewVC