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 #include "modest-hildon-pannable-area-scrollable.h"
33 static void modest_hildon_pannable_area_scrollable_class_init (ModestHildonPannableAreaScrollableClass *klass);
34 static void modest_hildon_pannable_area_scrollable_init (ModestHildonPannableAreaScrollable *self);
35 static void modest_scrollable_iface_init (gpointer g, gpointer iface_data);
37 /* GObject interface */
38 static void modest_hildon_pannable_area_scrollable_finalize (GObject *obj);
39 static void modest_hildon_pannable_area_scrollable_get_property (GObject *obj,
43 static void modest_hildon_pannable_area_scrollable_set_property (GObject *obj,
48 /* Modest scrollable interface */
49 static void modest_hildon_pannable_area_scrollable_add_with_viewport (ModestScrollable *self, GtkWidget *widget);
50 static void modest_hildon_pannable_area_scrollable_add_with_viewport_default (ModestScrollable *self, GtkWidget *widget);
51 static GtkAdjustment *modest_hildon_pannable_area_scrollable_get_vadjustment (ModestScrollable *self);
52 static GtkAdjustment *modest_hildon_pannable_area_scrollable_get_vadjustment_default (ModestScrollable *self);
53 static GtkAdjustment *modest_hildon_pannable_area_scrollable_get_hadjustment (ModestScrollable *self);
54 static GtkAdjustment *modest_hildon_pannable_area_scrollable_get_hadjustment_default (ModestScrollable *self);
55 static void modest_hildon_pannable_area_scrollable_scroll_to (ModestScrollable *self, const gint x, const gint y);
56 static void modest_hildon_pannable_area_scrollable_scroll_to_default (ModestScrollable *self, const gint x, const gint y);
57 static void modest_hildon_pannable_area_scrollable_jump_to (ModestScrollable *self, const gint x, const gint y);
58 static void modest_hildon_pannable_area_scrollable_jump_to_default (ModestScrollable *self, const gint x, const gint y);
59 static GtkPolicyType modest_hildon_pannable_area_scrollable_get_vertical_policy (ModestScrollable *self);
60 static GtkPolicyType modest_hildon_pannable_area_scrollable_get_vertical_policy_default (ModestScrollable *self);
61 static GtkPolicyType modest_hildon_pannable_area_scrollable_get_horizontal_policy (ModestScrollable *self);
62 static GtkPolicyType modest_hildon_pannable_area_scrollable_get_horizontal_policy_default (ModestScrollable *self);
63 static void modest_hildon_pannable_area_scrollable_set_horizontal_policy (ModestScrollable *self, GtkPolicyType policy);
64 static void modest_hildon_pannable_area_scrollable_set_horizontal_policy_default (ModestScrollable *self, GtkPolicyType policy);
65 static void modest_hildon_pannable_area_scrollable_set_vertical_policy (ModestScrollable *self, GtkPolicyType policy);
66 static void modest_hildon_pannable_area_scrollable_set_vertical_policy_default (ModestScrollable *self, GtkPolicyType policy);
71 PROP_HORIZONTAL_POLICY,
76 static HildonPannableAreaClass *parent_class = NULL;
78 G_DEFINE_TYPE_EXTENDED (ModestHildonPannableAreaScrollable,
79 modest_hildon_pannable_area_scrollable,
80 HILDON_TYPE_PANNABLE_AREA,
83 G_IMPLEMENT_INTERFACE (MODEST_TYPE_SCROLLABLE, modest_scrollable_iface_init);
84 g_type_interface_add_prerequisite (g_define_type_id, GTK_TYPE_BIN);
89 modest_hildon_pannable_area_scrollable_new (void)
91 GtkWidget *scrollable = g_object_new (MODEST_TYPE_HILDON_PANNABLE_AREA_SCROLLABLE, NULL);
97 modest_hildon_pannable_area_scrollable_class_init (ModestHildonPannableAreaScrollableClass *klass)
99 GObjectClass *gobject_class;
101 parent_class = g_type_class_peek_parent (klass);
102 gobject_class->finalize = modest_hildon_pannable_area_scrollable_finalize;
103 gobject_class->set_property = modest_hildon_pannable_area_scrollable_set_property;
104 gobject_class->get_property = modest_hildon_pannable_area_scrollable_get_property;
106 klass->add_with_viewport_func = modest_hildon_pannable_area_scrollable_add_with_viewport_default;
107 klass->get_vadjustment_func = modest_hildon_pannable_area_scrollable_get_vadjustment_default;
108 klass->get_hadjustment_func = modest_hildon_pannable_area_scrollable_get_hadjustment_default;
109 klass->scroll_to_func = modest_hildon_pannable_area_scrollable_scroll_to_default;
110 klass->jump_to_func = modest_hildon_pannable_area_scrollable_jump_to_default;
111 klass->get_vertical_policy_func = modest_hildon_pannable_area_scrollable_get_vertical_policy_default;
112 klass->get_horizontal_policy_func = modest_hildon_pannable_area_scrollable_get_horizontal_policy_default;
113 klass->set_vertical_policy_func = modest_hildon_pannable_area_scrollable_set_vertical_policy_default;
114 klass->set_horizontal_policy_func = modest_hildon_pannable_area_scrollable_set_horizontal_policy_default;
116 g_object_class_install_property (gobject_class,
117 PROP_HORIZONTAL_POLICY,
118 g_param_spec_enum ("horizontal_policy",
119 _("Horizontal scrollbar policy"),
120 _("Visual policy of the horizontal scrollbar"),
121 GTK_TYPE_POLICY_TYPE,
122 GTK_POLICY_AUTOMATIC,
123 G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
125 g_object_class_install_property (gobject_class,
126 PROP_VERTICAL_POLICY,
127 g_param_spec_enum ("vertical_policy",
128 _("Vertical scrollbar policy"),
129 _("Visual policy of the vertical scrollbar"),
130 GTK_TYPE_POLICY_TYPE,
131 GTK_POLICY_AUTOMATIC,
132 G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
137 modest_hildon_pannable_area_scrollable_init (ModestHildonPannableAreaScrollable *self)
142 modest_scrollable_iface_init (gpointer g, gpointer iface_data)
144 ModestScrollableIface *iface = (ModestScrollableIface *) g;
146 iface->jump_to = modest_hildon_pannable_area_scrollable_jump_to;
147 iface->scroll_to = modest_hildon_pannable_area_scrollable_scroll_to;
148 iface->add_with_viewport = modest_hildon_pannable_area_scrollable_add_with_viewport;
149 iface->get_vadjustment = modest_hildon_pannable_area_scrollable_get_vadjustment;
150 iface->get_hadjustment = modest_hildon_pannable_area_scrollable_get_hadjustment;
151 iface->get_vertical_policy = modest_hildon_pannable_area_scrollable_get_vertical_policy;
152 iface->set_vertical_policy = modest_hildon_pannable_area_scrollable_set_vertical_policy;
153 iface->get_horizontal_policy = modest_hildon_pannable_area_scrollable_get_horizontal_policy;
154 iface->set_horizontal_policy = modest_hildon_pannable_area_scrollable_set_horizontal_policy;
158 modest_hildon_pannable_area_scrollable_finalize (GObject *obj)
160 G_OBJECT_CLASS(parent_class)->finalize (obj);
164 modest_hildon_pannable_area_scrollable_get_property (GObject *obj,
169 GtkPolicyType policy;
172 case PROP_VERTICAL_POLICY:
173 g_object_get (obj, "vscrollbar-policy", &policy, NULL);
174 g_value_set_enum (value, policy);
176 case PROP_HORIZONTAL_POLICY:
177 g_object_get (obj, "hscrollbar-policy", &policy, NULL);
178 g_value_set_enum (value, policy);
181 G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, prop_id, pspec);
187 modest_hildon_pannable_area_scrollable_set_property (GObject *obj,
192 GtkPolicyType policy;
195 case PROP_VERTICAL_POLICY:
196 policy = g_value_get_enum (value);
197 g_object_set (obj, "vscrollbar-policy", policy, NULL);
199 case PROP_HORIZONTAL_POLICY:
200 policy = g_value_get_enum (value);
201 g_object_set (obj, "hscrollbar-policy", policy, NULL);
204 G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, prop_id, pspec);
210 modest_hildon_pannable_area_scrollable_add_with_viewport (ModestScrollable *self,
213 MODEST_HILDON_PANNABLE_AREA_SCROLLABLE_GET_CLASS (self)->add_with_viewport_func (self, widget);
217 modest_hildon_pannable_area_scrollable_add_with_viewport_default (ModestScrollable *self,
220 hildon_pannable_area_add_with_viewport (HILDON_PANNABLE_AREA (self), widget);
223 static GtkAdjustment *
224 modest_hildon_pannable_area_scrollable_get_vadjustment (ModestScrollable *self)
226 return MODEST_HILDON_PANNABLE_AREA_SCROLLABLE_GET_CLASS (self)->get_vadjustment_func (self);
229 static GtkAdjustment *
230 modest_hildon_pannable_area_scrollable_get_vadjustment_default (ModestScrollable *self)
232 return hildon_pannable_area_get_vadjustment (HILDON_PANNABLE_AREA (self));
235 static GtkAdjustment *
236 modest_hildon_pannable_area_scrollable_get_hadjustment (ModestScrollable *self)
238 return MODEST_HILDON_PANNABLE_AREA_SCROLLABLE_GET_CLASS (self)->get_hadjustment_func (self);
241 static GtkAdjustment *
242 modest_hildon_pannable_area_scrollable_get_hadjustment_default (ModestScrollable *self)
244 return hildon_pannable_area_get_hadjustment (HILDON_PANNABLE_AREA (self));
248 modest_hildon_pannable_area_scrollable_scroll_to (ModestScrollable *self,
249 const gint x, const gint y)
251 MODEST_HILDON_PANNABLE_AREA_SCROLLABLE_GET_CLASS (self)->scroll_to_func (self, x, y);
255 modest_hildon_pannable_area_scrollable_scroll_to_default (ModestScrollable *self,
256 const gint x, const gint y)
258 hildon_pannable_area_scroll_to (HILDON_PANNABLE_AREA (self), x, y);
262 modest_hildon_pannable_area_scrollable_jump_to (ModestScrollable *self,
263 const gint x, const gint y)
265 MODEST_HILDON_PANNABLE_AREA_SCROLLABLE_GET_CLASS (self)->jump_to_func (self, x, y);
269 modest_hildon_pannable_area_scrollable_jump_to_default (ModestScrollable *self,
270 const gint x, const gint y)
272 hildon_pannable_area_jump_to (HILDON_PANNABLE_AREA (self), x, y);
276 modest_hildon_pannable_area_scrollable_get_vertical_policy (ModestScrollable *self)
278 return MODEST_HILDON_PANNABLE_AREA_SCROLLABLE_GET_CLASS (self)->get_vertical_policy_func (self);
282 modest_hildon_pannable_area_scrollable_get_vertical_policy_default (ModestScrollable *self)
284 GtkPolicyType policy;
286 g_object_get (G_OBJECT (self), "vscrollbar-policy", &policy, NULL);
291 modest_hildon_pannable_area_scrollable_get_horizontal_policy (ModestScrollable *self)
293 return MODEST_HILDON_PANNABLE_AREA_SCROLLABLE_GET_CLASS (self)->get_horizontal_policy_func (self);
297 modest_hildon_pannable_area_scrollable_get_horizontal_policy_default (ModestScrollable *self)
299 GtkPolicyType policy;
301 g_object_get (G_OBJECT (self), "hscrollbar-policy", &policy, NULL);
306 modest_hildon_pannable_area_scrollable_set_horizontal_policy (ModestScrollable *self,
307 GtkPolicyType policy)
309 MODEST_HILDON_PANNABLE_AREA_SCROLLABLE_GET_CLASS (self)->set_horizontal_policy_func (self, policy);
313 modest_hildon_pannable_area_scrollable_set_horizontal_policy_default (ModestScrollable *self,
314 GtkPolicyType policy)
316 g_object_set (G_OBJECT (self), "hscrollbar-policy", policy, NULL);
320 modest_hildon_pannable_area_scrollable_set_vertical_policy (ModestScrollable *self,
321 GtkPolicyType policy)
323 MODEST_HILDON_PANNABLE_AREA_SCROLLABLE_GET_CLASS (self)->set_vertical_policy_func (self, policy);
327 modest_hildon_pannable_area_scrollable_set_vertical_policy_default (ModestScrollable *self,
328 GtkPolicyType policy)
330 g_object_set (G_OBJECT (self), "vscrollbar-policy", policy, NULL);