1 /* Copyright (c) 2009, Igalia
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are
8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * * Neither the name of the Nokia Corporation nor the names of its
14 * contributors may be used to endorse or promote products derived from
15 * this software without specific prior written permission.
17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
18 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
19 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
20 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
21 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
24 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
25 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
26 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 #include <glib/gi18n.h>
31 #ifdef MODEST_TOOLKIT_HILDON2
32 #include <hildon/hildon.h>
33 #include <modest-number-editor.h>
35 #include "modest-toolkit-factory.h"
37 #ifndef MODEST_TOOLKIT_HILDON2
38 #define USE_SCROLLED_WINDOW
39 #define USE_GTK_FIND_TOOLBAR
40 #define USE_GTK_CHECK_BUTTON
41 #define USE_GTK_CHECK_MENU
43 #define USE_GTK_SPIN_BUTTON
46 #ifdef USE_SCROLLED_WINDOW
47 #include <modest-scrolled-window-scrollable.h>
49 #include <modest-hildon-pannable-area-scrollable.h>
52 #ifdef USE_GTK_TOOLBAR
53 #include <modest-find-toolbar.h>
55 #include <modest-hildon-find-toolbar.h>
58 static void modest_toolkit_factory_class_init (ModestToolkitFactoryClass *klass);
59 static void modest_toolkit_factory_init (ModestToolkitFactory *self);
61 /* GObject interface */
62 static GtkWidget * modest_toolkit_factory_create_scrollable_default (ModestToolkitFactory *self);
63 static GtkWidget * modest_toolkit_factory_create_check_button_default (ModestToolkitFactory *self, const gchar *label);
64 static GtkWidget * modest_toolkit_factory_create_check_menu_default (ModestToolkitFactory *self, const gchar *label);
65 static GtkWidget * modest_toolkit_factory_create_isearch_toolbar_default (ModestToolkitFactory *self, const gchar *label);
66 static GtkWidget * modest_toolkit_factory_create_entry_default (ModestToolkitFactory *self);
67 static GtkWidget * modest_toolkit_factory_create_number_entry_default (ModestToolkitFactory *self, gint min, gint max);
69 static GObjectClass *parent_class = NULL;
71 G_DEFINE_TYPE (ModestToolkitFactory,
72 modest_toolkit_factory,
75 ModestToolkitFactory *
76 modest_toolkit_factory_get_instance (void)
78 GObject* self = g_object_new (MODEST_TYPE_TOOLKIT_FACTORY, NULL);
80 return (ModestToolkitFactory *) self;
84 modest_toolkit_factory_class_init (ModestToolkitFactoryClass *klass)
86 parent_class = g_type_class_peek_parent (klass);
88 klass->create_scrollable = modest_toolkit_factory_create_scrollable_default;
89 klass->create_check_button = modest_toolkit_factory_create_check_button_default;
90 klass->create_check_menu = modest_toolkit_factory_create_check_menu_default;
91 klass->create_isearch_toolbar = modest_toolkit_factory_create_isearch_toolbar_default;
92 klass->create_entry = modest_toolkit_factory_create_entry_default;
93 klass->create_number_entry = modest_toolkit_factory_create_number_entry_default;
97 modest_toolkit_factory_init (ModestToolkitFactory *self)
102 modest_toolkit_factory_create_scrollable (ModestToolkitFactory *self)
104 return MODEST_TOOLKIT_FACTORY_GET_CLASS (self)->create_scrollable (self);
108 modest_toolkit_factory_create_scrollable_default (ModestToolkitFactory *self)
110 #ifdef USE_SCROLLED_WINDOW
111 return modest_scrolled_window_scrollable_new ();
113 return modest_hildon_pannable_area_scrollable_new ();
118 modest_toolkit_factory_create_check_button (ModestToolkitFactory *self, const gchar *label)
120 return MODEST_TOOLKIT_FACTORY_GET_CLASS (self)->create_check_button (self, label);
124 modest_toolkit_factory_create_check_button_default (ModestToolkitFactory *self, const gchar *label)
127 #ifdef USE_GTK_CHECK_BUTTON
128 result = gtk_check_button_new_with_label (label);
130 result = hildon_check_button_new (HILDON_SIZE_FINGER_HEIGHT);
131 gtk_button_set_label (GTK_BUTTON (result), label);
132 gtk_button_set_alignment (GTK_BUTTON (result), 0.0, 0.5);
138 modest_toolkit_factory_create_check_menu (ModestToolkitFactory *self, const gchar *label)
140 return MODEST_TOOLKIT_FACTORY_GET_CLASS (self)->create_check_menu (self, label);
144 modest_toolkit_factory_create_check_menu_default (ModestToolkitFactory *self, const gchar *label)
147 #ifdef USE_GTK_CHECK_MENU
148 result = gtk_check_menu_item_new_with_label (label);
150 result = hildon_check_button_new (0);
151 gtk_button_set_label (GTK_BUTTON (result), label);
152 gtk_button_set_alignment (GTK_BUTTON (result), 0.5, 0.5);
158 modest_togglable_get_active (GtkWidget *widget)
160 if (GTK_IS_CHECK_MENU_ITEM (widget)) {
161 return gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (widget));
162 } else if (GTK_IS_TOGGLE_BUTTON (widget)) {
163 return gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
164 #ifdef MODEST_TOOLKIT_HILDON2
165 } else if (HILDON_IS_CHECK_BUTTON (widget)) {
166 return hildon_check_button_get_active (HILDON_CHECK_BUTTON (widget));
169 g_return_val_if_reached (FALSE);
174 modest_togglable_set_active (GtkWidget *widget, gboolean active)
176 if (GTK_IS_CHECK_MENU_ITEM (widget)) {
177 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (widget), active);
178 } else if (GTK_IS_TOGGLE_BUTTON (widget)) {
179 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), active);
180 #ifdef MODEST_TOOLKIT_HILDON2
181 } else if (HILDON_IS_CHECK_BUTTON (widget)) {
182 hildon_check_button_set_active (HILDON_CHECK_BUTTON (widget), active);
188 modest_is_togglable (GtkWidget *widget)
190 return GTK_IS_CHECK_MENU_ITEM (widget)
191 || GTK_IS_TOGGLE_BUTTON (widget)
192 #ifdef MODEST_TOOLKIT_HILDON2
193 || HILDON_IS_CHECK_BUTTON (widget)
199 modest_toolkit_factory_create_isearch_toolbar (ModestToolkitFactory *self, const gchar *label)
201 return MODEST_TOOLKIT_FACTORY_GET_CLASS (self)->create_isearch_toolbar (self, label);
205 modest_toolkit_factory_create_isearch_toolbar_default (ModestToolkitFactory *self, const gchar *label)
208 #ifdef USE_GTK_FIND_TOOLBAR
209 result = modest_find_toolbar_new (label);
211 result = modest_hildon_find_toolbar_new (label);
217 modest_toolkit_factory_create_entry (ModestToolkitFactory *self)
219 return MODEST_TOOLKIT_FACTORY_GET_CLASS (self)->create_entry (self);
223 modest_toolkit_factory_create_entry_default (ModestToolkitFactory *self)
226 return gtk_entry_new ();
228 return hildon_entry_new (HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH);
233 modest_entry_set_text (GtkWidget *widget, const gchar *text)
235 #ifdef MODEST_TOOLKIT_HILDON2
236 hildon_entry_set_text (HILDON_ENTRY (widget), text);
238 gtk_entry_set_text (GTK_ENTRY (widget), text);
243 modest_entry_get_text (GtkWidget *widget)
245 #ifdef MODEST_TOOLKIT_HILDON2
246 return hildon_entry_get_text (HILDON_ENTRY (widget));
248 return gtk_entry_set_text (GTK_ENTRY (widget));
253 modest_entry_set_hint (GtkWidget *widget, const gchar *hint)
255 #ifdef MODEST_TOOLKIT_HILDON2
256 hildon_entry_set_placeholder (HILDON_ENTRY (widget), hint);
258 gtk_widget_set_tooltip_text (widget, hint);
263 modest_is_entry (GtkWidget *widget)
265 #ifdef MODEST_TOOLKIT_HILDON2
266 return HILDON_IS_ENTRY (widget);
268 return GTK_IS_ENTRY (widget);
273 modest_toolkit_factory_create_number_entry (ModestToolkitFactory *self, gint min, gint max)
275 return MODEST_TOOLKIT_FACTORY_GET_CLASS (self)->create_number_entry (self, min, max);
279 modest_toolkit_factory_create_number_entry_default (ModestToolkitFactory *self, gint min, gint max)
282 #ifdef USE_GTK_SPIN_BUTTON
283 result = gtk_spin_button_new_with_range (min, max, 1.0);
284 gtk_spin_button_set_digits (GTK_SPIN_BUTTON (result), 0);
286 result = modest_number_editor_new (min, max);
292 modest_number_entry_set_value (GtkWidget *widget, gint value)
294 #ifdef USE_GTK_SPIN_BUTTON
295 gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), value);
297 modest_number_editor_set_value (MODEST_NUMBER_EDITOR (widget), value);
302 modest_number_entry_get_value (GtkWidget *widget)
304 #ifdef USE_GTK_SPIN_BUTTON
305 return gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (widget));
307 return modest_number_editor_get_value (MODEST_NUMBER_EDITOR (widget));
312 modest_number_entry_is_valid (GtkWidget *widget)
314 #ifdef USE_GTK_SPIN_BUTTON
317 return modest_number_editor_is_valid (MODEST_NUMBER_EDITOR (widget));
322 modest_is_number_entry (GtkWidget *widget)
324 #ifdef USE_GTK_SPIN_BUTTON
325 return GTK_IS_SPIN_BUTTON (widget);
327 return MODEST_IS_NUMBER_EDITOR (widget);