started to do theme with 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     result = gtk_dialog_run(GTK_DIALOG(window));
164
165     switch(result){
166         case GTK_RESPONSE_YES:
167             /* Check theme */
168             if (hildon_button_get_value(HILDON_BUTTON (theme_button))){
169                 if (priv->theme)
170                     g_free(priv->theme);
171                 if (!strcmp(hildon_button_get_value(HILDON_BUTTON (theme_button)), _("Berlin")))
172                     priv->theme = g_strdup("Berlin");
173                 if (!strcmp(hildon_button_get_value(HILDON_BUTTON (theme_button)), _("Modern")))
174                     priv->theme = g_strdup("Modern");
175                 if (!strcmp(hildon_button_get_value(HILDON_BUTTON (theme_button)), _("Matrix")))
176                     priv->theme = g_strdup("Matrix");
177                 if (!strcmp(hildon_button_get_value(HILDON_BUTTON (theme_button)), _("Accel")))
178                     priv->theme = g_strdup("Accel");
179             }
180             /* Check rich animation */
181             if (hildon_check_button_get_active (HILDON_CHECK_BUTTON(rich_animation_button)))
182                 priv->rich_animation = TRUE;
183             else
184                 priv->rich_animation = FALSE;
185             /* Save config */
186             save_config(priv);
187             /* action with applet */
188             if (hildon_check_button_get_active (HILDON_CHECK_BUTTON(enable_button))){
189                     if (!check_applet_state())
190                         start_applet();
191                     else
192                         send_dbus_signal (priv,
193                               LIVEWP_SIGNAL_INTERFACE,
194                               LIVEWP_SIGNAL_PATH,
195                               LIVEWP_RELOAD_CONFIG);
196             }else
197                     if (check_applet_state())
198                         stop_applet();
199
200             break;
201         default:
202         case GTK_RESPONSE_OK:
203         break;
204         case GTK_RESPONSE_NO:
205             gtk_widget_destroy(window);
206             window = NULL;
207             lw_about();
208         break;
209     }
210     if (window)
211         gtk_widget_destroy(window);
212 }
213 /*******************************************************************************/
214 gboolean
215 check_applet_state(void){
216     FILE    *file_in;
217     gchar buffer[2048];
218     gboolean result = FALSE;
219
220     file_in = fopen("/home/user/.config/hildon-desktop/home.plugins","r");
221     while (!feof(file_in)) {
222             memset(buffer, 0, sizeof(buffer));
223             fgets(buffer, sizeof(buffer) - 1, file_in);
224             if (!strcmp(buffer, 
225                         "X-Desktop-File=/usr/share/applications/hildon-home/livewp-home-widget.desktop\n")){
226                 result = TRUE;
227                 break;
228             }
229    }
230    fclose(file_in);
231
232     return result;
233 }
234 /*******************************************************************************/
235 void
236 start_applet(void){
237     FILE    *file_out;
238
239     file_out = fopen("/home/user/.config/hildon-desktop/home.plugins","w+");
240     if (file_out){
241         fputs("\n", file_out);
242         fputs("[livewp-home-widget.desktop-0]\n",file_out);
243         fputs("X-Desktop-File=/usr/share/applications/hildon-home/livewp-home-widget.desktop\n",file_out);
244         fclose(file_out);
245     }
246 }
247 /*******************************************************************************/
248 void
249 stop_applet(void){
250     FILE    *file_in;
251     FILE    *file_out;
252     gchar buffer[2048];
253
254     file_in = fopen("/home/user/.config/hildon-desktop/home.plugins","r");
255     file_out = fopen("/tmp/livewallpaper.plugins","w");
256     if (file_in && file_out){
257         while (!feof(file_in)) {
258             memset(buffer, 0, sizeof(buffer));
259             fgets(buffer, sizeof(buffer) - 1, file_in);
260             if (strcmp(buffer, "[livewp-home-widget.desktop-0]\n") &&
261                 strcmp(buffer, "X-Desktop-File=/usr/share/applications/hildon-home/livewp-home-widget.desktop\n"))
262                 fputs(buffer, file_out);
263         }
264         fclose(file_out);
265         fclose(file_in);
266         file_in = fopen("/tmp/livewallpaper.plugins","r");
267         file_out = fopen("/home/user/.config/hildon-desktop/home.plugins","w");
268         if (file_in && file_out){
269             while (!feof(file_in)){
270                 memset(buffer, 0, sizeof(buffer));
271                 fgets(buffer, sizeof(buffer) - 1, file_in);
272                 fputs(buffer, file_out);
273             }
274             fclose(file_out);
275             fclose(file_in);
276             unlink ("/tmp/livewallpaper.plugins");
277         }
278     }
279 }