File indexing completed on 2024-12-08 13:28:01
0001 /*************************************************************************** 0002 * Copyright (C) 2019 by Renaud Guezennec * 0003 * http://www.rolisteam.org/contact * 0004 * * 0005 * This software 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 "mindmap/model/nodestylemodel.h" 0021 0022 #include "mindmap/data/nodestyle.h" 0023 0024 namespace mindmap 0025 { 0026 NodeStyleModel::NodeStyleModel(QObject* parent) : QAbstractListModel(parent) 0027 { 0028 initStyles(); 0029 } 0030 0031 NodeStyleModel::~NodeStyleModel() = default; 0032 0033 int NodeStyleModel::rowCount(const QModelIndex& parent) const 0034 { 0035 // For list models only the root node (an invalid parent) should return the list's size. For all 0036 // other (valid) parents, rowCount() should return 0 so that it does not become a tree model. 0037 if(parent.isValid()) 0038 return 0; 0039 return static_cast<int>(m_styles.size()); 0040 } 0041 0042 QVariant NodeStyleModel::data(const QModelIndex& index, int role) const 0043 { 0044 if(!index.isValid()) 0045 return QVariant(); 0046 0047 if(index.row() >= static_cast<int>(m_styles.size())) 0048 return {}; 0049 0050 auto const& style= m_styles[static_cast<std::size_t>(index.row())]; 0051 0052 QVariant var; 0053 switch(role) 0054 { 0055 case ColorOne: 0056 var= QVariant::fromValue(style->colorOne()); 0057 break; 0058 case ColorTwo: 0059 var= QVariant::fromValue(style->colorTwo()); 0060 break; 0061 case TextColor: 0062 var= QVariant::fromValue(style->textColor()); 0063 break; 0064 default: 0065 break; 0066 } 0067 0068 return var; 0069 } 0070 0071 QHash<int, QByteArray> NodeStyleModel::roleNames() const 0072 { 0073 // clang-format off 0074 static QHash<int, QByteArray> roles 0075 = {{NodeStyleModel::ColorOne, "colorOne"}, 0076 {NodeStyleModel::ColorTwo, "colorTwo"}, 0077 {NodeStyleModel::TextColor, "textColor"}}; 0078 //clang-format on 0079 return roles; 0080 } 0081 0082 NodeStyle* NodeStyleModel::getStyle(int index) const 0083 { 0084 if(m_styles.empty()) 0085 { 0086 auto tmp = new NodeStyle(); 0087 tmp->setColorOne(Qt::white); 0088 tmp->setColorTwo(Qt::lightGray); 0089 tmp->setTextColor(Qt::black); 0090 return tmp; 0091 } 0092 index = std::max(0,index); 0093 0094 auto idx = static_cast<std::size_t>(index); 0095 0096 if(idx >= m_styles.size()) 0097 idx = 0; 0098 0099 return m_styles[idx].get(); 0100 } 0101 0102 void NodeStyleModel::initStyles() 0103 { 0104 std::vector<QString> colors({"#c0c0c0","#A4C400", 0105 "#60A917","#008A00","#00ABA9","#1BA1E2","#3E65FF", 0106 "#6A00FF","#AA00FF","#F472D0","#D80073","#A20025", 0107 "#E51400","#FA6800","#F0A30A","#E3C800", 0108 "#825A2C","#6D8764","#647687","#76608A"}); 0109 0110 beginResetModel(); 0111 m_styles.clear(); 0112 0113 std::transform(colors.begin(), colors.end(), std::back_inserter(m_styles),[](const QString& colorstr) -> std::unique_ptr<NodeStyle> { 0114 QColor one(Qt::white); 0115 QColor text(Qt::black); 0116 QColor color; 0117 color.setNamedColor(colorstr); 0118 auto style = new NodeStyle(); 0119 style->setColorOne(one); 0120 style->setColorTwo(color); 0121 style->setTextColor(text); 0122 return std::unique_ptr<NodeStyle>(style); 0123 }); 0124 0125 std::transform(colors.begin(), colors.end(), std::back_inserter(m_styles),[](const QString& colorstr){ 0126 QColor one(Qt::black); 0127 QColor text(Qt::white); 0128 QColor color; 0129 color.setNamedColor(colorstr); 0130 auto style = new NodeStyle(); 0131 style->setColorOne(color); 0132 style->setColorTwo(one); 0133 style->setTextColor(text); 0134 return std::unique_ptr<NodeStyle>(style); 0135 }); 0136 0137 endResetModel(); 0138 0139 0140 } 0141 }