File indexing completed on 2024-05-19 04:58:06

0001 /*
0002     This file is part of Choqok, the KDE micro-blogging client
0003 
0004     SPDX-FileCopyrightText: 2008-2012 Mehrdad Momeny <mehrdad.momeny@gmail.com>
0005 
0006     SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0007 */
0008 
0009 #include "behaviorconfig_shorten.h"
0010 
0011 #include <QComboBox>
0012 #include <QDialog>
0013 #include <QDialogButtonBox>
0014 #include <QLayout>
0015 #include <QTabWidget>
0016 
0017 #include <KAboutData>
0018 #include <KAboutPluginDialog>
0019 #include <KCMultiDialog>
0020 
0021 #include "choqokbehaviorsettings.h"
0022 #include "behaviordebug.h"
0023 #include "pluginmanager.h"
0024 #include "shortenmanager.h"
0025 
0026 BehaviorConfig_Shorten::BehaviorConfig_Shorten(QWidget *parent)
0027     : QWidget(parent), currentShortener(nullptr)
0028 {
0029     qCDebug(CHOQOK);
0030     setupUi(this);
0031     Choqok::ShortenManager::self();
0032     connect(shortenPlugins, (void (QComboBox::*)(int))&QComboBox::currentIndexChanged,
0033             this, &BehaviorConfig_Shorten::currentPluginChanged);
0034     connect(aboutPlugin,  &QPushButton::clicked, this, &BehaviorConfig_Shorten::slotAboutClicked);
0035     connect(configPlugin, &QPushButton::clicked, this, &BehaviorConfig_Shorten::slotConfigureClicked);
0036 }
0037 
0038 BehaviorConfig_Shorten::~BehaviorConfig_Shorten()
0039 {
0040     qCDebug(CHOQOK);
0041 }
0042 
0043 void BehaviorConfig_Shorten::currentPluginChanged(int index)
0044 {
0045     if (shortenPlugins->itemData(index).toString() == prevShortener) {
0046         Q_EMIT changed(false);
0047     } else {
0048         Q_EMIT changed(true);
0049     }
0050     QString key = shortenPlugins->itemData(index).toString();
0051 
0052     if (!key.isEmpty() && key != QLatin1String("none") && !availablePlugins.value(key).value(QStringLiteral("X-KDE-ConfigModule")).isEmpty()) {
0053         configPlugin->setEnabled(true);
0054     } else {
0055         configPlugin->setEnabled(false);
0056     }
0057 //     if(currentShortener){
0058 //         layout()->removeWidget(currentShortener->configWidget());
0059 // //         currentShortener->deleteLater();
0060 // //         currentShortener = 0;
0061 //     }
0062 //     currentShortener = qobject_cast<Choqok::Shortener*>(Choqok::PluginManager::self()->loadPlugin(
0063 //                                                             kcfg_plugins->itemData(index).toString() ) );
0064 //     if(currentShortener && currentShortener->configWidget())
0065 //         layout()->addWidget(currentShortener->configWidget());
0066 }
0067 
0068 void BehaviorConfig_Shorten::load()
0069 {
0070     shortenPlugins->clear();
0071     shortenPlugins->addItem(i18nc("No shortener service", "None"), QLatin1String("none"));
0072     for (const auto &plugin : Choqok::PluginManager::self()->availablePlugins(QLatin1String("Shorteners"))) {
0073         shortenPlugins->addItem(QIcon::fromTheme(plugin.iconName()), plugin.name(), plugin.pluginId());
0074         availablePlugins.insert(plugin.pluginId(), plugin);
0075     }
0076     prevShortener = Choqok::BehaviorSettings::shortenerPlugin();
0077     if (!prevShortener.isEmpty()) {
0078         shortenPlugins->setCurrentIndex(shortenPlugins->findData(prevShortener));
0079         //         currentPluginChanged(kcfg_plugins->currentIndex());
0080     }
0081 }
0082 
0083 void BehaviorConfig_Shorten::save()
0084 {
0085     const QString shorten = shortenPlugins->itemData(shortenPlugins->currentIndex()).toString();
0086     Choqok::BehaviorSettings::setShortenerPlugin(shorten);
0087     if (prevShortener != shorten) {
0088         qCDebug(CHOQOK) << prevShortener << "->" << shorten;
0089         Choqok::BehaviorSettings::self()->save();
0090         Choqok::ShortenManager::self()->reloadConfig();
0091     }
0092 }
0093 
0094 void BehaviorConfig_Shorten::slotAboutClicked()
0095 {
0096     const QString shorten = shortenPlugins->itemData(shortenPlugins->currentIndex()).toString();
0097     if (shorten == QLatin1String("none")) {
0098         return;
0099     }
0100     auto metaData = availablePlugins.value(shorten);
0101 
0102     KAboutPluginDialog aboutPlugin(metaData, this);
0103     aboutPlugin.setWindowIcon(QIcon::fromTheme(metaData.iconName()));
0104     aboutPlugin.exec();
0105 }
0106 
0107 void BehaviorConfig_Shorten::slotConfigureClicked()
0108 {
0109     auto dialog = new KCMultiDialog(this);
0110     auto pluginInfo = availablePlugins.value(shortenPlugins->itemData(shortenPlugins->currentIndex()).toString());
0111     const QString configModuleName = pluginInfo.value(QStringLiteral("X-KDE-ConfigModule"));
0112     KPluginMetaData md(configModuleName);
0113     dialog->addModule(md);
0114     dialog->setAttribute(Qt::WA_DeleteOnClose);
0115     dialog->show();
0116 }
0117 
0118 #include "moc_behaviorconfig_shorten.cpp"