File indexing completed on 2024-05-12 16:01:55
0001 /* This file is part of the KDE project 0002 SPDX-FileCopyrightText: 2005-2006 Peter Simonsson <psn@linux.se> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "KisTemplatesPane.h" 0008 0009 #include "KisTemplateGroup.h" 0010 #include "KisTemplate.h" 0011 0012 #include <QFileInfo> 0013 #include <QStandardItemModel> 0014 #include <QUrl> 0015 0016 #include <kguiitem.h> 0017 #include <kconfiggroup.h> 0018 #include <ksharedconfig.h> 0019 0020 class KisTemplatesPanePrivate 0021 { 0022 public: 0023 KisTemplatesPanePrivate() 0024 : m_selected(false) { 0025 } 0026 0027 bool m_selected; 0028 QString m_alwaysUseTemplate; 0029 }; 0030 0031 0032 KisTemplatesPane::KisTemplatesPane(QWidget* parent, const QString& header, 0033 KisTemplateGroup *group, KisTemplate* defaultTemplate) 0034 : KisDetailsPane(parent,header) 0035 , d(new KisTemplatesPanePrivate) 0036 { 0037 setFocusProxy(m_documentList); 0038 0039 KGuiItem openGItem(i18n("Use This Template")); 0040 KGuiItem::assign(m_openButton, openGItem); 0041 KConfigGroup cfgGrp( KSharedConfig::openConfig(), "TemplateChooserDialog"); 0042 QString fullTemplateName = cfgGrp.readPathEntry("FullTemplateName", QString()); 0043 0044 0045 d->m_alwaysUseTemplate = cfgGrp.readPathEntry("AlwaysUseTemplate", QString()); 0046 m_alwaysUseCheckBox->setVisible(false); 0047 connect(m_alwaysUseCheckBox, SIGNAL(clicked()), this, SLOT(alwaysUseClicked())); 0048 0049 QStandardItem* selectItem = 0; 0050 QStandardItem* rootItem = model()->invisibleRootItem(); 0051 QStandardItem* defaultItem = 0; 0052 0053 QFileInfo templateFileInfo(fullTemplateName); 0054 0055 Q_FOREACH (KisTemplate* t, group->templates()) { 0056 if (t->isHidden()) 0057 continue; 0058 0059 QPixmap preview = t->loadPicture(); 0060 QImage icon = preview.toImage(); 0061 icon = icon.scaled(IconExtent, IconExtent, Qt::KeepAspectRatio, Qt::SmoothTransformation); 0062 icon = icon.convertToFormat(QImage::Format_ARGB32); 0063 icon = icon.copy((icon.width() - IconExtent) / 2, (icon.height() - IconExtent) / 2, IconExtent, IconExtent); 0064 QStandardItem* item = new QStandardItem(QPixmap::fromImage(icon), t->name()); 0065 item->setEditable(false); 0066 item->setData(t->description(), Qt::UserRole); 0067 item->setData(t->file(), Qt::UserRole + 1); 0068 item->setData(preview, Qt::UserRole + 2); 0069 rootItem->appendRow(item); 0070 0071 if (templateFileInfo.exists()) { 0072 if (!selectItem && (t->file() == fullTemplateName)) { 0073 selectItem = item; 0074 } 0075 } 0076 else { 0077 if (!selectItem && QFileInfo(t->file()).fileName() == templateFileInfo.fileName()) { 0078 selectItem = item; 0079 } 0080 } 0081 0082 if (defaultTemplate && (t->file() == defaultTemplate->file())) { 0083 defaultItem = item; 0084 } 0085 } 0086 0087 QModelIndex selectedIndex; 0088 0089 if (selectItem) { 0090 selectedIndex = model()->indexFromItem(selectItem); 0091 d->m_selected = true; 0092 } else if (defaultItem) { 0093 selectedIndex = model()->indexFromItem(defaultItem); 0094 } else { 0095 selectedIndex = model()->indexFromItem(model()->item(0)); 0096 } 0097 0098 m_documentList->selectionModel()->select(selectedIndex, QItemSelectionModel::Select); 0099 m_documentList->selectionModel()->setCurrentIndex(selectedIndex, QItemSelectionModel::Select); 0100 } 0101 0102 KisTemplatesPane::~KisTemplatesPane() 0103 { 0104 delete d; 0105 } 0106 0107 void KisTemplatesPane::selectionChanged(const QModelIndex& index) 0108 { 0109 if (index.isValid()) { 0110 QStandardItem* item = model()->itemFromIndex(index); 0111 m_openButton->setEnabled(true); 0112 m_alwaysUseCheckBox->setEnabled(true); 0113 0114 m_detailsLabel->setHtml(item->data(Qt::UserRole).toString()); 0115 m_alwaysUseCheckBox->setChecked(item->data(Qt::UserRole + 1).toString() == d->m_alwaysUseTemplate); 0116 } else { 0117 m_openButton->setEnabled(false); 0118 m_alwaysUseCheckBox->setEnabled(false); 0119 m_alwaysUseCheckBox->setChecked(false); 0120 m_detailsLabel->clear(); 0121 } 0122 } 0123 0124 void KisTemplatesPane::openFile() 0125 { 0126 KisDetailsPane::openFile(); 0127 } 0128 0129 void KisTemplatesPane::openFile(const QModelIndex& index) 0130 { 0131 if (index.isValid()) { 0132 QStandardItem* item = model()->itemFromIndex(index); 0133 KConfigGroup cfgGrp( KSharedConfig::openConfig(), "TemplateChooserDialog"); 0134 cfgGrp.writePathEntry("FullTemplateName", item->data(Qt::UserRole + 1).toString()); 0135 cfgGrp.writeEntry("LastReturnType", "Template"); 0136 cfgGrp.writeEntry("AlwaysUseTemplate", d->m_alwaysUseTemplate); 0137 emit openUrl(QUrl::fromLocalFile(item->data(Qt::UserRole + 1).toString())); 0138 } 0139 } 0140 0141 bool KisTemplatesPane::isSelected() 0142 { 0143 return d->m_selected; 0144 } 0145 0146 void KisTemplatesPane::alwaysUseClicked() 0147 { 0148 QStandardItem* item = model()->itemFromIndex(m_documentList->selectionModel()->currentIndex()); 0149 0150 if (!m_alwaysUseCheckBox->isChecked()) { 0151 d->m_alwaysUseTemplate.clear(); 0152 } else { 0153 d->m_alwaysUseTemplate = item->data(Qt::UserRole + 1).toString(); 0154 } 0155 0156 KConfigGroup cfgGrp( KSharedConfig::openConfig(), "TemplateChooserDialog"); 0157 cfgGrp.writeEntry("AlwaysUseTemplate", d->m_alwaysUseTemplate); 0158 cfgGrp.sync(); 0159 emit alwaysUseChanged(this, d->m_alwaysUseTemplate); 0160 } 0161 0162 void KisTemplatesPane::changeAlwaysUseTemplate(KisTemplatesPane* sender, const QString& alwaysUse) 0163 { 0164 if (this == sender) 0165 return; 0166 0167 QStandardItem* item = model()->itemFromIndex(m_documentList->selectionModel()->currentIndex()); 0168 0169 // If the old always use template is selected uncheck the checkbox 0170 if (item && (item->data(Qt::UserRole + 1).toString() == d->m_alwaysUseTemplate)) { 0171 m_alwaysUseCheckBox->setChecked(false); 0172 } 0173 0174 d->m_alwaysUseTemplate = alwaysUse; 0175 } 0176