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