summaryrefslogtreecommitdiffstats
path: root/ksim/ksimpref.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ksim/ksimpref.cpp')
-rw-r--r--ksim/ksimpref.cpp260
1 files changed, 260 insertions, 0 deletions
diff --git a/ksim/ksimpref.cpp b/ksim/ksimpref.cpp
new file mode 100644
index 0000000..d8aa12d
--- /dev/null
+++ b/ksim/ksimpref.cpp
@@ -0,0 +1,260 @@
+/* ksim - a system monitor for kde
+ *
+ * Copyright (C) 2001 Robbie Ward <linuxphreak@gmx.co.uk>
+ *
+ * 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 "ksimpref.h"
+#include "ksimpref.moc"
+
+#include "generalprefs.h"
+#include "monitorprefs.h"
+#include "themeprefs.h"
+#include <pluginloader.h>
+#include <ksimconfig.h>
+#include <pluginmodule.h>
+
+#include <klocale.h>
+#include <kiconloader.h>
+#include <kdebug.h>
+#include <kstandarddirs.h>
+#include <kmessagebox.h>
+
+#include <qhbox.h>
+#include <qframe.h>
+
+KSim::ConfigDialog::ConfigDialog(KSim::Config *config,
+ QWidget *parent, const char *name)
+ : KDialogBase(TreeList, i18n("Configure"),
+ Help | Ok | Apply | Close, Ok, parent, name, true, true)
+{
+ resize(466, 363);
+ setShowIconsInTreeList(true);
+ setRootIsDecorated(false);
+
+ m_config = config;
+
+ setFolderIcon(QStringList(' ' + i18n("Plugins")),
+ BarIcon("folder", KIcon::SizeSmall));
+ setFolderIcon(QStringList(' ' + i18n("Miscellaneous")),
+ BarIcon("misc", KIcon::SizeSmall));
+
+ QFrame *monitors = addHBoxPage(' ' + i18n("Monitors"),
+ i18n("Monitors Installed"), BarIcon("ksim", KIcon::SizeSmall));
+ m_monPage = new KSim::MonitorPrefs(monitors);
+
+ QStringList list;
+ list << ' ' + i18n("Miscellaneous") << ' ' + i18n("General");
+ QFrame *general = addHBoxPage(list, i18n("General Options"),
+ SmallIcon("misc"));
+ m_generalPage = new KSim::GeneralPrefs(general);
+ list.clear();
+
+ list << ' ' + i18n("Miscellaneous") << ' ' + i18n("Clock");
+ QFrame *clock = addHBoxPage(list, i18n("Clock Options"),
+ QPixmap(locate("data", "ksim/pics/clock.png")));
+ m_clockPage = new KSim::ClockPrefs(clock);
+ list.clear();
+
+ list << ' ' + i18n("Miscellaneous") << ' ' + i18n("Uptime");
+ QFrame *uptime = addHBoxPage(list, i18n("Uptime Options"),
+ QPixmap(locate("data", "ksim/pics/uptime.png")));
+ m_uptimePage = new KSim::UptimePrefs(uptime);
+ list.clear();
+
+ list << ' ' + i18n("Miscellaneous") << ' ' + i18n("Memory");
+ QFrame *memory = addHBoxPage(list, i18n("Memory Options"),
+ SmallIcon("memory"));
+ m_memoryPage = new KSim::MemoryPrefs(memory);
+ list.clear();
+
+ list << ' ' + i18n("Miscellaneous") << ' ' + i18n("Swap");
+ QFrame *swap = addHBoxPage(list, i18n("Swap Options"),
+ SmallIcon("hdd_unmount"));
+ m_swapPage = new KSim::SwapPrefs(swap);
+
+ QFrame *theme = addHBoxPage(' ' + i18n("Themes"),
+ i18n("Theme Selector"), BarIcon("folder_image", KIcon::SizeSmall));
+ m_themePage = new KSim::ThemePrefs(theme);
+
+ connect(this, SIGNAL(applyClicked()), SLOT(savePrefs()));
+ connect(this, SIGNAL(okClicked()), SLOT(closePrefs()));
+ connect(this, SIGNAL(closeClicked()), SLOT(loadPluginConfig()));
+ connect(parent, SIGNAL(reload()), SLOT(reload()));
+
+ KSim::PluginList::ConstIterator it;
+ const KSim::PluginList &pluginList = KSim::PluginLoader::self().pluginList();
+ for (it = pluginList.begin(); it != pluginList.end(); ++it)
+ createPage((*it));
+
+ readConfig();
+}
+
+KSim::ConfigDialog::~ConfigDialog()
+{
+ ChangedPluginList::ConstIterator it;
+ for (it = m_currentPlugins.begin(); it != m_currentPlugins.end(); ++it) {
+ if ((*it).isEnabled())
+ removePage((*it).libName());
+ }
+}
+
+void KSim::ConfigDialog::reload()
+{
+ enableButtons();
+}
+
+void KSim::ConfigDialog::removePage(const QCString &name)
+{
+ const KSim::Plugin &plugin = KSim::PluginLoader::self().find(name);
+ if (plugin.isNull() || !plugin.configPage()) {
+ KMessageBox::sorry(0, i18n("Failed to remove %1's config page due to the "
+ "plugin not being loaded or the config page has not been created").arg(name));
+ return;
+ }
+
+ QWidget *frame = plugin.configPage()->parentWidget();
+ // reparent the widget if the parent is not null
+ if (frame) {
+ plugin.configPage()->hide();
+ plugin.configPage()->reparent(0, QPoint(0, 0), false);
+ // delete the frame so it removes the page from the config dialog
+ delete frame;
+ kdDebug(2003) << "removing " << name << " from KSimPref" << endl;
+ }
+}
+
+void KSim::ConfigDialog::createPage(const QCString &name)
+{
+ const KSim::Plugin &plugin = KSim::PluginLoader::self().find(name);
+ createPage(plugin);
+}
+
+void KSim::ConfigDialog::createPage(const KSim::Plugin &plugin)
+{
+ if (plugin.isNull() || !plugin.configPage()) {
+ KMessageBox::sorry(0, i18n("Failed to add %1's config page due to the plugin"
+ " not being loaded or the config page has not been created")
+ .arg(plugin.libName()));
+ return;
+ }
+
+ kdDebug(2003) << "adding " << plugin.libName() << " to KSimPref" << endl;
+
+ QStringList list;
+ list << ' ' + i18n("Plugins") << ' ' + plugin.name();
+ QFrame *pluginFrame = addHBoxPage(list, i18n("%1 Options").arg(plugin.name()),
+ plugin.icon());
+
+ plugin.configPage()->reparent(pluginFrame, QPoint(0, 0), true);
+ plugin.configPage()->readConfig();
+
+// TODO: implement this correctly one day
+// connect (info.configPage(), SIGNAL(pageChanged()),
+// this, SLOT(enableButtons()));
+}
+
+void KSim::ConfigDialog::savePrefs()
+{
+ saveConfig(true);
+}
+
+void KSim::ConfigDialog::saveConfig(bool reload)
+{
+ disableButtons();
+
+ m_monPage->saveConfig(m_config);
+ m_generalPage->saveConfig(m_config);
+ m_clockPage->saveConfig(m_config);
+ m_uptimePage->saveConfig(m_config);
+ m_memoryPage->saveConfig(m_config);
+ m_swapPage->saveConfig(m_config);
+ m_themePage->saveConfig(m_config);
+
+ ChangedPluginList changedPlugins;
+ for (QListViewItemIterator it(m_monPage); it.current(); ++it) {
+ QCheckListItem *item = static_cast<QCheckListItem *>(it.current());
+ KSim::PluginInfo info = KSim::PluginLoader::self().findPluginInfo(item->text(0),
+ KSim::PluginLoader::Name);
+ changedPlugins.append(ChangedPlugin(item->isOn(),
+ info.libName(true), item->text(0), info.location(),
+ findPlugin(item->text(0)).isEnabled()));
+
+ KSim::PluginLoader::self().find(info).setEnabled(item->isOn());
+ }
+
+ m_currentPlugins = changedPlugins;
+ emit reparse(reload, changedPlugins);
+}
+
+void KSim::ConfigDialog::readConfig()
+{
+ m_monPage->readConfig(m_config);
+ m_generalPage->readConfig(m_config);
+ m_clockPage->readConfig(m_config);
+ m_uptimePage->readConfig(m_config);
+ m_memoryPage->readConfig(m_config);
+ m_swapPage->readConfig(m_config);
+ m_themePage->readConfig(m_config);
+
+ m_currentPlugins.clear();
+ for (QListViewItemIterator it(m_monPage); it.current(); ++it) {
+ QCheckListItem *item = static_cast<QCheckListItem *>(it.current());
+ KSim::PluginInfo info = KSim::PluginLoader::self().findPluginInfo(item->text(0),
+ KSim::PluginLoader::Name);
+ m_currentPlugins.append(ChangedPlugin(item->isOn(),
+ info.libName(true), item->text(0), info.location()));
+ }
+}
+
+void KSim::ConfigDialog::closePrefs()
+{
+ saveConfig(false);
+ close();
+}
+
+void KSim::ConfigDialog::loadPluginConfig()
+{
+ const KSim::PluginList &list = KSim::PluginLoader::self().pluginList();
+ KSim::PluginList::ConstIterator it;
+ for (it = list.begin(); it != list.end(); ++it) {
+ if ((*it).configPage())
+ (*it).configPage()->readConfig();
+ }
+}
+
+void KSim::ConfigDialog::enableButtons()
+{
+ enableButtonApply(true);
+ enableButtonOK(true);
+}
+
+void KSim::ConfigDialog::disableButtons()
+{
+ enableButtonApply(false);
+ enableButtonOK(false);
+}
+
+const KSim::ChangedPlugin &KSim::ConfigDialog::findPlugin(const QString &name) const
+{
+ ChangedPluginList::ConstIterator it;
+ for (it = m_currentPlugins.begin(); it != m_currentPlugins.end(); ++it) {
+ if ((*it).name() == name)
+ return (*it);
+ }
+
+ return *m_currentPlugins.end();
+}