/* Copyright (C) 2003 George Staikos 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; see the file COPYING. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "konfigurator.h" #include "walletconfigwidget.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include typedef KGenericFactory TDEWalletFactory; K_EXPORT_COMPONENT_FACTORY(kcm_tdewallet, TDEWalletFactory("kcmtdewallet")) TDEWalletConfig::TDEWalletConfig(TQWidget *parent, const char *name, const TQStringList&) : TDECModule(TDEWalletFactory::instance(), parent, name) { TDEAboutData *about = new TDEAboutData(I18N_NOOP("kcmtdewallet"), I18N_NOOP("TDE Wallet Control Module"), 0, 0, TDEAboutData::License_GPL, I18N_NOOP("(c) 2003 George Staikos")); about->addAuthor("George Staikos", 0, "staikos@kde.org"); setAboutData( about ); _cfg = new TDEConfig("tdewalletrc", false, false); TQVBoxLayout *vbox = new TQVBoxLayout(this, 0, KDialog::spacingHint()); vbox->add(_wcw = new WalletConfigWidget(this)); connect(_wcw->_enabled, TQ_SIGNAL(clicked()), this, TQ_SLOT(configChanged())); connect(_wcw->_launchManager, TQ_SIGNAL(clicked()), this, TQ_SLOT(configChanged())); connect(_wcw->_autocloseManager, TQ_SIGNAL(clicked()), this, TQ_SLOT(configChanged())); connect(_wcw->_autoclose, TQ_SIGNAL(clicked()), this, TQ_SLOT(configChanged())); connect(_wcw->_closeIdle, TQ_SIGNAL(clicked()), this, TQ_SLOT(configChanged())); connect(_wcw->_openPrompt, TQ_SIGNAL(clicked()), this, TQ_SLOT(configChanged())); connect(_wcw->_screensaverLock, TQ_SIGNAL(clicked()), this, TQ_SLOT(configChanged())); connect(_wcw->_localWalletSelected, TQ_SIGNAL(clicked()), this, TQ_SLOT(configChanged())); connect(_wcw->_idleTime, TQ_SIGNAL(valueChanged(int)), this, TQ_SLOT(configChanged())); connect(_wcw->_launch, TQ_SIGNAL(clicked()), this, TQ_SLOT(launchManager())); connect(_wcw->_newWallet, TQ_SIGNAL(clicked()), this, TQ_SLOT(newNetworkWallet())); connect(_wcw->_newLocalWallet, TQ_SIGNAL(clicked()), this, TQ_SLOT(newLocalWallet())); connect(_wcw->_localWallet, TQ_SIGNAL(activated(int)), this, TQ_SLOT(configChanged())); connect(_wcw->_defaultWallet, TQ_SIGNAL(activated(int)), this, TQ_SLOT(configChanged())); connect(_wcw->_accessList, TQ_SIGNAL(contextMenuRequested(TQListViewItem*, const TQPoint&, int)), this, TQ_SLOT(contextMenuRequested(TQListViewItem*, const TQPoint&, int))); _wcw->_accessList->setAllColumnsShowFocus(true); updateWalletLists(); load(); if (DCOPClient::mainClient()->isApplicationRegistered("tdewalletmanager")) { _wcw->_launch->hide(); } } TDEWalletConfig::~TDEWalletConfig() { delete _cfg; _cfg = 0L; } void TDEWalletConfig::updateWalletLists() { TQString p1, p2; p1 = _wcw->_localWallet->currentText(); p2 = _wcw->_defaultWallet->currentText(); _wcw->_localWallet->clear(); _wcw->_defaultWallet->clear(); TQStringList wl = TDEWallet::Wallet::walletList(); _wcw->_localWallet->insertStringList(wl); _wcw->_defaultWallet->insertStringList(wl); if (wl.contains(p1)) { _wcw->_localWallet->setCurrentText(p1); } if (wl.contains(p2)) { _wcw->_defaultWallet->setCurrentText(p2); } } TQString TDEWalletConfig::newWallet() { bool ok; TQString n = KInputDialog::getText(i18n("New Wallet"), i18n("Please choose a name for the new wallet:"), TQString(), &ok, this); if (!ok) { return TQString(); } TDEWallet::Wallet *w = TDEWallet::Wallet::openWallet(n); if (!w) { return TQString(); } delete w; return n; } void TDEWalletConfig::newLocalWallet() { TQString n = newWallet(); if (n.isEmpty()) { return; } updateWalletLists(); _wcw->_localWallet->setCurrentText(n); emit changed(true); } void TDEWalletConfig::newNetworkWallet() { TQString n = newWallet(); if (n.isEmpty()) { return; } updateWalletLists(); _wcw->_defaultWallet->setCurrentText(n); emit changed(true); } void TDEWalletConfig::launchManager() { if (!DCOPClient::mainClient()->isApplicationRegistered("tdewalletmanager")) { TDEApplication::startServiceByDesktopName("tdewalletmanager_show"); } else { DCOPRef r("tdewalletmanager", "tdewalletmanager-mainwindow#1"); r.send("show"); r.send("raise"); } } void TDEWalletConfig::configChanged() { emit changed(true); } void TDEWalletConfig::load() { load( false ); } void TDEWalletConfig::load(bool useDefaults) { TDEConfigGroup config(_cfg, "Wallet"); config.setReadDefaults( useDefaults ); _wcw->_enabled->setChecked(config.readBoolEntry("Enabled", true)); _wcw->_openPrompt->setChecked(config.readBoolEntry("Prompt on Open", true)); _wcw->_launchManager->setChecked(config.readBoolEntry("Launch Manager", true)); _wcw->_autocloseManager->setChecked(! config.readBoolEntry("Leave Manager Open", false)); _wcw->_screensaverLock->setChecked(config.readBoolEntry("Close on Screensaver", false)); _wcw->_autoclose->setChecked(!config.readBoolEntry("Leave Open", false)); _wcw->_closeIdle->setChecked(config.readBoolEntry("Close When Idle", false)); _wcw->_idleTime->setValue(config.readNumEntry("Idle Timeout", 10)); if (config.hasKey("Default Wallet")) { _wcw->_defaultWallet->setCurrentText(config.readEntry("Default Wallet")); } else { _wcw->_defaultWallet->setCurrentItem(0); } if (config.hasKey("Local Wallet")) { _wcw->_localWalletSelected->setChecked( !config.readBoolEntry("Use One Wallet") ); _wcw->_localWallet->setCurrentText(config.readEntry("Local Wallet")); } else { _wcw->_localWalletSelected->setChecked(false); } _wcw->_accessList->clear(); _cfg->setGroup("Auto Deny"); TQStringList denykeys = _cfg->entryMap("Auto Deny").keys(); _cfg->setGroup("Auto Allow"); TQStringList keys = _cfg->entryMap("Auto Allow").keys(); for (TQStringList::Iterator i = keys.begin(); i != keys.end(); ++i) { _cfg->setGroup("Auto Allow"); TQStringList apps = _cfg->readListEntry(*i); _cfg->setGroup("Auto Deny"); TQStringList denyapps = _cfg->readListEntry(*i); denykeys.remove(*i); TQListViewItem *lvi = new TQListViewItem(_wcw->_accessList, *i); for (TQStringList::Iterator j = apps.begin(); j != apps.end(); ++j) { new TQListViewItem(lvi, TQString(), *j, i18n("Always Allow")); } for (TQStringList::Iterator j = denyapps.begin(); j != denyapps.end(); ++j) { new TQListViewItem(lvi, TQString(), *j, i18n("Always Deny")); } } _cfg->setGroup("Auto Deny"); for (TQStringList::Iterator i = denykeys.begin(); i != denykeys.end(); ++i) { TQStringList denyapps = _cfg->readListEntry(*i); TQListViewItem *lvi = new TQListViewItem(_wcw->_accessList, *i); for (TQStringList::Iterator j = denyapps.begin(); j != denyapps.end(); ++j) { new TQListViewItem(lvi, TQString(), *j, i18n("Always Deny")); } } emit changed(useDefaults); } void TDEWalletConfig::save() { TDEConfigGroup config(_cfg, "Wallet"); config.writeEntry("Enabled", _wcw->_enabled->isChecked()); config.writeEntry("Launch Manager", _wcw->_launchManager->isChecked()); config.writeEntry("Leave Manager Open", !_wcw->_autocloseManager->isChecked()); config.writeEntry("Leave Open", !_wcw->_autoclose->isChecked()); config.writeEntry("Close When Idle", _wcw->_closeIdle->isChecked()); config.writeEntry("Idle Timeout", _wcw->_idleTime->value()); config.writeEntry("Prompt on Open", _wcw->_openPrompt->isChecked()); config.writeEntry("Close on Screensaver", _wcw->_screensaverLock->isChecked()); config.writeEntry("Use One Wallet", !_wcw->_localWalletSelected->isChecked()); if (_wcw->_localWalletSelected->isChecked()) { config.writeEntry("Local Wallet", _wcw->_localWallet->currentText()); } else { config.deleteEntry("Local Wallet"); } if (_wcw->_defaultWallet->currentItem() != -1) { config.writeEntry("Default Wallet", _wcw->_defaultWallet->currentText()); } else { config.deleteEntry("Default Wallet"); } // FIXME: won't survive a language change _cfg->deleteGroup("Auto Allow"); _cfg->deleteGroup("Auto Deny"); _cfg->setGroup("Auto Allow"); for (TQListViewItem *i = _wcw->_accessList->firstChild(); i; i = i->nextSibling()) { TQStringList al; for (TQListViewItem *j = i->firstChild(); j; j = j->nextSibling()) { if (j->text(2) == i18n("Always Allow")) { al << j->text(1); } } _cfg->writeEntry(i->text(0), al); } _cfg->setGroup("Auto Deny"); for (TQListViewItem *i = _wcw->_accessList->firstChild(); i; i = i->nextSibling()) { TQStringList al; for (TQListViewItem *j = i->firstChild(); j; j = j->nextSibling()) { if (j->text(2) == i18n("Always Deny")) { al << j->text(1); } } _cfg->writeEntry(i->text(0), al); } _cfg->sync(); DCOPRef("kded", "tdewalletd").call("reconfigure()"); emit changed(false); } TQString TDEWalletConfig::handbookSection() const { int index = _wcw->tabWidget2->currentPageIndex(); if (index == 0) return "wallet-preferences"; else if (index == 1) return "wallet-access-control"; else return TQString::null; } void TDEWalletConfig::defaults() { load( true ); } TQString TDEWalletConfig::quickHelp() const { return i18n("This configuration module allows you to configure the TDE wallet system."); } void TDEWalletConfig::contextMenuRequested(TQListViewItem *item, const TQPoint& pos, int col) { Q_UNUSED(col) if (item && item->parent()) { TDEPopupMenu *m = new TDEPopupMenu(this); m->insertTitle(item->parent()->text(0)); m->insertItem(i18n("&Delete"), this, TQ_SLOT(deleteEntry()), Key_Delete); m->popup(pos); } } void TDEWalletConfig::deleteEntry() { TQListViewItem *item = _wcw->_accessList->selectedItem(); if (item) { delete item; emit changed(true); } } #include "konfigurator.moc"