summaryrefslogtreecommitdiffstats
path: root/kradio3/plugins/timecontrol
diff options
context:
space:
mode:
Diffstat (limited to 'kradio3/plugins/timecontrol')
-rw-r--r--kradio3/plugins/timecontrol/Makefile.am17
-rw-r--r--kradio3/plugins/timecontrol/icons/Makefile.am2
-rw-r--r--kradio3/plugins/timecontrol/icons/hi16-action-kradio_kalarm.pngbin0 -> 496 bytes
-rw-r--r--kradio3/plugins/timecontrol/icons/hi16-action-kradio_zzz.pngbin0 -> 347 bytes
-rw-r--r--kradio3/plugins/timecontrol/icons/hi22-action-kradio_kalarm.pngbin0 -> 830 bytes
-rw-r--r--kradio3/plugins/timecontrol/icons/hi22-action-kradio_zzz.pngbin0 -> 865 bytes
-rw-r--r--kradio3/plugins/timecontrol/icons/hi32-action-kradio_kalarm.pngbin0 -> 1515 bytes
-rw-r--r--kradio3/plugins/timecontrol/icons/hi32-action-kradio_zzz.pngbin0 -> 1476 bytes
-rw-r--r--kradio3/plugins/timecontrol/icons/hi330-action-kradio_zzz.pngbin0 -> 17712 bytes
-rw-r--r--kradio3/plugins/timecontrol/icons/hi48-action-kradio_kalarm.pngbin0 -> 1989 bytes
-rw-r--r--kradio3/plugins/timecontrol/icons/hi48-action-kradio_zzz.pngbin0 -> 2347 bytes
-rw-r--r--kradio3/plugins/timecontrol/po/Makefile.am2
-rw-r--r--kradio3/plugins/timecontrol/po/de.po129
-rw-r--r--kradio3/plugins/timecontrol/po/ru.po129
-rw-r--r--kradio3/plugins/timecontrol/timecontrol-configuration-ui.ui452
-rw-r--r--kradio3/plugins/timecontrol/timecontrol-configuration.cpp425
-rw-r--r--kradio3/plugins/timecontrol/timecontrol-configuration.h90
-rw-r--r--kradio3/plugins/timecontrol/timecontrol.cpp301
-rw-r--r--kradio3/plugins/timecontrol/timecontrol.h95
19 files changed, 1642 insertions, 0 deletions
diff --git a/kradio3/plugins/timecontrol/Makefile.am b/kradio3/plugins/timecontrol/Makefile.am
new file mode 100644
index 0000000..0ac954f
--- /dev/null
+++ b/kradio3/plugins/timecontrol/Makefile.am
@@ -0,0 +1,17 @@
+SUBDIRS = po icons .
+
+INCLUDES = $(all_includes)
+METASOURCES = AUTO
+
+libkradio_LTLIBRARIES = libtimecontrol.la
+libtimecontrol_la_SOURCES = timecontrol-configuration.cpp \
+ timecontrol-configuration-ui.ui timecontrol.cpp
+libtimecontrol_la_LDFLAGS = -module -avoid-version $(KDE_RPATH) $(all_libraries)
+noinst_HEADERS = timecontrol-configuration.h timecontrol.h
+
+#messages: rc.cpp
+# $(XGETTEXT) *.cpp *.h -o po/kradio-timecontrol.pot
+
+messages: rc.cpp
+ $(EXTRACTRC) *.rc *.ui >> rc.cpp
+ $(XGETTEXT) rc.cpp *.h *.cpp -o po/kradio-timecontrol.pot
diff --git a/kradio3/plugins/timecontrol/icons/Makefile.am b/kradio3/plugins/timecontrol/icons/Makefile.am
new file mode 100644
index 0000000..b3f2583
--- /dev/null
+++ b/kradio3/plugins/timecontrol/icons/Makefile.am
@@ -0,0 +1,2 @@
+icons_ICON = AUTO
+iconsdir = $(kde_datadir)/kradio/icons
diff --git a/kradio3/plugins/timecontrol/icons/hi16-action-kradio_kalarm.png b/kradio3/plugins/timecontrol/icons/hi16-action-kradio_kalarm.png
new file mode 100644
index 0000000..d87e1c4
--- /dev/null
+++ b/kradio3/plugins/timecontrol/icons/hi16-action-kradio_kalarm.png
Binary files differ
diff --git a/kradio3/plugins/timecontrol/icons/hi16-action-kradio_zzz.png b/kradio3/plugins/timecontrol/icons/hi16-action-kradio_zzz.png
new file mode 100644
index 0000000..c7184d5
--- /dev/null
+++ b/kradio3/plugins/timecontrol/icons/hi16-action-kradio_zzz.png
Binary files differ
diff --git a/kradio3/plugins/timecontrol/icons/hi22-action-kradio_kalarm.png b/kradio3/plugins/timecontrol/icons/hi22-action-kradio_kalarm.png
new file mode 100644
index 0000000..874fa0a
--- /dev/null
+++ b/kradio3/plugins/timecontrol/icons/hi22-action-kradio_kalarm.png
Binary files differ
diff --git a/kradio3/plugins/timecontrol/icons/hi22-action-kradio_zzz.png b/kradio3/plugins/timecontrol/icons/hi22-action-kradio_zzz.png
new file mode 100644
index 0000000..f2184dd
--- /dev/null
+++ b/kradio3/plugins/timecontrol/icons/hi22-action-kradio_zzz.png
Binary files differ
diff --git a/kradio3/plugins/timecontrol/icons/hi32-action-kradio_kalarm.png b/kradio3/plugins/timecontrol/icons/hi32-action-kradio_kalarm.png
new file mode 100644
index 0000000..5547387
--- /dev/null
+++ b/kradio3/plugins/timecontrol/icons/hi32-action-kradio_kalarm.png
Binary files differ
diff --git a/kradio3/plugins/timecontrol/icons/hi32-action-kradio_zzz.png b/kradio3/plugins/timecontrol/icons/hi32-action-kradio_zzz.png
new file mode 100644
index 0000000..5ddb326
--- /dev/null
+++ b/kradio3/plugins/timecontrol/icons/hi32-action-kradio_zzz.png
Binary files differ
diff --git a/kradio3/plugins/timecontrol/icons/hi330-action-kradio_zzz.png b/kradio3/plugins/timecontrol/icons/hi330-action-kradio_zzz.png
new file mode 100644
index 0000000..bb4b6e3
--- /dev/null
+++ b/kradio3/plugins/timecontrol/icons/hi330-action-kradio_zzz.png
Binary files differ
diff --git a/kradio3/plugins/timecontrol/icons/hi48-action-kradio_kalarm.png b/kradio3/plugins/timecontrol/icons/hi48-action-kradio_kalarm.png
new file mode 100644
index 0000000..c3b8dd5
--- /dev/null
+++ b/kradio3/plugins/timecontrol/icons/hi48-action-kradio_kalarm.png
Binary files differ
diff --git a/kradio3/plugins/timecontrol/icons/hi48-action-kradio_zzz.png b/kradio3/plugins/timecontrol/icons/hi48-action-kradio_zzz.png
new file mode 100644
index 0000000..d443b05
--- /dev/null
+++ b/kradio3/plugins/timecontrol/icons/hi48-action-kradio_zzz.png
Binary files differ
diff --git a/kradio3/plugins/timecontrol/po/Makefile.am b/kradio3/plugins/timecontrol/po/Makefile.am
new file mode 100644
index 0000000..35fe6fd
--- /dev/null
+++ b/kradio3/plugins/timecontrol/po/Makefile.am
@@ -0,0 +1,2 @@
+PACKAGE = kradio-timecontrol
+POFILES = AUTO
diff --git a/kradio3/plugins/timecontrol/po/de.po b/kradio3/plugins/timecontrol/po/de.po
new file mode 100644
index 0000000..71a84f6
--- /dev/null
+++ b/kradio3/plugins/timecontrol/po/de.po
@@ -0,0 +1,129 @@
+# translation of de.po to
+# translation of kradio-timecontrol.po to
+# This file is put in the public domain.
+#
+# Ernst Martin Witte <[email protected]>, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: de\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-11-11 18:43+0100\n"
+"PO-Revision-Date: 2006-11-06 01:16+0100\n"
+"Last-Translator: Ernst Martin Witte <[email protected]>\n"
+"Language-Team: <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#. i18n: file timecontrol-configuration-ui.ui line 32
+#: rc.cpp:3 rc.cpp:68 timecontrol-configuration-ui.cpp:189
+#, no-c-format
+msgid "sleep countdown"
+msgstr "Schlummermodus"
+
+#. i18n: file timecontrol-configuration-ui.ui line 40
+#: rc.cpp:6 rc.cpp:71 timecontrol-configuration-ui.cpp:190
+#, no-c-format
+msgid " min"
+msgstr " min"
+
+#. i18n: file timecontrol-configuration-ui.ui line 117
+#: rc.cpp:9 rc.cpp:74 timecontrol-configuration-ui.cpp:191 timecontrol.cpp:270
+#, no-c-format
+msgid "Alarms"
+msgstr "Wecker"
+
+#. i18n: file timecontrol-configuration-ui.ui line 180
+#: rc.cpp:14 rc.cpp:79 timecontrol-configuration-ui.cpp:194
+#, no-c-format
+msgid "Date"
+msgstr "Datum"
+
+#. i18n: file timecontrol-configuration-ui.ui line 203
+#: rc.cpp:17 rc.cpp:82 timecontrol-configuration-ui.cpp:195
+#, no-c-format
+msgid "Time"
+msgstr "Uhrzeit"
+
+#. i18n: file timecontrol-configuration-ui.ui line 226
+#: rc.cpp:20 rc.cpp:85 timecontrol-configuration-ui.cpp:196
+#, no-c-format
+msgid "Volume"
+msgstr "Lautstärke"
+
+#. i18n: file timecontrol-configuration-ui.ui line 234
+#: rc.cpp:23 rc.cpp:88 timecontrol-configuration-ui.cpp:197
+#, no-c-format
+msgid " %"
+msgstr " %"
+
+#. i18n: file timecontrol-configuration-ui.ui line 263
+#: rc.cpp:26 rc.cpp:91 timecontrol-configuration-ui.cpp:198
+#, no-c-format
+msgid "enabled"
+msgstr "aktiv"
+
+#. i18n: file timecontrol-configuration-ui.ui line 331
+#: rc.cpp:50 rc.cpp:115 timecontrol-configuration-ui.cpp:207
+#, no-c-format
+msgid "daily"
+msgstr "täglich"
+
+#. i18n: file timecontrol-configuration-ui.ui line 341
+#: rc.cpp:53 rc.cpp:118 timecontrol-configuration-ui.cpp:208
+#, no-c-format
+msgid "Radio Station"
+msgstr "Sender"
+
+#. i18n: file timecontrol-configuration-ui.ui line 393
+#: rc.cpp:56 rc.cpp:121 timecontrol-configuration-ui.cpp:210
+#, no-c-format
+msgid "Start Playing"
+msgstr "Radio einschalten"
+
+#. i18n: file timecontrol-configuration-ui.ui line 401
+#: rc.cpp:59 rc.cpp:124 timecontrol-configuration-ui.cpp:211
+#, no-c-format
+msgid "Stop Playing"
+msgstr "Radio ausschalten"
+
+#. i18n: file timecontrol-configuration-ui.ui line 409
+#: rc.cpp:62 rc.cpp:127 timecontrol-configuration-ui.cpp:212
+#, no-c-format
+msgid "Start Recording"
+msgstr "Aufnahme starten"
+
+#. i18n: file timecontrol-configuration-ui.ui line 417
+#: rc.cpp:65 rc.cpp:130 timecontrol-configuration-ui.cpp:213
+#, no-c-format
+msgid "Stop Recording"
+msgstr "Aufnahme beenden"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Ernst Martin Witte"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+
+#: timecontrol-configuration.cpp:181
+msgid "<don't change>"
+msgstr "<nicht verändern>"
+
+#: timecontrol.cpp:42
+msgid "Time Control and Alarm Functions"
+msgstr "Zeitsteurungs- und Weckfunktionen"
+
+#: timecontrol.cpp:48
+msgid "TimeControl Plugin"
+msgstr "Zeitsteuerungs-Plugin"
+
+#: timecontrol.cpp:270
+msgid "Setup Alarms"
+msgstr "Wecker einrichten"
diff --git a/kradio3/plugins/timecontrol/po/ru.po b/kradio3/plugins/timecontrol/po/ru.po
new file mode 100644
index 0000000..6f95f37
--- /dev/null
+++ b/kradio3/plugins/timecontrol/po/ru.po
@@ -0,0 +1,129 @@
+# translation of ru.po to
+# translation of kradio-timecontrol.po to
+# This file is put in the public domain.
+# Алексей Кузнецов <[email protected]>, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: ru\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-11-11 18:43+0100\n"
+"PO-Revision-Date: 2006-11-08 12:57+0300\n"
+"Last-Translator: Алексей Кузнецов <[email protected]>\n"
+"Language-Team: <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.10\n"
+
+#. i18n: file timecontrol-configuration-ui.ui line 32
+#: rc.cpp:3 rc.cpp:68 timecontrol-configuration-ui.cpp:189
+#, no-c-format
+msgid "sleep countdown"
+msgstr "Период таймера отключения"
+
+#. i18n: file timecontrol-configuration-ui.ui line 40
+#: rc.cpp:6 rc.cpp:71 timecontrol-configuration-ui.cpp:190
+#, no-c-format
+msgid " min"
+msgstr " мин"
+
+#. i18n: file timecontrol-configuration-ui.ui line 117
+#: rc.cpp:9 rc.cpp:74 timecontrol-configuration-ui.cpp:191 timecontrol.cpp:270
+#, no-c-format
+msgid "Alarms"
+msgstr "Расписание"
+
+#. i18n: file timecontrol-configuration-ui.ui line 180
+#: rc.cpp:14 rc.cpp:79 timecontrol-configuration-ui.cpp:194
+#, no-c-format
+msgid "Date"
+msgstr "Дата"
+
+#. i18n: file timecontrol-configuration-ui.ui line 203
+#: rc.cpp:17 rc.cpp:82 timecontrol-configuration-ui.cpp:195
+#, no-c-format
+msgid "Time"
+msgstr "Время"
+
+#. i18n: file timecontrol-configuration-ui.ui line 226
+#: rc.cpp:20 rc.cpp:85 timecontrol-configuration-ui.cpp:196
+#, no-c-format
+msgid "Volume"
+msgstr "Громкость"
+
+#. i18n: file timecontrol-configuration-ui.ui line 234
+#: rc.cpp:23 rc.cpp:88 timecontrol-configuration-ui.cpp:197
+#, no-c-format
+msgid " %"
+msgstr " %"
+
+#. i18n: file timecontrol-configuration-ui.ui line 263
+#: rc.cpp:26 rc.cpp:91 timecontrol-configuration-ui.cpp:198
+#, no-c-format
+msgid "enabled"
+msgstr "Включено"
+
+#. i18n: file timecontrol-configuration-ui.ui line 331
+#: rc.cpp:50 rc.cpp:115 timecontrol-configuration-ui.cpp:207
+#, no-c-format
+msgid "daily"
+msgstr "Ежедневно"
+
+#. i18n: file timecontrol-configuration-ui.ui line 341
+#: rc.cpp:53 rc.cpp:118 timecontrol-configuration-ui.cpp:208
+#, no-c-format
+msgid "Radio Station"
+msgstr "Радиостанция"
+
+#. i18n: file timecontrol-configuration-ui.ui line 393
+#: rc.cpp:56 rc.cpp:121 timecontrol-configuration-ui.cpp:210
+#, no-c-format
+msgid "Start Playing"
+msgstr "Начать воспроизведение"
+
+#. i18n: file timecontrol-configuration-ui.ui line 401
+#: rc.cpp:59 rc.cpp:124 timecontrol-configuration-ui.cpp:211
+#, no-c-format
+msgid "Stop Playing"
+msgstr "Остановить воспроизведение"
+
+#. i18n: file timecontrol-configuration-ui.ui line 409
+#: rc.cpp:62 rc.cpp:127 timecontrol-configuration-ui.cpp:212
+#, no-c-format
+msgid "Start Recording"
+msgstr "Начать запись"
+
+#. i18n: file timecontrol-configuration-ui.ui line 417
+#: rc.cpp:65 rc.cpp:130 timecontrol-configuration-ui.cpp:213
+#, no-c-format
+msgid "Stop Recording"
+msgstr "Остановить запись"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Алексей Кузнецов"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+
+#: timecontrol-configuration.cpp:181
+msgid "<don't change>"
+msgstr "<не менять>"
+
+#: timecontrol.cpp:42
+msgid "Time Control and Alarm Functions"
+msgstr "Функции таймера и работы по расписанию"
+
+#: timecontrol.cpp:48
+msgid "TimeControl Plugin"
+msgstr "Модуль ремени"
+
+#: timecontrol.cpp:270
+msgid "Setup Alarms"
+msgstr "Расписание"
diff --git a/kradio3/plugins/timecontrol/timecontrol-configuration-ui.ui b/kradio3/plugins/timecontrol/timecontrol-configuration-ui.ui
new file mode 100644
index 0000000..8b2b768
--- /dev/null
+++ b/kradio3/plugins/timecontrol/timecontrol-configuration-ui.ui
@@ -0,0 +1,452 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>TimeControlConfigurationUI</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>TimeControlConfigurationUI</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>374</width>
+ <height>261</height>
+ </rect>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget" row="2" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>layout13</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>labelSleep</cstring>
+ </property>
+ <property name="text">
+ <string>sleep countdown</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox">
+ <property name="name">
+ <cstring>editSleep</cstring>
+ </property>
+ <property name="suffix">
+ <string> min</string>
+ </property>
+ <property name="maxValue">
+ <number>200</number>
+ </property>
+ <property name="minValue">
+ <number>1</number>
+ </property>
+ <property name="lineStep">
+ <number>5</number>
+ </property>
+ <property name="value">
+ <number>30</number>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer6_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="Line" row="1" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>line1</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>HLine</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>layout15</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout14</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>labelAlarmList</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Alarms</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonAlarmNew</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="iconSet">
+ <iconset>"filenew2"</iconset>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonDeleteAlarm</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="iconSet">
+ <iconset>"editdelete"</iconset>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QListBox">
+ <property name="name">
+ <cstring>listAlarms</cstring>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget" row="0" column="1">
+ <property name="name">
+ <cstring>layout17</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout28</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout27</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>labelAlarmDate</cstring>
+ </property>
+ <property name="text">
+ <string>Date</string>
+ </property>
+ </widget>
+ <widget class="QDateEdit">
+ <property name="name">
+ <cstring>editAlarmDate</cstring>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout28</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>labelAlarmTime</cstring>
+ </property>
+ <property name="text">
+ <string>Time</string>
+ </property>
+ </widget>
+ <widget class="QTimeEdit">
+ <property name="name">
+ <cstring>editAlarmTime</cstring>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout29</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>labelAlarmVolume</cstring>
+ </property>
+ <property name="text">
+ <string>Volume</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox">
+ <property name="name">
+ <cstring>editAlarmVolume</cstring>
+ </property>
+ <property name="suffix">
+ <string> %</string>
+ </property>
+ <property name="maxValue">
+ <number>100</number>
+ </property>
+ <property name="minValue">
+ <number>-1</number>
+ </property>
+ <property name="value">
+ <number>-1</number>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout16</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox" row="0" column="0">
+ <property name="name">
+ <cstring>checkboxAlarmEnable</cstring>
+ </property>
+ <property name="text">
+ <string>enabled</string>
+ </property>
+ </widget>
+ <spacer row="2" column="0">
+ <property name="name">
+ <cstring>spacer6</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>100</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KListBox" row="0" column="1" rowspan="3" colspan="1">
+ <item>
+ <property name="text">
+ <string>Monday</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Tuesday</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Wednesday</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Thursday</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Friday</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Saturday</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Sunday</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>listWeekdays</cstring>
+ </property>
+ <property name="selectionMode">
+ <enum>Multi</enum>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="1" column="0">
+ <property name="name">
+ <cstring>checkboxAlarmDaily</cstring>
+ </property>
+ <property name="text">
+ <string>daily</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>labelStationSelection</cstring>
+ </property>
+ <property name="text">
+ <string>Radio Station</string>
+ </property>
+ </widget>
+ <widget class="QComboBox">
+ <property name="name">
+ <cstring>comboStationSelection</cstring>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout20</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>pixmapAlarmStation</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="scaledContents">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer8</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>150</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QComboBox">
+ <item>
+ <property name="text">
+ <string>Start Playing</string>
+ </property>
+ <property name="pixmap">
+ <pixmap>"kradio_muteoff"</pixmap>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Stop Playing</string>
+ </property>
+ <property name="pixmap">
+ <pixmap>"kradio_muteon"</pixmap>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Start Recording</string>
+ </property>
+ <property name="pixmap">
+ <pixmap>"kradio_record"</pixmap>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Stop Recording</string>
+ </property>
+ <property name="pixmap">
+ <pixmap>"kradio_muteon"</pixmap>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>comboAlarmType</cstring>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </grid>
+</widget>
+<customwidgets>
+</customwidgets>
+<tabstops>
+ <tabstop>listAlarms</tabstop>
+ <tabstop>buttonAlarmNew</tabstop>
+ <tabstop>buttonDeleteAlarm</tabstop>
+ <tabstop>editAlarmDate</tabstop>
+ <tabstop>editAlarmTime</tabstop>
+ <tabstop>editAlarmVolume</tabstop>
+ <tabstop>checkboxAlarmDaily</tabstop>
+ <tabstop>checkboxAlarmEnable</tabstop>
+ <tabstop>comboStationSelection</tabstop>
+</tabstops>
+<includes>
+ <include location="global" impldecl="in implementation">kiconloader.h</include>
+</includes>
+<pixmapfunction>SmallIcon</pixmapfunction>
+<layoutdefaults spacing="6" margin="0"/>
+<includehints>
+ <includehint>klistbox.h</includehint>
+</includehints>
+</UI>
diff --git a/kradio3/plugins/timecontrol/timecontrol-configuration.cpp b/kradio3/plugins/timecontrol/timecontrol-configuration.cpp
new file mode 100644
index 0000000..4ea6bce
--- /dev/null
+++ b/kradio3/plugins/timecontrol/timecontrol-configuration.cpp
@@ -0,0 +1,425 @@
+/***************************************************************************
+ timecontrol-configuration.cpp - description
+ -------------------
+ begin : Sam Aug 2 2003
+ copyright : (C) 2003 by Martin Witte
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include <math.h>
+#include <algorithm>
+using std::sort;
+
+#include <qdatetime.h>
+#include <qlistbox.h>
+#include <qcombobox.h>
+#include <qdatetimeedit.h>
+#include <qlabel.h>
+#include <qspinbox.h>
+#include <qcheckbox.h>
+#include <qpushbutton.h>
+
+#include <klistbox.h>
+#include <klocale.h>
+
+#include "../../src/include/stationlist.h"
+#include "../../src/include/alarm.h"
+#include "../../src/include/errorlog-interfaces.h"
+#include "../../src/include/radiostation.h"
+
+#include "timecontrol-configuration.h"
+
+class DateTimeCmp
+{
+public:
+ bool operator() (const Alarm &a, const Alarm &b) {
+ return a.nextAlarm(true) < b.nextAlarm(true);
+ }
+
+};
+
+TimeControlConfiguration::TimeControlConfiguration (QWidget *parent)
+ : TimeControlConfigurationUI(parent),
+ ITimeControlClient(),
+ IRadioClient(),
+ ignoreChanges(false),
+ m_dirty(false)
+{
+
+ QObject::connect(checkboxAlarmDaily, SIGNAL(toggled(bool)), this, SLOT(slotDailyChanged(bool)));
+ QObject::connect(listWeekdays, SIGNAL(highlighted(int)), this, SLOT(slotWeekdaysChanged()));
+ QObject::connect(checkboxAlarmEnable, SIGNAL(toggled(bool)), this, SLOT(slotEnabledChanged(bool)));
+ QObject::connect(comboStationSelection, SIGNAL(highlighted(int)), this, SLOT(slotStationChanged(int)));
+ QObject::connect(listAlarms, SIGNAL(highlighted(int)), this, SLOT(slotAlarmSelectChanged(int)));
+ QObject::connect(editAlarmDate, SIGNAL(valueChanged(const QDate &)), this, SLOT(slotDateChanged(const QDate &)));
+ QObject::connect(editAlarmTime, SIGNAL(valueChanged(const QTime &)), this, SLOT(slotTimeChanged(const QTime &)));
+ QObject::connect(editAlarmVolume, SIGNAL(valueChanged(int)), this, SLOT(slotVolumeChanged(int)));
+ QObject::connect(buttonAlarmNew, SIGNAL(clicked()), this, SLOT(slotNewAlarm()));
+ QObject::connect(buttonDeleteAlarm, SIGNAL(clicked()), this, SLOT(slotDeleteAlarm()));
+ QObject::connect(comboAlarmType, SIGNAL(highlighted(int)), this, SLOT(slotAlarmTypeChanged(int)));
+
+ QObject::connect(checkboxAlarmDaily, SIGNAL(toggled(bool)), this, SLOT(slotSetDirty()));
+ QObject::connect(listWeekdays, SIGNAL(selectionChanged()), this, SLOT(slotSetDirty()));
+ QObject::connect(checkboxAlarmEnable, SIGNAL(toggled(bool)), this, SLOT(slotSetDirty()));
+ QObject::connect(comboStationSelection, SIGNAL(activated(int)), this, SLOT(slotSetDirty()));
+ QObject::connect(editAlarmDate, SIGNAL(valueChanged(const QDate &)), this, SLOT(slotSetDirty()));
+ QObject::connect(editAlarmTime, SIGNAL(valueChanged(const QTime &)), this, SLOT(slotSetDirty()));
+ QObject::connect(editAlarmVolume, SIGNAL(valueChanged(int)), this, SLOT(slotSetDirty()));
+ QObject::connect(buttonAlarmNew, SIGNAL(clicked()), this, SLOT(slotSetDirty()));
+ QObject::connect(buttonDeleteAlarm, SIGNAL(clicked()), this, SLOT(slotSetDirty()));
+ QObject::connect(comboAlarmType, SIGNAL(activated(int)), this, SLOT(slotSetDirty()));
+ QObject::connect(editSleep, SIGNAL(valueChanged(int)), this, SLOT(slotSetDirty()));
+}
+
+TimeControlConfiguration::~TimeControlConfiguration ()
+{
+}
+
+bool TimeControlConfiguration::connectI (Interface *i)
+{
+ bool a = ITimeControlClient::connectI(i);
+ bool b = IRadioClient::connectI(i);
+ return a || b;
+}
+
+
+bool TimeControlConfiguration::disconnectI (Interface *i)
+{
+ bool a = ITimeControlClient::disconnectI(i);
+ bool b = IRadioClient::disconnectI(i);
+ return a || b;
+}
+
+
+// ITimeControlClient
+
+bool TimeControlConfiguration::noticeAlarmsChanged(const AlarmVector &sl)
+{
+ int idx = listAlarms->currentItem();
+ int currentID = (idx >= 0 && (unsigned)idx < alarms.size()) ? alarms[idx].ID() : -1;
+
+ alarms = sl;
+ sort(alarms.begin(), alarms.end(), DateTimeCmp());
+
+ bool oldBlock = listAlarms->signalsBlocked();
+ listAlarms->blockSignals(true);
+
+ listAlarms->clear();
+ idx = -1;
+ int k = 0;
+ for (ciAlarmVector i = alarms.begin(); i != alarms.end(); ++i, ++k) {
+ listAlarms->insertItem(i->nextAlarm(true).toString());
+ if (i->ID() == currentID)
+ idx = k;
+ }
+ listAlarms->setCurrentItem(idx);
+
+ listAlarms->blockSignals(oldBlock);
+
+ slotAlarmSelectChanged(idx);
+ return true;
+}
+
+bool TimeControlConfiguration::noticeAlarm(const Alarm &)
+{
+ return false;
+}
+
+bool TimeControlConfiguration::noticeNextAlarmChanged(const Alarm *)
+{
+ noticeAlarmsChanged(alarms);
+ return true;
+}
+
+bool TimeControlConfiguration::noticeCountdownStarted(const QDateTime &/*end*/)
+{
+ return false;
+}
+
+bool TimeControlConfiguration::noticeCountdownStopped()
+{
+ return false;
+}
+
+bool TimeControlConfiguration::noticeCountdownZero()
+{
+ return false;
+}
+
+bool TimeControlConfiguration::noticeCountdownSecondsChanged(int n)
+{
+ editSleep->setValue((int)rint(n / 60));
+ return false;
+}
+
+
+// IRadioClient
+
+bool TimeControlConfiguration::noticePowerChanged(bool /*on*/)
+{
+ return false;
+}
+
+bool TimeControlConfiguration::noticeStationChanged (const RadioStation &, int /*idx*/)
+{
+ return false;
+}
+
+bool TimeControlConfiguration::noticeStationsChanged(const StationList &sl)
+{
+ comboStationSelection->clear();
+ stationIDs.clear();
+ comboStationSelection->insertItem(i18n("<don't change>"));
+ stationIDs.push_back(QString::null);
+
+ for (RawStationList::Iterator i(sl.all()); i.current(); ++i) {
+ comboStationSelection->insertItem(i.current()->iconName(),
+ i.current()->longName());
+ stationIDs.push_back(i.current()->stationID());
+ }
+ return true;
+}
+
+
+// Slots
+
+
+void TimeControlConfiguration::slotDateChanged( const QDate &d )
+{
+ if (ignoreChanges) return;
+
+ int idx = listAlarms->currentItem();
+ if (idx >= 0 && (unsigned)idx < alarms.size()) {
+ Alarm &a = alarms[idx];
+ a.setDate(d);
+
+ ignoreChanges = true;
+ bool oldBlock = listAlarms->signalsBlocked();
+ listAlarms->blockSignals(true);
+ noticeAlarmsChanged(alarms);
+ listAlarms->blockSignals(oldBlock);
+ ignoreChanges = false;
+ }
+}
+
+
+void TimeControlConfiguration::slotTimeChanged(const QTime &t)
+{
+ if (ignoreChanges) return;
+
+ int idx = listAlarms->currentItem();
+ if (idx >= 0 && (unsigned)idx < alarms.size()) {
+ Alarm &a = alarms[idx];
+ a.setTime(t);
+
+ ignoreChanges = true;
+ bool oldBlock = listAlarms->signalsBlocked();
+ listAlarms->blockSignals(true);
+ noticeAlarmsChanged(alarms);
+ listAlarms->blockSignals(oldBlock);
+ ignoreChanges = false;
+ }
+}
+
+
+void TimeControlConfiguration::slotDailyChanged (bool b)
+{
+ if (ignoreChanges) return;
+
+ int idx = listAlarms->currentItem();
+ if (idx >= 0 && (unsigned)idx < alarms.size()) {
+ Alarm &a = alarms[idx];
+ a.setDaily(b);
+
+ ignoreChanges = true;
+ bool oldBlock = listAlarms->signalsBlocked();
+ listAlarms->blockSignals(true);
+ noticeAlarmsChanged(alarms);
+ listAlarms->blockSignals(oldBlock);
+ ignoreChanges = false;
+
+ editAlarmDate ->setDisabled(b);
+ labelAlarmDate->setDisabled(b);
+ listWeekdays ->setDisabled(!b);
+ }
+}
+
+
+void TimeControlConfiguration::slotWeekdaysChanged ()
+{
+ if (ignoreChanges) return;
+
+ int mask = 0;
+ for (int i = 0; i < 7; ++i) {
+ if (listWeekdays->isSelected(i)) {
+ mask |= (1 << i);
+ }
+ }
+
+ int idx = listAlarms->currentItem();
+ if (idx >= 0 && (unsigned)idx < alarms.size()) {
+ Alarm &a = alarms[idx];
+ a.setWeekdayMask(mask);
+
+ ignoreChanges = true;
+ bool oldBlock = listAlarms->signalsBlocked();
+ listAlarms->blockSignals(true);
+ noticeAlarmsChanged(alarms);
+ listAlarms->blockSignals(oldBlock);
+ ignoreChanges = false;
+ }
+}
+
+
+void TimeControlConfiguration::slotEnabledChanged( bool b)
+{
+ int idx = listAlarms->currentItem();
+ if (idx >= 0 && (unsigned)idx < alarms.size()) {
+ alarms[idx].setEnabled(b);
+ }
+}
+
+
+void TimeControlConfiguration::slotStationChanged( int i )
+{
+ int idx = listAlarms->currentItem();
+ if ( idx >= 0 && (unsigned)idx < alarms.size()
+ && i >= 0 && (unsigned)i < stationIDs.size())
+ {
+ alarms[idx].setStationID( stationIDs[i] );
+ }
+}
+
+
+void TimeControlConfiguration::slotVolumeChanged( int v )
+{
+ int idx = listAlarms->currentItem();
+ if (idx >= 0 && (unsigned)idx < alarms.size()) {
+ alarms[idx].setVolumePreset(0.01 * (float)v);
+ }
+}
+
+
+void TimeControlConfiguration::slotAlarmTypeChanged(int t)
+{
+ int idx = listAlarms->currentItem();
+ if (idx >= 0 && (unsigned)idx < alarms.size()) {
+ alarms[idx].setAlarmType((Alarm::AlarmType)t);
+ }
+}
+
+
+void TimeControlConfiguration::slotAlarmSelectChanged(int idx)
+{
+ if (ignoreChanges) return;
+ ignoreChanges = true;
+
+ Alarm a;
+ bool valid = false;
+
+ if (idx >= 0 && (unsigned)idx < alarms.size()) {
+
+ a = alarms[idx];
+ valid = true;
+
+ }
+
+ editAlarmDate ->setDisabled(!valid || a.isDaily());
+ labelAlarmDate ->setDisabled(!valid || a.isDaily());
+ listWeekdays ->setDisabled(!valid ||!a.isDaily());
+ editAlarmTime ->setDisabled(!valid);
+ labelAlarmTime ->setDisabled(!valid);
+ labelAlarmVolume ->setDisabled(!valid);
+ editAlarmVolume ->setDisabled(!valid);
+ checkboxAlarmDaily ->setDisabled(!valid);
+ checkboxAlarmEnable ->setDisabled(!valid);
+ comboStationSelection->setDisabled(!valid);
+ labelStationSelection->setDisabled(!valid);
+ buttonDeleteAlarm ->setDisabled(!valid);
+ comboAlarmType ->setDisabled(!valid);
+
+ editAlarmDate ->setDate(a.alarmTime().date());
+ editAlarmTime ->setTime(a.alarmTime().time());
+ checkboxAlarmDaily ->setChecked(a.isDaily());
+ checkboxAlarmEnable ->setChecked(a.isEnabled());
+ editAlarmVolume ->setValue((int)rint(a.volumePreset() * 100));
+ comboAlarmType ->setCurrentItem(a.alarmType());
+
+ int k = 0;
+ const QString &sID = a.stationID();
+ for (int i = 0; !k && i < (int)stationIDs.size(); ++i)
+ if (stationIDs[i] == sID) k = i;
+ comboStationSelection->setCurrentItem(k);
+
+ int m = a.weekdayMask();
+ for (int i = 0; i < 7; ++i) {
+ listWeekdays->setSelected(i, m & (1 << i));
+ }
+
+ ignoreChanges = false;
+}
+
+
+void TimeControlConfiguration::slotNewAlarm()
+{
+ QDateTime dt(QDateTime::currentDateTime());
+ Alarm a(dt, false, false);
+ alarms.push_back(a);
+ listAlarms->insertItem(a.alarmTime().toString());
+ listAlarms->setSelected(listAlarms->count() - 1, true);
+ noticeAlarmsChanged(alarms);
+}
+
+
+void TimeControlConfiguration::slotDeleteAlarm()
+{
+ int idx = listAlarms->currentItem();
+
+ if (idx >= 0 && (unsigned)idx < alarms.size()) {
+ // unfortunately a function vector<>::erase(idx) does not exist
+ iAlarmVector i = alarms.begin();
+ for (int k = 0; k < idx; ++k)
+ ++i;
+ if (i != alarms.end())
+ alarms.erase(i);
+ listAlarms->removeItem(idx);
+ }
+}
+
+
+void TimeControlConfiguration::slotOK()
+{
+ if (m_dirty) {
+ sendAlarms(alarms);
+ sendCountdownSeconds(editSleep->value() * 60);
+ m_dirty = false;
+ }
+}
+
+void TimeControlConfiguration::slotCancel()
+{
+ if (m_dirty) {
+ noticeAlarmsChanged(queryAlarms());
+ noticeCountdownSecondsChanged(queryCountdownSeconds());
+ m_dirty = false;
+ }
+}
+
+void TimeControlConfiguration::slotSetDirty()
+{
+ if (!ignoreChanges) {
+ m_dirty = true;
+ }
+}
+
+
+#include "timecontrol-configuration.moc"
diff --git a/kradio3/plugins/timecontrol/timecontrol-configuration.h b/kradio3/plugins/timecontrol/timecontrol-configuration.h
new file mode 100644
index 0000000..ac4570f
--- /dev/null
+++ b/kradio3/plugins/timecontrol/timecontrol-configuration.h
@@ -0,0 +1,90 @@
+/***************************************************************************
+ timecontro-configuration.h - description
+ -------------------
+ begin : Sam Aug 2 2003
+ copyright : (C) 2003 by Martin Witte
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+#ifndef KRADIO_TIMECONTROL_CONFIGURATION_H
+#define KRADIO_TIMECONTROL_CONFIGURATION_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "../../src/include/radio_interfaces.h"
+#include "../../src/include/timecontrol_interfaces.h"
+#include "timecontrol-configuration-ui.h"
+
+class TimeControl;
+class QWidget;
+
+class TimeControlConfiguration : public TimeControlConfigurationUI,
+ public ITimeControlClient,
+ public IRadioClient
+{
+Q_OBJECT
+public :
+ TimeControlConfiguration (QWidget *parent);
+ ~TimeControlConfiguration ();
+
+ bool connectI (Interface *i);
+ bool disconnectI (Interface *i);
+
+// ITimeControlClient
+
+ bool noticeAlarmsChanged(const AlarmVector &sl);
+ bool noticeAlarm(const Alarm &);
+ bool noticeNextAlarmChanged(const Alarm *);
+ bool noticeCountdownStarted(const QDateTime &end);
+ bool noticeCountdownStopped();
+ bool noticeCountdownZero();
+ bool noticeCountdownSecondsChanged(int n);
+
+// IRadioClient
+
+ bool noticePowerChanged(bool on);
+ bool noticeStationChanged (const RadioStation &, int idx);
+ bool noticeStationsChanged(const StationList &sl);
+ bool noticePresetFileChanged(const QString &/*f*/) { return false; }
+
+ bool noticeCurrentSoundStreamIDChanged(SoundStreamID /*id*/) { return false; }
+
+protected slots:
+
+ void slotDailyChanged (bool daily);
+ void slotWeekdaysChanged ();
+ void slotEnabledChanged (bool enable);
+ void slotStationChanged (int idx);
+ void slotAlarmSelectChanged(int idx);
+ void slotDateChanged(const QDate &d);
+ void slotTimeChanged(const QTime &d);
+ void slotVolumeChanged(int v);
+ void slotAlarmTypeChanged(int idx);
+
+ void slotNewAlarm();
+ void slotDeleteAlarm();
+
+ void slotOK();
+ void slotCancel();
+ void slotSetDirty();
+
+protected:
+
+ AlarmVector alarms;
+ vector<QString> stationIDs;
+
+ bool ignoreChanges;
+ bool m_dirty;
+};
+
+#endif
diff --git a/kradio3/plugins/timecontrol/timecontrol.cpp b/kradio3/plugins/timecontrol/timecontrol.cpp
new file mode 100644
index 0000000..42441ac
--- /dev/null
+++ b/kradio3/plugins/timecontrol/timecontrol.cpp
@@ -0,0 +1,301 @@
+/***************************************************************************
+ timecontrol.cpp - description
+ -------------------
+ begin : Son Jan 12 2003
+ copyright : (C) 2003 by Martin Witte
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include <kaboutdata.h>
+#include <kconfig.h>
+
+#include "timecontrol.h"
+#include "timecontrol-configuration.h"
+#include "../../src/include/pluginmanager.h"
+#include "../../src/include/aboutwidget.h"
+
+//const char *AlarmListElement = "alarmlist";
+//const char *AlarmElement = "alarm";
+const char *AlarmDateElement = "date";
+const char *AlarmTimeElement = "time";
+const char *AlarmDailyElement = "daily";
+const char *AlarmWeekdayMaskElement = "weekdayMask";
+const char *AlarmEnabledElement = "enabled";
+const char *AlarmStationIDElement = "stationID";
+//const char *AlarmFrequencyElement = "frequency";
+const char *AlarmVolumeElement = "volume";
+const char *AlarmTypeElement = "type";
+
+
+///////////////////////////////////////////////////////////////////////
+//// plugin library functions
+
+PLUGIN_LIBRARY_FUNCTIONS(TimeControl, "kradio-timecontrol", i18n("Time Control and Alarm Functions"));
+
+///////////////////////////////////////////////////////////////////////
+
+
+TimeControl::TimeControl (const QString &n)
+ : PluginBase(n, i18n("TimeControl Plugin")),
+ m_waitingFor(NULL),
+ m_countdownSeconds(0),
+ m_alarmTimer(this),
+ m_countdownTimer(this)
+{
+ QObject::connect(&m_alarmTimer, SIGNAL(timeout()), this, SLOT(slotQTimerAlarmTimeout()));
+ QObject::connect(&m_countdownTimer, SIGNAL(timeout()), this, SLOT(slotQTimerCountdownTimeout()));
+}
+
+
+TimeControl::~TimeControl ()
+{
+ m_waitingFor = NULL;
+}
+
+bool TimeControl::connectI (Interface *i)
+{
+ bool a = ITimeControl::connectI(i);
+ bool b = PluginBase::connectI(i);
+ return a || b;
+}
+
+bool TimeControl::disconnectI (Interface *i)
+{
+ bool a = ITimeControl::disconnectI(i);
+ bool b = PluginBase::disconnectI(i);
+ return a || b;
+}
+
+bool TimeControl::setAlarms (const AlarmVector &al)
+{
+ if (m_alarms != al) {
+ m_waitingFor = NULL;
+
+ m_alarms = al;
+
+ slotQTimerAlarmTimeout();
+
+ notifyAlarmsChanged(m_alarms);
+ }
+ return true;
+}
+
+
+bool TimeControl::setCountdownSeconds(int n)
+{
+ int old = m_countdownSeconds;
+ m_countdownSeconds = n;
+ if (old != n)
+ notifyCountdownSecondsChanged(n);
+ return true;
+}
+
+
+bool TimeControl::startCountdown()
+{
+ m_countdownEnd = QDateTime::currentDateTime().addSecs(m_countdownSeconds);
+ m_countdownTimer.start(m_countdownSeconds * 1000, true);
+
+ notifyCountdownStarted(getCountdownEnd());
+
+ return true;
+}
+
+
+bool TimeControl::stopCountdown()
+{
+ m_countdownTimer.stop();
+ m_countdownEnd = QDateTime();
+
+ notifyCountdownStopped();
+
+ return true;
+}
+
+
+QDateTime TimeControl::getNextAlarmTime() const
+{
+ const Alarm *a = getNextAlarm();
+ if (a)
+ return a->nextAlarm();
+ else
+ return QDateTime();
+}
+
+
+const Alarm *TimeControl::getNextAlarm () const
+{
+ QDateTime now = QDateTime::currentDateTime(),
+ next;
+
+ const Alarm *retval = NULL;
+
+ for (ciAlarmVector i = m_alarms.begin(); i != m_alarms.end(); ++i) {
+ QDateTime n = i->nextAlarm();
+ if (n.isValid() && n > now && ( ! next.isValid() || n < next)) {
+ next = n;
+ retval = &(*i);
+ }
+ }
+
+ QDateTime old = m_nextAlarm_tmp;
+ m_nextAlarm_tmp = next;
+ if (old != m_nextAlarm_tmp) {
+ notifyNextAlarmChanged(retval);
+ }
+
+ return retval;
+}
+
+
+QDateTime TimeControl::getCountdownEnd () const
+{
+ if (m_countdownTimer.isActive())
+ return m_countdownEnd;
+ else
+ return QDateTime();
+}
+
+
+void TimeControl::slotQTimerCountdownTimeout()
+{
+ stopCountdown();
+
+ notifyCountdownZero();
+}
+
+
+void TimeControl::slotQTimerAlarmTimeout()
+{
+ if (m_waitingFor) {
+ notifyAlarm(*m_waitingFor);
+ }
+
+ QDateTime now = QDateTime::currentDateTime();
+ Alarm const *n = getNextAlarm();
+ QDateTime na = getNextAlarmTime();
+
+ m_waitingFor = NULL;
+
+ if (na.isValid()) {
+
+ int days = now.daysTo(na);
+ int msecs = now.time().msecsTo(na.time());
+
+ if (days > 1) {
+ m_alarmTimer.start(24 * 3600 * 1000, true);
+
+ } else if (days >= 0) {
+
+ if (days > 0)
+ msecs += days * 24 * 3600 * 1000;
+
+ if (msecs > 0) {
+ m_waitingFor = n;
+ m_alarmTimer.start(msecs, true);
+ }
+ }
+ }
+}
+
+
+void TimeControl::restoreState (KConfig *config)
+{
+ AlarmVector al;
+
+ config->setGroup(QString("timecontrol-") + name());
+
+ int nAlarms = config->readNumEntry ("nAlarms", 0);
+ for (int idx = 1; idx <= nAlarms; ++idx) {
+
+ QString num = QString().setNum(idx);
+ QDateTime d = config->readDateTimeEntry(AlarmTimeElement + num);
+ bool enable = config->readBoolEntry(AlarmEnabledElement + num, false);
+ bool daily = config->readBoolEntry(AlarmDailyElement + num, false);
+ int weekdayMask = config->readNumEntry(AlarmWeekdayMaskElement + num, 0x7F);
+ float vol = config->readDoubleNumEntry(AlarmVolumeElement + num, 1);
+ QString sid = config->readEntry(AlarmStationIDElement + num, QString::null);
+ int type = config->readNumEntry(AlarmTypeElement + num, 0);
+
+ enable &= d.isValid();
+
+ Alarm a ( d, daily, enable);
+ a.setVolumePreset(vol);
+ a.setWeekdayMask(weekdayMask);
+ a.setStationID(sid);
+ a.setAlarmType((Alarm::AlarmType)type);
+ al.push_back(a);
+ }
+
+ setAlarms(al);
+ setCountdownSeconds(config->readNumEntry("countdownSeconds", 30*60));
+}
+
+
+void TimeControl::saveState (KConfig *config) const
+{
+ config->setGroup(QString("timecontrol-") + name());
+
+ config->writeEntry("nAlarms", m_alarms.size());
+ int idx = 1;
+ ciAlarmVector end = m_alarms.end();
+ for (ciAlarmVector i = m_alarms.begin(); i != end; ++i, ++idx) {
+ QString num = QString().setNum(idx);
+ config->writeEntry (AlarmTimeElement + num, i->alarmTime());
+ config->writeEntry (AlarmEnabledElement + num, i->isEnabled());
+ config->writeEntry (AlarmDailyElement + num, i->isDaily());
+ config->writeEntry (AlarmWeekdayMaskElement + num, i->weekdayMask());
+ config->writeEntry (AlarmVolumeElement + num, i->volumePreset());
+ config->writeEntry (AlarmStationIDElement + num, i->stationID());
+ config->writeEntry (AlarmTypeElement + num, i->alarmType());
+ }
+
+ config->writeEntry("countdownSeconds", m_countdownSeconds);
+}
+
+
+ConfigPageInfo TimeControl::createConfigurationPage()
+{
+ TimeControlConfiguration *conf = new TimeControlConfiguration(NULL);
+ connectI(conf);
+ return ConfigPageInfo (conf, i18n("Alarms"), i18n("Setup Alarms"), "kradio_kalarm");
+}
+
+
+AboutPageInfo TimeControl::createAboutPage()
+{
+/* KAboutData aboutData("kradio",
+ NULL,
+ NULL,
+ I18N_NOOP("Time Control Plugin for KRadio."
+ "<P>"
+ "Provides Alarms and Sleep Countdown"
+ "<P>"),
+ KAboutData::License_GPL,
+ "(c) 2002-2005 Martin Witte, Klas Kalass",
+ 0,
+ "http://sourceforge.net/projects/kradio",
+ 0);
+ aboutData.addAuthor("Martin Witte", "", "[email protected]");
+ aboutData.addAuthor("Klas Kalass", "", "[email protected]");
+
+ return AboutPageInfo(
+ new KRadioAboutWidget(aboutData, KRadioAboutWidget::AbtTabbed),
+ i18n("Alarms"),
+ i18n("Time Control Plugin"),
+ "kradio_kalarm"
+ );*/
+ return AboutPageInfo();
+}
+
+
+#include "timecontrol.moc"
diff --git a/kradio3/plugins/timecontrol/timecontrol.h b/kradio3/plugins/timecontrol/timecontrol.h
new file mode 100644
index 0000000..f38bae9
--- /dev/null
+++ b/kradio3/plugins/timecontrol/timecontrol.h
@@ -0,0 +1,95 @@
+/***************************************************************************
+ timecontrol.h - description
+ -------------------
+ begin : Son Jan 12 2003
+ copyright : (C) 2003 by Martin Witte
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KRADIO_TIMECONTROL_H
+#define KRADIO_TIMECONTROL_H
+
+#include <qobject.h>
+#include <qtimer.h>
+
+#include "../../src/include/alarm.h"
+#include "../../src/include/plugins.h"
+#include "../../src/include/timecontrol_interfaces.h"
+
+// well, it has to be a QObject :( , but only for
+// receiving QTimer - timeouts
+
+class TimeControl : public QObject,
+ public PluginBase,
+ public ITimeControl
+{
+Q_OBJECT
+protected:
+ AlarmVector m_alarms;
+ Alarm const * m_waitingFor; // m_alarmTimer is exactly for this date/time
+
+ int m_countdownSeconds; // in seconds
+ QDateTime m_countdownEnd;
+
+ QTimer m_alarmTimer;
+ QTimer m_countdownTimer;
+
+ mutable QDateTime m_nextAlarm_tmp; // used to recognize nextAlarm changes
+
+public:
+ TimeControl (const QString &name);
+ ~TimeControl();
+
+ virtual QString pluginClassName() const { return "TimeControl"; }
+
+ virtual const QString &name() const { return PluginBase::name(); }
+ virtual QString &name() { return PluginBase::name(); }
+
+ virtual bool connectI (Interface *i);
+ virtual bool disconnectI (Interface *i);
+
+ // PluginBase
+
+public:
+ virtual void saveState (KConfig *) const;
+ virtual void restoreState (KConfig *);
+
+ virtual ConfigPageInfo createConfigurationPage();
+ virtual AboutPageInfo createAboutPage();
+
+
+ // ITimeControl Interface methods
+
+RECEIVERS:
+ bool setAlarms(const AlarmVector &sl);
+ bool setCountdownSeconds(int n);
+ bool startCountdown();
+ bool stopCountdown();
+
+ANSWERS:
+ QDateTime getNextAlarmTime () const;
+ const Alarm* getNextAlarm () const;
+ const AlarmVector & getAlarms () const { return m_alarms; }
+ int getCountdownSeconds () const { return m_countdownSeconds; }
+ QDateTime getCountdownEnd () const;
+
+
+ // slots for receiving timeout messages of timers
+
+protected slots:
+ virtual void slotQTimerAlarmTimeout();
+ virtual void slotQTimerCountdownTimeout();
+
+};
+
+
+#endif