File indexing completed on 2024-05-12 04:33:19
0001 /* 0002 SPDX-FileCopyrightText: 2012 Victor Dodon <dodonvictor at gmail dot com> 0003 SPDX-FileCopyrightText: 2012-2018 Gilles Caulier <caulier dot gilles at gmail dot com> 0004 0005 SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 #include "kipisetup.h" 0009 0010 // Qt includes 0011 0012 #include <QList> 0013 #include <QRadioButton> 0014 #include <QPushButton> 0015 #include <QDir> 0016 #include <QVBoxLayout> 0017 #include <QWidget> 0018 #include <QDebug> 0019 #include <QScrollArea> 0020 #include <QApplication> 0021 #include <QComboBox> 0022 #include <QLineEdit> 0023 #include <QStyle> 0024 #include <QStandardPaths> 0025 #include <QDialogButtonBox> 0026 0027 // KF includes 0028 0029 #include <KSharedConfig> 0030 #include <KConfigGroup> 0031 #include <KWindowConfig> 0032 0033 // Libkipi includes 0034 0035 #include "pluginloader.h" 0036 #include "configwidget.h" 0037 0038 // Local includes 0039 0040 #include "kipitestpluginloader.h" 0041 0042 using namespace KIPI; 0043 0044 namespace KXMLKipiCmd 0045 { 0046 0047 const QString SetupXML::CONFIG_GROUP_NAME = QString::fromLatin1("UI Settings"); 0048 0049 class KipiSetup::Private 0050 { 0051 0052 public: 0053 0054 Private() : 0055 pluginFilter(nullptr), 0056 buttons(nullptr), 0057 tabView(nullptr), 0058 pluginsList(nullptr), 0059 xmlPage(nullptr) 0060 { 0061 } 0062 0063 QLineEdit* pluginFilter; 0064 0065 QDialogButtonBox* buttons; 0066 QTabWidget* tabView; 0067 0068 ConfigWidget* pluginsList; 0069 SetupXML* xmlPage; 0070 }; 0071 0072 KipiSetup::KipiSetup(QWidget* const parent) 0073 : QDialog(parent), 0074 d(new Private) 0075 { 0076 setWindowTitle(QLatin1String("Configure")); 0077 setModal(true); 0078 setMinimumSize(600, 400); 0079 0080 d->buttons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, this); 0081 d->tabView = new QTabWidget(this); 0082 0083 QScrollArea* const sv = new QScrollArea(this); 0084 QWidget* const panel = new QWidget(sv->viewport()); 0085 QGridLayout* const grid = new QGridLayout(panel); 0086 0087 d->pluginFilter = new QLineEdit(panel); 0088 d->pluginFilter->setClearButtonEnabled(true); 0089 d->pluginFilter->setPlaceholderText(QLatin1String("Plugins list filter.")); 0090 0091 d->pluginsList = PluginLoader::instance()->configWidget(d->tabView); 0092 d->pluginsList->setToolTip(QLatin1String("Configure plugins")); 0093 0094 QStringList labels; 0095 labels.append(QLatin1String("Name")); 0096 labels.append(QLatin1String("Categories")); 0097 labels.append(QLatin1String("Description")); 0098 labels.append(QLatin1String("Author")); 0099 d->pluginsList->setHeaderLabels(labels); 0100 0101 grid->addWidget(d->pluginFilter, 0, 0, 1, 1); 0102 grid->addWidget(d->pluginsList, 1, 0, 1, 1); 0103 grid->setRowStretch(1, 10); 0104 0105 sv->setWidget(panel); 0106 sv->setWidgetResizable(true); 0107 0108 d->tabView->insertTab(KipiPluginsPage, sv, QIcon(QLatin1String(":/icons/kipi-icon.svg")), QLatin1String("Kipi Plugins")); 0109 0110 d->xmlPage = new SetupXML(d->tabView); 0111 d->xmlPage->setToolTip(QLatin1String("Configure the UI file for the KXMLKipiCmd application")); 0112 d->tabView->insertTab(XmlFilesPage, d->xmlPage, QIcon::fromTheme(QString::fromLatin1("application-xml")), QLatin1String("UI layouts")); 0113 0114 QVBoxLayout* const vbx = new QVBoxLayout(this); 0115 vbx->addWidget(d->tabView); 0116 vbx->addWidget(d->buttons); 0117 setLayout(vbx); 0118 0119 KSharedConfig::Ptr config = KSharedConfig::openConfig(); 0120 KConfigGroup group = config->group("Setup Dialog"); 0121 KWindowConfig::restoreWindowSize(windowHandle(), group); 0122 d->tabView->setCurrentIndex(group.readEntry("Setup Page", 0)); 0123 0124 connect(d->pluginFilter, &QLineEdit::textChanged, 0125 this, &KipiSetup::slotFilterChanged); 0126 0127 connect(d->buttons->button(QDialogButtonBox::Ok), &QPushButton::clicked, 0128 this, &KipiSetup::slotOkClicked); 0129 0130 connect(d->buttons->button(QDialogButtonBox::Cancel), &QPushButton::clicked, 0131 this, &KipiSetup::close); 0132 } 0133 0134 KipiSetup::~KipiSetup() 0135 { 0136 KSharedConfig::Ptr config = KSharedConfig::openConfig(); 0137 KConfigGroup group = config->group(QString::fromLatin1("Setup Dialog")); 0138 KWindowConfig::saveWindowSize(windowHandle(), group); 0139 group.writeEntry("Setup Page", d->tabView->currentIndex()); 0140 config->sync(); 0141 0142 delete d; 0143 } 0144 0145 void KipiSetup::slotFilterChanged(const QString& filter) 0146 { 0147 d->pluginsList->setFilter(filter, Qt::CaseInsensitive); 0148 } 0149 0150 bool KipiSetup::runSetupDialog(QWidget* const parent) 0151 { 0152 QPointer<KipiSetup> setup = new KipiSetup(parent); 0153 bool success = (setup->exec() == QDialog::Accepted); 0154 delete setup; 0155 0156 return success; 0157 } 0158 0159 void KipiSetup::slotOkClicked() 0160 { 0161 qDebug() << "Ok clicked"; 0162 0163 QApplication::setOverrideCursor(Qt::WaitCursor); 0164 0165 d->pluginsList->apply(); 0166 d->xmlPage->apply(); 0167 0168 QApplication::restoreOverrideCursor(); 0169 accept(); 0170 } 0171 0172 // ------------------------------------------------------------------- 0173 0174 class SetupXML::Private 0175 { 0176 public: 0177 0178 Private() 0179 { 0180 xmlFilesCob = nullptr; 0181 } 0182 0183 QList<QString> uiFilesList; 0184 QComboBox* xmlFilesCob; 0185 }; 0186 0187 SetupXML::SetupXML(QWidget* const parent) 0188 : QScrollArea(parent), 0189 d(new Private) 0190 { 0191 QWidget* const panel = new QWidget(viewport()); 0192 setWidget(panel); 0193 setWidgetResizable(true); 0194 0195 QDir dir(QStringLiteral(":/kxmlgui5/kxmlkipicmd")); 0196 QString filter = QString::fromLatin1("*ui.rc"); 0197 d->uiFilesList = dir.entryList(QStringList(filter), QDir::Files | QDir::NoSymLinks); 0198 0199 d->xmlFilesCob = new QComboBox(panel); 0200 d->xmlFilesCob->setEditable(false); 0201 0202 for (const QString &uiFile : std::as_const(d->uiFilesList)) 0203 { 0204 d->xmlFilesCob->addItem(uiFile, uiFile); 0205 } 0206 0207 QVBoxLayout* const mainLayout = new QVBoxLayout; 0208 mainLayout->setAlignment(Qt::AlignTop); 0209 mainLayout->addWidget(d->xmlFilesCob); 0210 panel->setLayout(mainLayout); 0211 0212 KSharedConfig::Ptr config = KSharedConfig::openConfig(); 0213 KConfigGroup group = config->group(CONFIG_GROUP_NAME); 0214 QString uiFile = group.readEntry("UiFile", "kxmlkipicmd_defaultui.rc"); 0215 d->xmlFilesCob->setCurrentIndex(d->uiFilesList.indexOf(uiFile)); 0216 0217 setWidgetResizable(true); 0218 } 0219 0220 SetupXML::~SetupXML() 0221 { 0222 delete d; 0223 } 0224 0225 void SetupXML::apply() 0226 { 0227 QString uiFile = d->xmlFilesCob->itemData(d->xmlFilesCob->currentIndex()).toString(); 0228 0229 KSharedConfig::Ptr config = KSharedConfig::openConfig(); 0230 KConfigGroup group = config->group(CONFIG_GROUP_NAME); 0231 QString oldUiFile = group.readEntry("UiFile", "kxmlkipicmd_defaultui.rc"); 0232 0233 if (uiFile != oldUiFile) 0234 { 0235 group.writeEntry("UiFile", uiFile); 0236 } 0237 group.sync(); 0238 } 0239 0240 } // namespace KXMLKipiCmd 0241 0242 #include "moc_kipisetup.cpp"