2.34.1
[platform/upstream/at-spi2-atk.git] / tests / dummyatk / my-atk-value.c
1 /*
2  * Copyright 2008 Codethink Ltd.
3  * Copyright (c) 2015 Samsung Electronics Co., Ltd.
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the
17  * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18  * Boston, MA 02110-1301, USA.
19  */
20
21 #include <glib.h>
22 #include <string.h>
23 #include <atk/atk.h>
24 #include <stdio.h>
25
26 #include "my-atk-object.h"
27 #include "my-atk-value.h"
28
29 typedef struct _MyAtkValueInfo MyAtkValueInfo;
30
31 static void atk_value_interface_init (AtkValueIface *iface);
32
33 G_DEFINE_TYPE_WITH_CODE (MyAtkValue,
34                          my_atk_value,
35                          MY_TYPE_ATK_OBJECT,
36                          G_IMPLEMENT_INTERFACE (ATK_TYPE_VALUE,
37                              atk_value_interface_init));
38
39 guint
40 my_atk_set_value (AtkValue *obj, gdouble min, gdouble cur, gdouble max, gdouble step)
41 {
42   MyAtkValue *self = MY_ATK_VALUE (obj);
43   g_return_val_if_fail (MY_IS_ATK_VALUE (obj), -1);
44
45   self->min = min;
46   self->cur = cur;
47   self->max = max;
48   self->step = step;
49
50   return 0;
51 }
52
53 static void
54 my_atk_value_get_value_and_text (AtkValue *obj, gdouble *value, gchar **text)
55 {
56   MyAtkValue *self = MY_ATK_VALUE (obj);
57   g_return_if_fail (MY_IS_ATK_VALUE (obj));
58
59   *value = self->cur;
60   *text = g_strdup_printf ("%f", self->cur);
61 }
62
63 static AtkRange*
64 my_atk_value_get_range (AtkValue *obj)
65 {
66   MyAtkValue *self = MY_ATK_VALUE (obj);
67   g_return_val_if_fail (MY_IS_ATK_VALUE (obj), NULL);
68
69   return atk_range_new (self->min, self->max, NULL);
70 }
71
72 static gdouble
73 my_atk_value_get_increment (AtkValue *obj)
74 {
75   MyAtkValue *self = MY_ATK_VALUE (obj);
76   g_return_val_if_fail (MY_IS_ATK_VALUE (obj), 0);
77   return self->step;
78 }
79
80 static GSList*
81 my_atk_value_get_sub_ranges (AtkValue *obj)
82 {
83   g_return_val_if_fail (MY_IS_ATK_VALUE (obj), NULL);
84
85   return NULL;
86 }
87
88 static void
89 my_atk_value_set_value (AtkValue *obj, const gdouble val)
90 {
91   MyAtkValue *self = MY_ATK_VALUE (obj);
92   g_return_if_fail (MY_IS_ATK_VALUE (obj));
93
94   if ( self->min < val && val < self->max )
95     self->cur = val;
96   return;
97 }
98
99 static void
100 atk_value_interface_init (AtkValueIface *iface)
101 {
102   if (!iface) return;
103   iface->get_value_and_text = my_atk_value_get_value_and_text;
104   iface->get_range = my_atk_value_get_range;
105   iface->get_increment = my_atk_value_get_increment;
106   iface->get_sub_ranges = my_atk_value_get_sub_ranges;
107   iface->set_value = my_atk_value_set_value;
108 }
109
110 static void
111 my_atk_value_init (MyAtkValue *self)
112 {
113   self->min = 0;
114   self->cur = 0;
115   self->max = 0;
116   self->step = 0;
117 }
118
119 static void
120 my_atk_value_class_initialize (AtkObject *obj, gpointer data)
121 {
122 }
123
124 static void
125 my_atk_value_class_finalize (GObject *obj)
126 {
127 }
128
129 static void
130 my_atk_value_class_init(MyAtkValueClass *my_class)
131 {
132   AtkObjectClass *atk_class = ATK_OBJECT_CLASS(my_class);
133   GObjectClass *gobject_class = G_OBJECT_CLASS(my_class);
134
135   gobject_class->finalize = my_atk_value_class_finalize;
136
137   atk_class->initialize = my_atk_value_class_initialize;
138 }