Krita Source Code Documentation
Loading...
Searching...
No Matches
KisTemplatesPane.cpp
Go to the documentation of this file.
1/* This file is part of the KDE project
2 SPDX-FileCopyrightText: 2005-2006 Peter Simonsson <psn@linux.se>
3
4 SPDX-License-Identifier: LGPL-2.0-or-later
5*/
6
7#include "KisTemplatesPane.h"
8
9#include "KisTemplateGroup.h"
10#include "KisTemplate.h"
11
12#include <QFileInfo>
13#include <QStandardItemModel>
14#include <QUrl>
15
16#include <kguiitem.h>
17#include <kconfiggroup.h>
18#include <ksharedconfig.h>
19
21{
22public:
24 : m_selected(false) {
25 }
26
29};
30
31
32KisTemplatesPane::KisTemplatesPane(QWidget* parent, const QString& header,
33 KisTemplateGroup *group, KisTemplate* defaultTemplate)
34 : KisDetailsPane(parent,header)
36{
37 setFocusProxy(m_documentList);
38
39 KGuiItem openGItem(i18n("Use This Template"));
40 KGuiItem::assign(m_openButton, openGItem);
41 KConfigGroup cfgGrp( KSharedConfig::openConfig(), "TemplateChooserDialog");
42 QString fullTemplateName = cfgGrp.readPathEntry("FullTemplateName", QString());
43
44
45 d->m_alwaysUseTemplate = cfgGrp.readPathEntry("AlwaysUseTemplate", QString());
46 m_alwaysUseCheckBox->setVisible(false);
47 connect(m_alwaysUseCheckBox, SIGNAL(clicked()), this, SLOT(alwaysUseClicked()));
48
49 QStandardItem* selectItem = 0;
50 QStandardItem* rootItem = model()->invisibleRootItem();
51 QStandardItem* defaultItem = 0;
52
53 QFileInfo templateFileInfo(fullTemplateName);
54
55 Q_FOREACH (KisTemplate* t, group->templates()) {
56 if (t->isHidden())
57 continue;
58
59 QPixmap preview = t->loadPicture();
60 QImage icon = preview.toImage();
61 icon = icon.scaled(IconExtent, IconExtent, Qt::KeepAspectRatio, Qt::SmoothTransformation);
62 icon.convertTo(QImage::Format_ARGB32);
63 icon = icon.copy((icon.width() - IconExtent) / 2, (icon.height() - IconExtent) / 2, IconExtent, IconExtent);
64 QStandardItem* item = new QStandardItem(QPixmap::fromImage(icon), t->name());
65 item->setEditable(false);
66 item->setData(t->description(), Qt::UserRole);
67 item->setData(t->file(), Qt::UserRole + 1);
68 item->setData(preview, Qt::UserRole + 2);
69 rootItem->appendRow(item);
70
71 if (templateFileInfo.exists()) {
72 if (!selectItem && (t->file() == fullTemplateName)) {
73 selectItem = item;
74 }
75 }
76 else {
77 if (!selectItem && QFileInfo(t->file()).fileName() == templateFileInfo.fileName()) {
78 selectItem = item;
79 }
80 }
81
82 if (defaultTemplate && (t->file() == defaultTemplate->file())) {
83 defaultItem = item;
84 }
85 }
86
87 QModelIndex selectedIndex;
88
89 if (selectItem) {
90 selectedIndex = model()->indexFromItem(selectItem);
91 d->m_selected = true;
92 } else if (defaultItem) {
93 selectedIndex = model()->indexFromItem(defaultItem);
94 } else {
95 selectedIndex = model()->indexFromItem(model()->item(0));
96 }
97
98 m_documentList->selectionModel()->select(selectedIndex, QItemSelectionModel::Select);
99 m_documentList->selectionModel()->setCurrentIndex(selectedIndex, QItemSelectionModel::Select);
100}
101
106
107void KisTemplatesPane::selectionChanged(const QModelIndex& index)
108{
109 if (index.isValid()) {
110 QStandardItem* item = model()->itemFromIndex(index);
111 m_openButton->setEnabled(true);
112 m_alwaysUseCheckBox->setEnabled(true);
113
114 m_detailsLabel->setHtml(item->data(Qt::UserRole).toString());
115 m_alwaysUseCheckBox->setChecked(item->data(Qt::UserRole + 1).toString() == d->m_alwaysUseTemplate);
116 } else {
117 m_openButton->setEnabled(false);
118 m_alwaysUseCheckBox->setEnabled(false);
119 m_alwaysUseCheckBox->setChecked(false);
120 m_detailsLabel->clear();
121 }
122}
123
128
129void KisTemplatesPane::openFile(const QModelIndex& index)
130{
131 if (index.isValid()) {
132 QStandardItem* item = model()->itemFromIndex(index);
133 KConfigGroup cfgGrp( KSharedConfig::openConfig(), "TemplateChooserDialog");
134 cfgGrp.writePathEntry("FullTemplateName", item->data(Qt::UserRole + 1).toString());
135 cfgGrp.writeEntry("LastReturnType", "Template");
136 cfgGrp.writeEntry("AlwaysUseTemplate", d->m_alwaysUseTemplate);
137 Q_EMIT openUrl(QUrl::fromLocalFile(item->data(Qt::UserRole + 1).toString()));
138 }
139}
140
142{
143 return d->m_selected;
144}
145
147{
148 QStandardItem* item = model()->itemFromIndex(m_documentList->selectionModel()->currentIndex());
149
150 if (!m_alwaysUseCheckBox->isChecked()) {
151 d->m_alwaysUseTemplate.clear();
152 } else {
153 d->m_alwaysUseTemplate = item->data(Qt::UserRole + 1).toString();
154 }
155
156 KConfigGroup cfgGrp( KSharedConfig::openConfig(), "TemplateChooserDialog");
157 cfgGrp.writeEntry("AlwaysUseTemplate", d->m_alwaysUseTemplate);
158 cfgGrp.sync();
160}
161
162void KisTemplatesPane::changeAlwaysUseTemplate(KisTemplatesPane* sender, const QString& alwaysUse)
163{
164 if (this == sender)
165 return;
166
167 QStandardItem* item = model()->itemFromIndex(m_documentList->selectionModel()->currentIndex());
168
169 // If the old always use template is selected uncheck the checkbox
170 if (item && (item->data(Qt::UserRole + 1).toString() == d->m_alwaysUseTemplate)) {
171 m_alwaysUseCheckBox->setChecked(false);
172 }
173
174 d->m_alwaysUseTemplate = alwaysUse;
175}
176
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
void openUrl(const QUrl &)
Emitted when a file is requested to be opened.
QStandardItemModel * model() const
virtual void openFile()
QList< KisTemplate * > templates() const
QString name() const
Definition KisTemplate.h:28
const QPixmap & loadPicture()
QString description() const
Definition KisTemplate.h:31
QString file() const
Definition KisTemplate.h:34
bool isHidden() const
Definition KisTemplate.h:45
void openFile() override
KisTemplatesPane(QWidget *parent, const QString &header, KisTemplateGroup *group, KisTemplate *defaultTemplate)
KisTemplatesPanePrivate *const d
void alwaysUseChanged(KisTemplatesPane *sender, const QString &alwaysUse)
Emitted when the always use checkbox is selected.
bool isSelected()
Returns true if a template in this group was the last one selected.
void changeAlwaysUseTemplate(KisTemplatesPane *sender, const QString &alwaysUse)
void selectionChanged(const QModelIndex &index) override