summaryrefslogtreecommitdiffstats
path: root/katapult/katapult/katapultsettings.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'katapult/katapult/katapultsettings.cpp')
-rw-r--r--katapult/katapult/katapultsettings.cpp377
1 files changed, 377 insertions, 0 deletions
diff --git a/katapult/katapult/katapultsettings.cpp b/katapult/katapult/katapultsettings.cpp
new file mode 100644
index 0000000..ae316f5
--- /dev/null
+++ b/katapult/katapult/katapultsettings.cpp
@@ -0,0 +1,377 @@
+/***************************************************************************
+ * Copyright (C) 2007 Martin Meredith *
+ * mez@ubuntu.com *
+ * *
+ * Copyright (C) 2005 by Joe Ferris *
+ * jferris@optimistictech.com *
+ * *
+ * 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 *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#include <kapplication.h>
+#include <kconfig.h>
+#include <kparts/componentfactory.h>
+#include <klocale.h>
+
+#include <qstring.h>
+#include <qstringlist.h>
+
+#include "katapultsettings.h"
+#include "katapultcatalog.h"
+#include "katapultconfigdlg.h"
+#include "katapultdisplay.h"
+#include "actionregistry.h"
+
+KatapultSettings::KatapultSettings()
+{
+ _forceWrite = FALSE;
+ readSettings();
+ _isConfiguring = FALSE;
+ _activeCatalogs.setAutoDelete(TRUE);
+ _display = 0;
+
+ loadCatalogPlugins();
+ loadDisplayPlugins();
+}
+
+
+KatapultSettings::~KatapultSettings()
+{
+ if (_forceWrite)
+ writeSettings();
+
+ if(_display != 0)
+ delete _display;
+}
+
+void KatapultSettings::readSettings()
+{
+ KConfig *config = kapp->config();
+ _hideSessionNotification = config->readNumEntry("HideSessionNotification", 1);
+ _hideUserNotification = config->readNumEntry("HideUserNotification", 0);
+ _notificationTimeout = config->readNumEntry("NotificationTimeout", 5000);
+ _hideDelay = config->readUnsignedNumEntry("HideDelay", 1000);
+ _noResultsDelay = config->readUnsignedNumEntry("NoResultsDelay", 2500);
+ _noResultsAction = (NRAction) config->readUnsignedNumEntry("NoResultsAction", NR_ClearQuery);
+ _systrayIcon = config->readBoolEntry("SystrayIcon", TRUE);
+ _autoExec = config->readBoolEntry("AutoExec", FALSE);
+ _displayName = config->readEntry("Display", "Pure Display");
+
+ QStringList defCatalogs;
+ defCatalogs << "Program Catalog" << "Bookmark Catalog" << "Document Catalog" << "Calculator Catalog" << "Amarok Catalog" << "Spell Catalog" << "Google Catalog" << "Execution Catalog";
+ _activeCatalogNames = config->readListEntry("Catalogs", defCatalogs);
+
+ // Force a config write if notification is to be shown once.
+ // (in writeSettings(), _hideSessionNotification or _hideUserNotification
+ // is changed before writing [if necessary]).
+ _forceWrite = ((kapp->isSessionRestored() && _hideSessionNotification == 1) ||
+ (!kapp->isSessionRestored() && _hideUserNotification == 1));
+}
+
+void KatapultSettings::writeSettings()
+{
+ KConfig *config = kapp->config();
+ int hideSession = _hideSessionNotification;
+ int hideUser = _hideUserNotification;
+
+ // If notification had to be shown once, set it to hide always.
+ if (kapp->isSessionRestored()) {
+ if (hideSession == 1) hideSession = 2;
+ } else {
+ if (hideUser == 1) hideUser = 2;
+ }
+
+ config->writeEntry("HideSessionNotification", hideSession);
+ config->writeEntry("HideUserNotification", hideUser);
+ config->writeEntry("NotificationTimeout", _notificationTimeout);
+ config->writeEntry("HideDelay", _hideDelay);
+ config->writeEntry("NoResultsDelay", _noResultsDelay);
+ config->writeEntry("NoResultsAction", (int) _noResultsAction);
+ config->writeEntry("SystrayIcon", _systrayIcon);
+ config->writeEntry("AutoExec", _autoExec);
+ config->writeEntry("Catalogs", _activeCatalogNames);
+ config->writeEntry("Display", _displayName);
+
+ QDictIterator<KatapultCatalog> it(_activeCatalogs);
+ KatapultCatalog *catalog;
+ while((catalog = it.current()) != 0)
+ {
+ KConfigGroup group(config, QString("Catalogs/%1").arg(it.currentKey()));
+ catalog->writeSettings(&group);
+ ++it;
+ }
+
+ if(_display != 0)
+ {
+ KConfigGroup group(config, QString("Displays/%1").arg(_displayName));
+ _display->writeSettings(&group);
+ }
+
+ config->sync();
+}
+
+void KatapultSettings::configure()
+{
+ if(!_isConfiguring)
+ {
+ _isConfiguring = TRUE;
+
+ KatapultConfigDlg *dlg = new KatapultConfigDlg(this);
+ if(dlg->exec() == QDialog::Accepted) {
+ writeSettings();
+ emit systrayChanged();
+ loadCatalogPlugins();
+ emit catalogsChanged();
+
+ } else {
+ readSettings();
+ loadCatalogPlugins();
+ loadDisplayPlugins();
+ emit catalogsChanged();
+ emit displayChanged();
+ }
+ delete dlg;
+
+ _isConfiguring = FALSE;
+ }
+}
+
+bool KatapultSettings::isConfiguring() const
+{
+ return _isConfiguring;
+}
+
+bool KatapultSettings::isAutoExecute() const
+{
+ return _autoExec;
+}
+
+void KatapultSettings::setAutoExecute(bool _autoExec)
+{
+ this->_autoExec = _autoExec;
+}
+
+int KatapultSettings::hideDelay() const
+{
+ return _hideDelay;
+}
+
+void KatapultSettings::setHideDelay(int _hideDelay)
+{
+ this->_hideDelay = _hideDelay;
+}
+
+int KatapultSettings::noResultsDelay() const
+{
+ return _noResultsDelay;
+}
+
+void KatapultSettings::setNoResultsDelay(int _noResultsDelay)
+{
+ this->_noResultsDelay = _noResultsDelay;
+}
+
+KatapultSettings::NRAction KatapultSettings::noResultsAction() const
+{
+ return _noResultsAction;
+}
+
+void KatapultSettings::setNoResultsAction(NRAction _noResultsAction)
+{
+ this->_noResultsAction = _noResultsAction;
+}
+
+bool KatapultSettings::systrayIcon() const
+{
+ return _systrayIcon;
+}
+
+void KatapultSettings::setSystrayIcon(bool _systrayIcon)
+{
+ this->_systrayIcon = _systrayIcon;
+}
+
+bool KatapultSettings::hideNotification() const
+{
+ int hide = kapp->isSessionRestored() ? _hideSessionNotification : _hideUserNotification;
+ return (hide != 0 && hide != 1);
+}
+
+int KatapultSettings::notificationTimeout() const
+{
+ return _notificationTimeout;
+}
+
+QString KatapultSettings::displayName() const
+{
+ return _displayName;
+}
+
+QStringList KatapultSettings::displayNames() const
+{
+ return _displayNames;
+}
+
+QStringList KatapultSettings::displayIds() const
+{
+ return _displayIds;
+}
+
+int KatapultSettings::displayNumber() const
+{
+ return _displayIds.findIndex(_displayName);
+}
+
+KatapultDisplay * KatapultSettings::display() const
+{
+ return _display;
+}
+
+void KatapultSettings::setDisplayName(QString name)
+{
+ _displayName = name;
+ loadDisplayPlugins();
+ emit displayChanged();
+}
+
+QStringList KatapultSettings::catalogNames() const
+{
+ return _catalogNames;
+}
+
+QStringList KatapultSettings::catalogIds() const
+{
+ return _catalogIds;
+}
+
+QStringList KatapultSettings::activeCatalogNames() const
+{
+ return _activeCatalogNames;
+}
+
+QStringList KatapultSettings::inactiveCatalogNames() const
+{
+ QStringList inactiveCatalogs, catalogs = _catalogIds;
+ for(QStringList::Iterator it = catalogs.begin(); it != catalogs.end(); ++it)
+ {
+ if(!_activeCatalogNames.contains(*it))
+ inactiveCatalogs.append(*it);
+ }
+ return inactiveCatalogs;
+}
+
+QDict<KatapultCatalog> KatapultSettings::activeCatalogs() const
+{
+ return _activeCatalogs;
+}
+
+void KatapultSettings::activateCatalog(QString catalogName)
+{
+ _activeCatalogNames.append(catalogName);
+ loadCatalogPlugins();
+ emit catalogsChanged();
+}
+
+void KatapultSettings::deactivateCatalog(QString catalogName)
+{
+ _activeCatalogNames.remove(catalogName);
+ loadCatalogPlugins();
+ emit catalogsChanged();
+}
+
+void KatapultSettings::loadCatalogPlugins()
+{
+ _activeCatalogs.clear();
+ _catalogNames.clear();
+ _catalogIds.clear();
+ ActionRegistry::self()->clear();
+
+ KTrader::OfferList offers = KTrader::self()->query("Katapult/Catalog");
+ KTrader::OfferList::ConstIterator it;
+ for(it = offers.begin(); it != offers.end(); ++it)
+ {
+ QString id;
+
+ KService::Ptr service = *it;
+ KatapultCatalog *catalog;
+
+ if(!service->property("X-Katapult-ID", QVariant::String).toString().isEmpty())
+ id = service->property("X-Katapult-ID", QVariant::String).toString();
+ else
+ id = service->name();
+
+ _catalogNames.append(service->name());
+ _catalogIds.append(id);
+
+ if(_activeCatalogNames.contains(id))
+ {
+ int errCode = 0;
+ catalog = KParts::ComponentFactory::createInstanceFromService<KatapultCatalog>
+ (service, 0, 0, QStringList(), &errCode);
+ if(catalog != 0)
+ {
+ KConfigGroup group(kapp->config(), QString("Catalogs/%1").arg(id));
+ catalog->readSettings(&group);
+ catalog->initialize();
+ _activeCatalogs.insert(id, catalog);
+ }
+ }
+ }
+}
+
+void KatapultSettings::loadDisplayPlugins()
+{
+ if(_display != 0)
+ {
+ delete _display;
+ _display = 0;
+ }
+
+ _displayNames.clear();
+ _displayIds.clear();
+
+ KTrader::OfferList offers = KTrader::self()->query("Katapult/Display");
+ KTrader::OfferList::ConstIterator it;
+ for(it = offers.begin(); it != offers.end(); ++it)
+ {
+ KService::Ptr service = *it;
+
+ _displayNames.append(service->name());
+ if(!service->property("X-Katapult-ID", QVariant::String).toString().isEmpty())
+ _displayIds.append(service->property("X-Katapult-ID", QVariant::String).toString());
+ else
+ _displayIds.append(service->name());
+
+ if(_displayIds.last() == _displayName)
+ {
+ int errCode = 0;
+ _display = KParts::ComponentFactory::createInstanceFromService<KatapultDisplay>
+ (service, 0, 0, QStringList(), &errCode);
+ }
+ }
+ if(_display != 0)
+ {
+ KConfigGroup group(kapp->config(), QString("Displays/%1").arg(_displayName));
+ _display->readSettings(&group);
+ }
+}
+
+KatapultCatalog * KatapultSettings::catalog(QString catalogName) const
+{
+ return _activeCatalogs.find(catalogName);
+}
+
+#include "katapultsettings.moc"