2
* $Id: gtkledbar.c,v 1.7 2005/06/13 09:38:44 rburton Exp $
3
* GTKEXT - Extensions to The GIMP Toolkit
4
* Copyright (C) 1998 Gregory McLean
6
* This library is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU Library General Public
8
* License as published by the Free Software Foundation; either
9
* version 2 of the License, or (at your option) any later version.
11
* This library is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
* Library General Public License for more details.
16
* You should have received a copy of the GNU Library General Public
17
* License along with this library; if not, write to the Free
18
* Software Foundation, Inc., 59 Temple Place - Suite 330, Cambridge, MA
28
#include <glib-object.h>
29
#include <gtk/gtktable.h>
31
#include "gtkledbar.h"
33
G_DEFINE_TYPE (LedBar, led_bar, GTK_TYPE_VBOX);
36
led_bar_class_init (LedBarClass *class)
41
led_bar_init (LedBar *led_bar)
43
led_bar->num_segments = 0;
44
led_bar->lit_segments = 0;
45
led_bar->seq_segment = 0;
50
led_bar_new (gint segments, gint orientation )
59
led_bar = gtk_type_new (led_bar_get_type ());
60
if (segments > MAX_SEGMENTS) {
61
segments = MAX_SEGMENTS;
64
led_bar->num_segments = segments;
65
led_bar->orientation = orientation;
67
if ( !orientation ) {/* horiz */
68
table = gtk_table_new (1, segments, FALSE);
70
table = gtk_table_new (segments, 1, FALSE);
73
gtk_container_add (GTK_CONTAINER (led_bar), table);
74
gtk_widget_show (table);
76
half = .50 * segments;
77
full = .75 * segments;
79
gdk_color_parse ("#00F100", &active);
80
gdk_color_parse ("#008C00", &inactive);
82
for (i = 0; i < segments; i++) {
83
if (i >= half && i <= full) {
84
gdk_color_parse ("#F1EE00", &active);
85
gdk_color_parse ("#8CAA00", &inactive);
88
gdk_color_parse ("#F10000", &active);
89
gdk_color_parse ("#8C0000", &inactive);
93
led_bar->segments[i] = gtk_led_new ();
94
gtk_led_set_colors (GTK_LED (led_bar->segments[i]), &active, &inactive);
96
if ( !orientation ) {/* horiz */
97
gtk_table_attach (GTK_TABLE (table), led_bar->segments[i],
98
i, (i + 1), 0, 1, 0, 0, 0, 0);
100
gtk_table_attach (GTK_TABLE (table), led_bar->segments[i],
101
0, 1, (segments - i - 1), (segments - i),
105
gtk_widget_show (led_bar->segments[i]);
108
return GTK_WIDGET (led_bar);
112
led_bar_get_num_segments (GtkWidget *bar)
114
g_return_val_if_fail (IS_LEDBAR (bar), 0);
116
return LEDBAR (bar)->num_segments;
120
led_bar_light_segments (GtkWidget *bar,
126
g_return_if_fail (IS_LEDBAR (bar));
128
led_bar = LEDBAR (bar);
129
if (num == 0 && led_bar->lit_segments == 0) {
133
if (num < led_bar->lit_segments) {
134
for (i = 0; i < num; i++) {
135
gtk_led_set_state (GTK_LED (led_bar->segments[i]),
140
for (i = led_bar->lit_segments; i < num; i++)
141
gtk_led_set_state (GTK_LED (led_bar->segments[i]),
142
GTK_STATE_SELECTED, TRUE);
145
led_bar->lit_segments = i;
149
led_bar_unlight_segments (GtkWidget *bar,
155
g_return_if_fail (IS_LEDBAR (bar));
157
led_bar = LEDBAR (bar);
158
if (led_bar->lit_segments == 0) {
162
for (i = 0; i < num; i++) {
163
gtk_led_set_state (GTK_LED (led_bar->segments[i]),
164
GTK_STATE_SELECTED, FALSE);
167
led_bar->lit_segments -= num;
169
if (led_bar->lit_segments < 0) {
170
led_bar->lit_segments = 0;
175
led_bar_light_segment (GtkWidget *bar,
180
g_return_if_fail (IS_LEDBAR (bar));
182
led_bar = LEDBAR (bar);
183
gtk_led_set_state (GTK_LED (led_bar->segments[segment]),
184
GTK_STATE_SELECTED, TRUE);
188
led_bar_unlight_segment (GtkWidget *bar,
193
g_return_if_fail (IS_LEDBAR (bar));
195
led_bar = LEDBAR (bar);
196
gtk_led_set_state (GTK_LED (led_bar->segments[segment]),
197
GTK_STATE_SELECTED, FALSE);
201
led_bar_light_percent (GtkWidget *bar,
207
g_return_if_fail (IS_LEDBAR (bar));
209
led_bar = LEDBAR (bar);
210
num = percent * led_bar->num_segments;
212
led_bar->lit_segments = num;
213
for (i = 0; i < led_bar->num_segments; i++) {
215
if (! (GTK_LED (led_bar->segments[i])->is_on)) {
216
gtk_led_set_state (GTK_LED (led_bar->segments[i]),
217
GTK_STATE_SELECTED, TRUE);
222
if (GTK_LED (led_bar->segments[i])->is_on) {
223
gtk_led_set_state (GTK_LED (led_bar->segments[i]),
224
GTK_STATE_SELECTED, FALSE);
231
led_bar_clear (GtkWidget *bar)
236
g_return_if_fail (IS_LEDBAR (bar));
238
led_bar = LEDBAR (bar);
239
for (i = 0; i < led_bar->num_segments; i++)
241
if (GTK_LED (led_bar->segments[i])->is_on) {
242
gtk_led_set_state (GTK_LED (led_bar->segments[i]),
243
GTK_STATE_SELECTED, FALSE);
249
led_bar_sequence_step (GtkWidget *bar)
253
g_return_if_fail (IS_LEDBAR (bar));
255
led_bar = LEDBAR (bar);
257
if (led_bar->seq_segment >= (led_bar->num_segments - 1)) {
258
led_bar->seq_dir = -1;
259
} else if (led_bar->seq_segment <= 0) {
260
led_bar->seq_dir = 1;
263
led_bar_unlight_segment (GTK_WIDGET(led_bar), led_bar->seq_segment);
264
led_bar->seq_segment += led_bar->seq_dir;
265
led_bar_light_segment (GTK_WIDGET(led_bar), led_bar->seq_segment);