diff --git a/kcmkwin/kwinscripts/CMakeLists.txt b/kcmkwin/kwinscripts/CMakeLists.txt index 1df9a87165..4ad6a9ce07 100644 --- a/kcmkwin/kwinscripts/CMakeLists.txt +++ b/kcmkwin/kwinscripts/CMakeLists.txt @@ -13,6 +13,8 @@ kde4_add_plugin(kcm_kwin_scripts ${kcm_SRCS}) target_link_libraries(kcm_kwin_scripts ${KDE4_KDEUI_LIBRARY} ${KDE4_KIO_LIBS} + ${KDE4_KCMUTILS_LIBS} + ${KDE4_PLASMA_LIBS} ) install(TARGETS kcm_kwin_scripts DESTINATION ${PLUGIN_INSTALL_DIR}) diff --git a/kcmkwin/kwinscripts/module.cpp b/kcmkwin/kwinscripts/module.cpp index 3c7c8cb716..a3084a461a 100644 --- a/kcmkwin/kwinscripts/module.cpp +++ b/kcmkwin/kwinscripts/module.cpp @@ -1,5 +1,6 @@ /* * Copyright (c) 2011 Tamas Krutki + * Copyright (c) 2012 Martin Gräßlin * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,12 +20,7 @@ #include "module.h" #include "ui_module.h" -#include -#include #include -#include -#include -#include #include #include @@ -32,6 +28,9 @@ #include #include #include +#include +#include +#include #include "version.h" @@ -39,7 +38,8 @@ K_PLUGIN_FACTORY_DECLARATION(KcmKWinScriptsFactory); Module::Module(QWidget *parent, const QVariantList &args) : KCModule(KcmKWinScriptsFactory::componentData(), parent, args), - ui(new Ui::Module) + ui(new Ui::Module), + m_kwinConfig(KSharedConfig::openConfig("kwinrc")) { KAboutData *about = new KAboutData("kwin-scripts", 0, ki18n("KWin Scripts"), @@ -52,18 +52,13 @@ Module::Module(QWidget *parent, const QVariantList &args) : ui->setupUi(this); - connect(ui->listWidget, SIGNAL(itemSelectionChanged()), SLOT(updateButtons())); - connect(ui->exportSelectedButton, SIGNAL(clicked()), SLOT(exportScript())); + connect(ui->scriptSelector, SIGNAL(changed(bool)), this, SLOT(changed())); connect(ui->importScriptButton, SIGNAL(clicked()), SLOT(importScript())); - connect(ui->removeScriptButton, SIGNAL(clicked()), SLOT(removeScript())); // We have no help and defaults and apply buttons. setButtons(buttons() ^ KCModule::Help ^ KCModule::Default ^ KCModule::Apply); - ui->listWidget->setSelectionMode(QAbstractItemView::SingleSelection); - updateListViewContents(); - updateButtons(); } Module::~Module() @@ -71,107 +66,47 @@ Module::~Module() delete ui; } -void Module::updateButtons() -{ - if (ui->listWidget->selectedItems().isEmpty()) { - ui->exportSelectedButton->setEnabled(false); - ui->removeScriptButton->setEnabled(false); - } else { - ui->exportSelectedButton->setEnabled(true); - ui->removeScriptButton->setEnabled(true); - } -} - -void Module::exportScript() -{ - QString path = KFileDialog::getSaveFileName(KUrl(), "*.kwinscript *.kws *.kwinqs|KWin scripts (*.kwinscript, *.kws, *.kwinqs)"); - - if (!path.isNull()) { - QFile f(componentData().dirs()->findResource("data", "kwin/scripts/" + ui->listWidget->currentItem()->text())); - - QFileInfo pathInfo(path); - QDir dir(pathInfo.absolutePath()); - - if (dir.exists(pathInfo.fileName())) { - dir.remove(pathInfo.fileName()); - } - - if (f.copy(path)) { - KMessageWidget* msgWidget = new KMessageWidget; - msgWidget->setText(ki18n("The selected script was exported successfully.").toString()); - msgWidget->setMessageType(KMessageWidget::Positive); - ui->verticalLayout2->insertWidget(0, msgWidget); - msgWidget->animatedShow(); - } else { - KMessageWidget* msgWidget = new KMessageWidget; - msgWidget->setText(ki18n("An error occurred, the selected script could not be exported.").toString()); - msgWidget->setMessageType(KMessageWidget::Error); - ui->verticalLayout2->insertWidget(0, msgWidget); - msgWidget->animatedShow(); - } - } - - updateListViewContents(); - updateButtons(); -} - void Module::importScript() { - QString path = KFileDialog::getOpenFileName(KUrl(), "*.kwinscript *.kws *.kwinqs|KWin scripts (*.kwinscript, *.kws, *.kwinqs)"); + QString path = KFileDialog::getOpenFileName(KUrl(), "*.kwinscript|KWin scripts (*.kwinscript)"); - if (!path.isNull()) { - QFileInfo pathInfo(path); - QString fileName(pathInfo.fileName()); - - QFile f(path); - if (!f.copy(componentData().dirs()->saveLocation("data", "kwin/scripts/") + fileName)) { - KMessageWidget* msgWidget = new KMessageWidget; - msgWidget->setText(ki18n("Cannot import selected script: maybe a script already exists with the same name or there is a permission problem.").toString()); - msgWidget->setMessageType(KMessageWidget::Error); - ui->verticalLayout2->insertWidget(0, msgWidget); - msgWidget->animatedShow(); - } else { - f.setFileName(componentData().dirs()->saveLocation("data", "kwin/scripts/") + fileName); - f.open(QIODevice::ReadWrite); - f.setPermissions(QFile::ReadOwner | QFile::WriteOwner | QFile::ExeOwner | - QFile::ReadGroup | QFile::ExeGroup | - QFile::ReadUser | QFile::ExeUser | QFile::WriteUser | - QFile::ReadOther | QFile::ExeOther); - f.close(); - - KMessageWidget* msgWidget = new KMessageWidget; - msgWidget->setText(ki18n("The selected script was imported successfully.").toString()); - msgWidget->setMessageType(KMessageWidget::Positive); - ui->verticalLayout2->insertWidget(0, msgWidget); - msgWidget->animatedShow(); - } + if (path.isNull()) { + return; } - - updateListViewContents(); - updateButtons(); -} - -void Module::removeScript() -{ - if (KMessageBox::questionYesNo(this, ki18n("Do you really want to delete the selected script?").toString(), ki18n("Remove KWin script").toString()) == KMessageBox::Yes) { - QDir dir(QFileInfo(componentData().dirs()->findResource("data", "kwin/scripts/" + ui->listWidget->currentItem()->text())).absolutePath()); - dir.remove(ui->listWidget->currentItem()->text()); - updateListViewContents(); - updateButtons(); + if (!Plasma::Package::installPackage(path, componentData().dirs()->saveLocation("data", "kwin/scripts/"), "kwin-script-")) { + KMessageWidget* msgWidget = new KMessageWidget; + msgWidget->setText(ki18n("Cannot import selected script: maybe a script already exists with the same name or there is a permission problem.").toString()); + msgWidget->setMessageType(KMessageWidget::Error); + ui->verticalLayout2->insertWidget(0, msgWidget); + msgWidget->animatedShow(); } + // TODO: reload list after successful import } void Module::updateListViewContents() { - ui->listWidget->clear(); - - QStringList dirList = componentData().dirs()->findDirs("data", "kwin/scripts"); - for (int i = 0; i < dirList.size(); i++) { - QDir dir(dirList[i]); - QStringList fileNameList = dir.entryList(QStringList() << "*.kws" << "*.kwinscript" << "*.kwinqs", QDir::Files, QDir::Name); - - for (int j = 0; j < fileNameList.size(); j++) { - ui->listWidget->addItem(fileNameList[j]); - } - } + KService::List offers = KServiceTypeTrader::self()->query("KWin/Script"); + QList scriptinfos = KPluginInfo::fromServices(offers); + ui->scriptSelector->addPlugins(scriptinfos, KPluginSelector::ReadConfigFile, QString(), QString(), m_kwinConfig); +} + +void Module::defaults() +{ + ui->scriptSelector->defaults(); +} + +void Module::load() +{ + updateListViewContents(); + ui->scriptSelector->load(); + + emit changed(false); +} + +void Module::save() +{ + ui->scriptSelector->save(); + // TODO: reload scripts in KWin + + emit changed(false); } diff --git a/kcmkwin/kwinscripts/module.h b/kcmkwin/kwinscripts/module.h index 7d1370305e..e3ee5bd4fb 100644 --- a/kcmkwin/kwinscripts/module.h +++ b/kcmkwin/kwinscripts/module.h @@ -20,6 +20,7 @@ #define MODULE_H #include +#include namespace Ui { @@ -42,29 +43,17 @@ public: * Destructor. */ ~Module(); + virtual void load(); + virtual void save(); + virtual void defaults(); protected slots: - /** - * Called when the selection changes in the list view. - * Disables/enables the remove and export buttons. - */ - void updateButtons(); - - /** - * Called when the export script button is clicked. - */ - void exportScript(); /** * Called when the import script button is clicked. */ void importScript(); - /** - * Called when the remove script button is clicked. - */ - void removeScript(); - private: /** * UI @@ -74,6 +63,7 @@ private: * Updates the contents of the list view. */ void updateListViewContents(); + KSharedConfigPtr m_kwinConfig; }; #endif // MODULE_H diff --git a/kcmkwin/kwinscripts/module.ui b/kcmkwin/kwinscripts/module.ui index aa9937883e..e83cc699cd 100644 --- a/kcmkwin/kwinscripts/module.ui +++ b/kcmkwin/kwinscripts/module.ui @@ -19,7 +19,17 @@ - + + + + 0 + 0 + + + + Qt::WheelFocus + + @@ -32,20 +42,6 @@ - - - - Export selected KWin script - - - - - - - Remove selected KWin script - - - @@ -65,6 +61,14 @@ + + + KPluginSelector + QWidget +
kpluginselector.h
+ 1 +
+