summaryrefslogtreecommitdiffstats
path: root/ksim/themeprefs.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ksim/themeprefs.cpp')
-rw-r--r--ksim/themeprefs.cpp272
1 files changed, 272 insertions, 0 deletions
diff --git a/ksim/themeprefs.cpp b/ksim/themeprefs.cpp
new file mode 100644
index 0000000..3951f61
--- /dev/null
+++ b/ksim/themeprefs.cpp
@@ -0,0 +1,272 @@
+/* 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 "themeprefs.h"
+#include "themeprefs.moc"
+
+#include <qdir.h>
+#include <qlayout.h>
+#include <qtooltip.h>
+#include <qlabel.h>
+#include <qregexp.h>
+
+#include <klocale.h>
+#include <kdebug.h>
+#include <kglobal.h>
+#include <kstandarddirs.h>
+#include <kurllabel.h>
+#include <kapplication.h>
+#include <kfontdialog.h>
+#include <kcombobox.h>
+#include <klistview.h>
+#include <ksqueezedtextlabel.h>
+#include <knuminput.h>
+#include <kseparator.h>
+
+#include <ksimconfig.h>
+#include <common.h>
+#include <themeloader.h>
+
+class ThemeViewItem : public KListViewItem
+{
+ public:
+ ThemeViewItem(QListView *parent, const QString &text,
+ const KURL &url) : KListViewItem(parent, text)
+ {
+ m_url = url;
+ }
+
+ const KURL &url() const { return m_url; }
+
+ private:
+ KURL m_url;
+};
+
+KSim::ThemePrefs::ThemePrefs(QWidget *parent, const char *name)
+ : QWidget(parent, name)
+{
+ m_themeLayout = new QGridLayout(this);
+ m_themeLayout->setSpacing(6);
+
+ m_label = new QLabel(this);
+ m_label->setText(i18n("GKrellm theme support. To use"
+ " gkrellm themes just untar the themes into the folder below"));
+ m_label->setAlignment(QLabel::WordBreak |
+ QLabel::AlignVCenter | QLabel::AlignLeft);
+ m_themeLayout->addMultiCellWidget(m_label, 0, 0, 0, 4);
+
+ QString themeDir(locateLocal("data", "ksim"));
+ themeDir += QString::fromLatin1("/themes");
+
+ m_urlLabel = new KURLLabel(this);
+ m_urlLabel->setText(i18n("Open Konqueror in KSim's theme folder"));
+ m_urlLabel->setURL(QString::fromLatin1("file://") + themeDir);
+ connect(m_urlLabel, SIGNAL(leftClickedURL(const QString &)),
+ this, SLOT(openURL(const QString &)));
+ m_themeLayout->addMultiCellWidget(m_urlLabel, 1, 1, 0, 4);
+
+ m_line = new KSeparator(Horizontal, this);
+ m_themeLayout->addMultiCellWidget(m_line, 2, 2, 0, 4);
+
+ m_authorLabel = new QLabel(this);
+ m_authorLabel->setSizePolicy(QSizePolicy(QSizePolicy::Fixed,
+ QSizePolicy::Minimum));
+ m_authorLabel->setText(i18n("Author:"));
+ m_themeLayout->addMultiCellWidget(m_authorLabel, 3, 3, 0, 0);
+
+ m_authLabel = new KSqueezedTextLabel(this);
+ m_authLabel->setSizePolicy(QSizePolicy(QSizePolicy::Expanding,
+ QSizePolicy::Minimum));
+ m_authLabel->setText(i18n("None"));
+ m_themeLayout->addMultiCellWidget(m_authLabel, 3, 3, 1, 4);
+
+ m_listView = new KListView(this);
+ m_listView->addColumn(i18n("Theme"));
+ m_listView->setFullWidth(true);
+ connect(m_listView, SIGNAL(currentChanged(QListViewItem *)),
+ this, SLOT(selectItem(QListViewItem *)));
+ m_themeLayout->addMultiCellWidget(m_listView, 4, 4, 0, 4);
+
+ m_alternateLabel = new QLabel(this);
+ m_alternateLabel->setText(i18n("Alternate themes:"));
+ m_alternateLabel->setAlignment(AlignVCenter | AlignRight);
+ m_themeLayout->addMultiCellWidget(m_alternateLabel, 5, 5, 0, 1);
+
+ m_altTheme = new KIntSpinBox(this);
+ m_themeLayout->addMultiCellWidget(m_altTheme, 5, 5, 2, 2);
+
+ m_fontLabel = new QLabel(this);
+ m_fontLabel->setText(i18n("Font:"));
+ m_fontLabel->setAlignment(AlignVCenter | AlignRight);
+ m_fontLabel->setSizePolicy(QSizePolicy(QSizePolicy::Minimum,
+ QSizePolicy::Fixed));
+ m_themeLayout->addMultiCellWidget(m_fontLabel, 5, 5, 3, 3);
+
+ m_fontsCombo = new KComboBox(this);
+ m_fontsCombo->insertItem(i18n("Small"));
+ m_fontsCombo->insertItem(i18n("Normal"));
+ m_fontsCombo->insertItem(i18n("Large"));
+ m_fontsCombo->insertItem(i18n("Custom"));
+ m_fontsCombo->insertItem(i18n("Default"));
+ m_fontsCombo->setSizePolicy(QSizePolicy(QSizePolicy::Expanding,
+ QSizePolicy::Fixed));
+ connect(m_fontsCombo, SIGNAL(activated(int)),
+ this, SLOT(showFontDialog(int)));
+ m_themeLayout->addMultiCellWidget(m_fontsCombo, 5, 5, 4, 4);
+
+ QStringList locatedFiles = KGlobal::dirs()->findDirs("data", "ksim/themes");
+ for (QStringList::ConstIterator it = locatedFiles.begin(); it != locatedFiles.end(); ++it)
+ readThemes(*it);
+}
+
+KSim::ThemePrefs::~ThemePrefs()
+{
+}
+
+void KSim::ThemePrefs::saveConfig(KSim::Config *config)
+{
+ config->setThemeName(m_currentTheme.name);
+ config->setThemeAlt(m_altTheme->value());
+ config->setThemeFontItem(m_fontsCombo->currentItem());
+ config->setThemeFont(m_font);
+}
+
+void KSim::ThemePrefs::readConfig(KSim::Config *config)
+{
+ setCurrentTheme(ThemeInfo(KSim::ThemeLoader::currentName(),
+ KURL( KSim::ThemeLoader::currentUrl() ), KSim::ThemeLoader::self().current().alternatives()));
+ m_altTheme->setValue(config->themeAlt());
+ m_fontsCombo->setCurrentItem(config->themeFontItem());
+ m_font = config->themeFont();
+}
+
+void KSim::ThemePrefs::setCurrentTheme(const ThemeInfo &theme)
+{
+ if (theme == m_currentTheme)
+ return;
+
+ m_currentTheme = theme;
+ completed();
+}
+
+void KSim::ThemePrefs::setThemeAlts(int alternatives)
+{
+ m_currentTheme.alternatives = alternatives;
+ m_altTheme->setMaxValue(alternatives);
+ if (m_altTheme->value() > m_altTheme->maxValue())
+ m_altTheme->setValue(m_altTheme->maxValue());
+
+ m_altTheme->setEnabled(alternatives == 0 ? false : true);
+ m_alternateLabel->setEnabled(alternatives == 0 ? false : true);
+}
+
+void KSim::ThemePrefs::openURL(const QString &url)
+{
+ kapp->invokeBrowser(url);
+}
+
+void KSim::ThemePrefs::insertItems(const ThemeInfoList &itemList)
+{
+ ThemeInfoList::ConstIterator it;
+ for (it = itemList.begin(); it != itemList.end(); ++it) {
+ (void) new ThemeViewItem(m_listView, (*it).name, (*it).url);
+ m_themeList.append((*it));
+ }
+
+ completed();
+}
+
+void KSim::ThemePrefs::clear()
+{
+ m_themeList.clear();
+}
+
+void KSim::ThemePrefs::completed()
+{
+ kdDebug(2003) << "Finished listing" << endl;
+
+ for (QListViewItemIterator it(m_listView); it.current(); it++)
+ {
+ if (it.current()->text(0) == m_currentTheme.name)
+ {
+ m_listView->setSelected(it.current(), true);
+ m_listView->setCurrentItem(it.current());
+ m_listView->ensureItemVisible(it.current());
+
+ selectItem( it.current() );
+ break;
+ }
+ }
+}
+
+void KSim::ThemePrefs::selectItem(QListViewItem *item)
+{
+ if (!item)
+ return;
+
+ ThemeViewItem *themeItem = static_cast<ThemeViewItem *>(item);
+ ThemeInfoList::ConstIterator it = qFind(m_themeList.begin(),
+ m_themeList.end(), ThemeInfo(themeItem->text(0), themeItem->url()));
+
+ if (it == m_themeList.end())
+ return;
+
+ m_currentTheme = (*it);
+
+ const KSim::Theme &theme(KSim::ThemeLoader::self().theme(m_currentTheme.url.path()));
+ if (theme.name() != "ksim")
+ KSim::ThemeLoader::self().parseDir(theme.path(), theme.alternatives());
+
+ QToolTip::remove(m_authLabel);
+ if (theme.author().isEmpty()) {
+ m_authLabel->setText(i18n("None Specified"));
+ QToolTip::add(m_authLabel, i18n("None specified"));
+ }
+ else {
+ m_authLabel->setText(theme.author());
+ QToolTip::add(m_authLabel, theme.author());
+ }
+
+ kdDebug( 2003 ) << "theme.alternatives() = " << theme.alternatives() << endl;
+ setThemeAlts(theme.alternatives());
+}
+
+void KSim::ThemePrefs::readThemes(const QString &location)
+{
+ kdDebug(2003) << "readThemes(" << location << ")" << endl;
+ ThemeInfoList themeList;
+ QStringList items(QDir(location).entryList(QDir::Dirs, QDir::IgnoreCase));
+ QStringList::ConstIterator it;
+ for (it = items.begin(); it != items.end(); ++it) {
+ if ((*it) != "." && (*it) != "..")
+ themeList.append(ThemeInfo((*it), KURL(location + (*it) + "/")));
+ }
+
+ insertItems(themeList);
+}
+
+void KSim::ThemePrefs::showFontDialog(int currentItem)
+{
+ if (currentItem == 3) {
+ QFont customFont = m_font;
+ int result = KFontDialog::getFont(customFont);
+ if (result == KFontDialog::Accepted)
+ m_font = customFont;
+ }
+}