summaryrefslogtreecommitdiffstats
path: root/klaptopdaemon/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'klaptopdaemon/main.cpp')
-rw-r--r--klaptopdaemon/main.cpp305
1 files changed, 305 insertions, 0 deletions
diff --git a/klaptopdaemon/main.cpp b/klaptopdaemon/main.cpp
new file mode 100644
index 0000000..9dc0419
--- /dev/null
+++ b/klaptopdaemon/main.cpp
@@ -0,0 +1,305 @@
+/*
+ * main.cpp
+ *
+ * Copyright (c) 1999 Paul Campbell <paul@taniwha.com>
+ *
+ * Requires the Qt widget libraries, available at no cost at
+ * http://www.troll.no/
+ *
+ * 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 <klocale.h>
+#include <kprocess.h>
+#include <kconfig.h>
+#include <kglobal.h>
+#include <qlayout.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+#include "main.h"
+#include "version.h"
+#include "warning.h"
+#include "power.h"
+#include "battery.h"
+#include "buttons.h"
+#include "pcmcia.h"
+#include "acpi.h"
+#include "apm.h"
+#include "sony.h"
+#include "profile.h"
+#include "portable.h"
+extern void wake_laptop_daemon();
+
+
+extern "C"
+{
+
+ KDE_EXPORT KCModule *create_pcmcia(QWidget *parent, const char *)
+ {
+ return new PcmciaConfig(parent, "kcmlaptop");
+ }
+
+ KDE_EXPORT KCModule *create_bwarning(QWidget *parent, const char *)
+ {
+ return new WarningConfig(0, parent, "kcmlaptop");
+ }
+ KDE_EXPORT KCModule *create_cwarning(QWidget *parent, const char *)
+ {
+ return new WarningConfig(1, parent, "kcmlaptop");
+ }
+ KDE_EXPORT KCModule *create_battery(QWidget *parent, const char *)
+ {
+ return new BatteryConfig(parent, "kcmlaptop");
+ }
+ KDE_EXPORT KCModule *create_power(QWidget *parent, const char *)
+ {
+ return new PowerConfig(parent, "kcmlaptop");
+ }
+ KDE_EXPORT KCModule *create_acpi(QWidget *parent, const char *)
+ {
+ return new AcpiConfig(parent, "kcmlaptop");
+ }
+ KDE_EXPORT KCModule *create_apm(QWidget *parent, const char *)
+ {
+ return new ApmConfig(parent, "kcmlaptop");
+ }
+ KDE_EXPORT KCModule *create_Profile(QWidget *parent, const char *)
+ {
+ return new ProfileConfig(parent, "kcmlaptop");
+ }
+ KDE_EXPORT KCModule *create_sony(QWidget *parent, const char *)
+ {
+ return new SonyConfig(parent, "kcmlaptop");
+ }
+ KDE_EXPORT KCModule *create_buttons(QWidget *parent, const char *)
+ {
+ return new ButtonsConfig(parent, "kcmlaptop");
+ }
+
+ KDE_EXPORT void init_battery()
+ {
+ KConfig config("kcmlaptoprc", true /*readonly*/, false /*no globals*/);
+ config.setGroup("BatteryDefault");
+ bool enable = false;
+ if (!config.hasKey("Enable")) { // if they have APM or PCMCIA, Enable=true
+ struct power_result pr = laptop_portable::poll_battery_state();
+ if ((laptop_portable::has_power_management() &&
+ !(pr.powered &&
+ (pr.percentage < 0 || pr.percentage == 0xff)))||
+ 0 == access("/var/run/stab", R_OK|F_OK) ||
+ 0 == access("/var/lib/pcmcia/stab", R_OK|F_OK))
+ enable = true;
+ } else {
+ enable = config.readBoolEntry("Enable", false);
+ }
+ if (!enable)
+ return;
+ wake_laptop_daemon();
+ }
+
+ KDE_EXPORT KCModule *create_laptop(QWidget *parent, const char *)
+ {
+ return new LaptopModule(parent, "kcmlaptop");
+ }
+
+ KDE_EXPORT void init_laptop()
+ {
+ init_battery();
+ }
+}
+
+
+
+LaptopModule::LaptopModule(QWidget *parent, const char *)
+ : KCModule(parent, "kcmlaptop")
+{
+ { // export ACPI options
+ KConfig config("kcmlaptoprc", true /*readonly*/, false /*no globals*/);
+ config.setGroup("AcpiDefault");
+
+ bool enablestandby = config.readBoolEntry("EnableStandby", false);
+ bool enablesuspend = config.readBoolEntry("EnableSuspend", false);
+ bool enablehibernate = config.readBoolEntry("EnableHibernate", false);
+ bool enableperformance = config.readBoolEntry("EnablePerformance", false);
+ bool enablethrottle = config.readBoolEntry("EnableThrottle", false);
+ laptop_portable::acpi_set_mask(enablestandby, enablesuspend, enablehibernate, enableperformance, enablethrottle);
+
+ config.setGroup("ApmDefault");
+
+ enablestandby = config.readBoolEntry("EnableStandby", false);
+ enablesuspend = config.readBoolEntry("EnableSuspend", false);
+ laptop_portable::apm_set_mask(enablestandby, enablesuspend);
+ config.setGroup("SoftwareSuspendDefault");
+ enablehibernate = config.readBoolEntry("EnableHibernate", false);
+ laptop_portable::software_suspend_set_mask(enablehibernate);
+ }
+ QVBoxLayout *layout = new QVBoxLayout(this);
+ tab = new QTabWidget(this);
+ layout->addWidget(tab);
+
+ battery = new BatteryConfig(parent, "kcmlaptop");
+ tab->addTab(battery, i18n("&Battery"));
+ connect(battery, SIGNAL(changed(bool)), this, SLOT(moduleChanged(bool)));
+
+ power = new PowerConfig(parent, "kcmlaptop");
+ tab->addTab(power, i18n("&Power Control"));
+ connect(power, SIGNAL(changed(bool)), this, SLOT(moduleChanged(bool)));
+
+ warning = new WarningConfig(0, parent, "kcmlaptop");
+ tab->addTab(warning, i18n("Low Battery &Warning"));
+ connect(warning, SIGNAL(changed(bool)), this, SLOT(moduleChanged(bool)));
+
+ critical = new WarningConfig(1, parent, "kcmlaptop");
+ tab->addTab(critical, i18n("Low Battery &Critical"));
+ connect(critical, SIGNAL(changed(bool)), this, SLOT(moduleChanged(bool)));
+
+ QStringList profile_list;
+ int current_profile;
+ bool *active_list;
+ bool has_profile = laptop_portable::get_system_performance(0, current_profile, profile_list, active_list);
+ QStringList throttle_list;
+ int current_throttle;
+ bool has_throttling = laptop_portable::get_system_throttling(0, current_throttle, throttle_list, active_list);
+ if (laptop_portable::has_brightness() || has_profile || has_throttling) {
+ profile = new ProfileConfig(parent, "kcmlaptop");
+ tab->addTab(profile, i18n("Default Power Profiles"));
+ connect(profile, SIGNAL(changed(bool)), this, SLOT(moduleChanged(bool)));
+ } else {
+ profile = 0;
+ }
+ if (laptop_portable::has_button(laptop_portable::LidButton) || laptop_portable::has_button(laptop_portable::PowerButton)) {
+ buttons = new ButtonsConfig(parent, "kcmlaptop");
+ tab->addTab(buttons, i18n("Button Actions"));
+ connect(buttons, SIGNAL(changed(bool)), this, SLOT(moduleChanged(bool)));
+ } else {
+ buttons = 0;
+ }
+ if (laptop_portable::has_acpi()) {
+ acpi = new AcpiConfig(parent, "kcmlaptop");
+ tab->addTab(acpi, i18n("&ACPI Config"));
+ connect(acpi, SIGNAL(changed(bool)), this, SLOT(moduleChanged(bool)));
+ } else {
+ acpi = 0;
+ }
+ if (laptop_portable::has_apm()) {
+ apm = new ApmConfig(parent, "kcmlaptop");
+ tab->addTab(apm, i18n("&APM Config"));
+ connect(apm, SIGNAL(changed(bool)), this, SLOT(moduleChanged(bool)));
+ } else {
+ apm = 0;
+ }
+ if (::access("/dev/sonypi", F_OK) == 0) {
+ bool do_sony = 1;
+ if (::access("/dev/sonypi", R_OK) == 0) {
+ int fd = ::open("/dev/sonypi", O_RDONLY); // make sure the driver's there as well as the /dev inode
+ if (fd >= 0) {
+ ::close(fd);
+ } else {
+ do_sony = 0;
+ }
+ }
+ if (do_sony) {
+ sony = new SonyConfig(parent, "kcmlaptop");
+ tab->addTab(sony, i18n("&Sony Laptop Config"));
+ connect(sony, SIGNAL(changed(bool)), this, SLOT(moduleChanged(bool)));
+ } else {
+ sony = 0;
+ }
+ } else {
+ sony = 0;
+ }
+
+ KAboutData* about =
+ new KAboutData("kcmlaptop", I18N_NOOP("Laptop Battery Configuration"), LAPTOP_VERSION,
+ I18N_NOOP("Battery Control Panel Module"),
+ KAboutData::License_GPL,
+ I18N_NOOP("(c) 1999 Paul Campbell"), 0, 0);
+ //about->addAuthor("NAME", 0, "e-mail addy");
+ setAboutData( about );
+}
+
+void LaptopModule::load()
+{
+ battery->load();
+ warning->load();
+ critical->load();
+ power->load();
+ if (apm)
+ apm->load();
+ if (acpi)
+ acpi->load();
+ if (profile)
+ profile->load();
+ if (sony)
+ sony->load();
+ if (buttons)
+ buttons->load();
+}
+
+void LaptopModule::save()
+{
+ battery->save();
+ warning->save();
+ critical->save();
+ power->save();
+ if (profile)
+ profile->save();
+ if (acpi)
+ acpi->save();
+ if (apm)
+ apm->save();
+ if (sony)
+ sony->save();
+ if (buttons)
+ buttons->save();
+}
+
+
+void LaptopModule::defaults()
+{
+ battery->defaults();
+ warning->defaults();
+ critical->defaults();
+ power->defaults();
+ if (acpi)
+ acpi->defaults();
+ if (apm)
+ apm->defaults();
+ if (profile)
+ profile->defaults();
+ if (sony)
+ sony->defaults();
+ if (buttons)
+ buttons->defaults();
+}
+
+QString LaptopModule::quickHelp() const
+{
+ return i18n("<h1>Laptop Battery</h1>This module allows you to monitor "
+ "your batteries. To make use of this module, you must have power management software "
+ "installed. (And, of course, you should have batteries in your "
+ "machine.)");
+}
+
+
+void LaptopModule::moduleChanged(bool state)
+{
+ emit changed(state);
+}
+
+
+#include "main.moc"