You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdebase/kcontrol/kicker/menutab_impl.cpp

352 lines
11 KiB

/*
* 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()));
// FIXME
// When top pixmap support is ready for end-user visibility, replace
// the separate top/side checkboxes with either a drop down or radio buttons
kcfg_UseTopPixmap->hide();
TDEIconLoader * ldr = TDEGlobal::iconLoader();
m_kmenu_icon = KickerSettings::customKMenuIcon();
if (m_kmenu_icon.isNull() == true) {
m_kmenu_icon = TQString("kmenu");
}
TQIconSet kmenu_icon = ldr->loadIconSet(m_kmenu_icon, TDEIcon::Small, TDEIcon::SizeSmall);
btnCustomKMenuIcon->setIconSet(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_UseTopPixmap->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_UseTopPixmap->setEnabled(true);
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 toppixmapsetting = kcfg_UseTopPixmap->isChecked();
bool oldtoppixmapsetting = c->readBoolEntry("UseTopPixmap", true);
if (toppixmapsetting != oldtoppixmapsetting) {
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();
TQIconSet kmenu_icon = ldr->loadIconSet(m_kmenu_icon, TDEIcon::Small, TDEIcon::SizeSmall);
btnCustomKMenuIcon->setIconSet(kmenu_icon);
m_kmenu_button_changed = true;
emit changed();
}
void MenuTab::kmenuChanged()
{
//m_kmenu_button_changed = true;
emit changed();
}