File indexing completed on 2024-05-05 05:40:29

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 }