Merge branch 'master' of https://vcs.maemo.org/git/livewp into accelerometer
[livewp] / applet / src / livewp-settings.c
1 /* vim: set sw=4 ts=4 et: */
2 /*
3  * This file is part of Live Wallpaper (livewp)
4  * 
5  * Copyright (C) 2010 Vlad Vasiliev
6  * Copyright (C) 2010 Tanya Makova
7  *       for the code
8  * 
9  * This software is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU Lesser General Public License
11  * as published by the Free Software Foundation; either version 2.1 of
12  * the License, or (at your option) any later version.
13  * 
14  * This software is distributed in the hope that it will be useful, but
15  * WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17  * Lesser General Public License for more details.
18  * 
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with this software; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
22  * 02110-1301 USA
23 */
24 /*******************************************************************************/
25 #include "livewp-settings.h"
26 /*******************************************************************************/
27 void lw_about(void){
28
29     GtkWidget *window = NULL,
30     *vbox = NULL,
31     *label_about = NULL;
32     window = gtk_dialog_new();
33     gtk_window_set_title(GTK_WINDOW(window), _("About"));
34     gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
35     gtk_window_set_modal(GTK_WINDOW(window), TRUE);
36     vbox = gtk_vbox_new (FALSE, 5);
37     label_about = gtk_label_new (_("Live Wallpaper\n Version 0.5 \n Copyright(c) 2010\n \
38 Tanya Makova\n Vlad Vasiliev\n \
39 Copyright(c) 2010 for design themes Berlin and Modern Vasya Bobrikov\n \
40 Copyright(c) 2010 for design theme Matrix Andrew Zhilin\n \
41 Translators:\n \
42 Finnish - Marko Vertainen\n \
43 Spain  - Alejandro López\n \
44 Russian - Tanya Makova \n \
45           Vlad Vasiliev\n")); 
46     gtk_box_pack_start (GTK_BOX (vbox), label_about, FALSE, FALSE, 0);
47     gtk_box_pack_start(GTK_BOX(GTK_DIALOG(window)->vbox),
48                                    vbox, TRUE, TRUE, 0);
49     gtk_widget_show (label_about);
50     gtk_widget_show (vbox);
51     gtk_widget_show (window);
52     gtk_dialog_run(GTK_DIALOG(window));
53
54 }
55 /*******************************************************************************/
56 GtkWidget *
57 create_theme_selector (void)
58 {
59       GtkWidget *selector;
60
61       selector = hildon_touch_selector_new_text ();
62
63       hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (selector), _("Berlin"));
64       hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (selector), _("Modern"));
65       hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (selector), _("Matrix"));
66       hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (selector), _("Accel"));
67       return selector;
68 }
69 /*******************************************************************************/
70 GtkWidget *
71 create_themes_button (gchar *theme){
72
73     GtkWidget *button;
74     GtkWidget *selector;
75
76     selector = create_theme_selector();
77     button = hildon_picker_button_new (HILDON_SIZE_AUTO, HILDON_BUTTON_ARRANGEMENT_VERTICAL);
78     hildon_button_set_title (HILDON_BUTTON (button), _("Theme"));
79     hildon_picker_button_set_selector (HILDON_PICKER_BUTTON (button),
80                                                        HILDON_TOUCH_SELECTOR (selector));
81     if (theme) {
82         if (!strcmp(theme, "Berlin")){
83             hildon_touch_selector_set_active (HILDON_TOUCH_SELECTOR (selector), 0, 0);
84             hildon_button_set_value(HILDON_BUTTON(button), _("Berlin"));
85         }
86         if (!strcmp(theme, "Modern")){
87             hildon_touch_selector_set_active (HILDON_TOUCH_SELECTOR (selector), 0, 1);
88             hildon_button_set_value(HILDON_BUTTON(button), _("Modern"));
89         }
90         if (!strcmp(theme, "Matrix")){
91             hildon_touch_selector_set_active (HILDON_TOUCH_SELECTOR (selector), 0, 2);
92             hildon_button_set_value(HILDON_BUTTON(button), _("Matrix"));
93         }
94         if (!strcmp(theme, "Accel")){
95             hildon_touch_selector_set_active (HILDON_TOUCH_SELECTOR (selector), 0, 2);
96             hildon_button_set_value(HILDON_BUTTON(button), _("Accel"));
97         }
98
99
100     }
101     return button;
102 }
103
104 /*******************************************************************************/
105 GtkWidget *
106 create_rich_animation_button (gboolean active)
107 {
108     GtkWidget *button;
109     button = hildon_check_button_new (HILDON_SIZE_AUTO);
110     gtk_button_set_label (GTK_BUTTON (button), _("Rich Animation"));
111     hildon_check_button_set_active(HILDON_CHECK_BUTTON(button), active);
112     return button;
113 }
114 /*******************************************************************************/
115 GtkWidget *
116 create_enable_button (gboolean active)
117 {
118     GtkWidget *button;
119     button = hildon_check_button_new (HILDON_SIZE_AUTO);
120     gtk_button_set_label (GTK_BUTTON (button), _("Enable"));
121     hildon_check_button_set_active(HILDON_CHECK_BUTTON(button), active);
122     return button;
123 }
124
125 /*******************************************************************************/
126 void
127 show_settings(GtkWidget *widget, Animation_WallpaperPrivate *priv){
128     lw_settings(priv, NULL);
129 }
130 /*******************************************************************************/
131 void 
132 lw_settings(Animation_WallpaperPrivate *priv, gpointer data){
133     gint result;
134     GtkWidget *window = NULL;
135     GtkWidget *save_button;
136     GtkWidget *theme_button;
137     GtkWidget *enable_button;
138     GtkWidget *rich_animation_button;
139
140     window = gtk_dialog_new();
141
142     gtk_window_set_title(GTK_WINDOW(window), _("Live Wallpaper Settings"));
143     gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
144     gtk_window_set_modal(GTK_WINDOW(window), TRUE);
145     /* Create Enable button */
146     enable_button = create_enable_button(check_applet_state()); 
147     gtk_box_pack_start(GTK_BOX(GTK_DIALOG(window)->vbox),
148                                    enable_button, TRUE, TRUE, 5);
149     /* Create Theme button */
150     theme_button = create_themes_button(priv->theme);
151     gtk_box_pack_start(GTK_BOX(GTK_DIALOG(window)->vbox),
152                                    theme_button, TRUE, TRUE, 5);
153     /* Create rich animation button */  
154     rich_animation_button = create_rich_animation_button(priv->rich_animation);
155     gtk_box_pack_start(GTK_BOX(GTK_DIALOG(window)->vbox),
156                                    rich_animation_button, TRUE, TRUE, 5);
157     gtk_widget_show (enable_button);
158     gtk_widget_show (theme_button);
159     gtk_widget_show (rich_animation_button);
160     gtk_widget_show (window);
161     gtk_dialog_add_button(GTK_DIALOG(window), _("About"), GTK_RESPONSE_NO);
162     save_button = gtk_dialog_add_button(GTK_DIALOG(window), _("Save"), GTK_RESPONSE_YES);
163
164     result = gtk_dialog_run(GTK_DIALOG(window));
165
166     switch(result){
167         case GTK_RESPONSE_YES:
168             /* Check theme */
169             if (hildon_button_get_value(HILDON_BUTTON (theme_button))){
170                 if (priv->theme)
171                     g_free(priv->theme);
172                 if (!strcmp(hildon_button_get_value(HILDON_BUTTON (theme_button)), _("Berlin")))
173                     priv->theme = g_strdup("Berlin");
174                 if (!strcmp(hildon_button_get_value(HILDON_BUTTON (theme_button)), _("Modern")))
175                     priv->theme = g_strdup("Modern");
176                 if (!strcmp(hildon_button_get_value(HILDON_BUTTON (theme_button)), _("Matrix")))
177                     priv->theme = g_strdup("Matrix");
178                 if (!strcmp(hildon_button_get_value(HILDON_BUTTON (theme_button)), _("Accel")))
179                     priv->theme = g_strdup("Accel");
180             }
181             /* Check rich animation */
182             if (hildon_check_button_get_active (HILDON_CHECK_BUTTON(rich_animation_button)))
183                 priv->rich_animation = TRUE;
184             else
185                 priv->rich_animation = FALSE;
186             /* Save config */
187             save_config(priv);
188             /* action with applet */
189             if (hildon_check_button_get_active (HILDON_CHECK_BUTTON(enable_button))){
190                     if (!check_applet_state())
191                         start_applet();
192                     else
193                         send_dbus_signal (priv,
194                               LIVEWP_SIGNAL_INTERFACE,
195                               LIVEWP_SIGNAL_PATH,
196                               LIVEWP_RELOAD_CONFIG);
197             }else
198                     if (check_applet_state())
199                         stop_applet();
200
201             break;
202         default:
203         case GTK_RESPONSE_OK:
204         break;
205         case GTK_RESPONSE_NO:
206             gtk_widget_destroy(window);
207             window = NULL;
208             lw_about();
209         break;
210     }
211     if (window)
212         gtk_widget_destroy(window);
213 }
214 /*******************************************************************************/
215 gboolean
216 check_applet_state(void){
217     FILE    *file_in = NULL;
218     gchar buffer[2048];
219     gboolean result = FALSE;
220
221     file_in = fopen("/home/user/.config/hildon-desktop/home.plugins","r");
222     if (file_in){
223
224         fprintf(stderr,"Check applet state\n");
225         while (!feof(file_in)) {
226                 memset(buffer, 0, sizeof(buffer));
227                 fgets(buffer, sizeof(buffer) - 1, file_in);
228                 if (!strcmp(buffer, 
229                             "X-Desktop-File=/usr/share/applications/hildon-home/livewp-home-widget.desktop\n")){
230                     result = TRUE;
231                     break;
232                 }
233        }
234         fclose(file_in);
235     }
236     return result;
237 }
238 /*******************************************************************************/
239 void
240 start_applet(void){
241
242     HDConfigFile *config_file = NULL;
243     GKeyFile *gkey_file = NULL;
244
245     config_file = hd_config_file_new(NULL, "/home/user/.config/hildon-desktop/", "home.plugins");
246     
247     gkey_file = hd_config_file_load_file(config_file, FALSE);
248     if (gkey_file){
249         g_key_file_set_string (gkey_file, "livewp-home-widget.desktop-0", "X-Desktop-File", "/usr/share/applications/hildon-home/livewp-home-widget.desktop");
250         hd_config_file_save_file( config_file, gkey_file);
251         g_key_file_free(gkey_file);
252     }else
253         fprintf(stderr, "Problem with config file");
254     g_object_unref(config_file);
255 }
256 /*******************************************************************************/
257 void
258 stop_applet(void){
259     FILE    *file_in;
260     FILE    *file_out;
261     gchar buffer[2048];
262
263     file_in = fopen("/home/user/.config/hildon-desktop/home.plugins","r");
264     file_out = fopen("/tmp/livewallpaper.plugins","w");
265     if (file_in && file_out){
266         while (!feof(file_in)) {
267             memset(buffer, 0, sizeof(buffer));
268             fgets(buffer, sizeof(buffer) - 1, file_in);
269             if (strcmp(buffer, "[livewp-home-widget.desktop-0]\n") &&
270                 strcmp(buffer, "X-Desktop-File=/usr/share/applications/hildon-home/livewp-home-widget.desktop\n"))
271                 fputs(buffer, file_out);
272         }
273         fclose(file_out);
274         fclose(file_in);
275         file_in = fopen("/tmp/livewallpaper.plugins","r");
276         file_out = fopen("/home/user/.config/hildon-desktop/home.plugins","w");
277         if (file_in && file_out){
278             while (!feof(file_in)){
279                 memset(buffer, 0, sizeof(buffer));
280                 fgets(buffer, sizeof(buffer) - 1, file_in);
281                 fputs(buffer, file_out);
282             }
283             fclose(file_out);
284             fclose(file_in);
285             unlink ("/tmp/livewallpaper.plugins");
286         }
287     }
288 }