File indexing completed on 2024-04-28 09:37:01

0001 /*
0002     This file is part of KCachegrind.
0003 
0004     SPDX-FileCopyrightText: 2009-2016 Josef Weidendorfer <Josef.Weidendorfer@gmx.de>
0005 
0006     SPDX-License-Identifier: GPL-2.0-only
0007 */
0008 
0009 /*
0010  * Color settings config page
0011  */
0012 
0013 #include "colorsettings.h"
0014 
0015 #include <QTreeWidgetItem>
0016 #include <QFileDialog>
0017 
0018 #include "tracedata.h"
0019 #include "globalguiconfig.h"
0020 #include "listutils.h"
0021 
0022 //
0023 // ColorSettings
0024 //
0025 
0026 static void insertColorItems(QTreeWidget* w, ProfileContext::Type type,
0027                              QStringList items)
0028 {
0029     items.sort();
0030     foreach(const QString &s, items) {
0031         ConfigColorSetting* cs = GlobalGUIConfig::groupColorSetting(type, s);
0032         QTreeWidgetItem* i = new QTreeWidgetItem(w);
0033         i->setText(0, ProfileContext::i18nTypeName(type));
0034         i->setData(0, Qt::UserRole, QVariant::fromValue((void*)cs));
0035         i->setIcon(1, QIcon(colorPixmap(20,10, cs->color())));
0036         i->setText(1, cs->automatic() ? QObject::tr("(auto)") : QString());
0037         i->setData(1, Qt::UserRole, cs->color());
0038         i->setText(2, s);
0039     }
0040 }
0041 
0042 ColorSettings::ColorSettings(TraceData* data, QWidget* parent)
0043     : ConfigPage(parent,
0044                  QObject::tr("Group Colors"),
0045                  QObject::tr("Color Settings for Function Groups"))
0046 {
0047     ui.setupUi(this);
0048 
0049     ui.colorList->setRootIsDecorated(false);
0050     ui.colorList->setSortingEnabled(false);
0051     QStringList items;
0052     if (data) {
0053         TraceObjectMap::Iterator oit = data->objectMap().begin();
0054         for(; oit != data->objectMap().end(); ++oit)
0055             items << (*oit).prettyName();
0056     }
0057     if (!items.contains(TraceObject::prettyEmptyName()))
0058         items << TraceObject::prettyEmptyName();
0059     insertColorItems(ui.colorList, ProfileContext::Object, items);
0060     items.clear();
0061     if (data) {
0062         TraceFileMap::Iterator fit = data->fileMap().begin();
0063         for(; fit != data->fileMap().end(); ++fit)
0064             items << (*fit).prettyName();
0065     }
0066     if (!items.contains(TraceFile::prettyEmptyName()))
0067         items << TraceFile::prettyEmptyName();
0068     insertColorItems(ui.colorList, ProfileContext::File, items);
0069     items.clear();
0070     if (data) {
0071         TraceClassMap::Iterator cit = data->classMap().begin();
0072         for(; cit != data->classMap().end(); ++cit)
0073             items << (*cit).prettyName();
0074     }
0075     if (!items.contains(TraceClass::prettyEmptyName()))
0076         items << TraceClass::prettyEmptyName();
0077     insertColorItems(ui.colorList, ProfileContext::Class, items);
0078     ui.colorList->setSortingEnabled(true);
0079 
0080     ui.colorList->resizeColumnToContents(0);
0081     ui.colorList->resizeColumnToContents(1);
0082     ui.colorList->resizeColumnToContents(2);
0083 
0084     connect(ui.resetButton, &QAbstractButton::clicked,
0085             this, &ColorSettings::resetClicked);
0086     connect(ui.colorList,
0087             &QTreeWidget::currentItemChanged,
0088             this,
0089             &ColorSettings::colorListItemChanged);
0090     connect(ui.colorButton, &QtColorButton::colorChanged,
0091             this, &ColorSettings::colorChanged);
0092 
0093     _current = nullptr;
0094     update();
0095 }
0096 
0097 ColorSettings::~ColorSettings()
0098 {}
0099 
0100 void ColorSettings::activate(QString s)
0101 {
0102     int idx = s.toInt();
0103     if ((idx==0) || (idx>ui.colorList->topLevelItemCount())) return;
0104 
0105     ui.colorList->setCurrentItem(ui.colorList->topLevelItem(idx-1));
0106     ui.colorButton->setFocus();
0107 }
0108 
0109 void ColorSettings::update()
0110 {
0111     if (!_current) {
0112         ui.resetButton->setEnabled(false);
0113         ui.colorButton->setEnabled(false);
0114         return;
0115     }
0116     ui.resetButton->setEnabled(true);
0117     ui.colorButton->setEnabled(true);
0118 
0119     QColor c = _current->data(1, Qt::UserRole).value<QColor>();
0120     ui.colorButton->setColor(c);
0121 }
0122 
0123 void ColorSettings::resetClicked()
0124 {
0125     if (!_current) return;
0126 
0127     ConfigColorSetting*cs;
0128     cs = (ConfigColorSetting*) _current->data(0, Qt::UserRole).value<void*>();
0129     QColor c = cs->autoColor();
0130     _current->setIcon(1, QIcon(colorPixmap(20,10, c)));
0131     _current->setData(1, Qt::UserRole, c);
0132     _current->setText(1, QObject::tr("(auto)"));
0133     ui.colorButton->setColor(c);
0134 }
0135 
0136 
0137 void ColorSettings::colorListItemChanged(QTreeWidgetItem* current,
0138                                          QTreeWidgetItem*)
0139 {
0140     _current = current;
0141     update();
0142 }
0143 
0144 void ColorSettings::colorChanged(const QColor& c)
0145 {
0146     if (!_current) return;
0147 
0148     _current->setIcon(1, QIcon(colorPixmap(20,10, c)));
0149     _current->setData(1, Qt::UserRole, c);
0150     _current->setText(1, QString());
0151 }
0152 
0153 bool ColorSettings::check(QString&, QString&)
0154 {
0155     return true;
0156 }
0157 
0158 void ColorSettings::accept()
0159 {
0160     QTreeWidgetItem* item;
0161     ConfigColorSetting* cs;
0162     QColor c;
0163     for(int i = 0; i< ui.colorList->topLevelItemCount(); i++) {
0164         item = ui.colorList->topLevelItem(i);
0165         cs = (ConfigColorSetting*) item->data(0, Qt::UserRole).value<void*>();
0166         c = item->data(1, Qt::UserRole).value<QColor>();
0167         if (cs->color() == c) continue;
0168 
0169         cs->setColor(c);
0170     }
0171 }
0172 
0173 #include "moc_colorsettings.cpp"