2 * connectnow home widget for the maemo desktop.
3 * Copyright (C) 2010 Nicolai Hess
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 #include <hildon/hildon.h>
21 #include <hildon/hildon-file-chooser-dialog.h>
24 #include "connectnow-settings-dialog.h"
25 #include "connectnow-load-and-store.h"
28 select_and_set_icon(GtkButton* button, custom_icon_data* data)
31 GtkWidget* parent = gtk_widget_get_toplevel(GTK_WIDGET(button));
32 dialog = hildon_file_chooser_dialog_new(GTK_WINDOW(parent),
33 GTK_FILE_CHOOSER_ACTION_OPEN);
34 GtkFileFilter* fileFilter = gtk_file_filter_new();
35 gtk_file_filter_add_pixbuf_formats(fileFilter);
36 gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(dialog), fileFilter);
38 gtk_widget_show_all(GTK_WIDGET(dialog));
39 int ret = gtk_dialog_run(GTK_DIALOG(dialog));
40 if(ret == GTK_RESPONSE_OK)
43 gchar* filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
45 pixbuf = load_image(filename);
46 g_free(data->icon_name);
47 data->icon_name = filename;
48 gtk_button_set_image(GTK_BUTTON(data->icon_button), gtk_image_new_from_pixbuf(pixbuf));
49 g_object_unref(pixbuf);
51 gtk_widget_destroy(dialog);
55 connect_now_show_icon_selector(GtkButton* button, icon_data_t* icon_data)
58 GtkWidget* icon_box_1 = gtk_vbox_new(TRUE,0);
59 GtkWidget* icon_box_2 = gtk_vbox_new(TRUE,0);
60 GtkWidget* label_box = gtk_vbox_new(TRUE,0);
61 GtkWidget* pan = hildon_pannable_area_new();
62 GtkWidget* buttons[NUM_PREDEFINED_ICONS+1];
63 GtkWidget* last_button = NULL;
64 GtkWidget* hBox = gtk_hbox_new(FALSE, 3);
65 gboolean predefined_is_selected = FALSE;
67 for(i = 0;i<NUM_PREDEFINED_ICONS;++i)
69 GtkWidget* connect_image;
70 GtkWidget* disconnect_image;
71 buttons[i] = hildon_gtk_radio_button_new_from_widget(HILDON_SIZE_AUTO,
72 GTK_RADIO_BUTTON(last_button));
73 gtk_button_set_label(GTK_BUTTON(buttons[i]),
74 g_strdup(_predefined_icons[i][LABEL]));
75 gtk_toggle_button_set_mode(GTK_TOGGLE_BUTTON(buttons[i]),
77 if(g_strcmp0(icon_data->connect_name, _predefined_icons[i][CONNECT])==0)
79 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(buttons[i]),
81 predefined_is_selected = TRUE;
84 pixbuf = load_image(_predefined_icons[i][CONNECT]);
85 connect_image = gtk_image_new_from_pixbuf(pixbuf);
86 g_object_unref(pixbuf);
87 pixbuf = load_image(_predefined_icons[i][DISCONNECT]);
88 disconnect_image = gtk_image_new_from_pixbuf(pixbuf);
89 g_object_unref(pixbuf);
91 gtk_box_pack_start(GTK_BOX(icon_box_1),
92 connect_image, TRUE, TRUE, 0);
93 gtk_box_pack_start(GTK_BOX(icon_box_2),
94 disconnect_image, TRUE, TRUE, 0);
95 gtk_box_pack_start(GTK_BOX(label_box),
96 buttons[i], TRUE, TRUE, 0);
97 last_button = buttons[i];
99 buttons[NUM_PREDEFINED_ICONS] = hildon_gtk_radio_button_new_from_widget(HILDON_SIZE_AUTO,
100 GTK_RADIO_BUTTON(last_button));
102 gtk_button_set_label(GTK_BUTTON(buttons[NUM_PREDEFINED_ICONS]),
104 gtk_toggle_button_set_mode(GTK_TOGGLE_BUTTON(buttons[NUM_PREDEFINED_ICONS]),
107 custom_icon_data* connect_icon_data = g_new0(custom_icon_data, 1);
108 custom_icon_data* disconnect_icon_data = g_new0(custom_icon_data, 1);
109 connect_icon_data->icon_name = NULL;
110 disconnect_icon_data->icon_name = NULL;
111 connect_icon_data->icon_button = hildon_button_new(HILDON_SIZE_AUTO,
112 HILDON_BUTTON_ARRANGEMENT_VERTICAL);
113 disconnect_icon_data->icon_button = hildon_button_new(HILDON_SIZE_AUTO,
114 HILDON_BUTTON_ARRANGEMENT_VERTICAL);
116 gtk_box_pack_start(GTK_BOX(icon_box_1),
117 connect_icon_data->icon_button, TRUE, TRUE, 0);
118 gtk_box_pack_start(GTK_BOX(icon_box_2),
119 disconnect_icon_data->icon_button, TRUE, TRUE, 0);
120 gtk_box_pack_start(GTK_BOX(label_box),
121 buttons[NUM_PREDEFINED_ICONS], TRUE, TRUE, 0);
122 if(!predefined_is_selected &&
123 icon_data->connect_name!=NULL)
125 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(buttons[NUM_PREDEFINED_ICONS]),
129 pixbuf = load_image(icon_data->connect_name);
130 gtk_button_set_image(GTK_BUTTON(connect_icon_data->icon_button), gtk_image_new_from_pixbuf(pixbuf));
131 g_object_unref(pixbuf);
132 pixbuf = load_image(icon_data->disconnect_name);
133 gtk_button_set_image(GTK_BUTTON(disconnect_icon_data->icon_button), gtk_image_new_from_pixbuf(pixbuf));
134 g_object_unref(pixbuf);
137 g_signal_connect(connect_icon_data->icon_button, "clicked", G_CALLBACK(select_and_set_icon), connect_icon_data);
138 g_signal_connect(disconnect_icon_data->icon_button, "clicked", G_CALLBACK(select_and_set_icon), disconnect_icon_data);
139 gtk_box_pack_start(GTK_BOX(hBox), icon_box_1, FALSE, FALSE, 3);
140 gtk_box_pack_start(GTK_BOX(hBox), icon_box_2, FALSE, FALSE, 3);
141 gtk_box_pack_start(GTK_BOX(hBox), label_box, TRUE, TRUE, 3);
142 hildon_pannable_area_add_with_viewport(HILDON_PANNABLE_AREA(pan),
145 dialog = gtk_dialog_new_with_buttons("Icon",
148 dgettext("hildon-libs", "wdgt_bd_done"),
151 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), pan);
153 gtk_window_set_default_size(GTK_WINDOW(dialog), -1, 300);
154 gtk_widget_show_all(dialog);
155 if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
157 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(buttons[NUM_PREDEFINED_ICONS])))
159 if(connect_icon_data->icon_name &&
160 disconnect_icon_data->icon_name)
162 icon_data->connect_name = g_strdup(connect_icon_data->icon_name);
163 icon_data->disconnect_name = g_strdup(disconnect_icon_data->icon_name);
168 for(i = 0;i<NUM_PREDEFINED_ICONS;++i)
170 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(buttons[i])))
172 icon_data->connect_name = g_strdup(_predefined_icons[i][CONNECT]);
173 icon_data->disconnect_name= g_strdup(_predefined_icons[i][DISCONNECT]);
178 GdkPixbuf* pixbuf = load_image(icon_data->connect_name);
179 gtk_image_set_from_pixbuf(GTK_IMAGE(icon_data->connect_icon),
181 g_object_unref(pixbuf);
182 pixbuf = load_image(icon_data->disconnect_name);
183 gtk_image_set_from_pixbuf(GTK_IMAGE(icon_data->disconnect_icon),
185 g_object_unref(pixbuf);
187 g_free(connect_icon_data->icon_name);
188 g_free(disconnect_icon_data->icon_name);
189 g_free(connect_icon_data);
190 g_free(disconnect_icon_data);
191 gtk_widget_destroy (dialog);