Mercurial > pidgin
annotate finch/libgnt/gntslider.c @ 29812:1e8dc177415e
propagate from branch 'im.pidgin.pidgin' (head 267f28808ab6eeda6b5d68f6433f2b3fcf230d4f)
to branch 'im.pidgin.cpw.malu.ft_thumbnails' (head e638c5bb96c2400620511beaf38c52bedb56db4b)
author | Marcus Lundblad <ml@update.uu.se> |
---|---|
date | Thu, 18 Feb 2010 21:59:26 +0000 |
parents | 88d889b54df4 |
children |
rev | line source |
---|---|
18352 | 1 /** |
2 * GNT - The GLib Ncurses Toolkit | |
3 * | |
4 * GNT is the legal property of its developers, whose names are too numerous | |
5 * to list here. Please refer to the COPYRIGHT file distributed with this | |
6 * source distribution. | |
7 * | |
8 * This library is free software; you can redistribute it and/or modify | |
9 * it under the terms of the GNU General Public License as published by | |
10 * the Free Software Foundation; either version 2 of the License, or | |
11 * (at your option) any later version. | |
12 * | |
13 * This program is distributed in the hope that it will be useful, | |
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 * GNU General Public License for more details. | |
17 * | |
18 * You should have received a copy of the GNU General Public License | |
19 * along with this program; if not, write to the Free Software | |
19681
44b4e8bd759b
The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
19410
diff
changeset
|
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
18352 | 21 */ |
22 | |
28836
88d889b54df4
Fix building finch & libgnt using older gcc or non-gcc compilers that do
Stu Tomlinson <stu@nosnilmot.com>
parents:
21250
diff
changeset
|
23 #include "gntinternal.h" |
18352 | 24 #include "gntcolors.h" |
25 #include "gntkeys.h" | |
26 #include "gntslider.h" | |
27 #include "gntstyle.h" | |
28 | |
29 enum | |
30 { | |
31 SIG_VALUE_CHANGED, | |
32 SIGS, | |
33 }; | |
34 | |
35 static guint signals[SIGS] = { 0 }; | |
36 | |
37 static GntWidgetClass *parent_class = NULL; | |
38 | |
39 /* returns TRUE if the value was changed */ | |
40 static gboolean | |
41 sanitize_value(GntSlider *slider) | |
42 { | |
43 if (slider->current < slider->min) | |
44 slider->current = slider->min; | |
45 else if (slider->current > slider->max) | |
46 slider->current = slider->max; | |
47 else | |
48 return FALSE; | |
49 return TRUE; | |
50 } | |
51 | |
52 static void | |
53 redraw_slider(GntSlider *slider) | |
54 { | |
55 GntWidget *widget = GNT_WIDGET(slider); | |
56 if (GNT_WIDGET_IS_FLAG_SET(widget, GNT_WIDGET_MAPPED)) | |
57 gnt_widget_draw(widget); | |
58 } | |
59 | |
60 static void | |
61 slider_value_changed(GntSlider *slider) | |
62 { | |
63 g_signal_emit(slider, signals[SIG_VALUE_CHANGED], 0, slider->current); | |
64 } | |
65 | |
66 static void | |
67 gnt_slider_draw(GntWidget *widget) | |
68 { | |
69 GntSlider *slider = GNT_SLIDER(widget); | |
70 int attr = 0; | |
71 int position, size = 0; | |
72 | |
73 if (slider->vertical) | |
18354
d5d1c12a5ad4
Remove some duplication, and make the slider a little nicer.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18352
diff
changeset
|
74 size = widget->priv.height; |
18352 | 75 else |
18354
d5d1c12a5ad4
Remove some duplication, and make the slider a little nicer.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18352
diff
changeset
|
76 size = widget->priv.width; |
18352 | 77 |
78 if (gnt_widget_has_focus(widget)) | |
79 attr |= GNT_COLOR_HIGHLIGHT; | |
80 else | |
81 attr |= GNT_COLOR_HIGHLIGHT_D; | |
82 | |
83 if (slider->max != slider->min) | |
84 position = ((size - 1) * (slider->current - slider->min)) / (slider->max - slider->min); | |
85 else | |
86 position = 0; | |
18354
d5d1c12a5ad4
Remove some duplication, and make the slider a little nicer.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18352
diff
changeset
|
87 if (slider->vertical) { |
21250
9187d331aebe
Add gnt_color_pair, which will replace color codes with 'appropriate' text
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
19681
diff
changeset
|
88 mvwvline(widget->window, size-position, 0, ACS_VLINE | gnt_color_pair(GNT_COLOR_NORMAL) | A_BOLD, |
18354
d5d1c12a5ad4
Remove some duplication, and make the slider a little nicer.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18352
diff
changeset
|
89 position); |
21250
9187d331aebe
Add gnt_color_pair, which will replace color codes with 'appropriate' text
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
19681
diff
changeset
|
90 mvwvline(widget->window, 0, 0, ACS_VLINE | gnt_color_pair(GNT_COLOR_NORMAL), |
18354
d5d1c12a5ad4
Remove some duplication, and make the slider a little nicer.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18352
diff
changeset
|
91 size-position); |
d5d1c12a5ad4
Remove some duplication, and make the slider a little nicer.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18352
diff
changeset
|
92 } else { |
21250
9187d331aebe
Add gnt_color_pair, which will replace color codes with 'appropriate' text
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
19681
diff
changeset
|
93 mvwhline(widget->window, 0, 0, ACS_HLINE | gnt_color_pair(GNT_COLOR_NORMAL) | A_BOLD, |
18354
d5d1c12a5ad4
Remove some duplication, and make the slider a little nicer.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18352
diff
changeset
|
94 position); |
21250
9187d331aebe
Add gnt_color_pair, which will replace color codes with 'appropriate' text
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
19681
diff
changeset
|
95 mvwhline(widget->window, 0, position, ACS_HLINE | gnt_color_pair(GNT_COLOR_NORMAL), |
18354
d5d1c12a5ad4
Remove some duplication, and make the slider a little nicer.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18352
diff
changeset
|
96 size - position); |
d5d1c12a5ad4
Remove some duplication, and make the slider a little nicer.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18352
diff
changeset
|
97 } |
d5d1c12a5ad4
Remove some duplication, and make the slider a little nicer.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18352
diff
changeset
|
98 |
18352 | 99 mvwaddch(widget->window, |
100 slider->vertical ? (size - position - 1) : 0, | |
101 slider->vertical ? 0 : position, | |
21250
9187d331aebe
Add gnt_color_pair, which will replace color codes with 'appropriate' text
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
19681
diff
changeset
|
102 ACS_CKBOARD | gnt_color_pair(attr)); |
18352 | 103 } |
104 | |
105 static void | |
106 gnt_slider_size_request(GntWidget *widget) | |
107 { | |
108 if (GNT_SLIDER(widget)->vertical) { | |
109 widget->priv.width = 1; | |
110 widget->priv.height = 5; | |
111 } else { | |
112 widget->priv.width = 5; | |
113 widget->priv.height = 1; | |
114 } | |
115 } | |
116 | |
117 static void | |
118 gnt_slider_map(GntWidget *widget) | |
119 { | |
120 if (widget->priv.width == 0 || widget->priv.height == 0) | |
121 gnt_widget_size_request(widget); | |
122 GNTDEBUG; | |
123 } | |
124 | |
125 static gboolean | |
126 step_back(GntBindable *bindable, GList *null) | |
127 { | |
128 GntSlider *slider = GNT_SLIDER(bindable); | |
18354
d5d1c12a5ad4
Remove some duplication, and make the slider a little nicer.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18352
diff
changeset
|
129 gnt_slider_advance_step(slider, -1); |
18352 | 130 return TRUE; |
131 } | |
132 | |
133 static gboolean | |
19410
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
134 small_step_back(GntBindable *bindable, GList *null) |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
135 { |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
136 GntSlider *slider = GNT_SLIDER(bindable); |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
137 gnt_slider_set_value(slider, slider->current - slider->smallstep); |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
138 return TRUE; |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
139 } |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
140 |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
141 static gboolean |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
142 large_step_back(GntBindable *bindable, GList *null) |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
143 { |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
144 GntSlider *slider = GNT_SLIDER(bindable); |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
145 gnt_slider_set_value(slider, slider->current - slider->largestep); |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
146 return TRUE; |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
147 } |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
148 |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
149 static gboolean |
18352 | 150 step_forward(GntBindable *bindable, GList *list) |
151 { | |
152 GntSlider *slider = GNT_SLIDER(bindable); | |
18354
d5d1c12a5ad4
Remove some duplication, and make the slider a little nicer.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18352
diff
changeset
|
153 gnt_slider_advance_step(slider, 1); |
18352 | 154 return TRUE; |
155 } | |
156 | |
19410
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
157 static gboolean |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
158 small_step_forward(GntBindable *bindable, GList *null) |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
159 { |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
160 GntSlider *slider = GNT_SLIDER(bindable); |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
161 gnt_slider_set_value(slider, slider->current + slider->smallstep); |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
162 return TRUE; |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
163 } |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
164 |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
165 static gboolean |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
166 large_step_forward(GntBindable *bindable, GList *null) |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
167 { |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
168 GntSlider *slider = GNT_SLIDER(bindable); |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
169 gnt_slider_set_value(slider, slider->current + slider->largestep); |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
170 return TRUE; |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
171 } |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
172 |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
173 static gboolean |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
174 move_min_value(GntBindable *bindable, GList *null) |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
175 { |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
176 GntSlider *slider = GNT_SLIDER(bindable); |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
177 gnt_slider_set_value(slider, slider->min); |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
178 return TRUE; |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
179 } |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
180 |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
181 static gboolean |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
182 move_max_value(GntBindable *bindable, GList *null) |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
183 { |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
184 GntSlider *slider = GNT_SLIDER(bindable); |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
185 gnt_slider_set_value(slider, slider->max); |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
186 return TRUE; |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
187 } |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
188 |
18352 | 189 static void |
190 gnt_slider_class_init(GntSliderClass *klass) | |
191 { | |
192 GntBindableClass *bindable = GNT_BINDABLE_CLASS(klass); | |
193 parent_class = GNT_WIDGET_CLASS(klass); | |
194 parent_class->draw = gnt_slider_draw; | |
195 parent_class->map = gnt_slider_map; | |
196 parent_class->size_request = gnt_slider_size_request; | |
197 | |
198 klass->changed = NULL; | |
199 | |
200 signals[SIG_VALUE_CHANGED] = | |
201 g_signal_new("changed", | |
202 G_TYPE_FROM_CLASS(klass), | |
203 G_SIGNAL_RUN_LAST, | |
204 G_STRUCT_OFFSET(GntSliderClass, changed), | |
205 NULL, NULL, | |
206 g_cclosure_marshal_VOID__INT, | |
207 G_TYPE_NONE, 1, G_TYPE_INT); | |
208 | |
209 gnt_bindable_class_register_action(bindable, "step-backward", step_back, GNT_KEY_LEFT, NULL); | |
210 gnt_bindable_register_binding(bindable, "step-backward", GNT_KEY_DOWN, NULL); | |
211 gnt_bindable_class_register_action(bindable, "step-forward", step_forward, GNT_KEY_RIGHT, NULL); | |
212 gnt_bindable_register_binding(bindable, "step-forward", GNT_KEY_UP, NULL); | |
19410
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
213 gnt_bindable_class_register_action(bindable, "small-step-backward", small_step_back, GNT_KEY_CTRL_LEFT, NULL); |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
214 gnt_bindable_register_binding(bindable, "small-step-backward", GNT_KEY_CTRL_DOWN, NULL); |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
215 gnt_bindable_class_register_action(bindable, "small-step-forward", small_step_forward, GNT_KEY_CTRL_RIGHT, NULL); |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
216 gnt_bindable_register_binding(bindable, "small-step-forward", GNT_KEY_CTRL_UP, NULL); |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
217 gnt_bindable_class_register_action(bindable, "large-step-backward", large_step_back, GNT_KEY_PGDOWN, NULL); |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
218 gnt_bindable_class_register_action(bindable, "large-step-forward", large_step_forward, GNT_KEY_PGUP, NULL); |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
219 gnt_bindable_class_register_action(bindable, "min-value", move_min_value, GNT_KEY_HOME, NULL); |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
220 gnt_bindable_class_register_action(bindable, "max-value", move_max_value, GNT_KEY_END, NULL); |
18352 | 221 |
222 gnt_style_read_actions(G_OBJECT_CLASS_TYPE(klass), GNT_BINDABLE_CLASS(klass)); | |
223 } | |
224 | |
225 static void | |
226 gnt_slider_init(GTypeInstance *instance, gpointer class) | |
227 { | |
228 GntWidget *widget = GNT_WIDGET(instance); | |
229 GNT_WIDGET_SET_FLAGS(widget, GNT_WIDGET_NO_SHADOW | GNT_WIDGET_NO_BORDER | GNT_WIDGET_CAN_TAKE_FOCUS); | |
230 widget->priv.minw = 1; | |
231 widget->priv.minh = 1; | |
232 GNTDEBUG; | |
233 } | |
234 | |
235 /****************************************************************************** | |
236 * GntSlider API | |
237 *****************************************************************************/ | |
238 GType | |
239 gnt_slider_get_gtype(void) | |
240 { | |
241 static GType type = 0; | |
242 | |
243 if(type == 0) | |
244 { | |
245 static const GTypeInfo info = { | |
246 sizeof(GntSliderClass), | |
247 NULL, /* base_init */ | |
248 NULL, /* base_finalize */ | |
249 (GClassInitFunc)gnt_slider_class_init, | |
250 NULL, /* class_finalize */ | |
251 NULL, /* class_data */ | |
252 sizeof(GntSlider), | |
253 0, /* n_preallocs */ | |
254 gnt_slider_init, /* instance_init */ | |
255 NULL /* value_table */ | |
256 }; | |
257 | |
258 type = g_type_register_static(GNT_TYPE_WIDGET, | |
259 "GntSlider", | |
260 &info, 0); | |
261 } | |
262 | |
263 return type; | |
264 } | |
265 | |
266 GntWidget *gnt_slider_new(gboolean vertical, int max, int min) | |
267 { | |
268 GntWidget *widget = g_object_new(GNT_TYPE_SLIDER, NULL); | |
269 GntSlider *slider = GNT_SLIDER(widget); | |
270 | |
271 slider->vertical = vertical; | |
272 | |
273 if (vertical) { | |
274 GNT_WIDGET_SET_FLAGS(widget, GNT_WIDGET_GROW_Y); | |
275 } else { | |
276 GNT_WIDGET_SET_FLAGS(widget, GNT_WIDGET_GROW_X); | |
277 } | |
278 | |
279 gnt_slider_set_range(slider, max, min); | |
280 slider->step = 1; | |
281 | |
282 return widget; | |
283 } | |
284 | |
285 void gnt_slider_set_value(GntSlider *slider, int value) | |
286 { | |
19410
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
287 int old; |
18352 | 288 if (slider->current == value) |
289 return; | |
19410
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
290 old = slider->current; |
18352 | 291 slider->current = value; |
292 sanitize_value(slider); | |
19410
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
293 if (old == slider->current) |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
294 return; |
18352 | 295 redraw_slider(slider); |
296 slider_value_changed(slider); | |
297 } | |
298 | |
18515
3b19fa8d0177
Add _get_value for slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18354
diff
changeset
|
299 int gnt_slider_get_value(GntSlider *slider) |
3b19fa8d0177
Add _get_value for slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18354
diff
changeset
|
300 { |
3b19fa8d0177
Add _get_value for slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18354
diff
changeset
|
301 return slider->current; |
3b19fa8d0177
Add _get_value for slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18354
diff
changeset
|
302 } |
3b19fa8d0177
Add _get_value for slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18354
diff
changeset
|
303 |
18352 | 304 int gnt_slider_advance_step(GntSlider *slider, int steps) |
305 { | |
19410
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
306 gnt_slider_set_value(slider, slider->current + steps * slider->step); |
18352 | 307 return slider->current; |
308 } | |
309 | |
310 void gnt_slider_set_step(GntSlider *slider, int step) | |
311 { | |
312 slider->step = step; | |
313 } | |
314 | |
19410
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
315 void gnt_slider_set_small_step(GntSlider *slider, int step) |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
316 { |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
317 slider->smallstep = step; |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
318 } |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
319 |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
320 void gnt_slider_set_large_step(GntSlider *slider, int step) |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
321 { |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
322 slider->largestep = step; |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
323 } |
3650db1f02d3
Have small and large steps for the slider.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18515
diff
changeset
|
324 |
18352 | 325 void gnt_slider_set_range(GntSlider *slider, int max, int min) |
326 { | |
327 slider->max = MAX(max, min); | |
328 slider->min = MIN(max, min); | |
329 sanitize_value(slider); | |
330 } | |
331 | |
332 static void | |
333 update_label(GntSlider *slider, int current_value, GntLabel *label) | |
334 { | |
335 char value[256]; | |
336 g_snprintf(value, sizeof(value), "%d/%d", current_value, slider->max); | |
337 gnt_label_set_text(label, value); | |
338 } | |
339 | |
340 void gnt_slider_reflect_label(GntSlider *slider, GntLabel *label) | |
341 { | |
342 g_signal_connect(G_OBJECT(slider), "changed", G_CALLBACK(update_label), label); | |
343 } | |
344 |