1 /*
2 * This file is part of XForms.
3 *
4 * XForms is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU Lesser General Public License as
6 * published by the Free Software Foundation; either version 2.1, or
7 * (at your option) any later version.
8 *
9 * XForms is distributed in the hope that it will be useful, but
10 * 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.
13 *
14 * You should have received a copy of the GNU Lesser General Public License
15 * along with XForms. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18
19 /**
20 * \file sp_scrollbar.c
21 *
22 * This file is part of XForms package
23 * Copyright (c) 1996-2002 T.C. Zhao and Mark Overmars
24 * All rights reserved.
25 *
26 * Settting slider class specific attributes.
27 */
28
29 #ifdef HAVE_CONFIG_H
30 #include "config.h"
31 #endif
32
33 #include "fd_main.h"
34 #include "fd_spec.h"
35 #include "sp_scrollbar.h"
36 #include "spec/scrollbar_spec.h"
37 #include "private/pscrollbar.h"
38
39
40 static FD_scrollbarattrib *scb_attrib;
41 static FL_OBJECT * curobj;
42
43
44 /***************************************
45 ***************************************/
46
47 FL_FORM *
scrollbar_create_spec_form(void)48 scrollbar_create_spec_form( void )
49 {
50 if ( scb_attrib )
51 return scb_attrib->scrollbarattrib;
52
53 scb_attrib = create_form_scrollbarattrib( );
54
55 setup_how_return_menu( scb_attrib->returnsetting );
56 fl_set_menu_item_mode( scb_attrib->returnsetting, 5,
57 FL_PUP_BOX | FL_PUP_GRAY );
58 fl_set_menu_item_mode( scb_attrib->returnsetting, 6,
59 FL_PUP_BOX | FL_PUP_GRAY );
60
61 return scb_attrib->scrollbarattrib;
62 }
63
64
65 /***************************************
66 ***************************************/
67
68 #define is_vert( t ) ( t == FL_VERT_SCROLLBAR \
69 || t == FL_VERT_NICE_SCROLLBAR \
70 || t == FL_VERT_THIN_SCROLLBAR )
71
72
73 void
scrollbar_adjust_spec_form(FL_OBJECT * obj)74 scrollbar_adjust_spec_form( FL_OBJECT * obj )
75 {
76 curobj = obj;
77
78 if ( is_vert( obj->type ) )
79 {
80 fl_set_object_label( scb_attrib->minval, "Value at top" );
81 fl_set_object_label( scb_attrib->maxval, "Value at bottom" );
82 }
83 else
84 {
85 fl_set_object_label( scb_attrib->minval, "Value at left" );
86 fl_set_object_label( scb_attrib->maxval, "Value at right" );
87 }
88 }
89
90
91 /***************************************
92 ***************************************/
93
94 void
scrollbar_fill_in_spec_form(FL_OBJECT * obj)95 scrollbar_fill_in_spec_form( FL_OBJECT * obj )
96 {
97 double r1, r2;
98
99 fl_get_scrollbar_bounds( obj, &r1, &r2 );
100 set_finput_value( scb_attrib->minval, r1, -1 );
101 set_finput_value( scb_attrib->maxval, r2, -1 );
102
103 set_finput_value( scb_attrib->initial_val,
104 fl_get_scrollbar_value( obj ), -1 );
105
106 set_finput_value( scb_attrib->slsize, fl_get_scrollbar_size( obj ), 2 );
107
108 fl_get_scrollbar_increment( obj, &r1, &r2 );
109 set_finput_value( scb_attrib->ldelta, r1, -1 );
110 set_finput_value( scb_attrib->rdelta, r2, -1 );
111
112 reset_how_return_menu( scb_attrib->returnsetting, obj->how_return );
113 }
114
115
116 /***************************************
117 ***************************************/
118
119 void
scrollbar_reread_spec_form(FL_OBJECT * obj)120 scrollbar_reread_spec_form( FL_OBJECT * obj )
121 {
122 double r1, r2;
123
124 if ( get_checked_float( fl_get_input( scb_attrib->minval ), &r1 )
125 && get_checked_float( fl_get_input( scb_attrib->maxval ), &r2 ) )
126 fl_set_scrollbar_bounds( obj, r1, r2 );
127
128 if ( get_checked_float( fl_get_input( scb_attrib->initial_val ), &r1 ) )
129 fl_set_scrollbar_value( obj, r1 );
130
131 if ( get_checked_float( fl_get_input( scb_attrib->slsize ), &r1 ) )
132 fl_set_scrollbar_size( obj, r1 );
133
134 if ( get_checked_float( fl_get_input( scb_attrib->ldelta ), &r1 )
135 && get_checked_float( fl_get_input( scb_attrib->ldelta ), &r2 ) )
136 fl_set_scrollbar_increment( obj, r1, r2 );
137
138 redraw_the_form( 0 );
139 }
140
141
142 /***************************************
143 ***************************************/
144
145 void
scrollbar_emit_spec_fd_code(FILE * fp,FL_OBJECT * obj)146 scrollbar_emit_spec_fd_code( FILE * fp,
147 FL_OBJECT * obj )
148 {
149 FL_OBJECT *defobj = fl_create_scrollbar( obj->type, 0, 0, 0, 0, "" );
150 double r1, r2, def_r1, def_r2;
151
152 fl_get_scrollbar_bounds( obj, &r1, &r2 );
153 fl_get_scrollbar_bounds( defobj, &def_r1, &def_r2 );
154
155 if ( r1 != def_r1 || r2 != def_r2 )
156 fprintf( fp, " bounds: %g %g\n", r1, r2 );
157
158 r1 = fl_get_scrollbar_value( obj );
159 def_r1 = fl_get_scrollbar_value( defobj );
160
161 if ( r1 != def_r1 )
162 fprintf( fp, " value: %g\n", r1 );
163
164 r1 = fl_get_scrollbar_size( obj );
165 def_r1 = fl_get_scrollbar_size( defobj );
166
167 if ( r1 != def_r1 )
168 fprintf( fp, " slsize: %.2f\n", r1 );
169
170 fl_get_scrollbar_increment( obj, &r1, &r2 );
171 fl_get_scrollbar_increment( defobj, &def_r1, &def_r2 );
172
173 if ( r1 != def_r1 || r2 != def_r2 )
174 fprintf( fp, " increment: %g %g\n", r1, r2 );
175 }
176
177
178 /***************************************
179 ***************************************/
180
181 void
scrollbar_emit_spec_c_code(FILE * fp,FL_OBJECT * obj)182 scrollbar_emit_spec_c_code( FILE * fp,
183 FL_OBJECT * obj )
184 {
185 FL_OBJECT *defobj = fl_create_scrollbar( obj->type, 0, 0, 0, 0, "" );
186 double r1, r2, def_r1, def_r2;
187
188 fl_get_scrollbar_bounds( obj, &r1, &r2 );
189 fl_get_scrollbar_bounds( defobj, &def_r1, &def_r2 );
190
191 if ( r1 != def_r1 || r2 != def_r2 )
192 fprintf( fp, " fl_set_scrollbar_bounds( obj, %g, %g );\n",
193 r1, r2 );
194
195 r1 = fl_get_scrollbar_value( obj );
196 def_r1 = fl_get_scrollbar_value( defobj );
197
198 if ( r1 != def_r1 )
199 fprintf( fp, " fl_set_scrollbar_value( obj, %g );\n", r1 );
200
201 r1 = fl_get_scrollbar_size( obj );
202 def_r1 = fl_get_scrollbar_size( defobj );
203
204 if ( r1 != def_r1 )
205 fprintf( fp, " fl_set_scrollbar_size( obj, %.2f );\n", r1 );
206
207 fl_get_scrollbar_increment( obj, &r1, &r2 );
208 fl_get_scrollbar_increment( defobj, &def_r1, &def_r2 );
209
210 if ( r1 != def_r1 || r2 != def_r2 )
211 fprintf( fp, " fl_set_scrollbar_increment( obj, %g, %g );\n",
212 r1, r2 );
213 }
214
215
216 /***************************************
217 ***************************************/
218
219 void
scb_minmax_change(FL_OBJECT * obj FL_UNUSED_ARG,long data FL_UNUSED_ARG)220 scb_minmax_change( FL_OBJECT * obj FL_UNUSED_ARG,
221 long data FL_UNUSED_ARG )
222 {
223 double min = get_finput_value( scb_attrib->minval );
224 double max = get_finput_value( scb_attrib->maxval );
225
226 fl_set_scrollbar_bounds( curobj, min, max );
227 redraw_the_form( 0 );
228 }
229
230
231 /***************************************
232 ***************************************/
233
234 void
scb_delta_change(FL_OBJECT * obj FL_UNUSED_ARG,long data FL_UNUSED_ARG)235 scb_delta_change( FL_OBJECT * obj FL_UNUSED_ARG,
236 long data FL_UNUSED_ARG )
237 {
238 double ldelta = get_finput_value( scb_attrib->ldelta );
239 double rdelta = get_finput_value( scb_attrib->rdelta );
240
241 fl_set_scrollbar_increment( curobj, ldelta, rdelta );
242 redraw_the_form( 0 );
243 }
244
245
246 /***************************************
247 ***************************************/
248
249 void
scb_slsize_change(FL_OBJECT * obj,long data FL_UNUSED_ARG)250 scb_slsize_change( FL_OBJECT * obj,
251 long data FL_UNUSED_ARG )
252 {
253 double slsize = get_finput_value( obj );
254
255 fl_set_scrollbar_size( curobj, slsize );
256 redraw_the_form( 0 );
257 }
258
259
260 /***************************************
261 ***************************************/
262
263 void
scb_initialvalue_change(FL_OBJECT * obj,long data FL_UNUSED_ARG)264 scb_initialvalue_change( FL_OBJECT * obj,
265 long data FL_UNUSED_ARG )
266 {
267 double val = get_finput_value( obj );
268
269 fl_set_scrollbar_value( curobj, val );
270 redraw_the_form( 0 );
271 }
272
273
274 /***************************************
275 ***************************************/
276
277 void
scb_returnsetting_change(FL_OBJECT * obj,long data FL_UNUSED_ARG)278 scb_returnsetting_change( FL_OBJECT * obj,
279 long data FL_UNUSED_ARG )
280 {
281 handle_how_return_changes( obj, curobj );
282 }
283
284
285 #include "spec/scrollbar_spec.c"
286
287
288 /*
289 * Local variables:
290 * tab-width: 4
291 * indent-tabs-mode: nil
292 * End:
293 */
294