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
45 #ifdef USE_SCROLLED_WINDOW
46 #include <modest-scrolled-window-scrollable.h>
48 #include <modest-hildon-pannable-area-scrollable.h>
51 #ifdef USE_GTK_TOOLBAR
52 #include <modest-find-toolbar.h>
54 #include <modest-hildon-find-toolbar.h>
57 static void modest_toolkit_factory_class_init (ModestToolkitFactoryClass *klass);
58 static void modest_toolkit_factory_init (ModestToolkitFactory *self);
60 /* GObject interface */
61 static GtkWidget * modest_toolkit_factory_create_scrollable_default (ModestToolkitFactory *self);
62 static GtkWidget * modest_toolkit_factory_create_check_button_default (ModestToolkitFactory *self, const gchar *label);
63 static GtkWidget * modest_toolkit_factory_create_check_menu_default (ModestToolkitFactory *self, const gchar *label);
64 static GtkWidget * modest_toolkit_factory_create_isearch_toolbar_default (ModestToolkitFactory *self, const gchar *label);
65 static GtkWidget * modest_toolkit_factory_create_entry_default (ModestToolkitFactory *self);
66 static GtkWidget * modest_toolkit_factory_create_number_entry_default (ModestToolkitFactory *self, gint min, gint max);
68 static GObjectClass *parent_class = NULL;
70 G_DEFINE_TYPE (ModestToolkitFactory,
71 modest_toolkit_factory,
74 ModestToolkitFactory *
75 modest_toolkit_factory_get_instance (void)
77 GObject* self = g_object_new (MODEST_TYPE_TOOLKIT_FACTORY, NULL);
79 return (ModestToolkitFactory *) self;
83 modest_toolkit_factory_class_init (ModestToolkitFactoryClass *klass)
85 parent_class = g_type_class_peek_parent (klass);
87 klass->create_scrollable = modest_toolkit_factory_create_scrollable_default;
88 klass->create_check_button = modest_toolkit_factory_create_check_button_default;
89 klass->create_check_menu = modest_toolkit_factory_create_check_menu_default;
90 klass->create_isearch_toolbar = modest_toolkit_factory_create_isearch_toolbar_default;
91 klass->create_entry = modest_toolkit_factory_create_entry_default;
92 klass->create_number_entry = modest_toolkit_factory_create_number_entry_default;
96 modest_toolkit_factory_init (ModestToolkitFactory *self)
101 modest_toolkit_factory_create_scrollable (ModestToolkitFactory *self)
103 return MODEST_TOOLKIT_FACTORY_GET_CLASS (self)->create_scrollable (self);
107 modest_toolkit_factory_create_scrollable_default (ModestToolkitFactory *self)
109 #ifdef USE_SCROLLED_WINDOW
110 return modest_scrolled_window_scrollable_new ();
112 return modest_hildon_pannable_area_scrollable_new ();
117 modest_toolkit_factory_create_check_button (ModestToolkitFactory *self, const gchar *label)
119 return MODEST_TOOLKIT_FACTORY_GET_CLASS (self)->create_check_button (self, label);
123 modest_toolkit_factory_create_check_button_default (ModestToolkitFactory *self, const gchar *label)
126 #ifdef USE_GTK_CHECK_BUTTON
127 result = gtk_check_button_new_with_label (label);
129 result = hildon_check_button_new (HILDON_SIZE_FINGER_HEIGHT);
130 gtk_button_set_label (GTK_BUTTON (result), label);
131 gtk_button_set_alignment (GTK_BUTTON (result), 0.0, 0.5);
137 modest_toolkit_factory_create_check_menu (ModestToolkitFactory *self, const gchar *label)
139 return MODEST_TOOLKIT_FACTORY_GET_CLASS (self)->create_check_menu (self, label);
143 modest_toolkit_factory_create_check_menu_default (ModestToolkitFactory *self, const gchar *label)
146 #ifdef USE_GTK_CHECK_MENU
147 result = gtk_check_menu_item_new_with_label (label);
149 result = hildon_check_button_new (0);
150 gtk_button_set_label (GTK_BUTTON (result), label);
151 gtk_button_set_alignment (GTK_BUTTON (result), 0.5, 0.5);
157 modest_togglable_get_active (GtkWidget *widget)
159 if (GTK_IS_CHECK_MENU_ITEM (widget)) {
160 return gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (widget));
161 } else if (GTK_IS_TOGGLE_BUTTON (widget)) {
162 return gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
163 #ifdef MODEST_TOOLKIT_HILDON2
164 } else if (HILDON_IS_CHECK_BUTTON (widget)) {
165 return hildon_check_button_get_active (HILDON_CHECK_BUTTON (widget));
168 g_return_val_if_reached (FALSE);
173 modest_togglable_set_active (GtkWidget *widget, gboolean active)
175 if (GTK_IS_CHECK_MENU_ITEM (widget)) {
176 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (widget), active);
177 } else if (GTK_IS_TOGGLE_BUTTON (widget)) {
178 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), active);
179 #ifdef MODEST_TOOLKIT_HILDON2
180 } else if (HILDON_IS_CHECK_BUTTON (widget)) {
181 hildon_check_button_set_active (HILDON_CHECK_BUTTON (widget), active);
187 modest_is_togglable (GtkWidget *widget)
189 return GTK_IS_CHECK_MENU_ITEM (widget)
190 || GTK_IS_TOGGLE_BUTTON (widget)
191 #ifdef MODEST_TOOLKIT_HILDON2
192 || HILDON_IS_CHECK_BUTTON (widget)
198 modest_toolkit_factory_create_isearch_toolbar (ModestToolkitFactory *self, const gchar *label)
200 return MODEST_TOOLKIT_FACTORY_GET_CLASS (self)->create_isearch_toolbar (self, label);
204 modest_toolkit_factory_create_isearch_toolbar_default (ModestToolkitFactory *self, const gchar *label)
207 #ifdef USE_GTK_FIND_TOOLBAR
208 result = modest_find_toolbar_new (label);
210 result = modest_hildon_find_toolbar_new (label);
216 modest_toolkit_factory_create_entry (ModestToolkitFactory *self)
218 return MODEST_TOOLKIT_FACTORY_GET_CLASS (self)->create_entry (self);
222 modest_toolkit_factory_create_entry_default (ModestToolkitFactory *self)
225 return gtk_entry_new ();
227 return hildon_entry_new (HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH);
232 modest_entry_set_text (GtkWidget *widget, const gchar *text)
234 #ifdef MODEST_TOOLKIT_HILDON2
235 hildon_entry_set_text (HILDON_ENTRY (widget), text);
237 gtk_entry_set_text (GTK_ENTRY (widget), text);
242 modest_entry_get_text (GtkWidget *widget)
244 #ifdef MODEST_TOOLKIT_HILDON2
245 return hildon_entry_get_text (HILDON_ENTRY (widget));
247 return gtk_entry_set_text (GTK_ENTRY (widget));
252 modest_entry_set_hint (GtkWidget *widget, const gchar *hint)
254 #ifdef MODEST_TOOLKIT_HILDON2
255 hildon_entry_set_placeholder (HILDON_ENTRY (widget), hint);
257 gtk_widget_set_tooltip_text (widget, hint);
262 modest_is_entry (GtkWidget *widget)
264 #ifdef MODEST_TOOLKIT_HILDON2
265 return HILDON_IS_ENTRY (widget);
267 return GTK_IS_ENTRY (widget);
272 modest_toolkit_factory_create_number_entry (ModestToolkitFactory *self, gint min, gint max)
274 return MODEST_TOOLKIT_FACTORY_GET_CLASS (self)->create_number_entry (self, min, max);
278 modest_toolkit_factory_create_number_entry_default (ModestToolkitFactory *self, gint min, gint max)
281 #ifdef USE_GTK_SPIN_BUTTON
282 result = gtk_spin_button_new_with_range (min, max, 1.0);
283 gtk_spin_button_set_digits (GTK_SPIN_BUTTON (result), 0);
285 result = modest_number_editor_new (min, max);
291 modest_number_entry_set_value (GtkWidget *widget, gint value)
293 #ifdef USE_GTK_SPIN_BUTTON
294 gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), value);
296 modest_number_editor_set_value (MODEST_NUMBER_EDITOR (widget), value);
301 modest_number_entry_get_value (GtkWidget *widget)
303 #ifdef USE_GTK_SPIN_BUTTON
304 return gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (widget));
306 return modest_number_editor_get_value (MODEST_NUMBER_EDITOR (widget));
311 modest_number_entry_is_valid (GtkWidget *widget)
313 #ifdef USE_GTK_SPIN_BUTTON
316 return modest_number_editor_is_valid (MODEST_NUMBER_EDITOR (widget));
321 modest_is_number_entry (GtkWidget *widget)
323 #ifdef USE_GTK_SPIN_BUTTON
324 return GTK_IS_SPIN_BUTTON (widget);
326 return MODEST_IS_NUMBER_EDITOR (widget);