File indexing completed on 2025-04-27 14:27:21
0001 /*************************************************************************** 0002 * Copyright (C) 2015 by Renaud Guezennec * 0003 * https://rolisteam.org/contact * 0004 * * 0005 * Rolisteam is free software; you can redistribute it and/or modify * 0006 * it under the terms of the GNU General Public License as published by * 0007 * the Free Software Foundation; either version 2 of the License, or * 0008 * (at your option) any later version. * 0009 * * 0010 * This program is distributed in the hope that it will be useful, * 0011 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 0012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 0013 * GNU General Public License for more details. * 0014 * * 0015 * You should have received a copy of the GNU General Public License * 0016 * along with this program; if not, write to the * 0017 * Free Software Foundation, Inc., * 0018 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * 0019 ***************************************************************************/ 0020 #include "model/palettemodel.h" 0021 #include <QJsonArray> 0022 0023 PaletteColor::PaletteColor(QColor color, QString str, QPalette::ColorGroup group, QPalette::ColorRole role) 0024 : m_color(color), m_name(str), m_group(group), m_role(role) 0025 { 0026 } 0027 0028 void PaletteColor::setColor(QColor a) 0029 { 0030 m_color= a; 0031 } 0032 0033 void PaletteColor::setName(QString a) 0034 { 0035 m_name= a; 0036 } 0037 QColor PaletteColor::getColor() const 0038 { 0039 return m_color; 0040 } 0041 0042 QString PaletteColor::getName() const 0043 { 0044 return m_name; 0045 } 0046 QPalette::ColorGroup PaletteColor::getGroup() const 0047 { 0048 return m_group; 0049 } 0050 QPalette::ColorRole PaletteColor::getRole() const 0051 { 0052 return m_role; 0053 } 0054 void PaletteColor::writeTo(QJsonObject& json) 0055 { 0056 json["role"]= static_cast<int>(m_role); 0057 json["group"]= static_cast<int>(m_group); 0058 json["name"]= m_name; 0059 json["color"]= m_color.name(); 0060 } 0061 bool PaletteColor::readFrom(QJsonObject& json) 0062 { 0063 m_role= static_cast<QPalette::ColorRole>(json["role"].toInt()); 0064 m_group= static_cast<QPalette::ColorGroup>(json["group"].toInt()); 0065 m_name= json["name"].toString(); 0066 QString colorName= json["color"].toString(); 0067 m_color.setNamedColor(colorName); 0068 return true; 0069 } 0070 0071 ///////////////////////////////// 0072 // PaletteModel 0073 ///////////////////////////////// 0074 PaletteModel::PaletteModel(QObject* parent) : QAbstractTableModel(parent) 0075 { 0076 m_header << tr("Role") << tr("Group"); 0077 m_groupList << tr("Active") << tr("Disable") << tr("Inactive"); 0078 initData(); 0079 } 0080 0081 PaletteModel::~PaletteModel() 0082 { 0083 qDeleteAll(m_data); 0084 m_data.clear(); 0085 } 0086 QVariant PaletteModel::headerData(int section, Qt::Orientation orientation, int role) const 0087 { 0088 if(Qt::DisplayRole == role) 0089 { 0090 if(orientation == Qt::Horizontal) 0091 { 0092 return m_header.at(section); 0093 } 0094 } 0095 return QVariant(); 0096 } 0097 void PaletteModel::initData() 0098 { 0099 PaletteColor* color= nullptr; 0100 // Active 0101 color= new PaletteColor(QColor(), "Window", QPalette::Active, QPalette::Window); 0102 m_data.append(color); 0103 color= new PaletteColor(QColor(), "WindowText", QPalette::Active, QPalette::WindowText); 0104 m_data.append(color); 0105 color= new PaletteColor(QColor(), "Base", QPalette::Active, QPalette::Base); 0106 m_data.append(color); 0107 color= new PaletteColor(QColor(), "AlternateBase", QPalette::Active, QPalette::AlternateBase); 0108 m_data.append(color); 0109 color= new PaletteColor(QColor(), "ToolTipBase", QPalette::Active, QPalette::ToolTipBase); 0110 m_data.append(color); 0111 color= new PaletteColor(QColor(), "ToolTipText", QPalette::Active, QPalette::ToolTipText); 0112 m_data.append(color); 0113 color= new PaletteColor(QColor(), "Text", QPalette::Active, QPalette::Text); 0114 m_data.append(color); 0115 color= new PaletteColor(QColor(), "Button", QPalette::Active, QPalette::Button); 0116 m_data.append(color); 0117 color= new PaletteColor(QColor(), "ButtonText", QPalette::Active, QPalette::ButtonText); 0118 m_data.append(color); 0119 color= new PaletteColor(QColor(), "BrightText", QPalette::Active, QPalette::BrightText); 0120 m_data.append(color); 0121 color= new PaletteColor(QColor(), "Light", QPalette::Active, QPalette::Light); 0122 m_data.append(color); 0123 color= new PaletteColor(QColor(), "Midlight", QPalette::Active, QPalette::Midlight); 0124 m_data.append(color); 0125 color= new PaletteColor(QColor(), "Dark", QPalette::Active, QPalette::Dark); 0126 m_data.append(color); 0127 color= new PaletteColor(QColor(), "Mid", QPalette::Active, QPalette::Mid); 0128 m_data.append(color); 0129 color= new PaletteColor(QColor(), "Shadow", QPalette::Active, QPalette::Shadow); 0130 m_data.append(color); 0131 color= new PaletteColor(QColor(), "Highlight", QPalette::Active, QPalette::Highlight); 0132 m_data.append(color); 0133 color= new PaletteColor(QColor(), "HighlightedText", QPalette::Active, QPalette::HighlightedText); 0134 m_data.append(color); 0135 color= new PaletteColor(QColor(), "Link", QPalette::Active, QPalette::Link); 0136 m_data.append(color); 0137 color= new PaletteColor(QColor(), "LinkVisited", QPalette::Active, QPalette::LinkVisited); 0138 m_data.append(color); 0139 color= new PaletteColor(QColor(), "NoRole", QPalette::Active, QPalette::NoRole); 0140 m_data.append(color); 0141 color= new PaletteColor(QColor(), "PlaceholderText", QPalette::Active, QPalette::PlaceholderText); 0142 m_data.append(color); 0143 0144 0145 // Inactive 0146 color= new PaletteColor(QColor(), "WindowText", QPalette::Inactive, QPalette::WindowText); 0147 m_data.append(color); 0148 color= new PaletteColor(QColor(), "Button", QPalette::Inactive, QPalette::Button); 0149 m_data.append(color); 0150 color= new PaletteColor(QColor(), "ButtonText", QPalette::Inactive, QPalette::ButtonText); 0151 m_data.append(color); 0152 color= new PaletteColor(QColor(), "Light", QPalette::Inactive, QPalette::Light); 0153 m_data.append(color); 0154 color= new PaletteColor(QColor(), "Midlight", QPalette::Inactive, QPalette::Midlight); 0155 m_data.append(color); 0156 color= new PaletteColor(QColor(), "Dark", QPalette::Inactive, QPalette::Dark); 0157 m_data.append(color); 0158 color= new PaletteColor(QColor(), "Mid", QPalette::Inactive, QPalette::Mid); 0159 m_data.append(color); 0160 color= new PaletteColor(QColor(), "Text", QPalette::Inactive, QPalette::Text); 0161 m_data.append(color); 0162 color= new PaletteColor(QColor(), "BrightText", QPalette::Inactive, QPalette::BrightText); 0163 m_data.append(color); 0164 color= new PaletteColor(QColor(), "Base", QPalette::Inactive, QPalette::Base); 0165 m_data.append(color); 0166 color= new PaletteColor(QColor(), "Window", QPalette::Inactive, QPalette::Window); 0167 m_data.append(color); 0168 color= new PaletteColor(QColor(), "Shadow", QPalette::Inactive, QPalette::Shadow); 0169 m_data.append(color); 0170 color= new PaletteColor(QColor(), "Highlight", QPalette::Inactive, QPalette::Highlight); 0171 m_data.append(color); 0172 color= new PaletteColor(QColor(), "HighlightedText", QPalette::Inactive, QPalette::HighlightedText); 0173 m_data.append(color); 0174 color= new PaletteColor(QColor(), "Link", QPalette::Inactive, QPalette::Link); 0175 m_data.append(color); 0176 color= new PaletteColor(QColor(), "LinkVisited", QPalette::Inactive, QPalette::LinkVisited); 0177 m_data.append(color); 0178 color= new PaletteColor(QColor(), "AlternateBase", QPalette::Inactive, QPalette::AlternateBase); 0179 m_data.append(color); 0180 color= new PaletteColor(QColor(), "ToolTipBase", QPalette::Inactive, QPalette::ToolTipBase); 0181 m_data.append(color); 0182 color= new PaletteColor(QColor(), "ToolTipText", QPalette::Inactive, QPalette::ToolTipText); 0183 m_data.append(color); 0184 color= new PaletteColor(QColor(), "NoRole", QPalette::Inactive, QPalette::NoRole); 0185 m_data.append(color); 0186 color= new PaletteColor(QColor(), "PlaceholderText", QPalette::Inactive, QPalette::PlaceholderText); 0187 m_data.append(color); 0188 0189 0190 0191 //disabled 0192 color= new PaletteColor(QColor(), "WindowText", QPalette::Disabled, QPalette::WindowText); 0193 m_data.append(color); 0194 color= new PaletteColor(QColor(), "Button", QPalette::Disabled, QPalette::Button); 0195 m_data.append(color); 0196 color= new PaletteColor(QColor(), "ButtonText", QPalette::Disabled, QPalette::ButtonText); 0197 m_data.append(color); 0198 color= new PaletteColor(QColor(), "Light", QPalette::Disabled, QPalette::Light); 0199 m_data.append(color); 0200 color= new PaletteColor(QColor(), "Midlight", QPalette::Disabled, QPalette::Midlight); 0201 m_data.append(color); 0202 color= new PaletteColor(QColor(), "Dark", QPalette::Disabled, QPalette::Dark); 0203 m_data.append(color); 0204 color= new PaletteColor(QColor(), "Mid", QPalette::Disabled, QPalette::Mid); 0205 m_data.append(color); 0206 color= new PaletteColor(QColor(), "Text", QPalette::Disabled, QPalette::Text); 0207 m_data.append(color); 0208 color= new PaletteColor(QColor(), "BrightText", QPalette::Disabled, QPalette::BrightText); 0209 m_data.append(color); 0210 color= new PaletteColor(QColor(), "Base", QPalette::Disabled, QPalette::Base); 0211 m_data.append(color); 0212 color= new PaletteColor(QColor(), "Window", QPalette::Disabled, QPalette::Window); 0213 m_data.append(color); 0214 color= new PaletteColor(QColor(), "Shadow", QPalette::Disabled, QPalette::Shadow); 0215 m_data.append(color); 0216 color= new PaletteColor(QColor(), "Highlight", QPalette::Disabled, QPalette::Highlight); 0217 m_data.append(color); 0218 color= new PaletteColor(QColor(), "HighlightedText", QPalette::Disabled, QPalette::HighlightedText); 0219 m_data.append(color); 0220 color= new PaletteColor(QColor(), "Link", QPalette::Disabled, QPalette::Link); 0221 m_data.append(color); 0222 color= new PaletteColor(QColor(), "LinkVisited", QPalette::Disabled, QPalette::LinkVisited); 0223 m_data.append(color); 0224 color= new PaletteColor(QColor(), "AlternateBase", QPalette::Disabled, QPalette::AlternateBase); 0225 m_data.append(color); 0226 color= new PaletteColor(QColor(), "ToolTipBase", QPalette::Disabled, QPalette::ToolTipBase); 0227 m_data.append(color); 0228 color= new PaletteColor(QColor(), "ToolTipText", QPalette::Disabled, QPalette::ToolTipText); 0229 m_data.append(color); 0230 color= new PaletteColor(QColor(), "NoRole", QPalette::Disabled, QPalette::NoRole); 0231 m_data.append(color); 0232 color= new PaletteColor(QColor(), "PlaceholderText", QPalette::Disabled, QPalette::PlaceholderText); 0233 m_data.append(color); 0234 } 0235 int PaletteModel::rowCount(const QModelIndex& parent) const 0236 { 0237 if(parent.isValid()) 0238 return 0; 0239 return m_data.size(); 0240 } 0241 int PaletteModel::columnCount(const QModelIndex& index) const 0242 { 0243 if(index.isValid()) 0244 return 0; 0245 return m_header.size(); 0246 } 0247 QVariant PaletteModel::data(const QModelIndex& index, int role) const 0248 { 0249 if(!index.isValid()) 0250 return QVariant(); 0251 0252 PaletteColor* color= m_data.at(index.row()); 0253 0254 if(Qt::DecorationRole == role) 0255 { 0256 if(index.column() == 0) 0257 { 0258 return color->getColor(); 0259 } 0260 } 0261 else if(Qt::DisplayRole == role) 0262 { 0263 if(index.column() == 0) 0264 { 0265 return color->getName(); 0266 } 0267 else 0268 { 0269 return m_groupList.at(static_cast<int>(color->getGroup())); 0270 } 0271 } 0272 return QVariant(); 0273 } 0274 void PaletteModel::setPalette(QPalette palette) 0275 { 0276 beginResetModel(); 0277 for(auto& color : m_data) 0278 { 0279 color->setColor(palette.color(color->getGroup(), color->getRole())); 0280 } 0281 endResetModel(); 0282 } 0283 void PaletteModel::setColor(int pos, QColor color) 0284 { 0285 if(pos >= m_data.size() || pos < 0) 0286 return; 0287 m_data[pos]->setColor(color); 0288 auto idx= index(pos, 0); 0289 emit dataChanged(idx, idx); 0290 } 0291 0292 const QList<PaletteColor*>& PaletteModel::data() const 0293 { 0294 return m_data; 0295 } 0296 QPalette PaletteModel::getPalette() 0297 { 0298 QPalette palette; 0299 for(auto& tmp : m_data) 0300 { 0301 palette.setColor(tmp->getGroup(), tmp->getRole(), tmp->getColor()); 0302 } 0303 return palette; 0304 } 0305 void PaletteModel::writeTo(QJsonObject& json) 0306 { 0307 QJsonArray colors; 0308 for(auto& tmp : m_data) 0309 { 0310 QJsonObject paletteObject; 0311 tmp->writeTo(paletteObject); 0312 colors.append(paletteObject); 0313 } 0314 json["colors"]= colors; 0315 } 0316 bool PaletteModel::readFrom(const QJsonObject& json) 0317 { 0318 QJsonArray colors= json["colors"].toArray(); 0319 0320 for(int index= 0; index < colors.size(); ++index) 0321 { 0322 QJsonObject paletteObject= colors[index].toObject(); 0323 if((index < m_data.size() && index >= 0)) 0324 { 0325 m_data[index]->readFrom(paletteObject); 0326 } 0327 } 0328 return true; 0329 }