minimum size set to download-dialog
[irreco.git] / irreco / src / core / irreco_theme_manager_dlg.c
blobbdab65ec6c1ea533c6dcde2e7f9241166322edc4
1 /*
2 * irreco - Ir Remote Control
3 * Copyright (C) 2008 Pekka Gehör (pegu6@msn.com)
4 * Joni Kokko (t5kojo01@students.oamk.fi),
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 2
9 * of the License, or (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software Foundation,
18 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
21 #include "irreco_theme_manager_dlg.h"
22 #include <hildon/hildon-banner.h>
23 #include "irreco_webdb_register_dlg.h"
24 #include "irreco_select_instance_dlg.h"
25 #include "irreco_config.h"
27 /**
28 * @addtogroup IrrecoThemeManagerDlg
29 * @ingroup Irreco
31 * @todo PURPOCE OF CLASS.
33 * @{
36 /**
37 * @file
38 * Source file of @ref IrrecoThemeManagerDlg.
42 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
43 /* Datatypes */
44 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
45 #define IRRECO_BACKGROUND_PREVIEW_WIDHT (IRRECO_SCREEN_WIDTH / 6)
46 #define IRRECO_BACKGROUND_PREVIEW_HEIGHT (IRRECO_SCREEN_HEIGHT / 6)
49 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
50 /* Prototypes */
51 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
53 static void irreco_theme_manager_dlg_hide_banner(IrrecoThemeManagerDlg *self);
54 static void irreco_theme_manager_dlg_loader_stop(IrrecoThemeManagerDlg *self);
56 static void irreco_theme_manager_dlg_clean_details(IrrecoThemeManagerDlg *self);
58 static gboolean
59 irreco_theme_manager_dlg_loader_deb(IrrecoThemeManagerDlg *self);
60 static gboolean
61 irreco_theme_manager_dlg_loader_user(IrrecoThemeManagerDlg *self);
62 static gboolean
63 irreco_theme_manager_dlg_loader_web(IrrecoThemeManagerDlg *self);
64 static gboolean
65 irreco_theme_manager_dlg_loader_db(IrrecoThemeManagerDlg *self);
66 static gboolean
67 irreco_theme_manager_dlg_theme_db_detail_loader(IrrecoThemeManagerDlg *self);
68 static gboolean
69 irreco_theme_manager_dlg_bg_loader(IrrecoThemeManagerDlg *self);
70 static gboolean
71 irreco_theme_manager_dlg_button_loader(IrrecoThemeManagerDlg *self);
74 static gboolean
75 irreco_theme_manager_dlg_display_theme_detail(IrrecoThemeManagerDlg *self,
76 GtkTreeIter * iter);
78 static gboolean irreco_show_theme_manager_dlg_map_event(IrrecoThemeManagerDlg
79 *self, GdkEvent *event,
80 gpointer user_data);
81 static void irreco_show_theme_manager_dlg_destroy_event(IrrecoThemeManagerDlg
82 *self,
83 gpointer user_data);
85 static void
86 irreco_show_theme_manager_dlg_row_activated_event(GtkTreeView *tree_view,
87 GtkTreePath *path,
88 GtkTreeViewColumn *column,
89 IrrecoThemeManagerDlg*self);
91 static void
92 irreco_show_theme_manager_dlg_row_expanded_event(GtkTreeView *tree_view,
93 GtkTreeIter *iter,
94 GtkTreePath *path,
95 IrrecoThemeManagerDlg *self);
96 static void
97 irreco_show_theme_manager_dlg_row_collapsed_event(GtkTreeView *tree_view,
98 GtkTreeIter *iter,
99 GtkTreePath *path,
100 IrrecoThemeManagerDlg *self);
103 static void
104 irreco_show_theme_manager_dlg_row_selected_event(GtkTreeSelection *sel,
105 IrrecoThemeManagerDlg *self);
107 gboolean irreco_theme_manager_dlg_preview_dlg(GtkWidget *widget,
108 GdkEventButton *event,
109 IrrecoThemeManagerDlg *self);
112 static void irreco_theme_manager_dlg_upload_theme(GtkButton *button,
113 IrrecoThemeManagerDlg *self);
115 static void irreco_theme_manager_dlg_delete_theme(GtkButton *button,
116 IrrecoThemeManagerDlg *self);
117 static void
118 irreco_theme_manager_dlg_download_theme(GtkButton *button,
119 IrrecoThemeManagerDlg *self);
121 static void
122 irreco_theme_manager_dlg_selected_version_dlg(GtkComboBox *widget,
123 IrrecoThemeManagerDlg *self);
125 void irreco_theme_manager_update_theme_manager(IrrecoThemeManager *self);
127 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
128 /* Datatypes */
129 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
131 /** Button responce codes. */
132 enum {
133 IRRECO_DEVICE_REFRESH
136 /** GtkTreeStore colums. */
137 enum
139 TEXT_COL,
140 FLAG_COL,
141 DATA_COL,
142 N_COLUMNS
145 /** Version colums. */
146 enum
148 DATE_COL,
149 ID_COL
152 /** Loader states. */
153 enum
155 LOADER_STATE_INIT,
156 LOADER_STATE_LOOP,
157 LOADER_STATE_END,
158 LOADER_STATE_CLEANUP
161 /** Row flags. */
162 enum
164 ROW_CHILDREN_LOADED = 1 << 1,
165 ROW_TYPE_CATEGORY = 1 << 2,
166 ROW_TYPE_DEB = 1 << 3,
167 ROW_TYPE_USER = 1 << 4,
168 ROW_TYPE_WEB = 1 << 5,
169 ROW_TYPE_DB = 1 << 6,
170 ROW_TYPE_LOADING = 1 << 7
173 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
174 /* Construction & Destruction */
175 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
178 * @name Construction & Destruction
179 * @{
182 G_DEFINE_TYPE(IrrecoThemeManagerDlg, irreco_theme_manager_dlg, IRRECO_TYPE_DLG)
184 static void irreco_theme_manager_dlg_finalize(GObject *object)
186 if (G_OBJECT_CLASS(irreco_theme_manager_dlg_parent_class)->finalize)
187 G_OBJECT_CLASS(irreco_theme_manager_dlg_parent_class)->finalize(
188 object);
191 static void
192 irreco_theme_manager_dlg_class_init(IrrecoThemeManagerDlgClass *klass)
194 GObjectClass *object_class = G_OBJECT_CLASS(klass);
195 object_class->finalize = irreco_theme_manager_dlg_finalize;
198 static void irreco_theme_manager_dlg_init(IrrecoThemeManagerDlg *self)
200 GtkTreeViewColumn *column;
201 GtkCellRenderer *renderer;
202 GtkTreeSelection *select;
203 GtkWidget *label_name;
204 GtkWidget *label_description;
205 /*GtkWidget *label_rate;*/
206 GtkWidget *theme_info_frame;
207 GtkWidget *tree_view_frame;
208 GtkWidget *tree_view_hbox;
209 GtkWidget *preview_frame;
210 PangoFontDescription *initial_font;
211 GtkWidget *select_vbox;
212 GtkWidget *versions_hbox;
213 GtkWidget *comment_alignment;
214 GtkWidget *info_scrollbar;
215 GtkWidget *scrollbar;
216 GtkWidget *theme_info;
217 GtkWidget *table;
218 GtkWidget *info_vbox;
219 GtkWidget *done_button;
220 GtkWidget *theme_table;
221 GtkWidget *preview_event_box;
223 IRRECO_ENTER
225 self->theme_folder = NULL;
227 /* Construct dialog. */
228 gtk_window_set_title(GTK_WINDOW(self),
229 _("Theme Manager "));
230 /*gtk_window_set_decorated (GTK_WINDOW(self), FALSE);*/
231 gtk_window_set_modal(GTK_WINDOW(self), TRUE);
232 gtk_window_set_destroy_with_parent(GTK_WINDOW(self), TRUE);
233 gtk_dialog_set_has_separator(GTK_DIALOG(self), FALSE);
235 /*Buttons*/
237 self->refresh_button= gtk_dialog_add_button (GTK_DIALOG(self),
238 _("Refresh"),
239 IRRECO_DEVICE_REFRESH);
241 self->upload_button= gtk_dialog_add_button (GTK_DIALOG(self),
242 _("Upload"), GTK_RESPONSE_NONE);
245 self->download_button= gtk_dialog_add_button (GTK_DIALOG(self),
246 _("Download"),
247 GTK_RESPONSE_NONE);
248 self->clear_button= gtk_dialog_add_button (GTK_DIALOG(self),
249 _("Delete"),
250 GTK_RESPONSE_NONE);
251 done_button= gtk_dialog_add_button (GTK_DIALOG(self),
252 _("Done"),
253 GTK_RESPONSE_CANCEL);
255 /* Create theme table */
257 table = gtk_table_new(7,7,TRUE);
258 gtk_table_set_col_spacings(GTK_TABLE (table), 8);
259 gtk_table_set_row_spacings(GTK_TABLE (table), 8);
260 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(self)->vbox),
261 irreco_gtk_align(GTK_WIDGET(table),
262 0, 0, 1, 1, 8, 8, 8, 8));
263 /* Create tree_view_hbox */
264 tree_view_hbox = gtk_hbox_new(FALSE, 2);
266 /* Create Treeview */
267 self->tree_store = gtk_tree_store_new(
268 N_COLUMNS, G_TYPE_STRING, G_TYPE_INT, G_TYPE_POINTER);
269 self->tree_view = GTK_TREE_VIEW(gtk_tree_view_new_with_model(
270 GTK_TREE_MODEL(self->tree_store)));
272 renderer = gtk_cell_renderer_text_new();
273 column = gtk_tree_view_column_new_with_attributes(
274 NULL, renderer, "text", TEXT_COL, NULL);
275 gtk_tree_view_append_column(self->tree_view, column);
277 gtk_box_pack_start(GTK_BOX(tree_view_hbox), GTK_WIDGET(self->tree_view),
278 TRUE, TRUE, 0);
280 /* Create scrollbar for Treeview */
282 scrollbar = gtk_scrolled_window_new(NULL, NULL);
283 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollbar),
284 GTK_POLICY_AUTOMATIC,
285 GTK_POLICY_AUTOMATIC);
287 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(
288 scrollbar), tree_view_hbox);
290 /* Create Frame for Treeview */
291 tree_view_frame = gtk_frame_new("");
292 gtk_frame_set_label_widget(GTK_FRAME(tree_view_frame),
293 irreco_gtk_label_bold("Themes", 0, 0, 0, 0, 0, 0));
295 gtk_container_add(GTK_CONTAINER(tree_view_frame),
296 GTK_WIDGET(scrollbar));
298 /* Create theme_info */
300 theme_info = gtk_table_new(7, 4, TRUE);
301 gtk_table_set_col_spacings(GTK_TABLE(theme_info), 8);
302 gtk_table_set_row_spacings(GTK_TABLE(theme_info), 8);
304 /* Scrolled window for info */
305 info_scrollbar = gtk_scrolled_window_new(NULL, NULL);
306 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(
307 info_scrollbar),
308 GTK_POLICY_NEVER,
309 GTK_POLICY_AUTOMATIC);
311 /* Create combobox*/
312 self->version_store = gtk_tree_store_new(
313 2, G_TYPE_STRING, G_TYPE_STRING);
315 self->combobox = gtk_combo_box_new_text();
316 gtk_combo_box_set_wrap_width(GTK_COMBO_BOX(self->combobox), 1);
317 gtk_combo_box_set_model(GTK_COMBO_BOX(self->combobox),
318 GTK_TREE_MODEL(self->version_store));
320 theme_table = gtk_table_new(5, 7, TRUE);
321 gtk_table_set_col_spacings(GTK_TABLE(theme_table), 1);
322 gtk_table_set_row_spacings(GTK_TABLE(theme_table), 1);
324 info_vbox = gtk_vbox_new(FALSE, 1);
326 /*create eventbox*/
327 preview_event_box = gtk_event_box_new();
328 self->select_label = gtk_label_new(" Select \ncategory");
330 /* Create frame for theme_info */
331 select_vbox = gtk_vbox_new(FALSE, 2);
332 versions_hbox = gtk_hbox_new(FALSE, 2);
333 theme_info_frame = gtk_frame_new("");
334 gtk_frame_set_label_widget(GTK_FRAME(theme_info_frame),
335 irreco_gtk_label_bold("Info", 0, 0, 0, 0, 0, 0));
336 self->theme_info_alignment = gtk_alignment_new(0, 0, 0, 0);
337 gtk_alignment_set_padding(GTK_ALIGNMENT(self->theme_info_alignment),
338 0, 4, 8, 8);
341 preview_frame = gtk_frame_new(NULL);
342 gtk_frame_set_shadow_type(GTK_FRAME(preview_frame), GTK_SHADOW_OUT);
344 self->theme_image = gtk_image_new();
345 gtk_image_set_from_file(GTK_IMAGE(self->theme_image), NULL);
347 /*Dialog label*/
349 /*label_rate = gtk_label_new(" Rating");*/
350 label_name = gtk_label_new("Name: ");
351 self->label_creator = gtk_label_new("Author: ");
352 self->label_download= gtk_label_new("Downloads: ");
353 label_description = gtk_label_new("Comment: ");
354 self->label_combobox = gtk_label_new("Version:");
356 self->theme_name = gtk_label_new("");
357 self->theme_creator = gtk_label_new("");
358 self->theme_downloaded = gtk_label_new("");
359 self->theme_comment = gtk_label_new("");
360 self->theme_version = gtk_label_new("");
362 comment_alignment = gtk_alignment_new(0, 0, 0, 0);
363 gtk_widget_set_size_request(self->theme_comment,
364 330, -1);
365 gtk_alignment_set_padding(GTK_ALIGNMENT(comment_alignment),
366 0, 0, 20, 0);
367 gtk_label_set_line_wrap(GTK_LABEL(self->theme_comment), TRUE);
368 gtk_label_set_line_wrap_mode(GTK_LABEL(self->theme_comment),
369 PANGO_WRAP_WORD);
371 /*gtk_misc_set_alignment(GTK_MISC(label_rate), 0, 0.5);*/
372 gtk_misc_set_alignment(GTK_MISC(label_name), 0, 0.5);
373 gtk_misc_set_alignment(GTK_MISC(self->label_creator), 0, 0.5);
374 gtk_misc_set_alignment(GTK_MISC(self->label_download), 0, 0.5);
375 gtk_misc_set_alignment(GTK_MISC(label_description), 0, 0.5);
376 gtk_misc_set_alignment(GTK_MISC(self->label_combobox), 0, 0.5);
377 gtk_misc_set_alignment(GTK_MISC(self->theme_name), 0, 0.5);
378 gtk_misc_set_alignment(GTK_MISC(self->theme_creator), 0, 0.5);
379 gtk_misc_set_alignment(GTK_MISC(self->theme_downloaded), 0, 0.5);
380 gtk_misc_set_alignment(GTK_MISC(self->theme_comment), 0, 0.5);
381 gtk_misc_set_alignment(GTK_MISC(self->theme_version), 0, 0.5);
384 /*Attach WidGets to tables*/
386 gtk_table_attach(GTK_TABLE(theme_info), info_scrollbar,
387 0, 4, 4, 7, GTK_FILL, GTK_FILL, 0, 0);
389 gtk_table_attach_defaults(GTK_TABLE(table),
390 tree_view_frame, 0, 3, 0, 7);
391 gtk_table_attach_defaults(GTK_TABLE(theme_info),
392 preview_event_box, 3, 4, 0, 3);
393 /* gtk_table_attach_defaults(GTK_TABLE(self->theme_info),
394 label_rate, 3, 4, 3, 4);*/
395 gtk_table_attach_defaults(GTK_TABLE(theme_info),
396 theme_table, 0, 3, 0, 4);
397 gtk_table_attach_defaults(GTK_TABLE(theme_table),
398 label_name, 0, 3, 0, 1);
399 gtk_table_attach_defaults(GTK_TABLE(theme_table),
400 self->label_creator, 0, 3, 1, 2);
401 gtk_table_attach_defaults(GTK_TABLE(theme_table),
402 self->label_download, 0, 3, 2, 3);
403 gtk_table_attach_defaults(GTK_TABLE(theme_table),
404 label_description, 0, 3, 4, 5);
405 gtk_table_attach_defaults(GTK_TABLE(theme_table),
406 self->label_combobox, 0, 3, 3, 4);
407 gtk_table_attach_defaults(GTK_TABLE(theme_table),
408 versions_hbox, 3, 7, 3, 4);
409 gtk_table_attach_defaults(GTK_TABLE(table),
410 theme_info_frame, 3, 7, 0, 7);
411 gtk_table_attach(GTK_TABLE(theme_table), self->theme_name,
412 3, 7, 0, 1, GTK_FILL, GTK_FILL, 0, 0);
413 gtk_table_attach(GTK_TABLE(theme_table), self->theme_creator,
414 3, 7, 1, 2, GTK_FILL, GTK_FILL, 0, 0);
415 gtk_table_attach(GTK_TABLE(theme_table), self->theme_downloaded,
416 3, 7, 2, 3, GTK_FILL, GTK_FILL, 0, 0);
418 /*Add WidGets*/
420 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(
421 info_scrollbar), info_vbox);
422 gtk_container_add(GTK_CONTAINER(preview_frame),
423 self->theme_image);
424 gtk_container_add(GTK_CONTAINER(preview_event_box),
425 preview_frame);
426 gtk_container_add(GTK_CONTAINER(info_vbox), comment_alignment);
427 gtk_container_add(GTK_CONTAINER(comment_alignment),
428 self->theme_comment);
429 gtk_container_add(GTK_CONTAINER(theme_info_frame),
430 GTK_WIDGET(select_vbox));
431 gtk_container_add(GTK_CONTAINER(select_vbox),
432 GTK_WIDGET(self->theme_info_alignment));
433 gtk_container_add(GTK_CONTAINER(select_vbox),
434 GTK_WIDGET(self->select_label));
435 gtk_container_add(GTK_CONTAINER(self->theme_info_alignment),
436 GTK_WIDGET(theme_info));
437 gtk_container_add(GTK_CONTAINER(versions_hbox),
438 GTK_WIDGET(self->theme_version));
439 gtk_container_add(GTK_CONTAINER(versions_hbox),
440 GTK_WIDGET(self->combobox));
442 /*Set font size and style*/
443 /* Font size*/
444 initial_font = pango_font_description_from_string ("Sans Bold 16");
445 gtk_widget_modify_font (self->select_label, initial_font);
447 initial_font = pango_font_description_from_string ("Sans Bold 12");
448 /*gtk_widget_modify_font (label_rate, initial_font);*/
449 gtk_widget_modify_font (label_name, initial_font);
450 gtk_widget_modify_font (self->label_creator, initial_font);
451 gtk_widget_modify_font (self->label_download, initial_font);
452 gtk_widget_modify_font (label_description, initial_font);
453 gtk_widget_modify_font (self->label_combobox, initial_font);
454 /* Font size*/
455 initial_font = pango_font_description_from_string ("Sans 11");
456 gtk_widget_modify_font (self->theme_name, initial_font);
457 gtk_widget_modify_font (self->theme_creator, initial_font);
458 gtk_widget_modify_font (self->theme_downloaded, initial_font);
459 gtk_widget_modify_font (self->theme_comment, initial_font);
460 gtk_widget_modify_font (self->theme_version, initial_font);
461 gtk_widget_modify_font (self->combobox, initial_font);
463 /* Setup the selection handler for TREE */
464 select = gtk_tree_view_get_selection(self->tree_view);
465 gtk_tree_selection_set_mode(select, GTK_SELECTION_SINGLE);
467 /* Signal handlers. */
468 g_signal_connect(G_OBJECT(self), "map-event",
469 G_CALLBACK(irreco_show_theme_manager_dlg_map_event), NULL);
470 g_signal_connect(G_OBJECT(self), "destroy",
471 G_CALLBACK(irreco_show_theme_manager_dlg_destroy_event), NULL);
472 g_signal_connect(G_OBJECT(self->tree_view), "row-activated",
473 G_CALLBACK(irreco_show_theme_manager_dlg_row_activated_event),
474 self);
475 g_signal_connect(G_OBJECT(self->tree_view), "row-expanded",
476 G_CALLBACK(irreco_show_theme_manager_dlg_row_expanded_event),
477 self);
478 g_signal_connect(G_OBJECT(self->tree_view), "row-collapsed",
479 G_CALLBACK(irreco_show_theme_manager_dlg_row_collapsed_event),
480 self);
481 g_signal_connect(G_OBJECT (select), "changed",
482 G_CALLBACK (irreco_show_theme_manager_dlg_row_selected_event),
483 self);
484 g_signal_connect(G_OBJECT (self->combobox), "changed",
485 G_CALLBACK (irreco_theme_manager_dlg_selected_version_dlg),
486 self);
487 g_signal_connect(G_OBJECT(preview_event_box),
488 "button-release-event",
489 G_CALLBACK(irreco_theme_manager_dlg_preview_dlg),
490 self);
491 g_signal_connect(G_OBJECT(self->upload_button),
492 "clicked",
493 G_CALLBACK(irreco_theme_manager_dlg_upload_theme),
494 self);
495 g_signal_connect(G_OBJECT(self->clear_button),
496 "clicked",
497 G_CALLBACK(irreco_theme_manager_dlg_delete_theme),
498 self);
499 g_signal_connect(G_OBJECT(self->download_button),
500 "clicked",
501 G_CALLBACK(irreco_theme_manager_dlg_download_theme),
502 self);
504 gtk_tree_view_set_enable_tree_lines(self->tree_view, TRUE);
505 g_object_set (G_OBJECT (self->tree_view), "show-expanders", TRUE, NULL);
506 g_object_set (G_OBJECT (self->tree_view), "level-indentation", 0, NULL);
507 gtk_tree_view_set_rubber_banding(self->tree_view, FALSE);
509 gtk_widget_set_size_request(GTK_WIDGET(self), 696, 396);
510 gtk_widget_show_all(GTK_WIDGET(self));
512 IRRECO_RETURN
515 GtkWidget *irreco_theme_manager_dlg_new(IrrecoData *irreco_data,
516 GtkWindow *parent)
518 IrrecoThemeManagerDlg *self;
520 IRRECO_ENTER
522 self = g_object_new(IRRECO_TYPE_THEME_MANAGER_DLG, NULL);
523 irreco_dlg_set_parent(IRRECO_DLG(self), parent);
524 irreco_theme_manager_dlg_set_irreco_data(self, irreco_data);
526 IRRECO_RETURN_PTR(self);
530 * Show whole preview image
534 gboolean irreco_theme_manager_dlg_preview_dlg(GtkWidget *widget,
535 GdkEventButton *event,
536 IrrecoThemeManagerDlg *self)
538 if(self->preview_add!=NULL || self->webdb_theme->preview_button!=NULL){
540 GtkWidget *image, *event_box;
541 GtkWidget *preview_dialog;
543 IRRECO_ENTER
545 preview_dialog = irreco_dlg_new ();
546 gtk_window_set_title(GTK_WINDOW(preview_dialog), _("Preview"));
547 gtk_window_set_modal(GTK_WINDOW(preview_dialog), TRUE);
548 gtk_window_set_destroy_with_parent(GTK_WINDOW(preview_dialog), TRUE);
549 gtk_dialog_set_has_separator(GTK_DIALOG(preview_dialog), FALSE);
551 gtk_widget_set_size_request(preview_dialog, 185, -1);
553 event_box = gtk_event_box_new();
554 image = gtk_image_new();
555 if(self->preview_add != NULL){
556 gtk_image_set_from_file(GTK_IMAGE(image), self->preview_add);
558 }else{
559 gtk_image_set_from_pixbuf(GTK_IMAGE(image),
560 GDK_PIXBUF(self->webdb_theme->preview_button));
563 gtk_box_pack_start_defaults(GTK_BOX(GTK_DIALOG(preview_dialog)->vbox),
564 event_box);
565 gtk_container_add(GTK_CONTAINER(event_box), image);
567 g_signal_connect_swapped(G_OBJECT(event_box),
568 "button-release-event",
569 G_CALLBACK(gtk_widget_destroy),
570 preview_dialog);
572 gtk_widget_show_all(GTK_WIDGET(preview_dialog));
574 IRRECO_RETURN_BOOL(TRUE);
578 * Combobox versions
582 static void
583 irreco_theme_manager_dlg_selected_version_dlg(GtkComboBox *widget,
584 IrrecoThemeManagerDlg *self)
586 GtkTreeIter iter;
587 gchar *id;
589 IRRECO_ENTER
591 if(!gtk_combo_box_get_active_iter(widget, &iter)) {
592 IRRECO_RETURN
594 gtk_tree_model_get(GTK_TREE_MODEL(self->version_store), &iter,
595 ID_COL, &id, -1);
597 if (self->webdb_theme == NULL || self->webdb_theme->id != atoi(id)) {
598 IRRECO_DEBUG("SELECTED ID: %d\n", atoi(id));
599 self->selected_theme_id = atoi(id);
600 self->loader_func_id = g_idle_add(G_SOURCEFUNC(
601 irreco_theme_manager_dlg_theme_db_detail_loader),
602 self);
605 IRRECO_RETURN
609 * Delete user theme
612 static void irreco_theme_manager_dlg_delete_theme(GtkButton *button,
613 IrrecoThemeManagerDlg *self)
616 const gchar *name = gtk_label_get_label(GTK_LABEL(self->theme_name));
617 GString *message = g_string_new(NULL);
618 IRRECO_ENTER
620 g_string_append_printf(
621 message, _("Are you sure you want to\n "
622 "delete %s theme?"),name);
624 if (irreco_yes_no_dlg(GTK_WINDOW(self), message->str)){
626 irreco_theme_manager_remove_theme(
627 self->irreco_data->theme_manager, name);
628 gtk_button_clicked(GTK_BUTTON(self->refresh_button));
631 g_string_free(message, TRUE);
632 IRRECO_RETURN
636 * Download theme from DB
639 static void irreco_theme_manager_dlg_download_theme(GtkButton *button,
640 IrrecoThemeManagerDlg *self)
642 GtkWidget *radio1, *radio2, *radio3;
643 GtkWidget *label;
644 IrrecoTheme *theme;
645 IrrecoWebdbCache *webdb_cache = NULL;
646 gboolean theme_is_loaded = FALSE;
647 gint delete_mode = 0;
648 IrrecoTheme *same_theme = NULL;
649 gchar *same_theme_folder = NULL;
650 IrrecoThemeManager *theme_manager = self->irreco_data->theme_manager;
651 GString *message = g_string_new(NULL);
652 GString *path = g_string_new(NULL);
654 IRRECO_ENTER
656 webdb_cache = irreco_data_get_webdb_cache(self->irreco_data, FALSE);
657 self->download_dialog = irreco_dlg_new();
659 gtk_widget_set_size_request(self->download_dialog, 340, 160);
661 gtk_window_set_title(GTK_WINDOW(self->download_dialog),
662 _("Download theme"));
663 gtk_window_set_modal(GTK_WINDOW(self->download_dialog), TRUE);
664 gtk_window_set_destroy_with_parent(GTK_WINDOW(self->download_dialog),
665 TRUE);
666 gtk_dialog_set_has_separator(GTK_DIALOG(self->download_dialog), FALSE);
667 gtk_dialog_add_buttons(GTK_DIALOG(self->download_dialog),
668 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
669 GTK_STOCK_OK, GTK_RESPONSE_OK,
670 NULL);
672 label = gtk_label_new("Select download location");
674 radio1 = gtk_radio_button_new_with_label (NULL, "MMC1");
675 radio2 = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(
676 radio1), "MMC2");
677 radio3 = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(
678 radio2), "DEVICE");
680 gtk_box_pack_start_defaults(GTK_BOX(
681 GTK_DIALOG(self->download_dialog)->vbox),
682 label);
684 if(irreco_is_dir("/media/mmc1")) {
685 gtk_box_pack_start_defaults(GTK_BOX(
686 GTK_DIALOG(self->download_dialog)->vbox),
687 radio1);
690 if(irreco_is_dir("/media/mmc2")) {
691 gtk_box_pack_start_defaults(GTK_BOX(
692 GTK_DIALOG(self->download_dialog)->vbox),
693 radio2);
695 #if 0
696 gtk_box_pack_start_defaults(GTK_BOX(
697 GTK_DIALOG(self->download_dialog)->vbox),
698 radio3);
700 #endif
702 gtk_widget_show_all(GTK_WIDGET(self->download_dialog));
704 while (1) {
706 if (gtk_dialog_run(
707 GTK_DIALOG(self->download_dialog)) == GTK_RESPONSE_CANCEL){
708 break;
711 if (self->loader_func_id != 0) {
712 continue;
715 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radio1))) {
716 self->theme_folder = "/media/mmc1/irreco/";
717 } else if (gtk_toggle_button_get_active(
718 GTK_TOGGLE_BUTTON(radio2))) {
719 self->theme_folder = "/media/mmc2/irreco/";
720 } else {
721 self->theme_folder = IRRECO_THEME_DIR;
724 if(!irreco_is_dir(self->theme_folder)) {
725 g_mkdir(self->theme_folder, 0777);
728 /* Create theme */
729 g_string_printf(path, "%s%s/", self->theme_folder,
730 self->webdb_theme->folder->str);
732 IRRECO_STRING_TABLE_FOREACH_DATA(theme_manager->themes,
733 IrrecoTheme *, theme)
734 /*Check theme name*/
735 if (g_str_equal(self->webdb_theme->name->str,
736 theme->name->str)) {
737 if (g_str_equal(theme->source->str, "deb")) {
738 g_string_printf(message,
739 _("The \"%s\" theme already exists.\n"
740 "Can't overwrite \"Built In themes\"\n"
741 "Please remove it first from the\n"
742 "Application Manager"),
743 theme->name->str);
745 irreco_error_dlg(GTK_WINDOW(
746 self->download_dialog),
747 message->str);
748 goto end;
750 delete_mode += 1;
751 same_theme = theme;
753 /*Check theme folder path*/
754 else if (g_str_equal(path->str,
755 g_strconcat(theme->path->str, "/", NULL))){
756 if (g_str_equal(theme->source->str, "deb")) {
757 g_string_printf(message,
758 _("This theme replaces \"%s\" theme.\n"
759 "Can't overwrite \"Built In themes\"\n"
760 "Please remove it first from the\n"
761 "Application Manager"),
762 theme->name->str);
764 irreco_error_dlg(GTK_WINDOW(
765 self->download_dialog),
766 message->str);
767 goto end;
769 delete_mode += 2;
770 same_theme_folder = g_strdup(theme->name->str);
772 IRRECO_STRING_TABLE_FOREACH_END
774 if (delete_mode == 1) {
775 g_string_printf(message,
776 _("The \"%s\" theme already exists.\n"
777 "Do you want to replace this theme?"),
778 same_theme->name->str);
779 } else if (delete_mode == 2) {
780 g_string_printf(message,
781 _("This theme replaces \"%s\" theme.\n"
782 "Do you want to continue?"),
783 same_theme_folder);
784 } else if (delete_mode == 3) {
785 g_string_printf(message,
786 _("This theme replaces themes\n"
787 "\"%s\" and \"%s\"\n"
788 "Do you want to continue?"),
789 same_theme->name->str,
790 same_theme_folder);
793 /* Check whether a theme folder already exists */
794 if (delete_mode != 0) {
795 /* Create dialog*/
796 if (!irreco_yes_no_dlg(
797 GTK_WINDOW(self->download_dialog), message->str)) {
798 continue;
799 } else {
800 /* Remove theme folder and then make it again*/
801 if (delete_mode == 1 || delete_mode == 3) {
802 gchar *rm_cmd = g_strconcat("rm -r ",
803 same_theme->path->str, NULL);
804 system(rm_cmd);
805 g_free(rm_cmd);
807 if (delete_mode == 2 || delete_mode == 3) {
808 irreco_theme_manager_remove_theme(
809 self->irreco_data->theme_manager,
810 same_theme_folder);
811 g_free(same_theme_folder);
816 /*Create folder */
817 g_mkdir(path->str, 0777);
819 /*Create new theme*/
820 if (delete_mode == 0 || delete_mode == 2) {
821 theme = irreco_theme_new(self->webdb_theme->name->str,
822 path->str, "web",
823 self->webdb_theme->creator->str,
824 self->webdb_theme->comment->str,
825 self->webdb_theme->preview_button_name->str,
826 self->webdb_theme->uploaded->str);
828 irreco_theme_update_keyfile(theme);
829 irreco_theme_free(theme);
830 } else {
831 irreco_theme_set(same_theme,
832 self->webdb_theme->name->str,
833 path->str, "web",
834 self->webdb_theme->creator->str,
835 self->webdb_theme->comment->str,
836 self->webdb_theme->preview_button_name->str,
837 self->webdb_theme->uploaded->str);
840 /* Get buttons and backgrounds */
841 self->loader_func_id = g_idle_add(G_SOURCEFUNC(
842 irreco_theme_manager_dlg_button_loader), self);
843 theme_is_loaded = TRUE;
846 end:
847 g_string_free(message, TRUE);
848 g_string_free(path, TRUE);
849 irreco_theme_manager_dlg_hide_banner(self);
850 irreco_theme_manager_dlg_loader_stop(self);
851 if(self->download_dialog != NULL) {
852 gtk_widget_destroy(GTK_WIDGET(self->download_dialog));
853 self->download_dialog = NULL;
854 if(theme_is_loaded == TRUE) {
855 gtk_button_clicked(GTK_BUTTON(self->refresh_button));
858 IRRECO_RETURN
862 * Upload user theme
866 static void irreco_theme_manager_dlg_upload_theme(GtkButton *button,
867 IrrecoThemeManagerDlg *self)
869 IRRECO_ENTER
871 if (irreco_theme_upload_dlg_run(GTK_WINDOW(self),
872 self->irreco_data, self->theme) == TRUE) {
873 gtk_button_clicked(GTK_BUTTON(self->refresh_button));
875 IRRECO_RETURN
878 /** @} */
880 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
881 /* Private Functions */
882 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
885 * @name Private Functions
886 * @{
890 static void _smaller_text(gpointer cell, gpointer user_data)
892 g_object_set(cell, "scale", (gdouble)0.75,
893 "scale-set", TRUE, NULL);
894 IRRECO_PRINTF("_smaller_text\n");
895 IRRECO_PAUSE
898 static void scale_combobox(IrrecoThemeManagerDlg *self)
900 GList *cells;
901 IRRECO_ENTER
902 cells = gtk_tree_view_column_get_cell_renderers(GTK_TREE_VIEW_COLUMN(self->combobox));
903 cells = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(self->version_store));
904 g_list_foreach(cells, _smaller_text, NULL);
905 g_list_free(cells);
906 IRRECO_RETURN
910 * Clean detail list
913 static void irreco_theme_manager_dlg_clean_details(IrrecoThemeManagerDlg *self)
916 IRRECO_ENTER
918 gtk_widget_show_all(GTK_WIDGET(self));
919 gtk_label_set_text(
920 GTK_LABEL(self->theme_name), "-");
921 gtk_label_set_text(
922 GTK_LABEL(self->theme_creator), "-");
923 gtk_label_set_text(
924 GTK_LABEL(self->theme_comment), "-");
925 gtk_label_set_text(
926 GTK_LABEL(self->theme_downloaded), "-");
927 gtk_image_clear(GTK_IMAGE(self->theme_image));
928 self->preview_add=NULL;
930 gtk_widget_hide(self->upload_button);
931 gtk_widget_hide(self->download_button);
932 gtk_widget_hide(self->clear_button);
933 gtk_widget_hide(self->theme_info_alignment);
934 gtk_widget_show(self->select_label);
937 IRRECO_RETURN
941 * Have the childern of this item been loaded.
943 * @return TRUE if children have been loade, FALSE otherwise.
946 static gboolean
947 irreco_theme_manager_dlg_row_is_loaded(IrrecoThemeManagerDlg *self,
948 GtkTreeIter *iter)
950 gint i;
952 IRRECO_ENTER
954 gtk_tree_model_get(GTK_TREE_MODEL(self->tree_store),
955 iter, FLAG_COL, &i, -1);
956 if (i & ROW_CHILDREN_LOADED) IRRECO_RETURN_BOOL(TRUE);
958 IRRECO_RETURN_BOOL(FALSE);
962 * Get type of row.
965 static gint irreco_theme_manager_dlg_row_get_type(IrrecoThemeManagerDlg *self,
966 GtkTreeIter *iter)
968 gint i;
970 IRRECO_ENTER
972 gtk_tree_model_get(GTK_TREE_MODEL(self->tree_store),
973 iter, FLAG_COL, &i, -1);
974 if (i & ROW_TYPE_CATEGORY)
975 IRRECO_RETURN_ENUM(ROW_TYPE_CATEGORY);
976 if (i & ROW_TYPE_DEB)
977 IRRECO_RETURN_ENUM(ROW_TYPE_DEB);
978 if (i & ROW_TYPE_USER)
979 IRRECO_RETURN_ENUM(ROW_TYPE_USER);
980 if (i & ROW_TYPE_WEB)
981 IRRECO_RETURN_ENUM(ROW_TYPE_WEB);
982 if (i & ROW_TYPE_DB)
983 IRRECO_RETURN_ENUM(ROW_TYPE_DB);
984 if (i & ROW_TYPE_LOADING)
985 IRRECO_RETURN_ENUM(ROW_TYPE_LOADING);
986 IRRECO_RETURN_INT(0);
990 * Show hildon progressbar banner.
992 * This function will create a new banner if one has not been created yet,
993 * if banner already exists, it's properties will be changed.
995 * @param text Text to show.
996 * @param fraction Value of progress.
999 static void irreco_theme_manager_dlg_set_banner(IrrecoThemeManagerDlg *self,
1000 const gchar *text,
1001 gdouble fraction)
1003 IRRECO_ENTER
1005 if (self->banner == NULL) {
1006 self->banner = hildon_banner_show_progress(
1007 GTK_WIDGET(self), NULL, "");
1010 hildon_banner_set_text(HILDON_BANNER(self->banner), text);
1011 hildon_banner_set_fraction(HILDON_BANNER(self->banner), fraction);
1013 IRRECO_RETURN
1017 * Destroy banner, if it exists.
1020 static void irreco_theme_manager_dlg_hide_banner(IrrecoThemeManagerDlg *self)
1022 IRRECO_ENTER
1024 if (self->banner) {
1025 gtk_widget_destroy(self->banner);
1026 self->banner = NULL;
1029 IRRECO_RETURN
1033 * Start a loader state machine if one is not running already.
1036 static
1037 gboolean irreco_theme_manager_dlg_loader_start(IrrecoThemeManagerDlg *self,
1038 GSourceFunc function,
1039 GtkTreeIter *parent_iter)
1041 IRRECO_ENTER
1043 if (self->loader_func_id == 0) {
1044 if (parent_iter) {
1045 self->loader_parent_iter = gtk_tree_iter_copy(
1046 parent_iter);
1048 if (function) {
1049 self->loader_func_id = g_idle_add(function, self);
1050 } else {
1051 IRRECO_ERROR("Loader function pointer not given.\n");
1054 IRRECO_RETURN_BOOL(TRUE);
1059 * Stop and cleanup loader if a loader is running.
1062 static void irreco_theme_manager_dlg_loader_stop(IrrecoThemeManagerDlg *self)
1064 IRRECO_ENTER
1066 if (self->loader_func_id != 0) {
1067 g_source_remove(self->loader_func_id);
1068 self->loader_func_id = 0;
1069 self->loader_state = 0;
1070 if (self->loader_parent_iter) {
1071 gtk_tree_iter_free(self->loader_parent_iter);
1073 self->loader_parent_iter = NULL;
1075 IRRECO_RETURN
1078 static gboolean
1079 irreco_theme_manager_dlg_loader_user(IrrecoThemeManagerDlg *self)
1081 IRRECO_ENTER
1083 switch (self->loader_state) {
1084 case LOADER_STATE_INIT: {
1085 GtkTreeIter iter;
1086 irreco_theme_manager_dlg_set_banner(self, _("Loading ..."),
1087 0.5);
1088 self->loader_state = LOADER_STATE_LOOP;
1089 irreco_theme_manager_dlg_clean_details(self);
1090 if (!irreco_theme_manager_does_user_exist(
1091 self->irreco_data->theme_manager)) {
1092 self->loader_state = LOADER_STATE_END;
1093 self->loader_iter = NULL;
1094 } else {
1097 gtk_tree_store_append(self->tree_store,
1098 &iter, NULL);
1099 gtk_tree_store_set(self->tree_store,
1100 &iter,
1101 TEXT_COL, _("My Themes"),
1102 FLAG_COL, ROW_TYPE_CATEGORY,
1103 DATA_COL, NULL, -1);
1105 self->loader_iter = gtk_tree_iter_copy(&iter);
1108 IRRECO_RETURN_BOOL(TRUE);
1112 case LOADER_STATE_LOOP: {
1114 IrrecoData *irreco_data = NULL;
1115 IrrecoThemeManager *theme_manager = NULL;
1116 GtkTreeIter iter;
1117 IrrecoStringTable *categories = NULL;
1120 irreco_data = self->irreco_data;
1121 theme_manager = irreco_data->theme_manager;
1122 categories = irreco_theme_manager_get_themes(theme_manager);
1124 IRRECO_STRING_TABLE_FOREACH_DATA(categories,
1125 IrrecoTheme *, theme)
1127 if (g_utf8_collate(theme->source->str, "user") == 0){
1129 /* Add loading item into category. */
1130 gtk_tree_store_append(self->tree_store,
1131 &iter,
1132 self->loader_iter);
1133 gtk_tree_store_set(self->tree_store,
1134 &iter,
1135 TEXT_COL,
1136 theme->name->str,
1137 FLAG_COL,
1138 ROW_TYPE_USER,
1139 DATA_COL, NULL, -1);
1141 IRRECO_STRING_TABLE_FOREACH_END
1143 irreco_theme_manager_dlg_set_banner(self, _("Loading ..."),
1144 1.0);
1145 self->loader_state = LOADER_STATE_END;
1146 IRRECO_RETURN_BOOL(TRUE);
1149 case LOADER_STATE_END:
1150 if (self->loader_iter != NULL) {
1151 gtk_tree_iter_free(self->loader_iter);
1153 irreco_theme_manager_dlg_hide_banner(self);
1154 irreco_theme_manager_dlg_loader_stop(self);
1156 irreco_theme_manager_dlg_loader_start(self,
1157 G_SOURCEFUNC(irreco_theme_manager_dlg_loader_deb),NULL);
1160 IRRECO_RETURN_BOOL(FALSE);
1164 * Category loader.
1166 * This loader will request a list of categories from the theme and
1167 * update the TreeView accordingly. Every category row created by this loader
1168 * will have row type ROW_TYPE_DEB.
1172 static gboolean irreco_theme_manager_dlg_loader_deb(IrrecoThemeManagerDlg *self)
1174 IRRECO_ENTER
1176 switch (self->loader_state) {
1177 case LOADER_STATE_INIT: {
1178 GtkTreeIter iter;
1179 irreco_theme_manager_dlg_set_banner(self, _("Loading ..."),
1180 0.5);
1181 self->loader_state = LOADER_STATE_LOOP;
1182 irreco_theme_manager_dlg_clean_details(self);
1184 if (!irreco_theme_manager_does_deb_exist(
1185 self->irreco_data->theme_manager)) {
1186 self->loader_state = LOADER_STATE_END;
1187 self->loader_iter = NULL;
1188 } else {
1190 gtk_tree_store_append(self->tree_store,
1191 &iter, NULL);
1192 gtk_tree_store_set(self->tree_store,
1193 &iter,
1194 TEXT_COL, _("Built In"),
1195 FLAG_COL, ROW_TYPE_CATEGORY,
1196 DATA_COL, NULL, -1);
1198 self->loader_iter = gtk_tree_iter_copy(&iter);
1200 IRRECO_RETURN_BOOL(TRUE);
1204 case LOADER_STATE_LOOP: {
1206 IrrecoData *irreco_data = NULL;
1207 IrrecoThemeManager *theme_manager = NULL;
1208 GtkTreeIter iter;
1209 IrrecoStringTable *categories = NULL;
1211 irreco_data = self->irreco_data;
1212 theme_manager = irreco_data->theme_manager;
1213 categories = irreco_theme_manager_get_themes(theme_manager);
1215 IRRECO_STRING_TABLE_FOREACH_DATA(categories,
1216 IrrecoTheme *, theme)
1217 if (g_utf8_collate(theme->source->str, "deb") == 0){
1219 /* Add loading item into category. */
1220 gtk_tree_store_append(self->tree_store,
1221 &iter, self->loader_iter);
1222 gtk_tree_store_set(self->tree_store,
1223 &iter,
1224 TEXT_COL,
1225 theme->name->str,
1226 FLAG_COL, ROW_TYPE_DEB,
1227 DATA_COL, NULL, -1);
1229 IRRECO_STRING_TABLE_FOREACH_END
1231 irreco_theme_manager_dlg_set_banner(self, _("Loading ..."),
1232 1.0);
1233 self->loader_state = LOADER_STATE_END;
1234 IRRECO_RETURN_BOOL(TRUE);
1237 case LOADER_STATE_END: {
1238 GtkTreeIter iter, iter_loading;
1239 if (self->loader_iter != NULL) {
1240 gtk_tree_iter_free(self->loader_iter);
1242 irreco_theme_manager_dlg_hide_banner(self);
1243 irreco_theme_manager_dlg_loader_stop(self);
1245 /* Create database row */
1246 gtk_tree_store_append(self->tree_store, &iter, NULL);
1247 gtk_tree_store_set(self->tree_store, &iter,
1248 TEXT_COL, _("Database"),
1249 FLAG_COL, ROW_TYPE_CATEGORY,
1250 DATA_COL, NULL, -1);
1252 /* Add loading item into manufacturer. */
1253 gtk_tree_store_append(self->tree_store, &iter_loading, &iter);
1254 gtk_tree_store_set(self->tree_store, &iter_loading,
1255 TEXT_COL, _("Loading ..."),
1256 FLAG_COL, ROW_TYPE_LOADING,
1257 DATA_COL, NULL, -1);
1259 irreco_theme_manager_dlg_loader_start(self,
1260 G_SOURCEFUNC(irreco_theme_manager_dlg_loader_web), NULL);
1264 IRRECO_RETURN_BOOL(FALSE);
1267 static gboolean irreco_theme_manager_dlg_loader_db(IrrecoThemeManagerDlg *self)
1269 IRRECO_ENTER
1271 switch (self->loader_state) {
1272 case LOADER_STATE_INIT:{
1273 GtkTreeIter iter;
1274 irreco_theme_manager_dlg_set_banner(self, _("Loading themes"),
1275 0.0);
1276 self->loader_state = LOADER_STATE_LOOP;
1277 self->theme_loader_index = 0;
1278 irreco_theme_manager_dlg_clean_details(self);
1280 /* Check if loading item exist */
1281 gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(self->tree_store),
1282 &iter, self->loader_iter, 0);
1284 if(irreco_theme_manager_dlg_row_get_type(self,
1285 &iter) != ROW_TYPE_LOADING) {
1286 self->loader_state = LOADER_STATE_END;
1289 IRRECO_RETURN_BOOL(TRUE);
1293 case LOADER_STATE_LOOP: {
1294 GtkTreeIter iter;
1295 GtkTreeIter iter_loading;
1296 IrrecoStringTable *themes = NULL;
1297 IrrecoWebdbTheme *theme_by_id;
1298 IrrecoWebdbCache *webdb_cache = NULL;
1299 const gchar *id;
1300 gfloat banner;
1302 webdb_cache = irreco_data_get_webdb_cache(self->irreco_data,
1303 FALSE);
1304 /* Get themes */
1305 if (!irreco_webdb_cache_get_themes(webdb_cache, &themes)) {
1306 irreco_error_dlg(GTK_WINDOW(self),
1307 irreco_webdb_cache_get_error(
1308 webdb_cache));
1309 self->loader_state = LOADER_STATE_END;
1310 IRRECO_RETURN_BOOL(TRUE);
1313 if (!irreco_string_table_index(themes,
1314 (guint)self->theme_loader_index, &id, NULL)) {
1315 irreco_error_dlg(GTK_WINDOW(self), "Can't find theme");
1316 self->loader_state = LOADER_STATE_END;
1317 IRRECO_RETURN_BOOL(TRUE);
1320 if (!irreco_webdb_cache_get_theme_by_id(webdb_cache,
1321 atoi(id),
1322 &theme_by_id)) {
1323 irreco_error_dlg(GTK_WINDOW(self),
1324 irreco_webdb_cache_get_error(
1325 webdb_cache));
1326 self->loader_state = LOADER_STATE_END;
1327 IRRECO_RETURN_BOOL(TRUE);
1330 gtk_tree_store_append(self->tree_store, &iter,
1331 self->loader_iter);
1333 gtk_tree_store_set(self->tree_store, &iter,
1334 TEXT_COL, theme_by_id->name->str,
1335 FLAG_COL, ROW_TYPE_DB,
1336 DATA_COL, id, -1);
1338 banner = ++self->theme_loader_index;
1339 banner /= (gfloat) irreco_string_table_lenght (themes);
1341 irreco_theme_manager_dlg_set_banner(self, _("Loading themes"),
1342 banner);
1343 if (banner >= 1.0) {
1344 self->loader_state = LOADER_STATE_END;
1347 /* Delete loading item */
1348 gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(self->tree_store),
1349 &iter_loading, self->loader_iter,
1351 if(irreco_theme_manager_dlg_row_get_type(self,
1352 &iter_loading) == ROW_TYPE_LOADING) {
1353 gtk_tree_store_remove(self->tree_store, &iter_loading);
1356 IRRECO_RETURN_BOOL(TRUE);
1359 case LOADER_STATE_END:
1360 if (self->loader_iter != NULL) {
1361 gtk_tree_iter_free(self->loader_iter);
1363 irreco_theme_manager_dlg_hide_banner(self);
1364 irreco_theme_manager_dlg_loader_stop(self);
1367 IRRECO_RETURN_BOOL(FALSE);
1371 static gboolean irreco_theme_manager_dlg_loader_web(IrrecoThemeManagerDlg *self)
1373 IRRECO_ENTER
1375 switch (self->loader_state) {
1376 case LOADER_STATE_INIT: {
1377 GtkTreeIter iter;
1378 irreco_theme_manager_dlg_set_banner(self, _("Loading ..."),
1379 0.5);
1380 self->loader_state = LOADER_STATE_LOOP;
1381 irreco_theme_manager_dlg_clean_details(self);
1382 if (!irreco_theme_manager_does_web_exist(
1383 self->irreco_data->theme_manager)) {
1384 self->loader_state = LOADER_STATE_END;
1385 self->loader_iter = NULL;
1386 } else {
1388 gtk_tree_store_append(self->tree_store,
1389 &iter, NULL);
1390 gtk_tree_store_set(self->tree_store,
1391 &iter,
1392 TEXT_COL, _("Downloaded"),
1393 FLAG_COL, ROW_TYPE_CATEGORY,
1394 DATA_COL, NULL, -1);
1396 self->loader_iter = gtk_tree_iter_copy(&iter);
1398 IRRECO_RETURN_BOOL(TRUE);
1400 case LOADER_STATE_LOOP: {
1402 IrrecoData *irreco_data = NULL;
1403 IrrecoThemeManager *theme_manager = NULL;
1404 GtkTreeIter iter;
1405 IrrecoStringTable *categories = NULL;
1407 irreco_data = self->irreco_data;
1408 theme_manager = irreco_data->theme_manager;
1409 categories = irreco_theme_manager_get_themes(theme_manager);
1411 IRRECO_STRING_TABLE_FOREACH_DATA(categories,
1412 IrrecoTheme *, theme)
1414 if (g_utf8_collate(theme->source->str, "web") == 0){
1416 /* Add loading item into category. */
1417 gtk_tree_store_append(self->tree_store,
1418 &iter,
1419 self->loader_iter);
1420 gtk_tree_store_set(self->tree_store,
1421 &iter,
1422 TEXT_COL,
1423 theme->name->str,
1424 FLAG_COL,
1425 ROW_TYPE_WEB,
1426 DATA_COL, NULL, -1);
1428 IRRECO_STRING_TABLE_FOREACH_END
1430 irreco_theme_manager_dlg_set_banner(self, _("Loading ..."),
1431 1.0);
1432 self->loader_state = LOADER_STATE_END;
1433 IRRECO_RETURN_BOOL(TRUE);
1436 case LOADER_STATE_END:
1437 if (self->loader_iter != NULL) {
1438 gtk_tree_iter_free(self->loader_iter);
1440 irreco_theme_manager_dlg_hide_banner(self);
1441 irreco_theme_manager_dlg_loader_stop(self);
1444 IRRECO_RETURN_BOOL(FALSE);
1448 * Show theme details
1450 * @todo
1453 static gboolean
1454 irreco_theme_manager_dlg_display_theme_detail(IrrecoThemeManagerDlg *self,
1455 GtkTreeIter * iter)
1457 IrrecoThemeManager *theme_manager = self->irreco_data->theme_manager;
1458 IrrecoThemeButton *button;
1459 const gchar *theme_name;
1461 IRRECO_ENTER
1463 gtk_image_clear(GTK_IMAGE(self->theme_image));
1465 gtk_tree_model_get(GTK_TREE_MODEL(self->tree_store),
1466 iter, TEXT_COL, &theme_name, -1);
1467 irreco_string_table_get(theme_manager->themes, theme_name,
1468 (gpointer *) &self->theme);
1470 gtk_label_set_text(GTK_LABEL(self->theme_name),
1471 self->theme->name->str);
1472 gtk_label_set_text(GTK_LABEL(self->theme_creator),
1473 self->theme->author->str);
1474 gtk_label_set_text(GTK_LABEL(self->theme_comment),
1475 self->theme->comment->str);
1476 gtk_label_set_text(GTK_LABEL(self->theme_version),
1477 self->theme->version->str);
1479 if (self->theme->preview_button_name->len > 0) {
1480 button =irreco_theme_get_button(self->theme,
1481 self->theme->preview_button_name->str);
1482 } else {
1483 const gchar *key;
1484 irreco_string_table_index(self->theme->buttons,
1485 0, &key, (gpointer *) &button);
1487 IRRECO_DEBUG("Preview-button: %s\n", button->image_up->str);
1489 gtk_image_set_from_file(GTK_IMAGE(self->theme_image),
1490 button->image_up->str);
1492 self->preview_add = button->image_up->str;
1494 IRRECO_RETURN_BOOL(TRUE);
1497 static gboolean
1498 irreco_theme_manager_dlg_theme_db_detail_loader(IrrecoThemeManagerDlg *self)
1500 IRRECO_ENTER
1502 switch (self->loader_state) {
1503 case LOADER_STATE_INIT:{
1504 irreco_theme_manager_dlg_set_banner(self,
1505 _("Loading ..."), 0.5);
1506 self->loader_state = LOADER_STATE_LOOP;
1507 IRRECO_RETURN_BOOL(TRUE);
1510 case LOADER_STATE_LOOP: {
1511 gchar *download_count;
1512 gint index = 0;
1513 IrrecoWebdbCache *webdb_cache = irreco_data_get_webdb_cache(
1514 self->irreco_data,
1515 FALSE);
1517 gtk_image_clear(GTK_IMAGE(self->theme_image));
1519 /* Get Theme-id */
1520 /* gtk_tree_model_get(GTK_TREE_MODEL(self->tree_store),
1521 iter, DATA_COL, &theme_id, -1);*/
1523 /* Get WebdbTheme with preview-button */
1524 irreco_webdb_cache_get_preview_button(webdb_cache,
1525 self->selected_theme_id,
1526 &self->webdb_theme);
1528 gtk_label_set_text(GTK_LABEL(self->theme_name),
1529 self->webdb_theme->name->str);
1530 gtk_label_set_text(GTK_LABEL(self->theme_creator),
1531 self->webdb_theme->creator->str);
1532 gtk_label_set_text(GTK_LABEL(self->theme_comment),
1533 self->webdb_theme->comment->str);
1535 /* Clear combobox */
1536 gtk_tree_store_clear(self->version_store);
1538 IRRECO_STRING_TABLE_FOREACH(self->webdb_theme->versions,
1539 key, gchar *, date)
1540 GtkTreeIter iter;
1542 /* Append row */
1543 gtk_tree_store_append(self->version_store,
1544 &iter, NULL);
1546 /* Fill row */
1547 gtk_tree_store_set(self->version_store, &iter,
1548 DATE_COL, date,
1549 ID_COL, key, -1);
1551 if (g_utf8_collate (date,
1552 self->webdb_theme->uploaded->str) == 0) {
1553 gtk_combo_box_set_active(GTK_COMBO_BOX(
1554 self->combobox),
1555 index);
1557 index++;
1558 IRRECO_STRING_TABLE_FOREACH_END
1560 /*scale_combobox(self);*/
1562 download_count = g_strdup_printf("%d",
1563 self->webdb_theme->download_count);
1565 gtk_label_set_text(GTK_LABEL(self->theme_downloaded),
1566 download_count);
1567 g_free(download_count);
1569 if (self->webdb_theme->preview_button != NULL) {
1570 gtk_image_set_from_pixbuf(GTK_IMAGE(self->theme_image),
1571 self->webdb_theme->preview_button);
1572 self->preview_add = NULL;
1573 } else {
1574 IRRECO_DEBUG("preview_button is NULL\n");
1576 self->preview_add = NULL;
1578 self->loader_state = LOADER_STATE_END;
1579 IRRECO_RETURN_BOOL(TRUE);
1582 case LOADER_STATE_END:
1583 irreco_theme_manager_dlg_hide_banner(self);
1584 irreco_theme_manager_dlg_loader_stop(self);
1586 IRRECO_RETURN_BOOL(FALSE);
1589 static gboolean irreco_theme_manager_dlg_bg_loader(IrrecoThemeManagerDlg *self)
1591 IRRECO_ENTER
1593 switch (self->loader_state) {
1594 case LOADER_STATE_INIT:{
1595 GString *path = g_string_new("");
1596 irreco_theme_manager_dlg_set_banner(self,
1597 _("Loading backgrounds..."),
1598 0.0);
1599 self->loader_state = LOADER_STATE_LOOP;
1600 self->theme_loader_index = 0;
1602 g_string_printf(path, "%s%s/bg/", self->theme_folder,
1603 self->webdb_theme->folder->str);
1605 IRRECO_DEBUG("mkdir %s\n", path->str);
1606 g_mkdir(path->str, 0777);
1607 g_string_free(path, TRUE);
1609 IRRECO_RETURN_BOOL(TRUE);
1612 case LOADER_STATE_LOOP: {
1613 IrrecoStringTable *bg_list = NULL;
1614 GString *path = g_string_new("");
1615 gfloat banner;
1616 const gchar *id;
1617 IrrecoWebdbCache *webdb_cache = irreco_data_get_webdb_cache(
1618 self->irreco_data,
1619 FALSE);
1620 /* Get backrounds */
1621 irreco_webdb_cache_get_backgrounds(webdb_cache,
1622 self->webdb_theme->id,
1623 &bg_list);
1625 g_string_printf(path, "%s%s/bg/", self->theme_folder,
1626 self->webdb_theme->folder->str);
1628 if (irreco_string_table_index(bg_list,
1629 (guint)self->theme_loader_index, &id, NULL)) {
1630 irreco_webdb_cache_get_bg_by_id(webdb_cache, atoi(id),
1631 path->str);
1634 banner = ++self->theme_loader_index;
1635 banner /= (gfloat) irreco_string_table_lenght (bg_list);
1637 irreco_theme_manager_dlg_set_banner(self,
1638 _("Loading backgrounds..."),
1639 banner);
1640 if (banner >= 1.0) {
1641 self->loader_state = LOADER_STATE_END;
1643 g_string_free(path, TRUE);
1644 IRRECO_RETURN_BOOL(TRUE);
1646 case LOADER_STATE_END:
1647 irreco_theme_manager_dlg_hide_banner(self);
1648 irreco_theme_manager_dlg_loader_stop(self);
1649 gtk_dialog_response(GTK_DIALOG(self->download_dialog),
1650 GTK_RESPONSE_CANCEL);
1652 IRRECO_RETURN_BOOL(FALSE);
1655 static gboolean
1656 irreco_theme_manager_dlg_button_loader(IrrecoThemeManagerDlg *self)
1658 IRRECO_ENTER
1660 switch (self->loader_state) {
1661 case LOADER_STATE_INIT:{
1662 GString *path = g_string_new("");
1663 irreco_theme_manager_dlg_set_banner(self,
1664 _("Loading buttons.."),
1665 0.0);
1666 self->loader_state = LOADER_STATE_LOOP;
1667 self->theme_loader_index = 0;
1669 g_string_printf(path, "%s%s/buttons/", self->theme_folder,
1670 self->webdb_theme->folder->str);
1672 IRRECO_DEBUG("mkdir %s\n", path->str);
1673 g_mkdir(path->str, 0777);
1674 g_string_free(path, TRUE);
1676 IRRECO_RETURN_BOOL(TRUE);
1679 case LOADER_STATE_LOOP: {
1680 IrrecoStringTable *button_list = NULL;
1681 GString *path = g_string_new("");
1682 gfloat banner;
1683 const gchar *id;
1684 IrrecoWebdbCache *webdb_cache = irreco_data_get_webdb_cache(
1685 self->irreco_data,
1686 FALSE);
1687 /* Get buttons */
1688 irreco_webdb_cache_get_buttons(webdb_cache,
1689 self->webdb_theme->id,
1690 &button_list);
1692 g_string_printf(path, "%s%s/buttons/", self->theme_folder,
1693 self->webdb_theme->folder->str);
1695 if (irreco_string_table_index(button_list,
1696 (guint)self->theme_loader_index, &id, NULL)) {
1697 irreco_webdb_cache_get_button_by_id(webdb_cache,
1698 atoi(id),
1699 path->str);
1702 banner = ++self->theme_loader_index;
1703 banner /= (gfloat) irreco_string_table_lenght (button_list);
1705 irreco_theme_manager_dlg_set_banner(self,
1706 _("Loading buttons.."),
1707 banner);
1708 if (banner >= 1.0) {
1709 self->loader_state = LOADER_STATE_END;
1711 g_string_free(path, TRUE);
1712 IRRECO_RETURN_BOOL(TRUE);
1714 case LOADER_STATE_END:
1715 irreco_theme_manager_dlg_hide_banner(self);
1716 irreco_theme_manager_dlg_loader_stop(self);
1718 /* Get backgrounds */
1719 self->loader_func_id = g_idle_add(G_SOURCEFUNC(
1720 irreco_theme_manager_dlg_bg_loader), self);
1722 IRRECO_RETURN_BOOL(FALSE);
1725 /** @} */
1729 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1730 /* Functions */
1731 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1734 * @name Public Functions
1735 * @{
1738 void irreco_theme_manager_dlg_set_irreco_data(IrrecoThemeManagerDlg *self,
1739 IrrecoData *irreco_data)
1741 IRRECO_ENTER
1743 self->irreco_data = irreco_data;
1745 IRRECO_RETURN
1748 void irreco_show_theme_manager_dlg(IrrecoData *irreco_data, GtkWindow *parent)
1750 IrrecoThemeManagerDlg *self;
1751 gint response;
1752 gboolean loop = TRUE;
1753 IrrecoWebdbCache *webdb_cache = NULL;
1755 IRRECO_ENTER
1757 self = IRRECO_THEME_MANAGER_DLG(irreco_theme_manager_dlg_new(
1758 irreco_data, parent));
1760 webdb_cache = irreco_data_get_webdb_cache(self->irreco_data, FALSE);
1762 do {
1763 response = gtk_dialog_run(GTK_DIALOG(self));
1764 switch (response) {
1765 case IRRECO_DEVICE_REFRESH:
1766 if (self->loader_func_id != 0) {
1767 break;
1769 IRRECO_DEBUG("IRRECO_DEVICE_REFRESH\n");
1770 gtk_tree_store_clear(self->tree_store);
1771 irreco_theme_manager_update_theme_manager
1772 (self->irreco_data->theme_manager);
1774 if (webdb_cache->theme_id_hash != NULL) {
1775 g_hash_table_remove_all(
1776 webdb_cache->theme_id_hash);
1777 self->webdb_theme = NULL;
1780 IRRECO_STRING_TABLE_FOREACH_DATA(
1781 irreco_data->theme_manager->themes,
1782 IrrecoTheme *, theme)
1783 irreco_theme_check(theme);
1784 IRRECO_STRING_TABLE_FOREACH_END
1786 irreco_theme_manager_dlg_loader_start(self,
1787 G_SOURCEFUNC(
1788 irreco_theme_manager_dlg_loader_user),
1789 NULL);
1790 gtk_label_set_text(GTK_LABEL(self->select_label),
1791 " Select \ncategory");
1792 break;
1794 case GTK_RESPONSE_CANCEL:
1795 IRRECO_DEBUG("GTK_RESPONSE_CANCEL\n");
1796 loop = FALSE;
1797 break;
1799 } while (loop);
1801 gtk_widget_destroy(GTK_WIDGET(self));
1803 IRRECO_RETURN
1806 /** @} */
1810 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1811 /* Events and Callbacks */
1812 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1815 * @name Events and Callbacks
1816 * @{
1819 static gboolean
1820 irreco_show_theme_manager_dlg_map_event(IrrecoThemeManagerDlg *self,
1821 GdkEvent *event,
1822 gpointer user_data)
1825 IRRECO_ENTER
1827 irreco_theme_manager_dlg_loader_start(
1828 self, G_SOURCEFUNC(irreco_theme_manager_dlg_loader_user),
1829 NULL);
1831 IRRECO_RETURN_BOOL(FALSE);
1834 static void
1835 irreco_show_theme_manager_dlg_destroy_event(IrrecoThemeManagerDlg *self,
1836 gpointer user_data)
1838 IRRECO_ENTER
1839 irreco_theme_manager_dlg_loader_stop(self);
1840 IRRECO_RETURN
1843 static void
1844 irreco_show_theme_manager_dlg_row_activated_event(GtkTreeView *tree_view,
1845 GtkTreePath *path,
1846 GtkTreeViewColumn *column,
1847 IrrecoThemeManagerDlg *self)
1849 IRRECO_ENTER
1851 if (gtk_tree_view_row_expanded(tree_view, path)) {
1852 gtk_tree_view_expand_row(tree_view, path, FALSE);
1853 } else {
1854 gtk_tree_view_collapse_row(tree_view, path);
1856 IRRECO_RETURN
1859 static void
1860 irreco_show_theme_manager_dlg_row_expanded_event(GtkTreeView *tree_view,
1861 GtkTreeIter *iter,
1862 GtkTreePath *path,
1863 IrrecoThemeManagerDlg *self)
1865 gchar *row_name = NULL;
1866 IRRECO_ENTER
1868 irreco_theme_manager_dlg_clean_details(self);
1869 gtk_label_set_text(GTK_LABEL(self->select_label), "Select \ntheme");
1871 if (self->loader_func_id != 0) {
1872 gtk_tree_view_collapse_row(tree_view, path);
1875 if (!irreco_theme_manager_dlg_row_is_loaded(self, iter)){
1876 switch (irreco_theme_manager_dlg_row_get_type(self, iter)){
1877 case ROW_TYPE_CATEGORY:
1878 gtk_tree_model_get(GTK_TREE_MODEL(self->tree_store),
1879 iter, TEXT_COL, &row_name, -1);
1881 if(g_utf8_collate(row_name, "Database") != 0) {
1882 goto end;
1885 self->loader_iter = gtk_tree_iter_copy(iter);
1886 irreco_theme_manager_dlg_loader_start(self,
1887 G_SOURCEFUNC(irreco_theme_manager_dlg_loader_db), NULL);
1888 break;
1891 end:
1892 if (row_name != NULL) g_free(row_name);
1893 IRRECO_RETURN
1896 static void
1897 irreco_show_theme_manager_dlg_row_collapsed_event(GtkTreeView *tree_view,
1898 GtkTreeIter *iter,
1899 GtkTreePath *path,
1900 IrrecoThemeManagerDlg *self)
1903 IRRECO_ENTER
1905 gtk_label_set_text(GTK_LABEL(self->select_label), " Select\ncategory");
1907 irreco_theme_manager_dlg_clean_details(self);
1909 IRRECO_RETURN
1912 static void
1913 irreco_show_theme_manager_dlg_row_selected_event(GtkTreeSelection *sel,
1914 IrrecoThemeManagerDlg *self)
1916 GtkTreeIter iter;
1917 GtkTreeModel *model;
1918 const char *id;
1920 IRRECO_ENTER
1922 if (gtk_tree_selection_get_selected (sel, &model, &iter))
1924 switch (irreco_theme_manager_dlg_row_get_type(self, &iter)) {
1926 case ROW_TYPE_DEB:
1927 IRRECO_DEBUG("ROW_TYPE_DEB\n");
1929 gtk_widget_hide(self->select_label);
1930 gtk_widget_show(self->theme_info_alignment);
1931 gtk_widget_hide(self->label_download);
1932 gtk_widget_hide(self->theme_downloaded);
1933 gtk_widget_hide(self->label_combobox);
1934 gtk_widget_hide(self->combobox);
1935 gtk_widget_hide(self->theme_version);
1936 gtk_widget_hide(self->theme_creator);
1937 gtk_widget_hide(self->label_creator);
1939 gtk_widget_hide(self->upload_button);
1940 gtk_widget_hide(self->download_button);
1941 gtk_widget_hide(self->clear_button);
1943 irreco_theme_manager_dlg_display_theme_detail(self,
1944 &iter);
1946 break;
1947 case ROW_TYPE_USER:
1948 IRRECO_DEBUG("ROW_TYPE_USER\n");
1950 gtk_widget_hide(self->select_label);
1951 gtk_widget_show(self->theme_info_alignment);
1952 gtk_widget_hide(self->label_download);
1953 gtk_widget_hide(self->theme_downloaded);
1954 gtk_widget_show(self->theme_creator);
1955 gtk_widget_show(self->label_creator);
1957 gtk_widget_show(self->label_combobox);
1958 gtk_widget_hide(self->combobox);
1959 gtk_widget_show(self->theme_version);
1961 gtk_widget_show(self->upload_button);
1962 gtk_widget_show(self->clear_button);
1963 gtk_widget_hide(self->download_button);
1965 irreco_theme_manager_dlg_display_theme_detail(self,
1966 &iter);
1968 break;
1969 case ROW_TYPE_WEB:
1970 IRRECO_DEBUG("ROW_TYPE_WEB\n");
1972 gtk_widget_show(self->clear_button);
1973 gtk_widget_hide(self->upload_button);
1974 gtk_widget_hide(self->download_button);
1976 gtk_widget_hide(self->select_label);
1977 gtk_widget_show(self->theme_creator);
1978 gtk_widget_show(self->label_creator);
1979 gtk_widget_hide(self->label_download);
1980 gtk_widget_hide(self->theme_downloaded);
1982 gtk_widget_hide(self->combobox);
1983 gtk_widget_show(self->label_combobox);
1984 gtk_widget_show(self->theme_version);
1986 gtk_widget_show(self->theme_info_alignment);
1988 irreco_theme_manager_dlg_display_theme_detail(self,
1989 &iter);
1991 break;
1992 case ROW_TYPE_DB:
1993 IRRECO_DEBUG("ROW_TYPE_DB\n");
1995 if (self->loader_func_id != 0) {
1996 break;
1999 gtk_tree_model_get(GTK_TREE_MODEL(self->tree_store),
2000 &iter, DATA_COL, &id, -1);
2002 gtk_widget_hide(self->clear_button);
2003 gtk_widget_hide(self->upload_button);
2004 gtk_widget_show(self->download_button);
2006 gtk_widget_show(self->combobox);
2007 gtk_widget_show(self->label_combobox);
2008 gtk_widget_hide(self->theme_version);
2010 gtk_widget_hide(self->select_label);
2011 gtk_widget_show(self->theme_creator);
2012 gtk_widget_show(self->label_creator);
2013 gtk_widget_show(self->label_download);
2014 gtk_widget_show(self->theme_downloaded);
2016 gtk_widget_show(self->theme_info_alignment);
2018 IRRECO_DEBUG("SELECTED ID: %d\n", atoi(id));
2020 self->selected_theme_id = atoi(id);
2021 self->loader_func_id = g_idle_add(G_SOURCEFUNC(
2022 irreco_theme_manager_dlg_theme_db_detail_loader),
2023 self);
2025 break;
2026 default:
2027 irreco_theme_manager_dlg_clean_details(self);
2028 break;
2032 IRRECO_RETURN
2034 /** @} */
2035 /** @} */