Warning, file /office/calligra/gemini/TemplatesModel.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /* This file is part of the KDE project 0002 * SPDX-FileCopyrightText: 2014 Dan Leinir Turthra Jensen <admin@leinir.dk> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "TemplatesModel.h" 0008 #include "TemplateVariantsModel.h" 0009 #include <KoTemplateTree.h> 0010 #include <KoTemplateGroup.h> 0011 #include <KoTemplate.h> 0012 #include <KWFactory.h> 0013 #include <KWDocument.h> 0014 #include <part/KPrFactory.h> 0015 #include <part/KPrDocument.h> 0016 0017 struct TemplateEntry { 0018 TemplateEntry() 0019 : variants(new TemplateVariantsModel()) 0020 {} 0021 ~TemplateEntry() 0022 { 0023 variants->deleteLater(); 0024 } 0025 0026 QString title; 0027 QString description; 0028 TemplateVariantsModel* variants; 0029 }; 0030 0031 class TemplatesModel::Private { 0032 public: 0033 Private() 0034 : showWide(false) 0035 {} 0036 0037 QString templateType; 0038 bool showWide; 0039 QList<TemplateEntry*> entries; 0040 0041 void refresh() 0042 { 0043 qDeleteAll(entries); 0044 entries.clear(); 0045 0046 KoTemplateTree* tree(0); 0047 if(templateType == WORDS_MIME_TYPE) 0048 tree = new KoTemplateTree("calligrawords/templates/", true); 0049 else if(templateType == STAGE_MIME_TYPE) 0050 tree = new KoTemplateTree("calligrastage/templates/", true); 0051 if(!tree) 0052 return; 0053 0054 Q_FOREACH(const KoTemplateGroup* group , tree->groups()) { 0055 Q_FOREACH(const KoTemplate* tmplate, group->templates()) { 0056 if(tmplate->wide() != showWide) 0057 continue; 0058 0059 QString title = tmplate->name(); 0060 0061 TemplateEntry* found(0); 0062 Q_FOREACH(TemplateEntry* otherEntry, entries) { 0063 if(otherEntry->title == title) { 0064 found = otherEntry; 0065 break; 0066 } 0067 } 0068 TemplateEntry* entry(0); 0069 if(found) { 0070 entry = found; 0071 } 0072 else { 0073 entry = new TemplateEntry(); 0074 entry->title = title; 0075 entry->description = tmplate->description(); 0076 entries.append(entry); 0077 } 0078 0079 entry->variants->addVariant(tmplate->variantName(), 0080 tmplate->color(), 0081 tmplate->swatch(), 0082 tmplate->thumbnail().isEmpty() ? tmplate->picture() : tmplate->thumbnail(), 0083 tmplate->file()); 0084 } 0085 } 0086 } 0087 }; 0088 0089 TemplatesModel::TemplatesModel(QObject* parent) 0090 : QAbstractListModel(parent) 0091 , d(new Private()) 0092 { 0093 } 0094 0095 TemplatesModel::~TemplatesModel() 0096 { 0097 delete d; 0098 } 0099 0100 QHash<int, QByteArray> TemplatesModel::roleNames() const 0101 { 0102 QHash<int, QByteArray> roles; 0103 roles[TitleRole] = "text"; 0104 roles[DescriptionRole] = "description"; 0105 roles[ColorRole] = "color"; 0106 roles[ThumbnailRole] = "thumbnail"; 0107 roles[UrlRole] = "url"; 0108 roles[VariantCountRole] = "variantCount"; 0109 roles[VariantsRole] = "variants"; 0110 return roles; 0111 } 0112 0113 QVariant TemplatesModel::data(const QModelIndex& index, int role) const 0114 { 0115 QVariant result; 0116 0117 if(index.isValid() && index.row() > -1 && index.row() < d->entries.count()) 0118 { 0119 TemplateEntry* entry = d->entries.at(index.row()); 0120 switch(role) 0121 { 0122 case TitleRole: 0123 result = entry->title; 0124 break; 0125 case DescriptionRole: 0126 result = entry->description; 0127 break; 0128 case ColorRole: 0129 result = entry->variants->data(entry->variants->firstIndex(), TemplateVariantsModel::ColorRole); 0130 break; 0131 case ThumbnailRole: 0132 result = entry->variants->data(entry->variants->firstIndex(), TemplateVariantsModel::ThumbnailRole); 0133 break; 0134 case UrlRole: 0135 result = entry->variants->data(entry->variants->firstIndex(), TemplateVariantsModel::UrlRole); 0136 break; 0137 case VariantCountRole: 0138 result = entry->variants->rowCount(); 0139 break; 0140 case VariantsRole: 0141 result = QVariant::fromValue<QObject*>(entry->variants); 0142 break; 0143 default: 0144 break; 0145 } 0146 } 0147 0148 return result; 0149 } 0150 0151 int TemplatesModel::rowCount(const QModelIndex& parent) const 0152 { 0153 if(parent.isValid()) 0154 return 0; 0155 return d->entries.count(); 0156 } 0157 0158 QString TemplatesModel::templateType() const 0159 { 0160 return d->templateType; 0161 } 0162 0163 void TemplatesModel::setTemplateType(const QString& newType) 0164 { 0165 d->templateType = newType; 0166 emit templateTypeChanged(); 0167 qApp->processEvents(); 0168 beginResetModel(); 0169 d->refresh(); 0170 endResetModel(); 0171 } 0172 0173 bool TemplatesModel::showWide() const 0174 { 0175 return d->showWide; 0176 } 0177 0178 void TemplatesModel::setShowWide(const bool& newValue) 0179 { 0180 d->showWide = newValue; 0181 emit showWideChanged(); 0182 qApp->processEvents(); 0183 beginResetModel(); 0184 d->refresh(); 0185 endResetModel(); 0186 }