File indexing completed on 2024-04-28 04:57:32

0001 /* This file is part of the KDE project
0002 
0003    Copyright (C) 2008 Manolo Valdes <nolis71cu@gmail.com>
0004 
0005    This program is free software; you can redistribute it and/or
0006    modify it under the terms of the GNU General Public
0007    License as published by the Free Software Foundation; either
0008    version 2 of the License, or (at your option) any later version.
0009 */
0010 
0011 #include "dlgmirrorsearch.h"
0012 
0013 #include "kget_debug.h"
0014 #include "kget_macro.h"
0015 #include "mirrorsearchsettings.h"
0016 
0017 #include <KConfigGroup>
0018 #include <KLocalizedString>
0019 
0020 #include <QDebug>
0021 #include <QDialogButtonBox>
0022 #include <QPushButton>
0023 #include <QVBoxLayout>
0024 #include <qobject.h>
0025 
0026 DlgEngineEditing::DlgEngineEditing(QWidget *parent)
0027     : QDialog(parent)
0028 {
0029     auto *mainWidget = new QWidget(this);
0030     ui.setupUi(mainWidget);
0031     auto *mainLayout = new QVBoxLayout;
0032     setLayout(mainLayout);
0033     mainLayout->addWidget(mainWidget);
0034 
0035     setWindowTitle(i18n("Insert Engine"));
0036     setModal(true);
0037     auto *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
0038     okButton = buttonBox->button(QDialogButtonBox::Ok);
0039     okButton->setDefault(true);
0040     okButton->setShortcut(Qt::CTRL | Qt::Key_Return);
0041     connect(buttonBox, &QDialogButtonBox::accepted, this, &DlgEngineEditing::accept);
0042     connect(buttonBox, &QDialogButtonBox::rejected, this, &DlgEngineEditing::reject);
0043     mainLayout->addWidget(buttonBox);
0044 
0045     ui.engineNameLabel->setText(i18n("Engine name:"));
0046     ui.urlLabel->setText(i18n("URL:"));
0047     connect(ui.urlEdit, &QLineEdit::textChanged, this, &DlgEngineEditing::slotChangeText);
0048     connect(ui.engineNameEdit, &QLineEdit::textChanged, this, &DlgEngineEditing::slotChangeText);
0049     slotChangeText();
0050 }
0051 
0052 DlgEngineEditing::~DlgEngineEditing()
0053 {
0054 }
0055 
0056 void DlgEngineEditing::slotChangeText()
0057 {
0058     okButton->setEnabled(!ui.urlEdit->text().isEmpty());
0059 }
0060 
0061 QString DlgEngineEditing::engineName() const
0062 {
0063     return ui.engineNameEdit->text();
0064 }
0065 
0066 QString DlgEngineEditing::engineUrl() const
0067 {
0068     return ui.urlEdit->text();
0069 }
0070 
0071 KGET_EXPORT_PLUGIN_CONFIG(DlgSettingsWidget)
0072 
0073 DlgSettingsWidget::DlgSettingsWidget(QObject *parent, const KPluginMetaData &data)
0074     : KCModule(parent, data)
0075 {
0076     ui.setupUi(widget());
0077     ui.newEngineBt->setIcon(QIcon::fromTheme("list-add"));
0078     ui.removeEngineBt->setIcon(QIcon::fromTheme("list-remove"));
0079 
0080     connect(ui.newEngineBt, &QAbstractButton::clicked, this, &DlgSettingsWidget::slotNewEngine);
0081     connect(ui.removeEngineBt, &QAbstractButton::clicked, this, &DlgSettingsWidget::slotRemoveEngine);
0082 }
0083 
0084 DlgSettingsWidget::~DlgSettingsWidget()
0085 {
0086 }
0087 
0088 void DlgSettingsWidget::slotNewEngine()
0089 {
0090     DlgEngineEditing dialog;
0091     if (dialog.exec()) {
0092         addSearchEngineItem(dialog.engineName(), dialog.engineUrl());
0093         Q_EMIT markAsChanged();
0094     }
0095 }
0096 
0097 void DlgSettingsWidget::slotRemoveEngine()
0098 {
0099     QList<QTreeWidgetItem *> selectedItems = ui.enginesTreeWidget->selectedItems();
0100 
0101     foreach (QTreeWidgetItem *selectedItem, selectedItems)
0102         delete (selectedItem);
0103     Q_EMIT markAsChanged();
0104 }
0105 
0106 void DlgSettingsWidget::load()
0107 {
0108     loadSearchEnginesSettings();
0109 }
0110 
0111 void DlgSettingsWidget::addSearchEngineItem(const QString &name, const QString &url)
0112 {
0113     ui.enginesTreeWidget->addTopLevelItem(new QTreeWidgetItem(QStringList() << name << url));
0114     Q_EMIT markAsChanged();
0115 }
0116 
0117 void DlgSettingsWidget::loadSearchEnginesSettings()
0118 {
0119     ui.enginesTreeWidget->clear(); // Cleanup things first
0120 
0121     QStringList enginesNames = MirrorSearchSettings::self()->searchEnginesNameList();
0122     QStringList enginesUrls = MirrorSearchSettings::self()->searchEnginesUrlList();
0123 
0124     for (int i = 0; i < enginesNames.size(); i++) {
0125         addSearchEngineItem(enginesNames[i], enginesUrls[i]);
0126     }
0127 }
0128 
0129 void DlgSettingsWidget::saveSearchEnginesSettings()
0130 {
0131     QStringList enginesNames;
0132     QStringList enginesUrls;
0133 
0134     for (int i = 0; i < ui.enginesTreeWidget->topLevelItemCount(); i++) {
0135         enginesNames.append(ui.enginesTreeWidget->topLevelItem(i)->text(0));
0136         enginesUrls.append(ui.enginesTreeWidget->topLevelItem(i)->text(1));
0137     }
0138 
0139     MirrorSearchSettings::self()->setSearchEnginesNameList(enginesNames);
0140     MirrorSearchSettings::self()->setSearchEnginesUrlList(enginesUrls);
0141 
0142     MirrorSearchSettings::self()->save();
0143 }
0144 
0145 void DlgSettingsWidget::save()
0146 {
0147     qCDebug(KGET_DEBUG);
0148     saveSearchEnginesSettings();
0149 
0150     MirrorSearchSettings::self()->save();
0151 }
0152 
0153 #include "dlgmirrorsearch.moc"
0154 #include "moc_dlgmirrorsearch.cpp"