fixed settings
[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     gchar *about_string;
30     GtkWidget *window = NULL,
31     *vbox = NULL,
32     *label_about = NULL;
33     window = gtk_dialog_new();
34     gtk_window_set_title(GTK_WINDOW(window), _("About"));
35     gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
36     gtk_window_set_modal(GTK_WINDOW(window), TRUE);
37     vbox = gtk_vbox_new (FALSE, 5);
38     about_string = g_strdup_printf(_("Live Wallpaper Version %s \n Copyright(c) 2010\n \
39 Tanya Makova\n Vlad Vasiliev\n \
40 Copyright(c) 2010 for design themes Berlin, Modern and Accel Vasya Bobrikov\n \
41 Copyright(c) 2010 for design theme Matrix and icons Andrew Zhilin\n \
42 Translators:\n \
43 Finnish - Marko Vertainen\n \
44 Spain  - Alejandro López\n \
45 Italian  - Emanuele Cassioli\n \
46 Russian - Tanya Makova \n \
47           Vlad Vasiliev\n"), VERSION);
48
49     label_about = gtk_label_new (about_string);
50     gtk_box_pack_start (GTK_BOX (vbox), label_about, FALSE, FALSE, 0);
51     gtk_box_pack_start(GTK_BOX(GTK_DIALOG(window)->vbox),
52                                    vbox, TRUE, TRUE, 0);
53     gtk_widget_show (label_about);
54     gtk_widget_show (vbox);
55     gtk_widget_show (window);
56     gtk_dialog_run(GTK_DIALOG(window));
57
58 }
59 /*******************************************************************************/
60 GtkWidget *
61 create_category_selector (Animation_WallpaperPrivate *priv){
62     GtkWidget *selector;
63     GSList *store = priv->extheme_list;
64     GList *category_list;
65     GHashTable *result_table = NULL;
66
67     selector = hildon_touch_selector_new_text();
68
69     hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (selector), "LiveWallpaper" );
70
71     result_table = g_hash_table_new(g_str_hash, g_str_equal);
72     while (store){  
73         if (!g_hash_table_lookup(result_table, g_hash_table_lookup(store->data, "category"))){
74             g_hash_table_insert(result_table, g_hash_table_lookup(store->data, "category"), (gint *)1);     
75             hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (selector), g_hash_table_lookup(store->data, "category"));
76         }
77         store = g_slist_next(store);
78     }
79     
80     /* Add Xscreensaver for install message */
81     if (!g_hash_table_lookup(result_table,"Xscreensaver")){
82             g_hash_table_insert(result_table, "Xscreensaver", (gint *)1);
83             hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (selector), "Xscreensaver");
84     }
85 #if 0
86
87     category_list = g_hash_table_get_keys (result_table);
88     selector = hildon_touch_selector_new_text();
89
90     hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (selector), "LiveWallpaper" );
91     while (category_list){  
92         hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (selector),category_list->data );
93         fprintf(stderr, "create %s\n", category_list->data);
94         category_list = g_list_next(category_list);
95     }
96 #endif
97     return selector;
98 }
99
100 /*******************************************************************************/
101 void
102 theme_button_clicked(GtkWidget *button, GdkEventButton *event, Animation_WallpaperPrivate *priv){
103     lw_theme_settings(GTK_WIDGET(button), priv);
104 }
105 /********************************************************************************/
106 void
107 set_button_image(GtkWidget * button, Animation_WallpaperPrivate *priv, gboolean enable){
108     GtkWidget * image = NULL; 
109     GdkPixbuf * pixbuf = NULL;
110     gchar *str = NULL;
111     gchar *icon_on = NULL;
112     gchar *icon_off = NULL;
113     GSList *store = priv->extheme_list;
114
115     while (store){
116         if (!strcmp(priv->theme, g_hash_table_lookup(store->data, "name"))){
117             icon_on = g_strdup(g_hash_table_lookup(store->data, "icon_on"));
118             icon_off = g_strdup(g_hash_table_lookup(store->data, "icon_off"));
119             break;
120         }
121         store = (GSList *)g_list_next(store);
122     }
123     if (enable){
124         if (icon_on)
125             str = g_strdup_printf("%s", icon_on);
126         else 
127             str = g_strdup_printf( "%s/%s/%s", THEME_PATH, 
128                             priv->theme, "icon.png");
129             if (access(str, F_OK) != 0){
130                 g_free(str);
131                 str = g_strdup_printf( "%s/%s/%s", THEME_PATH, 
132                             "Video", "icon.png");
133             }
134
135     }else {
136         if (icon_off)
137             str = g_strdup_printf("%s", icon_off);
138         else 
139             str = g_strdup_printf( "%s/%s/%s", THEME_PATH, 
140                             priv->theme, "icond.png");
141             if (access(str, F_OK) != 0){
142                 g_free(str);
143                 str = g_strdup_printf( "%s/%s/%s", THEME_PATH, 
144                             "Video", "icond.png");
145             }
146     }
147     pixbuf = gdk_pixbuf_new_from_file_at_size (str, 
148                                                  124, 
149                                                  79, 
150                                                  NULL);
151     if (str)
152         g_free(str);
153     if (icon_on)
154         g_free(icon_on);
155     if (icon_off)
156         g_free(icon_off);
157     if (pixbuf){
158         image = gtk_image_new_from_pixbuf (pixbuf);
159         g_object_unref(G_OBJECT(pixbuf));
160     }
161
162     //hildon_button_set_image (HILDON_BUTTON (button), image);
163     GList *list = gtk_container_get_children(GTK_CONTAINER (button));
164     if (list){
165         gtk_container_remove(GTK_CONTAINER (button), list->data);
166     }
167     gtk_container_add(GTK_CONTAINER (button), image);
168     gtk_widget_show(image);
169     gtk_widget_show(button);
170
171 }
172 /********************************************************************************/
173 GtkWidget *
174 create_image_button (gint view, DBusConnection *conn_sess){
175     GtkWidget *event_box;
176
177     Animation_WallpaperPrivate *priv = g_new0(Animation_WallpaperPrivate, 1);
178     /* Add external themes to priv */
179     priv->extheme_list = get_list_exthemes();
180
181     priv->view = view;
182     priv->theme_string_parametr1 = NULL;
183     priv->dbus_conn_session = conn_sess;
184     read_config(priv);
185
186     event_box = gtk_event_box_new();
187     g_object_set_data(G_OBJECT(event_box), "view", GINT_TO_POINTER(view));
188     g_object_set_data(G_OBJECT(event_box), "priv", priv);
189     set_button_image(event_box, priv, check_applet_state(view));
190     g_signal_connect(G_OBJECT (event_box), "button_press_event", G_CALLBACK(theme_button_clicked), priv);
191     return event_box;
192 #if 0
193     button = hildon_button_new(HILDON_SIZE_AUTO_WIDTH | HILDON_SIZE_FINGER_HEIGHT,
194                                     HILDON_BUTTON_ARRANGEMENT_VERTICAL);
195     g_object_set_data(G_OBJECT(button), "view", GINT_TO_POINTER(view));
196     g_object_set_data(G_OBJECT(button), "priv", priv);
197     set_button_image(button, priv, check_applet_state(view));
198     g_signal_connect(button, "clicked", G_CALLBACK(theme_button_clicked), priv);
199     hildon_button_set_image_position (HILDON_BUTTON (button), GTK_POS_RIGHT);
200     return button;
201 #endif
202 }
203 /********************************************************************************/
204 void
205 changed_value_one_in_all_cb (GtkWidget *toggle, Animation_WallpaperPrivate *priv)
206 {
207     priv->one_in_all_view = hildon_check_button_get_active((HildonCheckButton *)toggle);
208     create_themes_buttons_hbox(priv);
209     fprintf(stderr, "changed_value_one_in_all_cb\n");
210 }
211 /********************************************************************************/
212 void
213 changed_value_theme_cb (HildonPickerButton *picker, Animation_WallpaperPrivate *priv)
214 {
215     const gchar *choice = hildon_button_get_value(HILDON_BUTTON (picker));
216     GtkWidget *vbox = NULL;
217     GtkWidget *area_vbox = NULL;
218         
219     area_vbox = g_object_get_data(G_OBJECT(priv->window), "area_vbox");
220     if (!area_vbox)
221         return;
222     vbox = g_object_get_data(G_OBJECT(priv->window), "custom_vbox");
223     if (vbox){
224         gtk_widget_destroy(vbox);
225     }
226     vbox = gtk_vbox_new (TRUE, 5);
227     g_object_set_data(G_OBJECT(priv->window), "custom_vbox", vbox);
228     gtk_box_pack_start(GTK_BOX(area_vbox),
229                                    vbox, FALSE, FALSE, 5);
230     if (choice) {
231         if (!strcmp(choice, _("Berlin"))){
232             rich_animation_additional_parametr(vbox,priv);
233         }
234         if (!strcmp(choice, _("Modern"))){
235             rich_animation_additional_parametr(vbox,priv);
236         }
237         if (!strcmp(choice, _("Matrix"))){
238             rich_animation_additional_parametr(vbox,priv);
239         }
240
241         if (!strcmp(choice, _("Accel"))){
242             rich_animation_additional_parametr(vbox,priv);
243         }
244         if (!strcmp(choice, _("Video"))){
245             additional_parametr_for_theme_video(vbox, priv);
246         }
247     }
248     gtk_widget_show(vbox);
249 }
250 /********************************************************************************/
251 void
252 changed_value_category_cb (HildonPickerButton *picker, Animation_WallpaperPrivate *priv)
253 {
254     GtkWidget *theme_button = NULL;
255     const gchar *choice = hildon_button_get_value(HILDON_BUTTON (picker));
256
257     theme_button = g_object_get_data(G_OBJECT(priv->window), "theme_button");
258     if (!theme_button) 
259         return;
260     HildonTouchSelector * selector =  hildon_picker_button_get_selector((HildonPickerButton *) theme_button);
261     hildon_touch_selector_remove_column(selector, 0); 
262     hildon_touch_selector_append_text_column(selector, (GtkTreeModel*)gtk_list_store_new (1, G_TYPE_STRING), TRUE);
263     fill_theme_button(priv, theme_button, (gchar *)hildon_button_get_value(HILDON_BUTTON (picker)));
264     /* check xscreensaver category */
265     if (choice){
266         if (!strcmp(choice,"Xscreensaver"))
267             if (access("/usr/bin/xscreensaver", F_OK) != 0){
268                 show_problem_package((GtkWidget *)picker, "Xscreensaver");
269             }
270
271     }
272 }
273 /********************************************************************************/
274 void
275 fill_theme_button (Animation_WallpaperPrivate *priv, GtkWidget *button, gchar *category){
276
277     gchar *theme = priv->theme;
278     gboolean flag = False;
279     gint num=0;
280         hildon_button_set_value(HILDON_BUTTON (button), NULL);
281     if (!category){
282         changed_value_theme_cb(HILDON_PICKER_BUTTON (button), priv);
283         return;
284     }
285     GSList *store = priv->extheme_list;
286     HildonTouchSelector * selector =  hildon_picker_button_get_selector((HildonPickerButton *) button);
287     if (!selector)
288         selector = (HildonTouchSelector *)hildon_touch_selector_new_text ();
289     
290     hildon_button_set_value(HILDON_BUTTON(button), NULL);
291     if (!strcmp(category, "LiveWallpaper")){
292         hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (selector), _("Berlin"));
293         hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (selector), _("Modern"));
294         hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (selector), _("Matrix"));
295         hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (selector), _("Accel"));
296         hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (selector), _("Video"));
297         num = 5;        
298         if (theme){ 
299             if (!strcmp(theme, "Berlin")){
300                 hildon_touch_selector_set_active (HILDON_TOUCH_SELECTOR (selector), 0, 0);
301                 hildon_button_set_value(HILDON_BUTTON(button), _("Berlin"));
302             }
303             if (!strcmp(theme, "Modern")){
304                 hildon_touch_selector_set_active (HILDON_TOUCH_SELECTOR (selector), 0, 1);
305                 hildon_button_set_value(HILDON_BUTTON(button), _("Modern"));
306             }
307             if (!strcmp(theme, "Matrix")){
308                 hildon_touch_selector_set_active (HILDON_TOUCH_SELECTOR (selector), 0, 2);
309                 hildon_button_set_value(HILDON_BUTTON(button), _("Matrix"));
310             }
311             if (!strcmp(theme, "Accel")){
312                 hildon_touch_selector_set_active (HILDON_TOUCH_SELECTOR (selector), 0, 3);
313                 hildon_button_set_value(HILDON_BUTTON(button), _("Accel"));
314             }
315             if (!strcmp(theme, "Video")){
316                 hildon_touch_selector_set_active (HILDON_TOUCH_SELECTOR (selector), 0, 4);
317                 hildon_button_set_value(HILDON_BUTTON(button), _("Video"));
318             }
319        }
320     }
321     while (store){  
322         if (!g_hash_table_lookup(store->data, "category"))
323             continue;
324         if (!strcmp(g_hash_table_lookup(store->data, "category"), category)){
325             hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (selector), g_hash_table_lookup(store->data, "name"));
326             if (!strcmp(theme, g_hash_table_lookup(store->data, "name"))){
327                 hildon_touch_selector_set_active (HILDON_TOUCH_SELECTOR (selector), 0, num);
328                 hildon_button_set_value(HILDON_BUTTON(button), _(g_hash_table_lookup(store->data, "name")));
329             }
330             num++;
331         }
332         store = g_slist_next(store);
333     }
334     /* Added Shreman's Aquarium for message */
335     if (!strcmp(category, "Unknown")){
336         store = priv->extheme_list;
337         while (store){  
338             if (!strcmp("Shermans Aquarium" , g_hash_table_lookup(store->data, "name"))){
339                 flag = TRUE;
340                 break;
341             }
342             store = g_slist_next(store);
343         }
344         if (!flag)
345             hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (selector), "Shermans Aquarium");
346     }
347
348         hildon_picker_button_set_selector (HILDON_PICKER_BUTTON (button),
349                                                        HILDON_TOUCH_SELECTOR (selector));
350
351     changed_value_theme_cb(HILDON_PICKER_BUTTON (button), priv);
352 }
353 /********************************************************************************/
354 GtkWidget *
355 create_themes_button (Animation_WallpaperPrivate *priv, gchar *category){
356
357     GtkWidget *button;
358     button = hildon_picker_button_new (HILDON_SIZE_FINGER_HEIGHT, HILDON_BUTTON_ARRANGEMENT_VERTICAL);
359     hildon_button_set_title (HILDON_BUTTON (button), _("Theme"));
360
361    
362     return button;
363 }
364 /********************************************************************************/
365 GtkWidget *
366 create_categories_button (Animation_WallpaperPrivate *priv){
367
368     GtkWidget *button;
369     GtkWidget *selector;
370     gchar *theme = priv->theme;
371     gint num=0;
372     GHashTable *result_table = NULL;
373
374     result_table = g_hash_table_new(g_str_hash, g_str_equal);
375     selector = create_category_selector(priv);
376     button = hildon_picker_button_new (HILDON_SIZE_FINGER_HEIGHT, HILDON_BUTTON_ARRANGEMENT_VERTICAL);
377     hildon_button_set_title (HILDON_BUTTON (button), _("Category"));
378     hildon_picker_button_set_selector (HILDON_PICKER_BUTTON (button),
379                                                        HILDON_TOUCH_SELECTOR (selector));
380     if (theme) {
381         if (!strcmp(theme, "Berlin")){
382             hildon_touch_selector_set_active (HILDON_TOUCH_SELECTOR (selector), 0, 0); 
383             hildon_button_set_value(HILDON_BUTTON(button), "LiveWallpaper");
384         }
385         if (!strcmp(theme, "Modern")){
386             hildon_touch_selector_set_active (HILDON_TOUCH_SELECTOR (selector), 0, 0); 
387             hildon_button_set_value(HILDON_BUTTON(button), "LiveWallpaper");
388         }
389         if (!strcmp(theme, "Matrix")){
390             hildon_touch_selector_set_active (HILDON_TOUCH_SELECTOR (selector), 0, 0); 
391             hildon_button_set_value(HILDON_BUTTON(button), "LiveWallpaper");
392         }
393         if (!strcmp(theme, "Accel")){
394             hildon_touch_selector_set_active (HILDON_TOUCH_SELECTOR (selector), 0, 0); 
395             hildon_button_set_value(HILDON_BUTTON(button), "LiveWallpaper");
396         }
397         if (!strcmp(theme, "Video")){
398             hildon_touch_selector_set_active (HILDON_TOUCH_SELECTOR (selector), 0, 0); 
399             hildon_button_set_value(HILDON_BUTTON(button), "LiveWallpaper");
400         }
401         GSList *store = priv->extheme_list;
402         num = 1;
403         while (store){
404             if (g_hash_table_lookup(result_table, g_hash_table_lookup(store->data, "category")) == NULL){
405                 g_hash_table_insert(result_table, g_hash_table_lookup(store->data, "category"), (gint *)num);     
406                 num++;
407             }
408             if (!strcmp(theme, g_hash_table_lookup(store->data, "name"))){
409                 if (g_hash_table_lookup(store->data, "category")){
410                     hildon_touch_selector_set_active (HILDON_TOUCH_SELECTOR (selector), 0, 
411                     (gint)g_hash_table_lookup(result_table, g_hash_table_lookup(store->data, "category"))); 
412                     hildon_button_set_value(HILDON_BUTTON(button), g_hash_table_lookup(store->data, "category"));
413                 }
414                 break;
415             }
416
417             store = g_slist_next(store);
418         }
419     }
420     return button;
421 }
422
423 /*******************************************************************************/
424 GtkWidget *
425 create_bool_button (gboolean active, gchar *name)
426 {
427     GtkWidget *button;
428     button = hildon_check_button_new (HILDON_SIZE_FINGER_HEIGHT);
429     gtk_button_set_label (GTK_BUTTON (button), name);
430     hildon_check_button_set_active(HILDON_CHECK_BUTTON(button), active);
431     return button;
432 }
433 /*******************************************************************************/
434 GtkWidget *
435 create_enable_button (gboolean active)
436 {
437     GtkWidget *button;
438     button = hildon_check_button_new (HILDON_SIZE_FINGER_HEIGHT);
439     gtk_button_set_label (GTK_BUTTON (button), _("Enable"));
440     hildon_check_button_set_active(HILDON_CHECK_BUTTON(button), active);
441     return button;
442 }
443
444 /*******************************************************************************/
445 void
446 show_settings(GtkWidget *widget, Animation_WallpaperPrivate *priv){
447     lw_main_settings(priv, NULL);
448 }
449 /*******************************************************************************/
450 void
451 create_themes_buttons_hbox(Animation_WallpaperPrivate *priv){
452     GtkWidget *hbox = NULL;
453     GtkWidget *area_hbox = NULL;
454     GtkWidget *theme_button1;
455     GtkWidget *theme_button2;
456     GtkWidget *theme_button3;
457     GtkWidget *theme_button4;    
458
459         
460     area_hbox = g_object_get_data(G_OBJECT(priv->window), "area_hbox");
461     if (!area_hbox)
462         return;
463     hbox = g_object_get_data(G_OBJECT(priv->window), "custom_hbox");
464     if (hbox){
465         gtk_widget_destroy(hbox);
466     }
467     hbox = gtk_hbox_new(FALSE, 0);
468     g_object_set_data(G_OBJECT(priv->window), "custom_hbox", hbox);
469     gtk_box_pack_start(GTK_BOX(area_hbox),
470                                    hbox, FALSE, FALSE, 5);
471     /* Create Theme buttons */
472     theme_button1 = create_image_button(1, priv->dbus_conn_session);
473     gtk_box_pack_start(GTK_BOX(hbox),
474                                    theme_button1, TRUE, TRUE, 0);
475     gtk_widget_show (theme_button1);
476     gtk_widget_show (hbox);
477     if (priv->one_in_all_view)
478         return;
479     theme_button2 = create_image_button(2, priv->dbus_conn_session);
480     gtk_box_pack_start(GTK_BOX(hbox),
481                                    theme_button2, TRUE, TRUE, 0);
482     gtk_widget_show (theme_button2);
483     theme_button3 = create_image_button(3, priv->dbus_conn_session);
484     gtk_box_pack_start(GTK_BOX(hbox),
485                                    theme_button3, TRUE, TRUE, 0);
486     gtk_widget_show (theme_button3);
487     theme_button4 = create_image_button(4, priv->dbus_conn_session);
488     gtk_box_pack_start(GTK_BOX(hbox),
489                                    theme_button4, TRUE, TRUE, 0);
490     gtk_widget_show (theme_button4);
491  
492 }
493 /*******************************************************************************/
494 void 
495 lw_main_settings(Animation_WallpaperPrivate *priv, gpointer data){
496     gint result;
497     GtkWidget *window = NULL;
498     GtkWidget *banner = NULL;
499     GtkWidget *area_hbox;
500     GtkWidget *one_in_all_view_button; 
501     gboolean one_in_all_view;
502     Animation_WallpaperPrivate *priv_temp = NULL;
503
504     window = gtk_dialog_new();
505     priv->window = window;
506
507     one_in_all_view = priv->one_in_all_view;
508     gtk_window_set_title(GTK_WINDOW(window), _("Live Wallpaper Settings"));
509     gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
510     gtk_window_set_modal(GTK_WINDOW(window), TRUE);
511     one_in_all_view_button = create_bool_button(priv->one_in_all_view, _("One theme in all views"));
512     g_signal_connect (G_OBJECT (one_in_all_view_button), "toggled",  G_CALLBACK (changed_value_one_in_all_cb), priv);
513     gtk_box_pack_start(GTK_BOX(GTK_DIALOG(window)->vbox), one_in_all_view_button, TRUE, TRUE, 5);
514     area_hbox = gtk_vbox_new(FALSE, 2);
515     g_object_set_data(G_OBJECT(window), "area_hbox", area_hbox);
516     create_themes_buttons_hbox(priv);
517     gtk_box_pack_start(GTK_BOX(GTK_DIALOG(window)->vbox),
518                                    area_hbox, TRUE, TRUE, 0);
519
520     gtk_widget_show (one_in_all_view_button);
521     gtk_widget_show_all (area_hbox);
522     gtk_widget_show (window);
523     gtk_dialog_add_button(GTK_DIALOG(window), _("About"), GTK_RESPONSE_NO);
524
525     result = gtk_dialog_run(GTK_DIALOG(window));
526 /*
527     priv_temp = g_object_get_data(G_OBJECT(theme_button1), "priv");
528     if (priv_temp){
529         g_free(priv_temp);
530         priv_temp =NULL;
531     }
532     priv_temp = g_object_get_data(G_OBJECT(theme_button2), "priv");
533     if (priv_temp){
534         g_free(priv_temp);
535         priv_temp =NULL;
536     }
537     priv_temp = g_object_get_data(G_OBJECT(theme_button3), "priv");
538     if (priv_temp){
539         g_free(priv_temp);
540         priv_temp =NULL;
541     }
542     priv_temp = g_object_get_data(G_OBJECT(theme_button4), "priv");
543     if (priv_temp){
544         g_free(priv_temp);
545         priv_temp =NULL;
546     }
547 */
548
549     switch(result){
550         case GTK_RESPONSE_NO:
551             gtk_widget_destroy(window);
552             window = NULL;
553             lw_about();
554         break;
555     }
556
557     if (hildon_check_button_get_active (HILDON_CHECK_BUTTON(one_in_all_view_button)) != one_in_all_view){
558         save_one_in_all_views_to_config(hildon_check_button_get_active (HILDON_CHECK_BUTTON(one_in_all_view_button)));
559         fprintf(stderr,"CHECK!!!!!!!!!!!!!!\n");
560         banner = hildon_banner_show_information (window, NULL, _("Livewallpaper is reloading..."));
561         hildon_banner_set_timeout(banner, 3000);
562         gtk_widget_show(banner);
563         gtk_main_iteration_do(FALSE);
564         stop_applet(1);
565         stop_applet(2);
566         stop_applet(3);
567         stop_applet(4);
568         sleep(1);
569         gtk_main_iteration_do(FALSE);
570         sleep(1);
571         gtk_main_iteration_do(FALSE);
572         sleep(1);
573         gtk_main_iteration_do(FALSE);
574         start_applet(1);
575         start_applet(2);
576         start_applet(3);
577         start_applet(4);
578         
579     }
580     if (window)
581         gtk_widget_destroy(window);
582 }
583 /*******************************************************************************/
584 void
585 file_button_clicked(GtkButton *button, Animation_WallpaperPrivate *priv){
586
587     GtkWidget *dialog = hildon_file_chooser_dialog_new(GTK_WINDOW (priv->window), GTK_FILE_CHOOSER_ACTION_OPEN);
588
589     if (priv->theme_string_parametr1)
590         gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), priv->theme_string_parametr1);
591
592     gtk_widget_show_all (GTK_WIDGET (dialog));
593
594     if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_OK)
595     {
596       hildon_button_set_value (HILDON_BUTTON(button), gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)));
597     }
598     gtk_widget_destroy (dialog);
599
600 }
601 /*******************************************************************************/
602 void
603 rich_animation_additional_parametr(GtkWidget *vbox, Animation_WallpaperPrivate *priv){
604     GtkWidget *rich_animation_button;
605
606     /* Create rich animation button */  
607     rich_animation_button = create_bool_button(priv->rich_animation, _("Rich Animation"));
608     gtk_box_pack_start(GTK_BOX(vbox),
609                                    rich_animation_button, TRUE, TRUE, 5);
610     g_object_set_data(G_OBJECT(priv->window), "rich_animation_button", rich_animation_button);
611     gtk_widget_show (rich_animation_button);
612 }
613 /*******************************************************************************/
614 void
615 additional_parametr_for_theme_video(GtkWidget *vbox, Animation_WallpaperPrivate *priv){
616
617     GtkWidget *file_button;
618     GtkWidget *rich_animation_button;
619
620     if (priv->theme_string_parametr1)
621         file_button = hildon_button_new_with_text (HILDON_SIZE_FINGER_HEIGHT, HILDON_BUTTON_ARRANGEMENT_VERTICAL,
622                                                    _("Play file"), priv->theme_string_parametr1);
623     else
624         file_button = hildon_button_new_with_text (HILDON_SIZE_FINGER_HEIGHT,HILDON_BUTTON_ARRANGEMENT_VERTICAL,
625                                                    _("Play file")," ");
626
627     g_signal_connect (file_button, "clicked", G_CALLBACK (file_button_clicked), priv);
628
629     gtk_box_pack_start(GTK_BOX(vbox),
630                                    file_button, TRUE, TRUE, 5);
631     g_object_set_data(G_OBJECT(priv->window), "filename_button", file_button);    
632     /* Create rich animation button */  
633     rich_animation_button = create_bool_button(priv->rich_animation, _("Loop"));
634     gtk_box_pack_start(GTK_BOX(vbox),
635                                    rich_animation_button, TRUE, TRUE, 5);
636     g_object_set_data(G_OBJECT(priv->window), "rich_animation_button", rich_animation_button);
637     /* Create sound button */  
638 #if 0
639
640     /* Doesn't work in real device. Hardware volume buttons can to change volume for mutted track */
641     sound_button = create_bool_button(priv->theme_bool_parametr1, _("Sound"));
642     gtk_box_pack_start(GTK_BOX(vbox),
643                                    sound_button, TRUE, TRUE, 5);
644     g_object_set_data(G_OBJECT(priv->window), "sound_button", sound_button);
645     gtk_widget_show (sound_button);
646 #endif
647     gtk_widget_show (file_button);
648     gtk_widget_show (rich_animation_button);
649
650 }
651 /*******************************************************************************/
652 void
653 show_problem_package (GtkWidget *widget, gchar *package_name){
654     gchar *text;
655     text = g_strdup_printf(_("You haven't got the installed package %s. Please install it via using Application Manager"), package_name);
656     hildon_banner_show_information(GTK_WIDGET(widget), NULL, text);
657     g_free(text);
658 }
659 /*******************************************************************************/
660 void 
661 lw_theme_settings(GtkWidget *button, Animation_WallpaperPrivate *priv) {
662     gint result;
663     GtkWidget *window = NULL;
664     GtkWidget *scrolled_window = NULL;
665     GtkWidget *save_button;
666     GtkWidget *theme_button;
667     GtkWidget *category_button;
668     GtkWidget *enable_button;
669     GtkWidget *vbox;
670     GtkWidget *area_vbox;
671     GtkWidget *button1 = NULL;
672     GtkWidget *rich_animation_button = NULL;
673     gint view = priv->view;
674
675     window = gtk_dialog_new();
676     priv->window = window;
677
678     gtk_window_set_title(GTK_WINDOW(window), _("View Settings"));
679     gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
680     gtk_window_set_modal(GTK_WINDOW(window), TRUE);
681
682     /* Create panarea */
683     area_vbox = gtk_vbox_new(FALSE, 2);
684     g_object_set_data(G_OBJECT(window), "area_vbox", area_vbox);
685     scrolled_window = hildon_pannable_area_new ();
686     hildon_pannable_area_add_with_viewport(HILDON_PANNABLE_AREA (scrolled_window), GTK_WIDGET (area_vbox));
687     gtk_box_pack_start(GTK_BOX(GTK_DIALOG(window)->vbox),
688                                    scrolled_window, FALSE, FALSE, 0);
689
690     gtk_widget_set_size_request(scrolled_window, -1, 370);
691
692     /* Create Enable button */
693     enable_button = create_enable_button(check_applet_state(view)); 
694     gtk_box_pack_start(GTK_BOX(area_vbox),
695                                    enable_button, FALSE, FALSE, 5);
696     /* Create Category button */
697     category_button = create_categories_button(priv);
698     g_object_set_data(G_OBJECT(window), "category_button", category_button);
699     g_signal_connect (G_OBJECT (category_button), "value-changed",  G_CALLBACK (changed_value_category_cb), priv);
700     gtk_box_pack_start(GTK_BOX(area_vbox),
701                                    category_button, FALSE, FALSE, 5);
702     /* Create Custom vbox */
703     vbox = gtk_vbox_new (FALSE, 5);
704     g_object_set_data(G_OBJECT(window), "custom_vbox", vbox);
705
706     /* Create Theme button */
707     theme_button = create_themes_button(priv, (gchar *)hildon_button_get_value(HILDON_BUTTON (category_button)));
708     g_object_set_data(G_OBJECT(window), "theme_button", theme_button);
709     g_signal_connect (G_OBJECT (theme_button), "value-changed",  G_CALLBACK (changed_value_theme_cb), priv);
710     gtk_box_pack_start(GTK_BOX(area_vbox),
711                                    theme_button, FALSE, FALSE, 5);
712     fill_theme_button(priv, theme_button, (gchar *)hildon_button_get_value(HILDON_BUTTON (category_button)));
713
714     /* Pack custom vbox. It must be last widget */
715     gtk_box_pack_start(GTK_BOX(area_vbox),
716                                    vbox, FALSE, FALSE, 5);
717
718     gtk_widget_show (enable_button);
719     gtk_widget_show (category_button);
720     gtk_widget_show (theme_button);
721     gtk_widget_show (vbox);
722     gtk_widget_show (area_vbox);
723     gtk_widget_show (scrolled_window);
724     gtk_widget_show (window);
725
726     save_button = gtk_dialog_add_button(GTK_DIALOG(window), _("Save"), GTK_RESPONSE_YES);
727
728     result = gtk_dialog_run(GTK_DIALOG(window));
729
730     switch(result){
731         case GTK_RESPONSE_YES:
732             /* Check theme */
733             if (hildon_button_get_value(HILDON_BUTTON (theme_button)) &&
734                 strcmp(hildon_button_get_value(HILDON_BUTTON (theme_button)), "")){
735                 /* Check Xsnow program */
736                 if (!strcmp(hildon_button_get_value(HILDON_BUTTON (theme_button)), _("Xsnow"))){
737                     if (access("/usr/bin/xsnow", F_OK) != 0){
738                         show_problem_package(button, "Xsnow");
739                         /* if not scuccess exit from wthout saving */ 
740                         break;
741                     }
742                 }
743                 /* Check Shermans program */
744                 if (!strcmp(hildon_button_get_value(HILDON_BUTTON (theme_button)), "Shermans Aquarium")){
745                     if (access("/usr/bin/shermans", F_OK) != 0){
746                         show_problem_package(button,"'Sherman's Aquarium'");
747                         /* if not scuccess exit from wthout saving */ 
748                         break;
749                     }
750                 }
751                 /* Check Conky program */
752                 if (!strcmp(hildon_button_get_value(HILDON_BUTTON (theme_button)), "Conky")){
753                     if (access("/usr/bin/conky", F_OK) != 0){
754                         show_problem_package(button,"'Conky'");
755                         /* if not scuccess exit from wthout saving */ 
756                         break;
757                     }
758                 }
759                 /* Check Orrery program */
760                 if (!strcmp(hildon_button_get_value(HILDON_BUTTON (theme_button)), "Orrery")){
761                     if (access("/opt/maemo/usr/bin/orrery", F_OK) != 0){
762                         show_problem_package(button,"'Orrery'");
763                         /* if not scuccess exit from wthout saving */ 
764                         break;
765                     }
766                 }
767                 /* Check Colorflood program */
768                 if (!strcmp(hildon_button_get_value(HILDON_BUTTON (theme_button)), "Colorflood")){
769                     if (access("/usr/bin/colorflood", F_OK) != 0){
770                         show_problem_package(button,"'Colorflood'");
771                         /* if not scuccess exit from wthout saving */ 
772                         break;
773                     }
774                 }
775
776                 if (priv->theme)
777                     g_free(priv->theme);
778                 if (!strcmp(hildon_button_get_value(HILDON_BUTTON (theme_button)), _("Berlin")))
779                     priv->theme = g_strdup("Berlin");
780                 if (!strcmp(hildon_button_get_value(HILDON_BUTTON (theme_button)), _("Modern")))
781                     priv->theme = g_strdup("Modern");
782                 if (!strcmp(hildon_button_get_value(HILDON_BUTTON (theme_button)), _("Matrix")))
783                     priv->theme = g_strdup("Matrix");
784                 if (!strcmp(hildon_button_get_value(HILDON_BUTTON (theme_button)), _("Accel")))
785                     priv->theme = g_strdup("Accel");
786                 if (!strcmp(hildon_button_get_value(HILDON_BUTTON (theme_button)), _("Video"))){
787                     priv->theme = g_strdup("Video");
788                     button1 = g_object_get_data(G_OBJECT(priv->window), "filename_button");
789                     if (button1){
790                         if (priv->theme_string_parametr1)
791                             g_free(priv->theme_string_parametr1);
792                         priv->theme_string_parametr1 = g_strdup((gchar*)hildon_button_get_value (HILDON_BUTTON(button1)));
793                     }
794                     /* 
795                     temp_button = g_object_get_data(G_OBJECT(priv->window), "sound_button");
796                     if (temp_button){
797                         if (hildon_check_button_get_active (HILDON_CHECK_BUTTON(temp_button)))
798                             priv->theme_bool_parametr1 = TRUE;
799                         else
800                             priv->theme_bool_parametr1 = FALSE;
801                     }
802                     */
803                 }
804                 /* Check external themes */
805                 GSList *store = priv->extheme_list;
806                 while (store){
807                     if (!strcmp(hildon_button_get_value(HILDON_BUTTON (theme_button)), _(g_hash_table_lookup(store->data, "name")))){
808                         priv->theme = g_strdup(g_hash_table_lookup(store->data, "name"));
809                         //priv->hash_theme = store->data;
810                         break;
811                     }
812                     store = g_slist_next(store);
813                 }
814
815             }
816
817             rich_animation_button = g_object_get_data(G_OBJECT(priv->window), "rich_animation_button");
818             if (rich_animation_button){
819                 /* Check rich animation */
820                 if (hildon_check_button_get_active (HILDON_CHECK_BUTTON(rich_animation_button)))
821                     priv->rich_animation = TRUE;
822                 else
823                     priv->rich_animation = FALSE;
824             }
825             /* Save config */
826             save_config(priv);
827             /* action with applet */
828             if (hildon_check_button_get_active (HILDON_CHECK_BUTTON(enable_button))){
829                     if (!check_applet_state(view)){
830                         start_applet(view);
831                     }else {
832                         send_dbus_signal (priv,
833                               LIVEWP_SIGNAL_INTERFACE,
834                               LIVEWP_SIGNAL_PATH,
835                               LIVEWP_RELOAD_CONFIG);
836                     }
837             }else
838                     if (check_applet_state(view))
839                         stop_applet(view);
840
841             set_button_image(button, priv, check_applet_state(view));
842             break;
843         default:
844         case GTK_RESPONSE_OK:
845         break;
846         case GTK_RESPONSE_NO:
847             gtk_widget_destroy(window);
848             window = NULL;
849             lw_about();
850         break;
851     }
852     if (window)
853         gtk_widget_destroy(window);
854 }
855 /*******************************************************************************/
856 gboolean
857 check_applet_state(gint number){
858
859     HDConfigFile *config_file = NULL;
860     GKeyFile *gkey_file = NULL;
861     gchar *str = NULL;
862     gboolean result = FALSE;
863     if (number > 4 || number < 1)
864         return FALSE;
865
866     str = g_strdup_printf("livewp-home-widget.desktop-%i", (number - 1));
867     config_file = hd_config_file_new(NULL, "/home/user/.config/hildon-desktop/", "home.plugins");
868     
869     gkey_file = hd_config_file_load_file(config_file, FALSE);
870     if (gkey_file && str){
871         result = g_key_file_has_group(gkey_file, str);
872         g_free(str);
873     }
874     return result;
875 }
876 /*******************************************************************************/
877 void
878 start_applet(gint number){
879
880     HDConfigFile *config_file = NULL;
881     GKeyFile *gkey_file = NULL;
882     gchar *str = NULL;
883
884     if (number > 4 || number < 1)
885         return;
886     str = g_strdup_printf("livewp-home-widget.desktop-%i",(number - 1));
887     config_file = hd_config_file_new(NULL, "/home/user/.config/hildon-desktop/", "home.plugins");
888     
889     gkey_file = hd_config_file_load_file(config_file, FALSE);
890     if (gkey_file){
891         g_key_file_set_string (gkey_file, str, "X-Desktop-File", "/usr/share/applications/hildon-home/livewp-home-widget.desktop");
892         hd_config_file_save_file( config_file, gkey_file);
893         g_key_file_free(gkey_file);
894     }else
895         fprintf(stderr, "Problem with config file");
896     if (str)
897         g_free(str);
898     g_object_unref(config_file);
899 }
900 /*******************************************************************************/
901 void
902 stop_applet(gint number){
903     HDConfigFile *config_file = NULL;
904     GKeyFile *gkey_file = NULL;
905     gchar *str = NULL;
906
907     if (number > 4 || number < 1)
908         return;
909     str = g_strdup_printf("livewp-home-widget.desktop-%i", (number - 1));
910     config_file = hd_config_file_new(NULL, "/home/user/.config/hildon-desktop/", "home.plugins");
911     
912     gkey_file = hd_config_file_load_file(config_file, FALSE);
913     if (gkey_file){
914          g_key_file_remove_group(gkey_file, str, NULL);  
915         hd_config_file_save_file( config_file, gkey_file);
916         g_key_file_free(gkey_file);
917     }else
918         fprintf(stderr, "Problem with config file");
919     if (str)
920         g_free(str);
921     g_object_unref(config_file);
922
923 }