1 /* GAIL - The GNOME Accessibility Implementation Library
2 * Copyright 2008 Jan Arne Petersen
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the
16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 * Boston, MA 02111-1307, USA.
23 #include "gailscalebutton.h"
24 #include "gailadjustment.h"
25 #include "gail-private-macros.h"
29 static void gail_scale_button_class_init (GailScaleButtonClass *klass);
30 static void gail_scale_button_init (GailScaleButton *button);
33 static void gail_scale_button_notify_gtk (GObject *obj,
37 static void gail_scale_button_initialize (AtkObject *obj,
41 static void atk_action_interface_init (AtkActionIface *iface);
42 static gboolean gail_scale_button_do_action (AtkAction *action,
44 static gint gail_scale_button_get_n_actions (AtkAction *action);
45 static G_CONST_RETURN gchar* gail_scale_button_get_description(AtkAction *action,
47 static G_CONST_RETURN gchar* gail_scale_button_action_get_name(AtkAction *action,
49 static G_CONST_RETURN gchar* gail_scale_button_get_keybinding (AtkAction *action,
51 static gboolean gail_scale_button_set_description(AtkAction *action,
56 static void atk_value_interface_init (AtkValueIface *iface);
57 static void gail_scale_button_get_current_value (AtkValue *obj,
59 static void gail_scale_button_get_maximum_value (AtkValue *obj,
61 static void gail_scale_button_get_minimum_value (AtkValue *obj,
63 static void gail_scale_button_get_minimum_increment (AtkValue *obj,
65 static gboolean gail_scale_button_set_current_value (AtkValue *obj,
68 G_DEFINE_TYPE_WITH_CODE (GailScaleButton, gail_scale_button, GAIL_TYPE_BUTTON,
69 G_IMPLEMENT_INTERFACE (ATK_TYPE_ACTION, atk_action_interface_init)
70 G_IMPLEMENT_INTERFACE (ATK_TYPE_VALUE, atk_value_interface_init));
73 gail_scale_button_class_init (GailScaleButtonClass *klass)
75 AtkObjectClass *atk_object_class = ATK_OBJECT_CLASS (klass);
76 GailWidgetClass *widget_class = GAIL_WIDGET_CLASS (klass);
78 atk_object_class->initialize = gail_scale_button_initialize;
80 widget_class->notify_gtk = gail_scale_button_notify_gtk;
84 gail_scale_button_init (GailScaleButton *button)
89 gail_scale_button_initialize (AtkObject *obj,
92 ATK_OBJECT_CLASS (gail_scale_button_parent_class)->initialize (obj, data);
94 obj->role = ATK_ROLE_SLIDER;
98 atk_action_interface_init (AtkActionIface *iface)
100 iface->do_action = gail_scale_button_do_action;
101 iface->get_n_actions = gail_scale_button_get_n_actions;
102 iface->get_description = gail_scale_button_get_description;
103 iface->get_keybinding = gail_scale_button_get_keybinding;
104 iface->get_name = gail_scale_button_action_get_name;
105 iface->set_description = gail_scale_button_set_description;
109 gail_scale_button_do_action(AtkAction *action,
114 widget = GTK_ACCESSIBLE (action)->widget;
118 if (!gtk_widget_is_sensitive (widget) || !GTK_WIDGET_VISIBLE (widget))
123 g_signal_emit_by_name (widget, "popup");
126 g_signal_emit_by_name (widget, "podown");
134 gail_scale_button_get_n_actions (AtkAction *action)
139 static G_CONST_RETURN gchar*
140 gail_scale_button_get_description (AtkAction *action,
146 static G_CONST_RETURN gchar*
147 gail_scale_button_action_get_name (AtkAction *action,
160 static G_CONST_RETURN gchar*
161 gail_scale_button_get_keybinding (AtkAction *action,
168 gail_scale_button_set_description (AtkAction *action,
177 atk_value_interface_init (AtkValueIface *iface)
179 iface->get_current_value = gail_scale_button_get_current_value;
180 iface->get_maximum_value = gail_scale_button_get_maximum_value;
181 iface->get_minimum_value = gail_scale_button_get_minimum_value;
182 iface->get_minimum_increment = gail_scale_button_get_minimum_increment;
183 iface->set_current_value = gail_scale_button_set_current_value;
187 gail_scale_button_get_current_value (AtkValue *obj,
190 GtkScaleButton *gtk_scale_button;
192 g_return_if_fail (GAIL_IS_SCALE_BUTTON (obj));
194 gtk_scale_button = GTK_SCALE_BUTTON (GTK_ACCESSIBLE (obj)->widget);
196 g_value_set_double (g_value_init (value, G_TYPE_DOUBLE),
197 gtk_scale_button_get_value (gtk_scale_button));
201 gail_scale_button_get_maximum_value (AtkValue *obj,
204 GtkWidget *gtk_widget;
207 g_return_if_fail (GAIL_IS_SCALE_BUTTON (obj));
209 gtk_widget = GTK_ACCESSIBLE (obj)->widget;
210 if (gtk_widget == NULL)
213 adj = gtk_scale_button_get_adjustment (GTK_SCALE_BUTTON (gtk_widget));
215 g_value_set_double (g_value_init (value, G_TYPE_DOUBLE),
220 gail_scale_button_get_minimum_value (AtkValue *obj,
223 GtkWidget *gtk_widget;
226 g_return_if_fail (GAIL_IS_SCALE_BUTTON (obj));
228 gtk_widget = GTK_ACCESSIBLE (obj)->widget;
229 if (gtk_widget == NULL)
232 adj = gtk_scale_button_get_adjustment (GTK_SCALE_BUTTON (gtk_widget));
234 g_value_set_double (g_value_init (value, G_TYPE_DOUBLE),
239 gail_scale_button_get_minimum_increment (AtkValue *obj,
242 GtkWidget *gtk_widget;
245 g_return_if_fail (GAIL_IS_SCALE_BUTTON (obj));
247 gtk_widget = GTK_ACCESSIBLE (obj)->widget;
248 if (gtk_widget == NULL)
251 adj = gtk_scale_button_get_adjustment (GTK_SCALE_BUTTON (gtk_widget));
253 g_value_set_double (g_value_init (value, G_TYPE_DOUBLE),
254 adj->step_increment);
258 gail_scale_button_set_current_value (AtkValue *obj,
261 GtkWidget *gtk_widget;
263 g_return_val_if_fail (GAIL_IS_SCALE_BUTTON (obj), FALSE);
265 gtk_widget = GTK_ACCESSIBLE (obj)->widget;
266 if (gtk_widget == NULL)
269 if (G_VALUE_HOLDS_DOUBLE (value))
271 gtk_scale_button_set_value (GTK_SCALE_BUTTON (gtk_widget), g_value_get_double (value));
278 gail_scale_button_notify_gtk (GObject *obj,
281 GtkScaleButton *gtk_scale_button;
282 GailScaleButton *scale_button;
284 g_return_if_fail (GTK_IS_SCALE_BUTTON (obj));
286 gtk_scale_button = GTK_SCALE_BUTTON (obj);
287 scale_button = GAIL_SCALE_BUTTON (gtk_widget_get_accessible (GTK_WIDGET (gtk_scale_button)));
289 if (strcmp (pspec->name, "value") == 0)
291 g_object_notify (G_OBJECT (scale_button), "accessible-value");
295 GAIL_WIDGET_CLASS (gail_scale_button_parent_class)->notify_gtk (obj, pspec);