File indexing completed on 2025-04-27 04:08:16
0001 /* 0002 * This file is part of the KDE project 0003 * SPDX-FileCopyrightText: 2014 Dan Leinir Turthra Jensen <admin@leinir.dk> 0004 * 0005 * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0006 * 0007 */ 0008 0009 #include "TemplatesModel.h" 0010 #include <KisTemplateTree.h> 0011 #include <KisTemplateGroup.h> 0012 #include <KisTemplate.h> 0013 #include <KisPart.h> 0014 #include <kis_icon.h> 0015 0016 0017 struct TemplatesModel::ItemData { 0018 public: 0019 ItemData() 0020 : favourite(false) 0021 , groupFolded(false) 0022 {}; 0023 QString name; 0024 QString description; 0025 QString file; 0026 QString icon; 0027 QString groupName; 0028 bool favourite; 0029 bool groupFolded; 0030 }; 0031 0032 class TemplatesModel::Private { 0033 public: 0034 Private() {} 0035 ~Private() { qDeleteAll(items);} 0036 QList<ItemData*> items; 0037 }; 0038 0039 TemplatesModel::TemplatesModel(QObject* parent) 0040 : QAbstractListModel(parent) 0041 , d(new Private) 0042 { 0043 // Prefill a couple of 0044 ItemData* customItem = new ItemData(); 0045 customItem->name = "Custom Image"; 0046 customItem->file = "custom"; 0047 customItem->icon = "filenew-black"; 0048 d->items << customItem; 0049 ItemData* clipItem = new ItemData(); 0050 clipItem->name = "From Clipboard"; 0051 clipItem->file = "clip"; 0052 clipItem->icon = "fileclip-black"; 0053 d->items << clipItem; 0054 ItemData* screenItem = new ItemData(); 0055 screenItem->name = "Blank Image (Screen Size)"; 0056 screenItem->file = "screen"; 0057 screenItem->icon = "filenew-black"; 0058 d->items << screenItem; 0059 ItemData* a4pItem = new ItemData(); 0060 a4pItem->name = "Blank Image (A4 Portrait)"; 0061 a4pItem->file = "a4p"; 0062 a4pItem->icon = "A4portrait-black"; 0063 d->items << a4pItem; 0064 ItemData* a4lItem = new ItemData(); 0065 a4lItem->name = "Blank Image (A4 Landscape)"; 0066 a4lItem->file = "a4l"; 0067 a4lItem->icon = "A4landscape-black"; 0068 d->items << a4lItem; 0069 0070 populate(); 0071 } 0072 0073 TemplatesModel::~TemplatesModel() 0074 { 0075 delete d; 0076 } 0077 0078 QHash<int, QByteArray> TemplatesModel::roleNames() const 0079 { 0080 QHash<int, QByteArray> roleNames; 0081 roleNames[NameRole] = "name"; 0082 roleNames[DescriptionRole] = "description"; 0083 roleNames[FileRole] = "file"; 0084 roleNames[IconRole] = "icon"; 0085 roleNames[GroupName] = "groupName"; 0086 roleNames[GroupFolded] = "groupFolded"; 0087 return roleNames; 0088 } 0089 0090 QVariant TemplatesModel::data(const QModelIndex& index, int role) const 0091 { 0092 QVariant data; 0093 if(index.isValid() && index.row() > -1 && index.row() < d->items.count()) 0094 { 0095 ItemData* item = d->items[index.row()]; 0096 switch(role) { 0097 case NameRole: 0098 data = item->name; 0099 break; 0100 case DescriptionRole: 0101 data = item->description; 0102 break; 0103 case FileRole: 0104 data = item->file; 0105 break; 0106 case IconRole: 0107 data = item->icon; 0108 break; 0109 case GroupName: 0110 data = item->groupName; 0111 break; 0112 case GroupFolded: 0113 data = item->groupFolded; 0114 break; 0115 default: 0116 break; 0117 } 0118 } 0119 return data; 0120 } 0121 0122 int TemplatesModel::rowCount(const QModelIndex& parent) const 0123 { 0124 if(parent.isValid()) 0125 return 0; 0126 return d->items.count(); 0127 } 0128 0129 QString TemplatesModel::groupNameOf(int index) const 0130 { 0131 if(index > 0 && index < d->items.count()) 0132 return d->items[index]->groupName; 0133 return QString(); 0134 } 0135 0136 void TemplatesModel::toggleGroup(const QString& name) 0137 { 0138 Q_FOREACH (ItemData* item, d->items) { 0139 if(item->groupName == name) 0140 item->groupFolded = !item->groupFolded; 0141 } 0142 dataChanged(index(0), index(d->items.count() - 1)); 0143 } 0144 0145 void TemplatesModel::populate() 0146 { 0147 KisTemplateTree templateTree( QStringLiteral("templates/"), true); 0148 Q_FOREACH (KisTemplateGroup *group, templateTree.groups()) { 0149 if (group->isHidden()) { 0150 continue; 0151 } 0152 Q_FOREACH (KisTemplate* t, group->templates()) { 0153 if (t->isHidden()) 0154 continue; 0155 0156 ItemData* item = new ItemData(); 0157 item->name = t->name(); 0158 item->description = t->description(); 0159 item->file = QString("template://").append(t->file()); 0160 // QT5TODO: support custom pictures and icon symbol ids again 0161 // item->icon = KIconLoader::global()->iconPath(t->picture(), KIconLoader::Desktop); 0162 item->icon = "filenew-black"; 0163 item->groupName = group->name(); 0164 item->groupFolded = true; // default hide groups 0165 d->items << item; 0166 } 0167 } 0168 } 0169