File indexing completed on 2024-04-28 05:41:39
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"