finch/libgnt/gntslider.c

Wed, 13 May 2009 20:29:03 +0000

author
Marcus Lundblad <malu@pidgin.im>
date
Wed, 13 May 2009 20:29:03 +0000
changeset 27110
05ca719b901b
parent 21240
b78eaddaae02
child 29049
ea3c1e7d47f4
permissions
-rw-r--r--

Support custom smileys in MUCs (when all participants support BoB and a maximum
of 10 participants are in the chat).
Always announce support for BoB, since disable custom smileys will still turn
off fetching them, and BoB can be used for other purposes further on.

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

mercurial