diff options
Diffstat (limited to 'kcontrol/taskbar/kcmtaskbar.cpp')
-rw-r--r-- | kcontrol/taskbar/kcmtaskbar.cpp | 446 |
1 files changed, 446 insertions, 0 deletions
diff --git a/kcontrol/taskbar/kcmtaskbar.cpp b/kcontrol/taskbar/kcmtaskbar.cpp new file mode 100644 index 000000000..80c7bf87e --- /dev/null +++ b/kcontrol/taskbar/kcmtaskbar.cpp @@ -0,0 +1,446 @@ +/* + * Copyright (c) 2000 Kurt Granroth <[email protected]> + * Copyright (c) 2000 Matthias Elter <[email protected]> + * + * 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 + + -------------------------------------------------------------- + Additional changes: + - 2013/10/22 Michele Calgaro + * added support for display mode (Icons and Text, Text only, Icons only) + and removed "Show application icons" + */ + +#include <tqcheckbox.h> +#include <tqcombobox.h> +#include <tqlayout.h> +#include <tqtimer.h> +#include <tqvaluelist.h> +#include <tqfile.h> +#include <tqlabel.h> +#include <tqbuttongroup.h> + +#include <dcopclient.h> + +#include <tdeaboutdata.h> +#include <tdeapplication.h> +#include <tdeconfig.h> +#include <kdialog.h> +#include <kgenericfactory.h> +#include <twin.h> +#include <kcolorbutton.h> +#include <kstandarddirs.h> + +#define protected public +#include "kcmtaskbarui.h" +#undef protected + +#include "taskbarsettings.h" + +#include "kcmtaskbar.h" +#include "kcmtaskbar.moc" + +#define GLOBAL_TASKBAR_CONFIG_FILE_NAME "ktaskbarrc" + +typedef KGenericFactory<TaskbarConfig, TQWidget > TaskBarFactory; +K_EXPORT_COMPONENT_FACTORY (kcm_taskbar, TaskBarFactory("kcmtaskbar") ) + +TaskbarAppearance::TaskbarAppearance(TQString name, + bool drawButtons, + bool haloText, + bool showButtonOnHover, + TaskBarSettings* settingsObject) + : m_name(name), + m_drawButtons(drawButtons), + m_haloText(haloText), + m_showButtonOnHover(showButtonOnHover), + m_settingsObject(NULL) +{ + m_settingsObject = settingsObject; + if (m_settingsObject) + { + m_settingsObject->readConfig(); + } +} + +TaskbarAppearance::TaskbarAppearance() + : m_drawButtons(false), + m_haloText(false), + m_showButtonOnHover(true), + m_settingsObject(NULL) +{ +} + +bool TaskbarAppearance::matchesSettings() const +{ + return m_settingsObject->drawButtons() == m_drawButtons && + m_settingsObject->haloText() == m_haloText && + m_settingsObject->showButtonOnHover() == m_showButtonOnHover; +} + +void TaskbarAppearance::alterSettings() const +{ + m_settingsObject->setDrawButtons(m_drawButtons); + m_settingsObject->setHaloText(m_haloText); + m_settingsObject->setShowButtonOnHover(m_showButtonOnHover); +} + +// These are the strings that are actually stored in the config file. +const TQStringList& TaskbarConfig::actionList() +{ + static TQStringList list( + TQStringList() << I18N_NOOP("Show Task List") << I18N_NOOP("Show Operations Menu") + << I18N_NOOP("Activate, Raise or Minimize Task") + << I18N_NOOP("Activate Task") << I18N_NOOP("Raise Task") + << I18N_NOOP("Lower Task") << I18N_NOOP("Minimize Task") + << I18N_NOOP("Move To Current Desktop") + << I18N_NOOP("Close Task") ); + return list; +} + +// Get a translated version of the above string list. +TQStringList TaskbarConfig::i18nActionList() +{ + TQStringList i18nList; + for( TQStringList::ConstIterator it = actionList().begin(); it != actionList().end(); ++it ) { + i18nList << i18n((*it).latin1()); + } + return i18nList; +} + +// These are the strings that are actually stored in the config file. +const TQStringList& TaskbarConfig::groupModeList() +{ + static TQStringList list( + TQStringList() << I18N_NOOP("Never") << I18N_NOOP("When Taskbar Full") + << I18N_NOOP("Always")); + return list; +} + +// Get a translated version of the above string list. +TQStringList TaskbarConfig::i18nGroupModeList() +{ + TQStringList i18nList; + for( TQStringList::ConstIterator it = groupModeList().begin(); it != groupModeList().end(); ++it ) { + i18nList << i18n((*it).latin1()); + } + return i18nList; +} + +// These are the strings that are actually stored in the config file. +const TQStringList& TaskbarConfig::showTaskStatesList() +{ + static TQStringList list( + TQStringList() << I18N_NOOP("Any") << I18N_NOOP("Only Stopped") + << I18N_NOOP("Only Running")); + return list; +} + +// Get a translated version of the above string list. +TQStringList TaskbarConfig::i18nShowTaskStatesList() +{ + TQStringList i18nList; + for( TQStringList::ConstIterator it = showTaskStatesList().begin(); it != showTaskStatesList().end(); ++it ) { + i18nList << i18n((*it).latin1()); + } + return i18nList; +} + +// These are the strings that are actually stored in the config file. +const TQStringList& TaskbarConfig::displayIconsNText() +{ + static TQStringList list(TQStringList() + << I18N_NOOP("Icons and Text") + << I18N_NOOP("Text only") + << I18N_NOOP("Icons only")); + return list; +} + +// Get a translated version of the above string list. +TQStringList TaskbarConfig::i18ndisplayIconsNText() +{ + TQStringList i18nList; + for (TQStringList::ConstIterator it = displayIconsNText().begin(); it != displayIconsNText().end(); ++it) + { + i18nList << i18n((*it).latin1()); + } + return i18nList; +} + +TaskbarConfig::TaskbarConfig(TQWidget *parent, const char* name, const TQStringList& args) + : TDECModule(TaskBarFactory::instance(), parent, name), + m_settingsObject(NULL) +{ + TQVBoxLayout *layout = new TQVBoxLayout(this, 0, KDialog::spacingHint()); + m_widget = new TaskbarConfigUI(this); + layout->addWidget(m_widget); + + m_configFileName = GLOBAL_TASKBAR_CONFIG_FILE_NAME; + if (args.count() > 0) + { + m_configFileName = args[0]; + m_isGlobalConfig = false; + } + else + { + m_isGlobalConfig = true; + } + connect(m_widget->globalConfigReload, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotReloadConfigurationFromGlobals())); + connect(m_widget->globalConfigEdit, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotEditGlobalConfiguration())); + connect(m_widget->kcfg_UseGlobalSettings, TQT_SIGNAL(clicked()), this, TQT_SLOT(processLockouts())); + connect(m_widget->kcfg_SortByApp, TQT_SIGNAL(clicked()), this, TQT_SLOT(processLockouts())); + + TQFile configFile(locateLocal("config", m_configFileName)); + if (!configFile.exists()) + { + TDEConfig globalConfig(GLOBAL_TASKBAR_CONFIG_FILE_NAME, TRUE, TRUE); + TDEConfig localConfig(m_configFileName); + globalConfig.copyTo(m_configFileName, &localConfig); + localConfig.sync(); + } + + m_settingsObject = new TaskBarSettings(TDESharedConfig::openConfig(m_configFileName)); + m_settingsObject->readConfig(); + + // TODO: Load these from .desktop files? + m_appearances.append(TaskbarAppearance(i18n("Elegant"), false, false, true, m_settingsObject)); + m_appearances.append(TaskbarAppearance(i18n("Classic"), true, false, true, m_settingsObject)); + m_appearances.append(TaskbarAppearance(i18n("For Transparency"), false, true, true, m_settingsObject)); + + for (TaskbarAppearance::List::const_iterator it = m_appearances.constBegin(); + it != m_appearances.constEnd(); + ++it) + { + m_widget->appearance->insertItem((*it).name()); + } + + connect(m_widget->appearance, TQT_SIGNAL(activated(int)), + this, TQT_SLOT(appearanceChanged(int))); + addConfig(m_settingsObject, m_widget); + + setQuickHelp(i18n("<h1>Taskbar</h1> You can configure the taskbar here." + " This includes options such as whether or not the taskbar should show all" + " windows at once or only those on the current desktop." + " You can also configure whether or not the Window List button will be displayed.")); + + TQStringList list = i18nActionList(); + m_widget->kcfg_LeftButtonAction->insertStringList(list); + m_widget->kcfg_MiddleButtonAction->insertStringList(list); + m_widget->kcfg_RightButtonAction->insertStringList(list); + m_widget->kcfg_DisplayIconsNText->insertStringList(i18ndisplayIconsNText()); + m_widget->kcfg_GroupTasks->insertStringList(i18nGroupModeList()); + m_widget->kcfg_ShowTaskStates->insertStringList(i18nShowTaskStatesList()); + + connect(m_widget->kcfg_GroupTasks, TQT_SIGNAL(activated(int)), + this, TQT_SLOT(slotUpdateComboBox())); + connect(m_widget->kcfg_UseCustomColors, TQT_SIGNAL(stateChanged(int)), this, TQT_SLOT(slotUpdateCustomColors())); + + slotUpdateCustomColors(); + updateAppearanceCombo(); + + if (KWin::numberOfDesktops() < 2) + { + m_widget->kcfg_ShowAllWindows->hide(); + m_widget->kcfg_SortByDesktop->hide(); + m_widget->spacer2->changeSize(0, 0); + } + + if (!TQApplication::desktop()->isVirtualDesktop() || + TQApplication::desktop()->numScreens() == 1) // No Ximerama + { + m_widget->showAllScreens->hide(); + } + else + { + m_widget->showAllScreens->show(); + } + connect( m_widget->showAllScreens, TQT_SIGNAL( stateChanged( int )), TQT_SLOT( changed())); + + TDEAboutData *about = new TDEAboutData(I18N_NOOP("kcmtaskbar"), + I18N_NOOP("TDE Taskbar Control Module"), + 0, 0, TDEAboutData::License_GPL, + I18N_NOOP("(c) 2000 - 2001 Matthias Elter")); + + about->addAuthor("Matthias Elter", 0, "[email protected]"); + about->addCredit("Stefan Nikolaus", I18N_NOOP("TDEConfigXT conversion"), + "[email protected]"); + setAboutData(about); + + load(); + processLockouts(); + + TQTimer::singleShot(0, this, TQT_SLOT(notChanged())); +} + +TaskbarConfig::~TaskbarConfig() +{ + if (m_settingsObject) + { + delete m_settingsObject; + } +} + +void TaskbarConfig::slotEditGlobalConfiguration() { + TQByteArray data; + kapp->dcopClient()->send("kicker", "kicker", "reshowTaskBarConfig()", data); +} + +void TaskbarConfig::processLockouts() +{ + m_configFileName = GLOBAL_TASKBAR_CONFIG_FILE_NAME; + if (m_isGlobalConfig) + { + m_widget->globalConfigWarning->show(); + m_widget->localConfigWarning->hide(); + m_widget->globalConfigReload->hide(); + m_widget->globalConfigEdit->hide(); + m_widget->kcfg_UseGlobalSettings->hide(); + } + else { + m_widget->globalConfigWarning->hide(); + m_widget->localConfigWarning->show(); + m_widget->kcfg_UseGlobalSettings->show(); + if (m_widget->kcfg_UseGlobalSettings->isChecked()) { + m_widget->taskbarGroup->hide(); + m_widget->actionsGroup->hide(); + m_widget->globalConfigReload->hide(); + m_widget->globalConfigEdit->show(); + } + else { + m_widget->taskbarGroup->show(); + m_widget->actionsGroup->show(); + // FIXME + // Disable this feature until a method can be found to force the TDECModule to reload its settings from disk after the global settings have been copied! + //m_widget->globalConfigReload->show(); + m_widget->globalConfigReload->hide(); + m_widget->globalConfigEdit->hide(); + } + } + + m_widget->kcfg_AllowDragAndDropReArrange->setEnabled(!m_widget->kcfg_SortByApp->isChecked()); +} + +void TaskbarConfig::slotReloadConfigurationFromGlobals() +{ + TDEConfig globalConfig(GLOBAL_TASKBAR_CONFIG_FILE_NAME, TRUE, TRUE); + TDEConfig localConfig(m_configFileName); + globalConfig.copyTo(m_configFileName, &localConfig); + localConfig.sync(); + m_settingsObject->readConfig(); + load(); + m_widget->kcfg_UseGlobalSettings->setChecked(false); +} + +void TaskbarConfig::slotUpdateCustomColors() +{ + m_widget->kcfg_ActiveTaskTextColor->setEnabled(m_widget->kcfg_UseCustomColors->isChecked()); + m_widget->activeTaskTextColorLabel->setEnabled(m_widget->kcfg_UseCustomColors->isChecked()); + + m_widget->kcfg_InactiveTaskTextColor->setEnabled(m_widget->kcfg_UseCustomColors->isChecked()); + m_widget->inactiveTaskTextColorLabel->setEnabled(m_widget->kcfg_UseCustomColors->isChecked()); + + m_widget->kcfg_TaskBackgroundColor->setEnabled(m_widget->kcfg_UseCustomColors->isChecked()); + m_widget->taskBackgroundColorLabel->setEnabled(m_widget->kcfg_UseCustomColors->isChecked()); +} + +void TaskbarConfig::slotUpdateComboBox() +{ + int pos = TaskBarSettings::ActivateRaiseOrMinimize; + // If grouping is enabled, call "Activate, Raise or Iconify something else, + // though the config key used is the same. + if(m_widget->kcfg_GroupTasks->currentItem() != TaskBarSettings::GroupNever) + { + m_widget->kcfg_LeftButtonAction->changeItem(i18n("Cycle Through Windows"), pos); + m_widget->kcfg_MiddleButtonAction->changeItem(i18n("Cycle Through Windows"), pos); + m_widget->kcfg_RightButtonAction->changeItem(i18n("Cycle Through Windows"), pos); + } + else + { + TQString action = i18nActionList()[pos]; + m_widget->kcfg_LeftButtonAction->changeItem(action,pos); + m_widget->kcfg_MiddleButtonAction->changeItem(action,pos); + m_widget->kcfg_RightButtonAction->changeItem(action,pos); + } +} + +void TaskbarConfig::updateAppearanceCombo() +{ + unsigned int i = 0; + for (TaskbarAppearance::List::const_iterator it = m_appearances.constBegin(); + it != m_appearances.constEnd(); + ++it, ++i) + { + if ((*it).matchesSettings()) + { + break; + } + } + + if (i < m_appearances.count()) + { + m_widget->appearance->setCurrentItem(i); + return; + } + + if (m_widget->appearance->count() == (int)m_appearances.count()) + { + m_widget->appearance->insertItem(i18n("Custom")); + } + + m_widget->appearance->setCurrentItem(m_appearances.count()); +} + +void TaskbarConfig::appearanceChanged(int selected) +{ + if (selected < (int)m_appearances.count()) + { + unmanagedWidgetChangeState(!m_appearances[selected].matchesSettings()); + } +} + +void TaskbarConfig::load() +{ + TDECModule::load(); + slotUpdateComboBox(); + updateAppearanceCombo(); + m_widget->showAllScreens->setChecked(!m_settingsObject->showCurrentScreenOnly()); +} + +void TaskbarConfig::save() +{ + m_settingsObject->setShowCurrentScreenOnly(!m_widget->showAllScreens->isChecked()); + int selectedAppearance = m_widget->appearance->currentItem(); + if (selectedAppearance < (int)m_appearances.count()) + { + m_appearances[selectedAppearance].alterSettings(); + m_settingsObject->writeConfig(); + } + + TDECModule::save(); + + TQByteArray data; + kapp->dcopClient()->emitDCOPSignal("kdeTaskBarConfigChanged()", data); +} + +void TaskbarConfig::defaults() +{ + TDECModule::defaults(); + slotUpdateComboBox(); + updateAppearanceCombo(); +} + +void TaskbarConfig::notChanged() +{ + emit changed(false); +} |