Migrate usage of find toolbar in editor to use ModestISearchToolbar
[modest] / src / widgets / modest-toolkit-factory.c
1 /* Copyright (c) 2009, Igalia
2  * All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are
6  * met:
7  *
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.
16  *
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.
28  */
29
30 #include <glib/gi18n.h>
31 #ifdef MODEST_TOOLKIT_HILDON2
32 #include <modest-hildon-pannable-area-scrollable.h>
33 #include <modest-hildon-find-toolbar.h>
34 #include <hildon/hildon.h>
35 #else
36 #include <modest-scrolled-window-scrollable.h>
37 #endif
38 #include "modest-toolkit-factory.h"
39
40 static void modest_toolkit_factory_class_init (ModestToolkitFactoryClass *klass);
41 static void modest_toolkit_factory_init (ModestToolkitFactory *self);
42
43 /* GObject interface */
44 static GtkWidget * modest_toolkit_factory_create_scrollable_default (ModestToolkitFactory *self);
45 static GtkWidget * modest_toolkit_factory_create_check_button_default (ModestToolkitFactory *self, const gchar *label);
46 static GtkWidget * modest_toolkit_factory_create_check_menu_default (ModestToolkitFactory *self, const gchar *label);
47 static GtkWidget * modest_toolkit_factory_create_isearch_toolbar_default (ModestToolkitFactory *self, const gchar *label);
48 /* globals */
49 static GObjectClass *parent_class = NULL;
50
51 G_DEFINE_TYPE    (ModestToolkitFactory,
52                   modest_toolkit_factory,
53                   G_TYPE_OBJECT);
54
55 ModestToolkitFactory *
56 modest_toolkit_factory_get_instance                            (void)
57 {
58     GObject* self = g_object_new (MODEST_TYPE_TOOLKIT_FACTORY, NULL);
59
60     return (ModestToolkitFactory *) self;
61 }
62
63 static void
64 modest_toolkit_factory_class_init (ModestToolkitFactoryClass *klass)
65 {
66         parent_class = g_type_class_peek_parent (klass);
67
68         klass->create_scrollable = modest_toolkit_factory_create_scrollable_default;
69         klass->create_check_button = modest_toolkit_factory_create_check_button_default;
70         klass->create_check_menu = modest_toolkit_factory_create_check_menu_default;
71         klass->create_isearch_toolbar = modest_toolkit_factory_create_isearch_toolbar_default;
72 }
73
74 static void
75 modest_toolkit_factory_init (ModestToolkitFactory *self)
76 {
77 }
78
79 GtkWidget *
80 modest_toolkit_factory_create_scrollable (ModestToolkitFactory *self)
81 {
82         return MODEST_TOOLKIT_FACTORY_GET_CLASS (self)->create_scrollable (self);
83 }
84
85 static GtkWidget *
86 modest_toolkit_factory_create_scrollable_default (ModestToolkitFactory *self)
87 {
88 #ifdef MODEST_TOOLKIT_HILDON2
89         return modest_hildon_pannable_area_scrollable_new ();
90 #else
91         return modest_scrolled_window_scrollable_new ();
92 #endif
93 }
94
95 GtkWidget *
96 modest_toolkit_factory_create_check_button (ModestToolkitFactory *self, const gchar *label)
97 {
98         return MODEST_TOOLKIT_FACTORY_GET_CLASS (self)->create_check_button (self, label);
99 }
100
101 static GtkWidget *
102 modest_toolkit_factory_create_check_button_default (ModestToolkitFactory *self, const gchar *label)
103 {
104         GtkWidget *result;
105 #ifdef MODEST_TOOLKIT_HILDON2
106         result = hildon_check_button_new (HILDON_SIZE_FINGER_HEIGHT);
107         gtk_button_set_label (GTK_BUTTON (result), label);
108         gtk_button_set_alignment (GTK_BUTTON (result), 0.0, 0.5);
109 #else
110         result = gtk_check_button_new_with_label (label);
111 #endif
112         return result;
113 }
114
115 GtkWidget *
116 modest_toolkit_factory_create_check_menu (ModestToolkitFactory *self, const gchar *label)
117 {
118         return MODEST_TOOLKIT_FACTORY_GET_CLASS (self)->create_check_menu (self, label);
119 }
120
121 static GtkWidget *
122 modest_toolkit_factory_create_check_menu_default (ModestToolkitFactory *self, const gchar *label)
123 {
124         GtkWidget *result;
125 #ifdef MODEST_TOOLKIT_HILDON2
126         result = hildon_check_button_new (0);
127         gtk_button_set_label (GTK_BUTTON (result), label);
128         gtk_button_set_alignment (GTK_BUTTON (result), 0.5, 0.5);
129 #else
130         result = gtk_check_menu_item_new_with_label (label);
131 #endif
132         return result;
133 }
134
135 gboolean
136 modest_togglable_get_active (GtkWidget *widget)
137 {
138 #ifdef MODEST_TOOLKIT_HILDON2
139         return hildon_check_button_get_active (HILDON_CHECK_BUTTON (widget));
140 #else
141         if (GTK_IS_CHECK_MENU_ITEM (widget)) {
142                 return gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (widget));
143         } else if (GTK_IS_TOGGLE_BUTTON (widget)) {
144                 return gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
145         }
146 #endif
147 }
148
149 void
150 modest_togglable_set_active (GtkWidget *widget, gboolean active)
151 {
152 #ifdef MODEST_TOOLKIT_HILDON2
153         hildon_check_button_set_active (HILDON_CHECK_BUTTON (widget), active);
154 #else
155         if (GTK_IS_CHECK_MENU_ITEM (widget)) {
156                 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (widget), active);
157         } else if (GTK_IS_TOGGLE_BUTTON (widget)) {
158                 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), active);
159         }
160 #endif
161 }
162
163 gboolean
164 modest_is_togglable (GtkWidget *widget)
165 {
166 #ifdef MODEST_TOOLKIT_HILDON2
167         return HILDON_IS_CHECK_BUTTON (widget);
168 #else
169         return GTK_IS_CHECK_MENU_ITEM (widget) || GTK_IS_TOGGLE_BUTTON (widget);
170 #endif
171 }
172
173 GtkWidget *
174 modest_toolkit_factory_create_isearch_toolbar (ModestToolkitFactory *self, const gchar *label)
175 {
176         return MODEST_TOOLKIT_FACTORY_GET_CLASS (self)->create_isearch_toolbar (self, label);
177 }
178
179 static GtkWidget *
180 modest_toolkit_factory_create_isearch_toolbar_default (ModestToolkitFactory *self, const gchar *label)
181 {
182         GtkWidget *result;
183 #ifdef MODEST_TOOLKIT_HILDON2
184         result = modest_hildon_find_toolbar_new (label);
185 #else
186         /* TODO: create gtk-only based isearch toolbar implementation */
187         result = gtk_toolbar_new ();
188 #endif
189         return result;
190 }
191