summaryrefslogtreecommitdiffstats
path: root/src/settings.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/settings.cpp')
-rw-r--r--src/settings.cpp381
1 files changed, 381 insertions, 0 deletions
diff --git a/src/settings.cpp b/src/settings.cpp
new file mode 100644
index 0000000..342bb81
--- /dev/null
+++ b/src/settings.cpp
@@ -0,0 +1,381 @@
+/***************************************************************************
+ * Copyright (C) 2005 by Danny Kukawka *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of version 2 of the GNU General Public License *
+ * as published by the Free Software Foundation. *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+/*!
+ * \file settings.cpp
+ * \brief In this file can be found the settings ( read ) related code.
+ * \author Danny Kukawka, <[email protected]>, <[email protected]>
+ * \date 2005
+ */
+
+// KDE Header
+#include <klocale.h>
+
+// QT Header
+
+// own headers
+#include "settings.h"
+
+/*! This is the default constructor of the class Settings. */
+Settings::Settings()
+{
+ kconfig = new KConfig("kpowersaverc", true );
+ kde = new KDE_Settings();
+ load_kde();
+ load_general_settings();
+}
+
+/*! This is the default destructor of the class Settings. */
+Settings::~Settings()
+{
+ delete kconfig;
+ delete kde;
+}
+
+
+/*!
+ * Loads the scheme settings from kpowersaverc and fills the related variables.
+ * \param schemeName QString with the name (realname not i18n() version) of the
+ * scheme which setting should be load. If the scheme could not
+ * be loaded, this function try to load "default-scheme"
+ * \return the result of the load
+ * \retval true if the settings could be loaded
+ * \retval false if there was no group named like schemeName or named "default-scheme"
+ */
+bool Settings::load_scheme_settings(QString schemeName){
+
+ kconfig->reparseConfiguration();
+ bool setToDefault = false;
+
+ if( schemeName == "Performance" || schemeName == i18n("Performance"))
+ schemeName = "Performance";
+ else if( schemeName == "Powersave" || schemeName == i18n("Powersave"))
+ schemeName = "Powersave";
+ else if( schemeName == "Presentation" || schemeName == i18n("Presentation"))
+ schemeName = "Presentation";
+ else if( schemeName == "Acoustic" || schemeName == i18n("Acoustic"))
+ schemeName = "Acoustic";
+
+ if(kconfig->hasGroup(schemeName) || kconfig->hasGroup("default-scheme") ){
+ if(kconfig->hasGroup(schemeName)) kconfig->setGroup(schemeName);
+ else {
+ // fallback to 'default-scheme'
+ kconfig->setGroup("default-scheme");
+ schemeName = "default-scheme";
+ setToDefault = true;
+ }
+ currentScheme = schemeName;
+
+ specSsSettings = kconfig->readBoolEntry("specSsSettings",false);
+ disableSs = kconfig->readBoolEntry("disableSs",false);
+ blankSs = kconfig->readBoolEntry("blankSs",false);
+ specPMSettings = kconfig->readBoolEntry("specPMSettings",false);
+ disableDPMS = kconfig->readBoolEntry("disableDPMS",false);
+
+ int i_standby = kconfig->readNumEntry("standbyAfter", -1);
+ if (i_standby >= 0) standbyAfter = i_standby;
+ else {
+ kconfig->setGroup("default-scheme");
+ i_standby = kconfig->readNumEntry("standbyAfter", -1);
+ if(i_standby >= 0) {
+ standbyAfter = i_standby;
+ }
+ else standbyAfter = 0;
+ // reset the group
+ kconfig->setGroup(schemeName);
+ }
+
+ int i_suspend = kconfig->readNumEntry("suspendAfter", -1);
+ if (i_suspend >= 0) suspendAfter = i_suspend;
+ else {
+ kconfig->setGroup("default-scheme");
+ i_suspend = kconfig->readNumEntry("suspendAfter", -1);
+ if(i_suspend >= 0) {
+ suspendAfter = i_suspend;
+ }
+ else suspendAfter = 0;
+ // reset the group
+ kconfig->setGroup(schemeName);
+ }
+
+ int i_poweroff = kconfig->readNumEntry("powerOffAfter", -1);
+ if (i_poweroff >= 0) powerOffAfter = i_poweroff;
+ else {
+ kconfig->setGroup("default-scheme");
+ i_poweroff = kconfig->readNumEntry("powerOffAfter", -1);
+ if(i_poweroff >= 0) {
+ powerOffAfter = i_poweroff;
+ }
+ else powerOffAfter = 0;
+ // reset the group
+ kconfig->setGroup(schemeName);
+ }
+
+ brightness = kconfig->readBoolEntry("enableBrightness",false);
+ brightnessValue = kconfig->readNumEntry("brightnessPercent", -1);
+ if (brightnessValue == -1) {
+ kconfig->setGroup("default-scheme");
+ brightnessValue = kconfig->readNumEntry("brightnessPercent", 100);
+ // reset the group
+ kconfig->setGroup(schemeName);
+ }
+
+ int i_autoInactiveActionAfter = kconfig->readNumEntry("autoInactiveActionAfter", -1);
+ if (i_autoInactiveActionAfter >= 0) autoInactiveActionAfter = i_autoInactiveActionAfter;
+ else {
+ kconfig->setGroup("default-scheme");
+ i_autoInactiveActionAfter = kconfig->readNumEntry("autoInactiveActionAfter", -1);
+ if(i_autoInactiveActionAfter >= 0) {
+ autoInactiveActionAfter = i_autoInactiveActionAfter;
+ }
+ else autoInactiveActionAfter = 0;
+ // reset the group
+ kconfig->setGroup(schemeName);
+ }
+
+ QString _autoInactiveAction = kconfig->readEntry("autoInactiveAction", "NULL");
+ if( _autoInactiveAction != "NULL") {
+ autoInactiveAction = _autoInactiveAction;
+ }
+ else {
+ kconfig->setGroup("default-scheme");
+ _autoInactiveAction = kconfig->readEntry("autoInactiveAction", "NULL");
+ if(_autoInactiveAction != "NULL") autoInactiveAction = _autoInactiveAction;
+ else autoInactiveAction = "_NONE_";
+ // reset the group
+ kconfig->setGroup(schemeName);
+ }
+
+ autoSuspend = kconfig->readBoolEntry("autoSuspend",false);
+ autoInactiveSBlistEnabled = kconfig->readBoolEntry("autoInactiveSchemeBlacklistEnabled",false);
+ autoInactiveSBlist = kconfig->readListEntry("autoInactiveSchemeBlacklist", ',');
+
+ int i_autoDimmAfter = kconfig->readNumEntry("autoDimmAfter", -1);
+ if (i_autoDimmAfter >= 0) autoDimmAfter = i_autoDimmAfter;
+ else {
+ kconfig->setGroup("default-scheme");
+ i_autoDimmAfter = kconfig->readNumEntry("autoDimmAfter", -1);
+ if(i_autoDimmAfter >= 0) {
+ autoDimmAfter = i_autoDimmAfter;
+ }
+ else autoDimmAfter = 0;
+ // reset the group
+ kconfig->setGroup(schemeName);
+ }
+
+ int i_autoDimmTo = kconfig->readNumEntry("autoDimmTo", -1);
+ if (i_autoDimmTo >= 0) autoDimmTo = i_autoDimmTo;
+ else {
+ kconfig->setGroup("default-scheme");
+ i_autoDimmTo = kconfig->readNumEntry("autoDimmAfter", -1);
+ if(i_autoDimmTo >= 0) {
+ autoDimmTo = i_autoDimmTo;
+ }
+ else autoDimmTo = 0;
+ // reset the group
+ kconfig->setGroup(schemeName);
+ }
+
+ autoDimm = kconfig->readBoolEntry("autoDimm",false);
+ autoDimmSBlistEnabled = kconfig->readBoolEntry("autoDimmSchemeBlacklistEnabled",false);
+ autoDimmSBlist = kconfig->readListEntry("autoDimmSchemeBlacklist", ',');
+
+ disableNotifications = kconfig->readBoolEntry("disableNotifications",false);
+
+ QString _cpufreqpolicy = kconfig->readEntry("cpuFreqPolicy", "NULL");
+ if( _cpufreqpolicy == "NULL") {
+ kconfig->setGroup("default-scheme");
+ _cpufreqpolicy = kconfig->readEntry("cpuFreqPolicy", "NULL");
+ // reset the group
+ kconfig->setGroup(schemeName);
+ }
+ if (_cpufreqpolicy.startsWith("DYNAMIC")) {
+ cpuFreqPolicy = DYNAMIC;
+ } else if (_cpufreqpolicy.startsWith("PERFORMANCE")) {
+ cpuFreqPolicy = PERFORMANCE;
+ } else if (_cpufreqpolicy.startsWith("POWERSAVE")) {
+ cpuFreqPolicy = POWERSAVE;
+ } else {
+ // set as default
+ cpuFreqPolicy = DYNAMIC;
+ }
+
+ cpuFreqDynamicPerformance = kconfig->readNumEntry("cpuFreqDynamicPerformance", -1);
+ if( cpuFreqDynamicPerformance == -1) {
+ kconfig->setGroup("default-scheme");
+ cpuFreqDynamicPerformance = kconfig->readNumEntry("cpuFreqDynamicPerformance", 51);
+ // reset the group
+ kconfig->setGroup(schemeName);
+ }
+
+ return true;
+ }
+ else return false;
+}
+
+
+/*!
+ * Loads the general settings from kpowersaverc and fills the related variables.
+ * \return the result of the load
+ * \retval true if the settings could be loaded
+ * \retval false if there was no group named 'General'
+ */
+bool Settings::load_general_settings(){
+
+ kconfig->reparseConfiguration();
+
+ if(kconfig->hasGroup("General")) {
+ kconfig->setGroup("General");
+
+ lockOnSuspend = kconfig->readBoolEntry("lockOnSuspend",true);
+ lockOnLidClose = kconfig->readBoolEntry("lockOnLidClose",true);
+ autostart = kconfig->readBoolEntry("Autostart",false);
+ autostartNeverAsk = kconfig->readBoolEntry("AutostartNeverAsk",false);
+ psMsgAsPassivePopup = kconfig->readBoolEntry("psMsgAsPassivePopup",false);
+ forceDpmsOffOnLidClose = kconfig->readBoolEntry("forceDpmsOffOnLidClose",false);
+ unmountExternalOnSuspend = kconfig->readBoolEntry("unmountExternalOnSuspend",true);
+ callSetPowerSaveOnAC = kconfig->readBoolEntry("callSetPowerSaveOnAC",true);
+
+ lockmethod = kconfig->readEntry("lockMethod", "NULL");
+ if(lockmethod == "NULL") lockmethod = "automatic";
+
+ autoInactiveGBlist = kconfig->readListEntry("autoInactiveBlacklist", ',');
+ autoDimmGBlist = kconfig->readListEntry("autoDimmBlacklist", ',');
+
+ autoSuspendCountdown = kconfig->readBoolEntry("AutoSuspendCountdown", false);
+ autoSuspendCountdownTimeout = kconfig->readNumEntry("AutoSuspendCountdownTimeOut", 30);
+
+ timeToFakeKeyAfterLock = kconfig->readNumEntry("timeToFakeKeyAfterLock", 5000);
+
+ schemes = kconfig->readListEntry("schemes", ',');
+ ac_scheme = kconfig->readEntry("ac_scheme", "Performance");
+ battery_scheme = kconfig->readEntry("battery_scheme", "Powersave");
+
+ // Read battery levels and related actions
+ batteryWarningLevel = kconfig->readNumEntry("batteryWarning", 12);
+ batteryLowLevel = kconfig->readNumEntry("batteryLow", 7);
+ batteryCriticalLevel = kconfig->readNumEntry("batteryCritical", 2);
+
+ batteryWarningLevelAction = mapActionToType(kconfig->readEntry("batteryWarningAction",""));
+ if (batteryWarningLevelAction == BRIGHTNESS) {
+ batteryWarningLevelActionValue = kconfig->readNumEntry("batteryWarningActionValue", -1);
+ }
+ batteryLowLevelAction = mapActionToType(kconfig->readEntry("batteryLowAction",""));
+ if (batteryLowLevelAction == BRIGHTNESS) {
+ batteryLowLevelActionValue = kconfig->readNumEntry("batteryLowActionValue", -1);
+ }
+ batteryCriticalLevelAction = mapActionToType(kconfig->readEntry("batteryCriticalAction",""));
+ if (batteryCriticalLevelAction == BRIGHTNESS) {
+ batteryCriticalLevelActionValue = kconfig->readNumEntry("batteryCriticalActionValue", -1);
+ }
+
+ lidcloseAction = mapActionToType(kconfig->readEntry("ActionOnLidClose",""));
+ if (lidcloseAction == BRIGHTNESS) {
+ lidcloseActionValue = kconfig->readNumEntry("ActionOnLidCloseValue", -1);
+ }
+ // avoid logout dialog since this make no sence with lidclose
+ if (lidcloseAction == LOGOUT_DIALOG) {
+ lidcloseAction = NONE;
+ }
+
+ powerButtonAction = mapActionToType(kconfig->readEntry("ActionOnPowerButton",""));
+ if (powerButtonAction == BRIGHTNESS) {
+ powerButtonActionValue = kconfig->readNumEntry("ActionOnPowerButtonValue", -1);
+ }
+
+ sleepButtonAction = mapActionToType(kconfig->readEntry("ActionOnSleepButton",""));
+ if ((sleepButtonAction != GO_SUSPEND2RAM) && (sleepButtonAction != GO_SUSPEND2DISK)) {
+ sleepButtonAction = NONE;
+ }
+
+ s2diskButtonAction = mapActionToType(kconfig->readEntry("ActionOnS2DiskButton",""));
+ if ((s2diskButtonAction != GO_SUSPEND2RAM) && (s2diskButtonAction != GO_SUSPEND2DISK)) {
+ s2diskButtonAction = NONE;
+ }
+
+ return true;
+ }
+ else return false;
+}
+
+
+/*!
+ * Map the string value from the config file to the type from \ref action
+ * \param _action a QString to map
+ * \return a integer value with the result of the mapping as \ref action
+ */
+action Settings::mapActionToType (QString _action) {
+
+ if (_action.isEmpty()) {
+ return NONE;
+ } else if (_action.startsWith("SHUTDOWN")) {
+ return GO_SHUTDOWN;
+ } else if (_action.startsWith("LOGOUT_DIALOG")) {
+ return LOGOUT_DIALOG;
+ } else if (_action.startsWith("SUSPEND2DISK")) {
+ return GO_SUSPEND2DISK;
+ } else if (_action.startsWith("SUSPEND2RAM")) {
+ return GO_SUSPEND2RAM;
+ } else if (_action.startsWith("CPUFREQ_POWERSAVE")) {
+ return CPUFREQ_POWERSAVE;
+ } else if (_action.startsWith("CPUFREQ_DYNAMIC")) {
+ return CPUFREQ_DYNAMIC;
+ } else if (_action.startsWith("CPUFREQ_PERFORMANCE")) {
+ return CPUFREQ_PERFORMANCE;
+ } else if (_action.startsWith("BRIGHTNESS")) {
+ return BRIGHTNESS;
+ } else {
+ return UNKNOWN_ACTION;
+ }
+}
+
+/*!
+ * Loads the default KDE Settings from the different configfiles and store
+ * them to a \ref KDE_Settings 'object'.
+ * \retval true if the settings could be loaded
+ * \retval false if there was a error/problem
+ */
+void Settings::load_kde(){
+ KConfig *_kconfig = new KConfig("kcmdisplayrc", true );
+
+ /* KDE settings [DisplayEnergy] from kcmdisplayrc */
+ if(_kconfig->hasGroup("DisplayEnergy")) {
+ _kconfig->setGroup("DisplayEnergy");
+ kde->displayEnergySaving = _kconfig->readBoolEntry("displayEnergySaving", true);
+ kde->displayStandby = _kconfig->readNumEntry("displayStandby", 7);
+ kde->displaySuspend = _kconfig->readNumEntry("displaySuspend", 13);
+ kde->displayPowerOff = _kconfig->readNumEntry("displayPowerOff", 19);
+ }
+ delete _kconfig;
+ _kconfig = new KConfig("kdesktoprc", true );
+ /* KDE settings [ScreenSaver] from kdesktoprc */
+ if(_kconfig->hasGroup("ScreenSaver")) {
+ _kconfig->setGroup("ScreenSaver");
+ kde->enabled = _kconfig->readBoolEntry("Enabled", true);
+ kde->lock = _kconfig->readBoolEntry("Lock", true);
+
+ QString _savername = _kconfig->readEntry("Saver", "KBlankscreen.desktop");
+ if (_savername.startsWith("KBlankscreen.desktop"))
+ kde->blanked = true;
+ else
+ kde->blanked = false;
+ }
+ delete _kconfig;
+}
+