2 * irreco - Ir Remote Control
3 * Copyright (C) 2007 Arto Karppinen (arto.karppinen@iki.fi),
4 * Harri Vattulainen (t5vaha01@students.oamk.fi)
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_style_browser_dlg.h"
22 #include "irreco_scrolled_window.h"
23 #include <hildon/hildon-banner.h>
26 * @addtogroup IrrecoStyleBrowserDlg
29 * Dialog which displays a list of button styles to the user, so the user
37 * Source file of @ref IrrecoStyleBrowserDlg.
41 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
43 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
44 void irreco_style_browser_dlg_set_button_widget(IrrecoStyleBrowserDlg
*self
);
45 void irreco_style_browser_dlg_theme_image_selection_changed(
46 GtkTreeSelection
* selection
,
47 IrrecoStyleBrowserDlg
* self
);
49 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
50 /* Construction & Destruction */
51 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
54 * @name Construction & Destruction
59 G_DEFINE_TYPE(IrrecoStyleBrowserDlg
, irreco_style_browser_dlg
, IRRECO_TYPE_DLG
)
61 static void irreco_style_browser_dlg_finalize(GObject
*object
)
64 G_OBJECT_CLASS(irreco_style_browser_dlg_parent_class
)->finalize(object
);
68 static void irreco_style_browser_dlg_class_init(IrrecoStyleBrowserDlgClass
*klass
)
70 GObjectClass
*object_class
= G_OBJECT_CLASS(klass
);
71 object_class
->finalize
= irreco_style_browser_dlg_finalize
;
74 static void irreco_style_browser_dlg_init(IrrecoStyleBrowserDlg
*self
)
80 /* Construct dialog. */
81 gtk_window_set_title(GTK_WINDOW(self
), _("Style Browser"));
82 gtk_window_set_modal(GTK_WINDOW(self
), TRUE
);
83 gtk_window_set_destroy_with_parent(GTK_WINDOW(self
), TRUE
);
84 gtk_dialog_set_has_separator(GTK_DIALOG(self
), FALSE
);
85 gtk_dialog_add_buttons(GTK_DIALOG(self
),
86 GTK_STOCK_CANCEL
, GTK_RESPONSE_REJECT
,
89 /* Show dialog, hopefully on the left-top corner of the screen. */
90 gtk_widget_show_all(GTK_WIDGET(self
));
91 gtk_window_move(GTK_WINDOW(self
), 80, 60);
95 GtkWidget
* irreco_style_browser_dlg_new(IrrecoData
*irreco_data
,
98 IrrecoStyleBrowserDlg
*self
;
100 self
= g_object_new(IRRECO_TYPE_STYLE_BROWSER_DLG
, NULL
);
101 irreco_dlg_set_parent(IRRECO_DLG(self
), parent
);
102 irreco_style_browser_dlg_set_irreco_data(self
, irreco_data
);
103 irreco_style_browser_dlg_set_button_widget(self
);
104 IRRECO_RETURN_PTR(self
);
111 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
112 /* Private Functions */
113 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
116 * @name Private Functions
120 static void irreco_style_browser_dlg_loading_cancel(IrrecoStyleBrowserDlg
*self
)
123 if (self
->loading
!= NULL
) self
->loading
->self
= NULL
;
131 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
133 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
136 * @name Public Functions
140 void irreco_style_browser_dlg_set_irreco_data(IrrecoStyleBrowserDlg
*self
,
141 IrrecoData
*irreco_data
)
144 self
->irreco_data
= irreco_data
;
148 void irreco_style_browser_dlg_set_button_widget(IrrecoStyleBrowserDlg
*self
)
152 self
->button_widget
= irreco_button_browser_widget_new(self
->irreco_data
);
153 gtk_box_pack_start_defaults(GTK_BOX(GTK_DIALOG(self
)->vbox
),
154 GTK_WIDGET(self
->button_widget
));
157 g_signal_connect(G_OBJECT(IRRECO_LISTBOX(
158 self
->button_widget
->images
)->tree_selection
),
160 G_CALLBACK(irreco_style_browser_dlg_theme_image_selection_changed
),
163 gtk_widget_show_all(GTK_WIDGET(self
));
168 gboolean
irreco_show_style_browser_dlg(IrrecoData
*irreco_data
,
170 IrrecoThemeButton
**style
)
173 IrrecoStyleBrowserDlg
*self
;
176 self
= IRRECO_STYLE_BROWSER_DLG(irreco_style_browser_dlg_new(
177 irreco_data
, parent
));
178 response
= gtk_dialog_run(GTK_DIALOG(self
));
179 irreco_style_browser_dlg_loading_cancel(self
);
181 if (response
== 1) *style
= self
->style
;
182 gtk_widget_destroy(GTK_WIDGET(self
));
184 if (response
== 1) IRRECO_RETURN_BOOL(TRUE
);
185 IRRECO_RETURN_BOOL(FALSE
);
192 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
193 /* Events and Callbacks */
194 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
197 * @name Events and Callbacks
201 void irreco_style_browser_dlg_theme_image_selection_changed(
202 GtkTreeSelection
* selection
,
203 IrrecoStyleBrowserDlg
* self
)
205 IrrecoThemeButton
*button
= self
->button_widget
->current_image
;
208 if (button
!= NULL
) {
209 self
->style
= button
;
210 gtk_dialog_response(GTK_DIALOG(self
), 1);