From: Jean-Philippe Orsini Date: Fri, 6 May 2011 21:02:48 +0000 (+0000) Subject: dialog window for editing all sensors preferences X-Git-Tag: v0.8.0.5~782 X-Git-Url: https://git.wpitchoune.net/gitweb/?p=psensor.git;a=commitdiff_plain;h=6d25803806601290398a6bc65543fadc06b318c9 dialog window for editing all sensors preferences --- diff --git a/NEWS b/NEWS index 26aeaaf..81e24aa 100644 --- a/NEWS +++ b/NEWS @@ -16,6 +16,7 @@ ** avoid fetching hddtemp daemon when no hdd in the sensors list ** psensor: closing the window hides psensor instead of quitting when application indicator support is enabled. +** psensor: dialog window for editing all sensors preferences. * v0.6.2.7 diff --git a/po/Makefile.in b/po/Makefile.in index 120519a..0939971 100644 --- a/po/Makefile.in +++ b/po/Makefile.in @@ -21,7 +21,7 @@ srcdir = . top_srcdir = .. -prefix = /home/jporsini/tmp +prefix = /usr/local exec_prefix = ${prefix} datarootdir = ${prefix}/share datadir = ${datarootdir} @@ -34,12 +34,12 @@ INSTALL_DATA = ${INSTALL} -m 644 # We use $(mkdir_p). # In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as # "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions, -# ${SHELL} /home/jporsini/work/wpitchoune.net/svnpub/psensor/trunk/install-sh does not start with $(SHELL), so we add it. +# ${SHELL} /mnt/nfs4/users/jporsini/work/wpitchoune.net/svnpub/psensor/trunk/install-sh does not start with $(SHELL), so we add it. # In automake >= 1.10, /bin/mkdir -p is derived from ${MKDIR_P}, which is defined # either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake # versions, $(mkinstalldirs) and $(install_sh) are unused. -mkinstalldirs = $(SHELL) ${SHELL} /home/jporsini/work/wpitchoune.net/svnpub/psensor/trunk/install-sh -d -install_sh = $(SHELL) ${SHELL} /home/jporsini/work/wpitchoune.net/svnpub/psensor/trunk/install-sh +mkinstalldirs = $(SHELL) ${SHELL} /mnt/nfs4/users/jporsini/work/wpitchoune.net/svnpub/psensor/trunk/install-sh -d +install_sh = $(SHELL) ${SHELL} /mnt/nfs4/users/jporsini/work/wpitchoune.net/svnpub/psensor/trunk/install-sh MKDIR_P = /bin/mkdir -p mkdir_p = /bin/mkdir -p diff --git a/po/fr.po b/po/fr.po index 374efeb..d653f53 100644 --- a/po/fr.po +++ b/po/fr.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: psensor 0.6.0.9\n" "Report-Msgid-Bugs-To: jeanfi@gmail.com\n" -"POT-Creation-Date: 2011-05-03 09:31+0200\n" +"POT-Creation-Date: 2011-05-06 22:58+0200\n" "PO-Revision-Date: 2011-02-07 21:18+0100\n" "Last-Translator: Jean-Philippe Orsini \n" "Language-Team: Oriya\n" @@ -92,40 +92,40 @@ msgstr "" "ERREUR: Psensor n'a pas ete compilé avec le support de surveillance à " "distance.\n" -#: src/ui_sensorlist.c:285 +#: src/ui_sensorlist.c:200 msgid "Preferences" msgstr "Configuration" -#: src/ui_sensorlist.c:318 +#: src/ui_sensorlist.c:231 msgid "Select foreground color" msgstr "Selectionner la couleur d'avant-plan" -#: src/ui_sensorlist.c:401 src/glade/psensor-pref.glade:185 +#: src/ui_sensorlist.c:308 src/glade/psensor-pref.glade:185 msgid "Sensor" msgstr "Sonde" -#: src/ui_sensorlist.c:407 +#: src/ui_sensorlist.c:314 msgid "Current" msgstr "Actuelle" -#: src/ui_sensorlist.c:413 +#: src/ui_sensorlist.c:320 msgid "Min" msgstr "Min" -#: src/ui_sensorlist.c:419 +#: src/ui_sensorlist.c:326 msgid "Max" msgstr "Max" -#: src/ui_sensorlist.c:426 +#: src/ui_sensorlist.c:333 msgid "Color" msgstr "Couleur" -#: src/ui_sensorlist.c:439 +#: src/ui_sensorlist.c:345 msgid "Enabled" msgstr "Activée" -#: src/ui_sensorlist.c:468 src/ui_sensorlist.c:469 src/ui_sensorlist.c:470 -#: src/glade/sensor-edit.glade:25 src/glade/sensor-edit.glade:83 +#: src/ui_sensorlist.c:374 src/ui_sensorlist.c:375 src/ui_sensorlist.c:376 +#: src/glade/sensor-edit.glade:87 src/glade/sensor-edit.glade:153 msgid "N/A" msgstr "N/A" @@ -320,7 +320,7 @@ msgstr "Arrière-plan :" msgid "Background opacity:" msgstr "Opacité du fond:" -#: src/glade/psensor-pref.glade:114 src/glade/sensor-edit.glade:112 +#: src/glade/psensor-pref.glade:114 src/glade/sensor-edit.glade:184 msgid "Graph" msgstr "Graphe" @@ -379,48 +379,48 @@ msgstr "Activée" msgid "Enable Unity Launcher counter" msgstr "Activer le compteur du lanceur de Unity" -#: src/glade/sensor-edit.glade:7 +#: src/glade/sensor-edit.glade:8 msgid "Edit Sensor Preferences" msgstr "Editer La Configuration Des Sondes" -#: src/glade/sensor-edit.glade:41 +#: src/glade/sensor-edit.glade:104 msgid "Name:" msgstr "Nom:" -#: src/glade/sensor-edit.glade:70 +#: src/glade/sensor-edit.glade:139 msgid "Type:" msgstr "Type:" -#: src/glade/sensor-edit.glade:98 +#: src/glade/sensor-edit.glade:169 msgid "Id:" msgstr "Id:" -#: src/glade/sensor-edit.glade:129 +#: src/glade/sensor-edit.glade:202 #, fuzzy msgid "Color:" msgstr "Couleur:" -#: src/glade/sensor-edit.glade:142 +#: src/glade/sensor-edit.glade:216 msgid "Alarm" msgstr "Alarme" -#: src/glade/sensor-edit.glade:157 +#: src/glade/sensor-edit.glade:231 msgid "Activate desktop notifications" msgstr "Activer les notifications du bureau" -#: src/glade/sensor-edit.glade:175 +#: src/glade/sensor-edit.glade:251 msgid "Temperature limit:" msgstr "Limite de température:" -#: src/glade/sensor-edit.glade:189 +#: src/glade/sensor-edit.glade:266 msgid "Sensor Information" msgstr "Information sonde" -#: src/glade/sensor-edit.glade:202 +#: src/glade/sensor-edit.glade:279 msgid "Draw sensor curve" msgstr "Dessiner la courbe de la sonde" -#: src/glade/sensor-edit.glade:241 +#: src/glade/sensor-edit.glade:327 msgid "°C" msgstr "°C" diff --git a/po/psensor.pot b/po/psensor.pot index ea03cd1..f9861ff 100644 --- a/po/psensor.pot +++ b/po/psensor.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: jeanfi@gmail.com\n" -"POT-Creation-Date: 2011-05-03 09:31+0200\n" +"POT-Creation-Date: 2011-05-06 22:58+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -79,40 +79,40 @@ msgstr "" msgid "ERROR: Not compiled with remote sensor support.\n" msgstr "" -#: src/ui_sensorlist.c:285 +#: src/ui_sensorlist.c:200 msgid "Preferences" msgstr "" -#: src/ui_sensorlist.c:318 +#: src/ui_sensorlist.c:231 msgid "Select foreground color" msgstr "" -#: src/ui_sensorlist.c:401 src/glade/psensor-pref.glade:185 +#: src/ui_sensorlist.c:308 src/glade/psensor-pref.glade:185 msgid "Sensor" msgstr "" -#: src/ui_sensorlist.c:407 +#: src/ui_sensorlist.c:314 msgid "Current" msgstr "" -#: src/ui_sensorlist.c:413 +#: src/ui_sensorlist.c:320 msgid "Min" msgstr "" -#: src/ui_sensorlist.c:419 +#: src/ui_sensorlist.c:326 msgid "Max" msgstr "" -#: src/ui_sensorlist.c:426 +#: src/ui_sensorlist.c:333 msgid "Color" msgstr "" -#: src/ui_sensorlist.c:439 +#: src/ui_sensorlist.c:345 msgid "Enabled" msgstr "" -#: src/ui_sensorlist.c:468 src/ui_sensorlist.c:469 src/ui_sensorlist.c:470 -#: src/glade/sensor-edit.glade:25 src/glade/sensor-edit.glade:83 +#: src/ui_sensorlist.c:374 src/ui_sensorlist.c:375 src/ui_sensorlist.c:376 +#: src/glade/sensor-edit.glade:87 src/glade/sensor-edit.glade:153 msgid "N/A" msgstr "" @@ -301,7 +301,7 @@ msgstr "" msgid "Background opacity:" msgstr "" -#: src/glade/psensor-pref.glade:114 src/glade/sensor-edit.glade:112 +#: src/glade/psensor-pref.glade:114 src/glade/sensor-edit.glade:184 msgid "Graph" msgstr "" @@ -357,46 +357,46 @@ msgstr "" msgid "Enable Unity Launcher counter" msgstr "" -#: src/glade/sensor-edit.glade:7 +#: src/glade/sensor-edit.glade:8 msgid "Edit Sensor Preferences" msgstr "" -#: src/glade/sensor-edit.glade:41 +#: src/glade/sensor-edit.glade:104 msgid "Name:" msgstr "" -#: src/glade/sensor-edit.glade:70 +#: src/glade/sensor-edit.glade:139 msgid "Type:" msgstr "" -#: src/glade/sensor-edit.glade:98 +#: src/glade/sensor-edit.glade:169 msgid "Id:" msgstr "" -#: src/glade/sensor-edit.glade:129 +#: src/glade/sensor-edit.glade:202 msgid "Color:" msgstr "" -#: src/glade/sensor-edit.glade:142 +#: src/glade/sensor-edit.glade:216 msgid "Alarm" msgstr "" -#: src/glade/sensor-edit.glade:157 +#: src/glade/sensor-edit.glade:231 msgid "Activate desktop notifications" msgstr "" -#: src/glade/sensor-edit.glade:175 +#: src/glade/sensor-edit.glade:251 msgid "Temperature limit:" msgstr "" -#: src/glade/sensor-edit.glade:189 +#: src/glade/sensor-edit.glade:266 msgid "Sensor Information" msgstr "" -#: src/glade/sensor-edit.glade:202 +#: src/glade/sensor-edit.glade:279 msgid "Draw sensor curve" msgstr "" -#: src/glade/sensor-edit.glade:241 +#: src/glade/sensor-edit.glade:327 msgid "°C" msgstr "" diff --git a/po/tr.po b/po/tr.po index ed6c35c..754542c 100644 --- a/po/tr.po +++ b/po/tr.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: psensor\n" "Report-Msgid-Bugs-To: jeanfi@gmail.com\n" -"POT-Creation-Date: 2011-05-03 09:31+0200\n" +"POT-Creation-Date: 2011-05-06 22:58+0200\n" "PO-Revision-Date: 2011-04-10 13:11+0000\n" "Last-Translator: zeugma \n" "Language-Team: Turkish \n" @@ -80,40 +80,40 @@ msgstr "" msgid "ERROR: Not compiled with remote sensor support.\n" msgstr "" -#: src/ui_sensorlist.c:285 +#: src/ui_sensorlist.c:200 msgid "Preferences" msgstr "Tercihler" -#: src/ui_sensorlist.c:318 +#: src/ui_sensorlist.c:231 msgid "Select foreground color" msgstr "" -#: src/ui_sensorlist.c:401 src/glade/psensor-pref.glade:185 +#: src/ui_sensorlist.c:308 src/glade/psensor-pref.glade:185 msgid "Sensor" msgstr "Algılayıcı" -#: src/ui_sensorlist.c:407 +#: src/ui_sensorlist.c:314 msgid "Current" msgstr "" -#: src/ui_sensorlist.c:413 +#: src/ui_sensorlist.c:320 msgid "Min" msgstr "" -#: src/ui_sensorlist.c:419 +#: src/ui_sensorlist.c:326 msgid "Max" msgstr "" -#: src/ui_sensorlist.c:426 +#: src/ui_sensorlist.c:333 msgid "Color" msgstr "Renk" -#: src/ui_sensorlist.c:439 +#: src/ui_sensorlist.c:345 msgid "Enabled" msgstr "" -#: src/ui_sensorlist.c:468 src/ui_sensorlist.c:469 src/ui_sensorlist.c:470 -#: src/glade/sensor-edit.glade:25 src/glade/sensor-edit.glade:83 +#: src/ui_sensorlist.c:374 src/ui_sensorlist.c:375 src/ui_sensorlist.c:376 +#: src/glade/sensor-edit.glade:87 src/glade/sensor-edit.glade:153 msgid "N/A" msgstr "" @@ -303,7 +303,7 @@ msgstr "Arkaplan:" msgid "Background opacity:" msgstr "Arkaplan belirginliği:" -#: src/glade/psensor-pref.glade:114 src/glade/sensor-edit.glade:112 +#: src/glade/psensor-pref.glade:114 src/glade/sensor-edit.glade:184 msgid "Graph" msgstr "Grafik" @@ -359,48 +359,48 @@ msgstr "" msgid "Enable Unity Launcher counter" msgstr "" -#: src/glade/sensor-edit.glade:7 +#: src/glade/sensor-edit.glade:8 #, fuzzy msgid "Edit Sensor Preferences" msgstr "Tercihleri düzenle" -#: src/glade/sensor-edit.glade:41 +#: src/glade/sensor-edit.glade:104 msgid "Name:" msgstr "İsim:" -#: src/glade/sensor-edit.glade:70 +#: src/glade/sensor-edit.glade:139 msgid "Type:" msgstr "Tür:" -#: src/glade/sensor-edit.glade:98 +#: src/glade/sensor-edit.glade:169 msgid "Id:" msgstr "" -#: src/glade/sensor-edit.glade:129 +#: src/glade/sensor-edit.glade:202 msgid "Color:" msgstr "Renk :" -#: src/glade/sensor-edit.glade:142 +#: src/glade/sensor-edit.glade:216 msgid "Alarm" msgstr "Alarm" -#: src/glade/sensor-edit.glade:157 +#: src/glade/sensor-edit.glade:231 msgid "Activate desktop notifications" msgstr "" -#: src/glade/sensor-edit.glade:175 +#: src/glade/sensor-edit.glade:251 msgid "Temperature limit:" msgstr "" -#: src/glade/sensor-edit.glade:189 +#: src/glade/sensor-edit.glade:266 msgid "Sensor Information" msgstr "" -#: src/glade/sensor-edit.glade:202 +#: src/glade/sensor-edit.glade:279 msgid "Draw sensor curve" msgstr "" -#: src/glade/sensor-edit.glade:241 +#: src/glade/sensor-edit.glade:327 msgid "°C" msgstr "" diff --git a/po/zh_CN.po b/po/zh_CN.po index e9e3d59..1456b2d 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: psensor 0.6.0.10\n" "Report-Msgid-Bugs-To: jeanfi@gmail.com\n" -"POT-Creation-Date: 2011-05-03 09:31+0200\n" +"POT-Creation-Date: 2011-05-06 22:58+0200\n" "PO-Revision-Date: 2011-02-07 22:21+0100\n" "Last-Translator: 大宝 \n" "Language-Team: Chinese (simplified)\n" @@ -78,40 +78,40 @@ msgstr "" msgid "ERROR: Not compiled with remote sensor support.\n" msgstr "" -#: src/ui_sensorlist.c:285 +#: src/ui_sensorlist.c:200 msgid "Preferences" msgstr "选项" -#: src/ui_sensorlist.c:318 +#: src/ui_sensorlist.c:231 msgid "Select foreground color" msgstr "" -#: src/ui_sensorlist.c:401 src/glade/psensor-pref.glade:185 +#: src/ui_sensorlist.c:308 src/glade/psensor-pref.glade:185 msgid "Sensor" msgstr "监视设备" -#: src/ui_sensorlist.c:407 +#: src/ui_sensorlist.c:314 msgid "Current" msgstr "当前" -#: src/ui_sensorlist.c:413 +#: src/ui_sensorlist.c:320 msgid "Min" msgstr "最小值" -#: src/ui_sensorlist.c:419 +#: src/ui_sensorlist.c:326 msgid "Max" msgstr "最大值" -#: src/ui_sensorlist.c:426 +#: src/ui_sensorlist.c:333 msgid "Color" msgstr "颜色" -#: src/ui_sensorlist.c:439 +#: src/ui_sensorlist.c:345 msgid "Enabled" msgstr "激活" -#: src/ui_sensorlist.c:468 src/ui_sensorlist.c:469 src/ui_sensorlist.c:470 -#: src/glade/sensor-edit.glade:25 src/glade/sensor-edit.glade:83 +#: src/ui_sensorlist.c:374 src/ui_sensorlist.c:375 src/ui_sensorlist.c:376 +#: src/glade/sensor-edit.glade:87 src/glade/sensor-edit.glade:153 msgid "N/A" msgstr "" @@ -301,7 +301,7 @@ msgstr "背景:" msgid "Background opacity:" msgstr "背景亮度:" -#: src/glade/psensor-pref.glade:114 src/glade/sensor-edit.glade:112 +#: src/glade/psensor-pref.glade:114 src/glade/sensor-edit.glade:184 msgid "Graph" msgstr "图表" @@ -358,48 +358,48 @@ msgstr "激活" msgid "Enable Unity Launcher counter" msgstr "" -#: src/glade/sensor-edit.glade:7 +#: src/glade/sensor-edit.glade:8 msgid "Edit Sensor Preferences" msgstr "监视设备选项" -#: src/glade/sensor-edit.glade:41 +#: src/glade/sensor-edit.glade:104 msgid "Name:" msgstr "名称:" -#: src/glade/sensor-edit.glade:70 +#: src/glade/sensor-edit.glade:139 msgid "Type:" msgstr "类型:" -#: src/glade/sensor-edit.glade:98 +#: src/glade/sensor-edit.glade:169 msgid "Id:" msgstr "标识:" -#: src/glade/sensor-edit.glade:129 +#: src/glade/sensor-edit.glade:202 #, fuzzy msgid "Color:" msgstr "颜色:" -#: src/glade/sensor-edit.glade:142 +#: src/glade/sensor-edit.glade:216 msgid "Alarm" msgstr "警告信息" -#: src/glade/sensor-edit.glade:157 +#: src/glade/sensor-edit.glade:231 msgid "Activate desktop notifications" msgstr "激活桌面气泡提示" -#: src/glade/sensor-edit.glade:175 +#: src/glade/sensor-edit.glade:251 msgid "Temperature limit:" msgstr "温度警戒线:" -#: src/glade/sensor-edit.glade:189 +#: src/glade/sensor-edit.glade:266 msgid "Sensor Information" msgstr "设备信息" -#: src/glade/sensor-edit.glade:202 +#: src/glade/sensor-edit.glade:279 msgid "Draw sensor curve" msgstr "绘制监视曲线" -#: src/glade/sensor-edit.glade:241 +#: src/glade/sensor-edit.glade:327 msgid "°C" msgstr "" diff --git a/src/glade/sensor-edit.glade b/src/glade/sensor-edit.glade index fd5acea..8b098b7 100644 --- a/src/glade/sensor-edit.glade +++ b/src/glade/sensor-edit.glade @@ -3,6 +3,7 @@ + False 5 Edit Sensor Preferences True @@ -12,308 +13,365 @@ True + False 2 - - + + True - 10 - 2 - - - True - 0 - N/A - - - 1 - 2 - 1 - 2 - 4 - 4 - - - - - True - 0 - 10 - Name: - - - 3 - 4 - GTK_FILL - 4 - 4 - - + False + end - + + gtk-ok True True - • - - - 1 - 2 - 3 - 4 - 4 - 4 - - - - - True - 0 - Type: - - - 2 - 3 - 14 - 4 - - - - - True - 0 - N/A - - - 1 - 2 - 2 - 3 - 4 - 4 - - - - - True - 0 - Id: - - - 1 - 2 - GTK_FILL - 14 - 4 - - - - - True - 0 - Graph - - - - - - 2 - 4 - 5 - 4 - 4 - - - - - True - 0 - Color: - - - 6 - 7 - 14 - 4 - - - - - True - 0 - Alarm - - - + True + False + True - 2 - 7 - 8 - 4 - 4 + False + False + 0 - - Activate desktop notifications + + gtk-cancel True True - False - True - - - 2 - 8 - 9 - 14 - 4 - - - - - True - 0 - Temperature limit: - - - 9 - 10 - GTK_FILL - 14 - 4 - - - - - True - 0 - Sensor Information - - - + True + False + True - 2 - 4 - 4 + False + False + 1 + + + False + True + end + 0 + + + + + True + True - - Draw sensor curve + True True - False - 0.41999998688697815 - True + sensors_liststore - 2 - 5 - 6 - 14 - 4 + False + True - + True + False + 10 + 2 + + + True + False + 0 + N/A + + + 1 + 2 + 1 + 2 + 4 + 4 + + + + + True + False + 0 + 10 + Name: + + + 3 + 4 + GTK_FILL + 4 + 4 + + - + True True - 3 • - temp_limit - 1 - True - True - if-valid + True + False + False + True + True - False - 0 + 1 + 2 + 3 + 4 + 4 + 4 - + True + False 0 - °C + Type: - 1 + 2 + 3 + 14 + 4 + + + + + True + False + 0 + N/A + + + 1 + 2 + 2 + 3 + 4 + 4 + + + + + True + False + 0 + Id: + + + 1 + 2 + GTK_FILL + 14 + 4 + + + + + True + False + 0 + Graph + + + + + + 2 + 4 + 5 + 4 + 4 + + + + + True + False + 0 + Color: + + + 6 + 7 + 14 + 4 + + + + + True + False + 0 + Alarm + + + + + + 2 + 7 + 8 + 4 + 4 + + + + + Activate desktop notifications + True + True + False + False + True + + + 2 + 8 + 9 + 14 + 4 + + + + + True + False + 0 + Temperature limit: + + + 9 + 10 + GTK_FILL + 14 + 4 + + + + + True + False + 0 + Sensor Information + + + + + + 2 + 4 + 4 + + + + + Draw sensor curve + True + True + False + False + 0.41999998688697815 + True + + + 2 + 5 + 6 + 14 + 4 + + + + + True + False + + + True + True + 3 + • + True + False + False + True + True + temp_limit + 1 + True + True + if-valid + + + False + True + 0 + + + + + True + False + 0 + °C + + + True + True + 1 + + + + + 1 + 2 + 9 + 10 + + + + + True + True + True + False + 0 + #000000000000 + + + 1 + 2 + 6 + 7 + + 4 + 4 - 1 - 2 - 9 - 10 - - - - - True - True - True - 0 - #000000000000 - - - 1 - 2 - 6 - 7 - - 4 - 4 + True + False + True + True 1 - - - True - end - - - gtk-ok - True - True - True - True - - - False - False - 0 - - - - - gtk-cancel - True - True - True - True - - - False - False - 1 - - - - - False - end - 0 - - @@ -321,6 +379,12 @@ btn_cancel + + + + + + 256 1 diff --git a/src/ui_sensorpref.c b/src/ui_sensorpref.c index ecd6193..11753e7 100644 --- a/src/ui_sensorpref.c +++ b/src/ui_sensorpref.c @@ -27,47 +27,228 @@ #include "ui_sensorpref.h" #include "ui_color.h" -void ui_sensorpref_dialog_run(struct psensor *sensor, struct ui_psensor *ui) -{ - GtkDialog *diag; - gint result; +struct sensor_pref { + struct psensor *sensor; + char *name; + int enabled; + struct color *color; + int alarm_enabled; + double alarm_limit; +}; + +struct cb_data { + struct ui_psensor *ui; GtkBuilder *builder; - GError *error = NULL; + struct sensor_pref **prefs; +}; + +static struct sensor_pref *sensor_pref_new(struct psensor *s) +{ + struct sensor_pref *p = malloc(sizeof(struct sensor_pref)); + + p->sensor = s; + + p->name = strdup(s->name); + p->enabled = s->enabled; + p->alarm_enabled = s->alarm_enabled; + p->alarm_limit = s->alarm_limit; + p->color = color_dup(s->color); + + return p; +} + +static void sensor_pref_free(struct sensor_pref *p) +{ + if (!p) + return ; + + free(p->name); + free(p->color); + + free(p); +} + +static struct sensor_pref **sensor_pref_list_new(struct psensor **sensors) +{ + int n, i; + struct sensor_pref **pref_list; + + n = psensor_list_size(sensors); + pref_list = malloc(sizeof(struct sensor_pref *) * (n+1)); + + for (i = 0; i < n; i++) + pref_list[i] = sensor_pref_new(sensors[i]); + + pref_list[n] = NULL; + + return pref_list; +} + +static void sensor_pref_list_free(struct sensor_pref **list) +{ + struct sensor_pref **cur = list; + + while (*cur) { + sensor_pref_free(*cur); + + cur++; + } + + free(list); +} + +static struct sensor_pref * +sensor_pref_get(struct sensor_pref **ps, struct psensor *s) +{ + struct sensor_pref **p_cur = ps; + + while (*p_cur) { + struct sensor_pref *p = *p_cur; + + if (p->sensor == s) + return p; + + p_cur++; + } + + return NULL; +} + +static struct sensor_pref * +get_seleted_sensor_pref(GtkBuilder *builder, struct sensor_pref **ps) +{ + GtkTreeModel *model; + GtkTreeIter iter; + struct sensor_pref *pref = NULL; + GtkTreeSelection *selection; + GtkTreeView *tree; + + tree = GTK_TREE_VIEW(gtk_builder_get_object(builder, + "sensors_list")); + + selection = gtk_tree_view_get_selection(tree); + + if (gtk_tree_selection_get_selected(selection, &model, &iter)) { + GtkTreePath *p = gtk_tree_model_get_path(model, &iter); + gint *indices = gtk_tree_path_get_indices(p); + + pref = ps[*indices]; + + gtk_tree_path_free(p); + } + + return pref; +} + +static void on_name_changed(GtkEntry *entry, gpointer data) +{ + struct cb_data *cbdata = data; + struct sensor_pref *p; + const char *str; + + str = gtk_entry_get_text(entry); + + p = get_seleted_sensor_pref(cbdata->builder, cbdata->prefs); + + if (p && strcmp(p->name, str)) { + free(p->name); + p->name = strdup(str); + } +} + +static void +on_drawed_toggled(GtkToggleButton *btn, gpointer data) +{ + struct cb_data *cbdata = data; + struct sensor_pref *p; + + p = get_seleted_sensor_pref(cbdata->builder, cbdata->prefs); + + if (p) + p->enabled = gtk_toggle_button_get_active(btn); +} + +static void +on_alarm_toggled(GtkToggleButton *btn, gpointer data) +{ + struct cb_data *cbdata = data; + struct sensor_pref *p; + + p = get_seleted_sensor_pref(cbdata->builder, cbdata->prefs); + + if (p) + p->alarm_enabled = gtk_toggle_button_get_active(btn); +} + +static void on_color_set(GtkColorButton *widget, gpointer data) +{ + struct cb_data *cbdata = data; + struct sensor_pref *p; + GdkColor color; + + p = get_seleted_sensor_pref(cbdata->builder, cbdata->prefs); + + if (p) { + gtk_color_button_get_color(widget, &color); + color_set(p->color, color.red, color.green, color.blue); + } +} + +static void on_temp_limit_changed(GtkSpinButton *btn, gpointer data) +{ + struct cb_data *cbdata = data; + struct sensor_pref *p; + + p = get_seleted_sensor_pref(cbdata->builder, cbdata->prefs); + + if (p) + p->alarm_limit = gtk_spin_button_get_value(btn); +} + +static void connect_signals(GtkBuilder *builder, struct cb_data *cbdata) +{ + g_signal_connect(gtk_builder_get_object(builder, "sensor_name"), + "changed", G_CALLBACK(on_name_changed), cbdata); + + g_signal_connect(gtk_builder_get_object(builder, "sensor_draw"), + "toggled", G_CALLBACK(on_drawed_toggled), cbdata); + + g_signal_connect(gtk_builder_get_object(builder, "sensor_color"), + "color-set", G_CALLBACK(on_color_set), cbdata); + + g_signal_connect(gtk_builder_get_object(builder, "sensor_alarm"), + "toggled", G_CALLBACK(on_alarm_toggled), cbdata); + + g_signal_connect(gtk_builder_get_object(builder, "sensor_temp_limit"), + "value-changed", G_CALLBACK(on_temp_limit_changed), + cbdata); +} + +static void +update_pref(struct psensor *s, struct sensor_pref **prefs, GtkBuilder *builder) +{ GtkLabel *w_id, *w_type; GtkEntry *w_name; GtkToggleButton *w_draw, *w_alarm; GtkColorButton *w_color; GtkSpinButton *w_temp_limit; GdkColor *color; - guint ok; - - builder = gtk_builder_new(); - - ok = gtk_builder_add_from_file - (builder, - PACKAGE_DATA_DIR G_DIR_SEPARATOR_S "sensor-edit.glade", - &error); - - if (!ok) { - g_warning("%s", error->message); - g_free(error); - return ; - } + struct sensor_pref *p = sensor_pref_get(prefs, s); w_id = GTK_LABEL(gtk_builder_get_object(builder, "sensor_id")); - gtk_label_set_text(w_id, sensor->id); + gtk_label_set_text(w_id, s->id); w_type = GTK_LABEL(gtk_builder_get_object(builder, "sensor_type")); - gtk_label_set_text(w_type, psensor_type_to_str(sensor->type)); + gtk_label_set_text(w_type, psensor_type_to_str(s->type)); w_name = GTK_ENTRY(gtk_builder_get_object(builder, "sensor_name")); - gtk_entry_set_text(w_name, sensor->name); + gtk_entry_set_text(w_name, p->name); w_draw = GTK_TOGGLE_BUTTON(gtk_builder_get_object(builder, "sensor_draw")); - gtk_toggle_button_set_active(w_draw, sensor->enabled); + gtk_toggle_button_set_active(w_draw, p->enabled); - color = color_to_gdkcolor(sensor->color); + color = color_to_gdkcolor(p->color); w_color = GTK_COLOR_BUTTON(gtk_builder_get_object(builder, "sensor_color")); gtk_color_button_set_color(w_color, color); @@ -78,41 +259,174 @@ void ui_sensorpref_dialog_run(struct psensor *sensor, struct ui_psensor *ui) = GTK_SPIN_BUTTON(gtk_builder_get_object(builder, "sensor_temp_limit")); - if (is_temp_type(sensor->type)) { - gtk_toggle_button_set_active(w_alarm, sensor->alarm_enabled); - gtk_spin_button_set_value(w_temp_limit, sensor->alarm_limit); + if (is_temp_type(s->type)) { + gtk_toggle_button_set_active(w_alarm, p->alarm_enabled); + gtk_spin_button_set_value(w_temp_limit, p->alarm_limit); + gtk_widget_set_sensitive(GTK_WIDGET(w_alarm), TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(w_temp_limit), TRUE); } else { + gtk_toggle_button_set_active(w_alarm, 0); + gtk_spin_button_set_value(w_temp_limit, 0); gtk_widget_set_sensitive(GTK_WIDGET(w_alarm), FALSE); gtk_widget_set_sensitive(GTK_WIDGET(w_temp_limit), FALSE); } +} - diag = GTK_DIALOG(gtk_builder_get_object(builder, "dialog1")); - result = gtk_dialog_run(diag); +static void on_changed(GtkTreeSelection *selection, gpointer data) +{ + GtkTreeModel *model; + GtkTreeIter iter; + struct cb_data *cbdata = data; + struct ui_psensor *ui = cbdata->ui; - if (result == GTK_RESPONSE_ACCEPT) { + if (gtk_tree_selection_get_selected(selection, &model, &iter)) { + GtkTreePath *p = gtk_tree_model_get_path(model, &iter); + gint *indices = gtk_tree_path_get_indices(p); + struct psensor *s = *(ui->sensors + *indices); + + update_pref(s, cbdata->prefs, cbdata->builder); + + gtk_tree_path_free(p); + } +} + +static void +select_sensor(struct psensor *s, struct psensor **sensors, GtkTreeView *tree) +{ + struct psensor **s_cur = sensors; + int i = 0; + GtkTreePath *p = NULL; + + while (*s_cur) { + if (s == *s_cur) { + p = gtk_tree_path_new_from_indices(i, -1); + break; + } + + i++; + s_cur++; + } + + if (p) { + GtkTreeSelection *s = gtk_tree_view_get_selection(tree); + + gtk_tree_selection_select_path(s, p); + gtk_tree_path_free(p); + } +} + +static void +apply_prefs(struct sensor_pref **prefs, struct psensor **sensors) +{ + int n = psensor_list_size(sensors); + int i; + + for (i = 0; i < n; i++) { + struct psensor *s = sensors[i]; + struct sensor_pref *p = prefs[i]; + + if (strcmp(p->name, s->name)) { + free(s->name); + s->name = strdup(p->name); + config_set_sensor_name(s->id, s->name); + } + + if (s->enabled != p->enabled) { + s->enabled = p->enabled; + config_set_sensor_enabled(s->id, s->enabled); + } + + if (s->alarm_limit != p->alarm_limit) { + s->alarm_limit = p->alarm_limit; + config_set_sensor_alarm_limit(s->id, + s->alarm_limit); + } + + if (s->alarm_enabled != p->alarm_enabled) { + s->alarm_enabled = p->alarm_enabled; + config_set_sensor_alarm_enabled(s->id, + s->alarm_enabled); + } + + color_set(s->color, + p->color->red, p->color->green, p->color->blue); + config_set_sensor_color(s->id, s->color); + } +} + +void ui_sensorpref_dialog_run(struct psensor *sensor, struct ui_psensor *ui) +{ + GtkDialog *diag; + gint result; + GtkBuilder *builder; + GError *error = NULL; + GtkTreeView *w_sensors_list; + guint ok; + GtkCellRenderer *renderer; + GtkListStore *store; + struct psensor **s_cur; + GtkTreeSelection *selection; + struct cb_data cbdata; + + cbdata.ui = ui; + cbdata.prefs = sensor_pref_list_new(ui->sensors); + + builder = gtk_builder_new(); + cbdata.builder = builder; - free(sensor->name); - sensor->name = strdup(gtk_entry_get_text(w_name)); - config_set_sensor_name(sensor->id, sensor->name); + ok = gtk_builder_add_from_file + (builder, + PACKAGE_DATA_DIR G_DIR_SEPARATOR_S "sensor-edit.glade", + &error); + + if (!ok) { + g_warning("%s", error->message); + g_free(error); + return ; + } - sensor->enabled = gtk_toggle_button_get_active(w_draw); - config_set_sensor_enabled(sensor->id, sensor->enabled); + update_pref(sensor, cbdata.prefs, builder); + connect_signals(builder, &cbdata); - sensor->alarm_limit = gtk_spin_button_get_value(w_temp_limit); - config_set_sensor_alarm_limit(sensor->id, sensor->alarm_limit); + w_sensors_list + = GTK_TREE_VIEW(gtk_builder_get_object(builder, + "sensors_list")); - sensor->alarm_enabled = gtk_toggle_button_get_active(w_alarm); - config_set_sensor_alarm_enabled(sensor->id, - sensor->alarm_enabled); + renderer = gtk_cell_renderer_text_new(); + gtk_tree_view_insert_column_with_attributes(w_sensors_list, + -1, + _("Sensor Name"), + renderer, + "text", 0, NULL); - gtk_color_button_get_color(w_color, color); - color_set(sensor->color, color->red, color->green, color->blue); - config_set_sensor_color(sensor->id, sensor->color); + store = GTK_LIST_STORE(gtk_tree_view_get_model(w_sensors_list)); + s_cur = ui->sensors; + while (*s_cur) { + GtkTreeIter iter; + struct psensor *s = *s_cur; + + gtk_list_store_append(store, &iter); + gtk_list_store_set(store, &iter, 0, s->name, -1); + + s_cur++; + } + + selection = gtk_tree_view_get_selection(w_sensors_list); + g_signal_connect(selection, "changed", G_CALLBACK(on_changed), &cbdata); + select_sensor(sensor, ui->sensors, w_sensors_list); + + diag = GTK_DIALOG(gtk_builder_get_object(builder, "dialog1")); + result = gtk_dialog_run(diag); + + if (result == GTK_RESPONSE_ACCEPT) { + apply_prefs(cbdata.prefs, ui->sensors); ui_sensorlist_update_sensors_preferences(ui); } g_object_unref(G_OBJECT(builder)); gtk_widget_destroy(GTK_WIDGET(diag)); + + sensor_pref_list_free(cbdata.prefs); }