summaryrefslogtreecommitdiffstats
path: root/kcontrol/kicker/menutab_impl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kcontrol/kicker/menutab_impl.cpp')
-rw-r--r--kcontrol/kicker/menutab_impl.cpp339
1 files changed, 339 insertions, 0 deletions
diff --git a/kcontrol/kicker/menutab_impl.cpp b/kcontrol/kicker/menutab_impl.cpp
new file mode 100644
index 000000000..571365a55
--- /dev/null
+++ b/kcontrol/kicker/menutab_impl.cpp
@@ -0,0 +1,339 @@
+/*
+ * Copyright (c) 2000 Matthias Elter <elter@kde.org>
+ *
+ * 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
+ */
+
+#include <tqcheckbox.h>
+#include <tqgroupbox.h>
+#include <tqdir.h>
+#include <tqlabel.h>
+#include <tqlayout.h>
+#include <tqpushbutton.h>
+#include <tqradiobutton.h>
+#include <tqcombobox.h>
+#include <tqbuttongroup.h>
+#include <tqlineedit.h>
+
+#include <dcopref.h>
+#include <tdeapplication.h>
+#include <kdebug.h>
+#include <kdesktopfile.h>
+#include <kiconloader.h>
+#include <tdelistview.h>
+#include <tdelocale.h>
+#include <tdemessagebox.h>
+#include <knuminput.h>
+#include <kstandarddirs.h>
+#include <tdefontrequester.h>
+
+#include <kicondialog.h>
+#include <kiconloader.h>
+
+#include "main.h"
+
+#include "kickerSettings.h"
+
+#include "menutab_impl.h"
+#include "menutab_impl.moc"
+
+kSubMenuItem::kSubMenuItem(TQListView* parent,
+ const TQString& visibleName,
+ const TQString& desktopFile,
+ const TQPixmap& icon,
+ bool checked)
+ : TQCheckListItem(parent, visibleName, TQCheckListItem::CheckBox),
+ m_desktopFile(desktopFile)
+{
+ setPixmap(0, icon);
+ setOn(checked);
+}
+
+TQString kSubMenuItem::desktopFile()
+{
+ return m_desktopFile;
+}
+
+void kSubMenuItem::stateChange(bool state)
+{
+ emit toggled(state);
+}
+
+MenuTab::MenuTab( TQWidget *parent, const char* name )
+ : MenuTabBase (parent, name),
+ m_bookmarkMenu(0),
+ m_quickBrowserMenu(0),
+ m_kmenu_button_changed(false)
+{
+ // connections
+ connect(m_editKMenuButton, TQT_SIGNAL(clicked()), TQT_SLOT(launchMenuEditor()));
+ connect(btnCustomKMenuIcon, TQT_SIGNAL(clicked()), TQT_SLOT(launchIconEditor()));
+ connect(kcfg_KMenuText, TQT_SIGNAL(textChanged(const TQString&)), TQT_SLOT(kmenuChanged()));
+ connect(kcfg_ShowKMenuText, TQT_SIGNAL(toggled(bool)), TQT_SLOT(kmenuChanged()));
+ //connect(kcfg_ButtonFont, TQT_SIGNAL(fontSelected(const TQFont &)), TQT_SLOT(kmenuChanged()));
+ connect(maxrecentdocs, TQT_SIGNAL(valueChanged(int)), this, TQT_SLOT(kmenuChanged()));
+
+ TDEIconLoader * ldr = TDEGlobal::iconLoader();
+ TQPixmap kmenu_icon;
+ m_kmenu_icon = KickerSettings::customKMenuIcon();
+ if (m_kmenu_icon.isNull() == true) {
+ m_kmenu_icon = TQString("kmenu");
+ }
+ kmenu_icon = ldr->loadIcon(m_kmenu_icon, TDEIcon::Small, TDEIcon::SizeSmall);
+ btnCustomKMenuIcon->setPixmap(kmenu_icon);
+
+ TDEConfig *config;
+ config = new TDEConfig(TQString::fromLatin1("kdeglobals"), false, false);
+ config->setGroup(TQString::fromLatin1("RecentDocuments"));
+ maxrecentdocs->setValue(config->readNumEntry(TQString::fromLatin1("MaxEntries"), 10));
+
+ m_browserGroupLayout->setColStretch( 1, 1 );
+ m_pRecentOrderGroupLayout->setColStretch( 1, 1 );
+}
+
+void MenuTab::load()
+{
+ load( false );
+}
+
+void MenuTab::load( bool useDefaults )
+{
+ TDESharedConfig::Ptr c = TDESharedConfig::openConfig(KickerConfig::the()->configName());
+
+ c->setReadDefaults( useDefaults );
+
+ c->setGroup("menus");
+
+ m_subMenus->clear();
+
+ // show the bookmark menu?
+ m_bookmarkMenu = new kSubMenuItem(m_subMenus,
+ i18n("Bookmarks"),
+ TQString::null,
+ SmallIcon("bookmark"),
+ c->readBoolEntry("UseBookmarks", false));
+ connect(m_bookmarkMenu, TQT_SIGNAL(toggled(bool)), TQT_SIGNAL(changed()));
+
+ // show the quick menus menu?
+ m_quickBrowserMenu = new kSubMenuItem(m_subMenus,
+ i18n("Quick Browser"),
+ TQString::null,
+ SmallIcon("kdisknav"),
+ c->readBoolEntry("UseBrowser", false));
+ connect(m_quickBrowserMenu, TQT_SIGNAL(toggled(bool)), TQT_SIGNAL(changed()));
+
+ TQStringList ext_default;
+ ext_default << "prefmenu.desktop" << "systemmenu.desktop";
+ TQStringList ext = c->readListEntry("Extensions", ext_default);
+ TQStringList dirs = TDEGlobal::dirs()->findDirs("data", "kicker/menuext");
+ kSubMenuItem* menuItem(0);
+ for (TQStringList::ConstIterator dit=dirs.begin(); dit!=dirs.end(); ++dit)
+ {
+ TQDir d(*dit, "*.desktop");
+ TQStringList av = d.entryList();
+ for (TQStringList::ConstIterator it=av.begin(); it!=av.end(); ++it)
+ {
+ KDesktopFile df(d.absFilePath(*it), true);
+ menuItem = new kSubMenuItem(m_subMenus,
+ df.readName(),
+ *it,
+ SmallIcon(df.readIcon()),
+ tqFind(ext.begin(), ext.end(), *it) != ext.end());
+ connect(menuItem, TQT_SIGNAL(toggled(bool)), TQT_SIGNAL(changed()));
+ }
+ }
+
+ c->setGroup("General");
+ m_comboMenuStyle->setCurrentItem( c->readBoolEntry("LegacyKMenu", true) ? 1 : 0 );
+ m_openOnHover->setChecked( c->readBoolEntry("OpenOnHover", true) );
+ menuStyleChanged();
+
+ connect(m_comboMenuStyle, TQT_SIGNAL(activated(int)), TQT_SIGNAL(changed()));
+ connect(m_comboMenuStyle, TQT_SIGNAL(activated(int)), TQT_SLOT(menuStyleChanged()));
+ connect(m_openOnHover, TQT_SIGNAL(clicked()), TQT_SIGNAL(changed()));
+
+ m_showFrequent->setChecked(true);
+
+ if ( useDefaults )
+ emit changed();
+}
+
+void MenuTab::menuStyleChanged()
+{
+ // Classic K Menu
+ if (m_comboMenuStyle->currentItem()==1) {
+ m_openOnHover->setEnabled(false);
+ m_subMenus->setEnabled(true);
+ kcfg_UseSidePixmap->setEnabled(true);
+ kcfg_UseTooltip->setEnabled(true);
+ kcfg_MenuEntryFormat->setEnabled(true);
+ kcfg_RecentVsOften->setEnabled(true);
+ m_showFrequent->setEnabled(true);
+ kcfg_UseSearchBar->setEnabled(true);
+ kcfg_MaxEntries2->setEnabled(true);
+ maxrecentdocs->setEnabled(true);
+ kcfg_NumVisibleEntries->setEnabled(true);
+ }
+
+ // Kickoff Menu
+ else {
+ m_openOnHover->setEnabled(true);
+ m_subMenus->setEnabled(false);
+ kcfg_UseSidePixmap->setEnabled(false);
+ kcfg_UseTooltip->setEnabled(false);
+ kcfg_MenuEntryFormat->setEnabled(false);
+ kcfg_RecentVsOften->setEnabled(false);
+ m_showFrequent->setEnabled(false);
+ kcfg_UseSearchBar->setEnabled(false);
+ kcfg_MaxEntries2->setEnabled(false);
+ maxrecentdocs->setEnabled(false);
+ kcfg_NumVisibleEntries->setEnabled(false);
+ }
+}
+
+void MenuTab::save()
+{
+ bool forceRestart = false;
+
+ TDESharedConfig::Ptr c = TDESharedConfig::openConfig(KickerConfig::the()->configName());
+
+ c->setGroup("menus");
+
+ TQStringList ext;
+ TQListViewItem *item(0);
+ for (item = m_subMenus->firstChild(); item; item = item->nextSibling())
+ {
+ bool isOn = static_cast<kSubMenuItem*>(item)->isOn();
+ if (item == m_bookmarkMenu)
+ {
+ c->writeEntry("UseBookmarks", isOn);
+ }
+ else if (item == m_quickBrowserMenu)
+ {
+ c->writeEntry("UseBrowser", isOn);
+ }
+ else if (isOn)
+ {
+ ext << static_cast<kSubMenuItem*>(item)->desktopFile();
+ }
+ }
+ c->writeEntry("Extensions", ext);
+
+ c->setGroup("General");
+ bool kmenusetting = m_comboMenuStyle->currentItem()==1;
+ bool oldkmenusetting = c->readBoolEntry("LegacyKMenu", true);
+ c->writeEntry("LegacyKMenu", kmenusetting);
+ c->writeEntry("OpenOnHover", m_openOnHover->isChecked());
+ c->sync();
+
+ c->setGroup("KMenu");
+ bool oldmenutextenabledsetting = c->readBoolEntry("ShowText", true);
+ TQString oldmenutextsetting = c->readEntry("Text", "");
+
+ c->setGroup("buttons");
+ TQFont oldmenufontsetting = c->readFontEntry("Font");
+
+ if (kmenusetting != oldkmenusetting) {
+ forceRestart = true;
+ }
+ if (kcfg_ShowKMenuText->isChecked() != oldmenutextenabledsetting) {
+ forceRestart = true;
+ }
+ if (kcfg_KMenuText->text() != oldmenutextsetting) {
+ forceRestart = true;
+ }
+ if (kcfg_ButtonFont->font() != oldmenufontsetting) {
+ forceRestart = true;
+ }
+
+ c->setGroup("KMenu");
+ bool sidepixmapsetting = kcfg_UseSidePixmap->isChecked();
+ bool oldsidepixmapsetting = c->readBoolEntry("UseSidePixmap", true);
+
+ if (sidepixmapsetting != oldsidepixmapsetting) {
+ forceRestart = true;
+ }
+
+ bool tooltipsetting = kcfg_UseTooltip->isChecked();
+ bool oldtooltipsetting = c->readBoolEntry("UseTooltip", false);
+
+ if (tooltipsetting != oldtooltipsetting) {
+ forceRestart = true;
+ }
+
+ // Save KMenu settings
+ c->setGroup("KMenu");
+ c->writeEntry("CustomIcon", m_kmenu_icon);
+ c->sync();
+
+ // Save recent documents
+ TDEConfig *config;
+ config = new TDEConfig(TQString::fromLatin1("kdeglobals"), false, false);
+ config->setGroup(TQString::fromLatin1("RecentDocuments"));
+ config->writeEntry("MaxEntries", maxrecentdocs->value());
+ config->sync();
+
+ if (m_kmenu_button_changed == true) {
+ forceRestart = true;
+ }
+
+ if (forceRestart) {
+ DCOPRef ("kicker", "default").call("restart()");
+ }
+}
+
+void MenuTab::defaults()
+{
+ load( true );
+}
+
+void MenuTab::launchMenuEditor()
+{
+ if ( TDEApplication::startServiceByDesktopName( "kmenuedit",
+ TQString::null /*url*/,
+ 0 /*error*/,
+ 0 /*dcopservice*/,
+ 0 /*pid*/,
+ "" /*startup_id*/,
+ true /*nowait*/ ) != 0 )
+ {
+ KMessageBox::error(this,
+ i18n("The TDE menu editor (kmenuedit) could not be launched.\n"
+ "Perhaps it is not installed or not in your path."),
+ i18n("Application Missing"));
+ }
+}
+
+void MenuTab::launchIconEditor()
+{
+ TDEIconDialog dlg(this);
+ TQString newIcon = dlg.selectIcon(TDEIcon::Small, TDEIcon::Application);
+ if (newIcon.isEmpty())
+ return;
+
+ m_kmenu_icon = newIcon;
+ TDEIconLoader * ldr = TDEGlobal::iconLoader();
+ TQPixmap kmenu_icon;
+ kmenu_icon = ldr->loadIcon(m_kmenu_icon, TDEIcon::Small, TDEIcon::SizeSmall);
+ btnCustomKMenuIcon->setPixmap(kmenu_icon);
+ m_kmenu_button_changed = true;
+
+ emit changed();
+}
+
+void MenuTab::kmenuChanged()
+{
+ //m_kmenu_button_changed = true;
+ emit changed();
+}