/*************************************************************************** * 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 #include #include #include #include #include #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() { TDEConfig *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"); TQStringList 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() { TDEConfig *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); TQDictIterator it(_activeCatalogs); KatapultCatalog *catalog; while((catalog = it.current()) != 0) { TDEConfigGroup group(config, TQString("Catalogs/%1").arg(it.currentKey())); catalog->writeSettings(&group); ++it; } if(_display != 0) { TDEConfigGroup group(config, TQString("Displays/%1").arg(_displayName)); _display->writeSettings(&group); } config->sync(); } void KatapultSettings::configure() { if(!_isConfiguring) { _isConfiguring = TRUE; KatapultConfigDlg *dlg = new KatapultConfigDlg(this); if(dlg->exec() == TQDialog::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; } TQString KatapultSettings::displayName() const { return _displayName; } TQStringList KatapultSettings::displayNames() const { return _displayNames; } TQStringList KatapultSettings::displayIds() const { return _displayIds; } int KatapultSettings::displayNumber() const { return _displayIds.findIndex(_displayName); } KatapultDisplay * KatapultSettings::display() const { return _display; } void KatapultSettings::setDisplayName(TQString name) { _displayName = name; loadDisplayPlugins(); emit displayChanged(); } TQStringList KatapultSettings::catalogNames() const { return _catalogNames; } TQStringList KatapultSettings::catalogIds() const { return _catalogIds; } TQStringList KatapultSettings::activeCatalogNames() const { return _activeCatalogNames; } TQStringList KatapultSettings::inactiveCatalogNames() const { TQStringList inactiveCatalogs, catalogs = _catalogIds; for(TQStringList::Iterator it = catalogs.begin(); it != catalogs.end(); ++it) { if(!_activeCatalogNames.contains(*it)) inactiveCatalogs.append(*it); } return inactiveCatalogs; } TQDict KatapultSettings::activeCatalogs() const { return _activeCatalogs; } void KatapultSettings::activateCatalog(TQString catalogName) { _activeCatalogNames.append(catalogName); loadCatalogPlugins(); emit catalogsChanged(); } void KatapultSettings::deactivateCatalog(TQString catalogName) { _activeCatalogNames.remove(catalogName); loadCatalogPlugins(); emit catalogsChanged(); } void KatapultSettings::loadCatalogPlugins() { _activeCatalogs.clear(); _catalogNames.clear(); _catalogIds.clear(); ActionRegistry::self()->clear(); TDETrader::OfferList offers = TDETrader::self()->query("Katapult/Catalog"); TDETrader::OfferList::ConstIterator it; for(it = offers.begin(); it != offers.end(); ++it) { TQString id; KService::Ptr service = *it; KatapultCatalog *catalog; if(!service->property("X-Katapult-ID", TQVariant::String).toString().isEmpty()) id = service->property("X-Katapult-ID", TQVariant::String).toString(); else id = service->name(); _catalogNames.append(service->name()); _catalogIds.append(id); if(_activeCatalogNames.contains(id)) { int errCode = 0; catalog = KParts::ComponentFactory::createInstanceFromService (service, 0, 0, TQStringList(), &errCode); if(catalog != 0) { TDEConfigGroup group(kapp->config(), TQString("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(); TDETrader::OfferList offers = TDETrader::self()->query("Katapult/Display"); TDETrader::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", TQVariant::String).toString().isEmpty()) _displayIds.append(service->property("X-Katapult-ID", TQVariant::String).toString()); else _displayIds.append(service->name()); if(_displayIds.last() == _displayName) { int errCode = 0; _display = KParts::ComponentFactory::createInstanceFromService (service, 0, 0, TQStringList(), &errCode); } } if(_display != 0) { TDEConfigGroup group(kapp->config(), TQString("Displays/%1").arg(_displayName)); _display->readSettings(&group); } } KatapultCatalog * KatapultSettings::catalog(TQString catalogName) const { return _activeCatalogs.find(catalogName); } #include "katapultsettings.moc"