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
15 * License along with XForms; see the file COPYING. If not, write to
16 * the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
17 * MA 02111-1307, USA.
18 */
19
20
21 /*
22 * This is a demo that shows the different types of browsers.
23 *
24 * This file is part of xforms package
25 * M. Overmars and T.C. Zhao (1997)
26 */
27
28 #ifdef HAVE_CONFIG_H
29 #include "config.h"
30 #endif
31
32 #include <stdio.h>
33 #include <string.h>
34 #include "include/forms.h"
35
36
37 FL_FORM * form;
38 FL_OBJECT * br[ 4 ],
39 * exitobj,
40 * readout;
41
42 static void create_form( void );
43 static void fill_browsers( void );
44
45
46 /***************************************
47 ***************************************/
48
49 int
main(int argc,char * argv[])50 main( int argc,
51 char * argv[ ] )
52 {
53 fl_initialize( &argc, argv, "FormDemo", 0, 0 );
54
55 create_form( );
56 fill_browsers( );
57
58 fl_show_form( form,FL_PLACE_CENTER | FL_FREE_SIZE, FL_TRANSIENT,
59 "All Browsers" );
60
61 fl_do_forms( );
62
63 fl_finish( );
64 return 0;
65 }
66
67
68 static const char *bnames[ ] =
69 {
70 "NORMAL_BROWSER",
71 "SELECT_BROWSER",
72 "HOLD_BROWSER",
73 "MULTI_BROWSER"
74 };
75
76
77 /***************************************
78 ***************************************/
79
80 static void
deselect(FL_OBJECT * obj FL_UNUSED_ARG,long arg FL_UNUSED_ARG)81 deselect( FL_OBJECT * obj FL_UNUSED_ARG,
82 long arg FL_UNUSED_ARG )
83 {
84 int i;
85
86 for ( i = 2; i < 4; i++ )
87 fl_deselect_browser( br[ i ] );
88 }
89
90
91 /***************************************
92 ***************************************/
93
94 static void
set_size(FL_OBJECT * obj FL_UNUSED_ARG,long arg)95 set_size( FL_OBJECT * obj FL_UNUSED_ARG,
96 long arg )
97 {
98 int i;
99
100 for ( i = 0; i < 4; i++ )
101 fl_set_browser_fontsize( br[ i ], arg );
102 }
103
104
105 /***************************************
106 ***************************************/
107
108 static void
set_style(FL_OBJECT * obj FL_UNUSED_ARG,long arg)109 set_style( FL_OBJECT * obj FL_UNUSED_ARG,
110 long arg )
111 {
112 int i;
113
114 for ( i = 0; i < 4; i++ )
115 fl_set_browser_fontstyle( br[ i ], arg );
116 }
117
118
119 /***************************************
120 ***************************************/
121
122 static void
br_callback(FL_OBJECT * ob,long arg)123 br_callback( FL_OBJECT * ob,
124 long arg )
125 {
126 char buf[ 1024 ];
127 const char * mb[ ] = { "left", "middle", "right",
128 "scroll-up", "scroll-down" };
129 int i;
130
131 if ( ( i = fl_mouse_button( ) ) >= FL_LEFT_MOUSE
132 && i <= FL_SCROLLDOWN_MOUSE )
133 sprintf( buf, "In %s [%s]: ", bnames[ arg ], mb[ i - FL_LEFT_MOUSE ] );
134 else
135 sprintf( buf, "In %s: ", bnames[ arg ] );
136
137 if ( ( i = fl_get_browser( ob ) ) )
138 {
139 strcat( buf, fl_get_browser_line( ob, i > 0 ? i : -i ) );
140 strcat( buf, i > 0 ? " was selected" : " was deselected." );
141 }
142
143 fl_set_object_label( readout, buf );
144 }
145
146
147 /***************************************
148 ***************************************/
149
150 static void
vcallback(FL_OBJECT * ob FL_UNUSED_ARG,int topline FL_UNUSED_ARG,void * data FL_UNUSED_ARG)151 vcallback( FL_OBJECT * ob FL_UNUSED_ARG,
152 int topline FL_UNUSED_ARG,
153 void * data FL_UNUSED_ARG )
154 {
155 int i;
156 int yoffset = fl_get_browser_yoffset( br[ 0 ] );
157
158 for ( i = 1; i < 4; i++ )
159 fl_set_browser_yoffset( br[ i ], yoffset );
160 }
161
162
163 /***************************************
164 ***************************************/
165
166 static void
link_browsers(FL_OBJECT * ob,long data FL_UNUSED_ARG)167 link_browsers( FL_OBJECT * ob,
168 long data FL_UNUSED_ARG )
169 {
170 int sync = fl_get_button( ob );
171 int i;
172
173 fl_set_object_label( ob, sync ? "Unlink": "Link" );
174
175 if ( sync )
176 {
177 int yoffset = fl_get_browser_yoffset( br[ 0 ] );
178
179 for ( i = 1; i < 4; i++ )
180 {
181 fl_set_browser_vscrollbar( br[ i ], FL_OFF );
182 fl_set_browser_yoffset( br[ i ], yoffset );
183 }
184
185 fl_set_browser_vscroll_callback( br[ 0 ], vcallback, 0 );
186 }
187 else
188 {
189 for ( i = 1; i < 4; i++ )
190 fl_set_browser_vscrollbar( br[ i ], FL_ON );
191
192 fl_set_browser_vscroll_callback( br[ 0 ], NULL, 0 );
193 }
194 }
195
196
197 /***************************************
198 ***************************************/
199
200 static void
create_form(void)201 create_form( void )
202 {
203 FL_OBJECT * obj;
204
205 form = fl_bgn_form( FL_FLAT_BOX, 700, 570 );
206
207 readout = fl_add_text( FL_NORMAL_TEXT, 50, 30, 600, 50, "" );
208 fl_set_object_lsize( readout, FL_NORMAL_SIZE );
209 fl_set_object_lalign( readout, FL_ALIGN_CENTER );
210 fl_set_object_lstyle( readout, FL_BOLD_STYLE );
211 fl_set_object_boxtype( readout, FL_UP_BOX );
212 fl_set_object_color( readout, FL_MAGENTA, FL_MAGENTA );
213
214 br[ 0 ] = obj = fl_add_browser( FL_NORMAL_BROWSER, 20, 120, 150, 290,
215 bnames[ 0 ] );
216 fl_set_object_callback( obj, br_callback, 0 );
217
218 br[ 1 ] = obj = fl_add_browser( FL_SELECT_BROWSER, 190, 120, 150, 290,
219 bnames[ 1 ] );
220 fl_set_object_callback( obj, br_callback, 1 );
221
222 br[ 2 ] = obj = fl_add_browser( FL_HOLD_BROWSER, 360, 120, 150, 290,
223 bnames[ 2 ] );
224 fl_set_object_color( obj, FL_WHITE, FL_GREEN );
225 fl_set_object_callback( obj, br_callback, 2 );
226
227 br[ 3 ] = obj = fl_add_browser( FL_MULTI_BROWSER, 530, 120, 150, 290,
228 bnames[ 3 ] );
229 fl_set_object_color( obj,FL_WHITE, FL_CYAN );
230 fl_set_object_callback( obj, br_callback, 3 );
231
232 exitobj = fl_add_button( FL_NORMAL_BUTTON, 560, 510, 120, 30, "Exit" );
233
234 obj = fl_add_button( FL_NORMAL_BUTTON, 560, 460, 120, 30, "Deselect" );
235 fl_set_object_callback( obj, deselect, 0 );
236
237 fl_bgn_group( );
238
239 obj = fl_add_lightbutton( FL_RADIO_BUTTON, 20, 500, 100, 30, "Tiny" );
240 fl_set_object_callback( obj, set_size, FL_TINY_SIZE );
241
242 obj = fl_add_lightbutton( FL_RADIO_BUTTON, 130, 500, 100, 30, "Small" );
243 fl_set_object_callback( obj, set_size, FL_SMALL_SIZE );
244 fl_set_button( obj, 1 );
245
246 obj = fl_add_lightbutton( FL_RADIO_BUTTON, 240, 500, 100, 30, "Normal" );
247 fl_set_object_callback( obj, set_size, FL_NORMAL_SIZE );
248
249 obj = fl_add_lightbutton( FL_RADIO_BUTTON, 350, 500, 100, 30, "Large" );
250 fl_set_object_callback( obj, set_size, FL_LARGE_SIZE );
251
252 obj = fl_add_button( FL_BUTTON, 470, 510, 45,30, "Link" );
253 fl_set_object_callback( obj, link_browsers, 0 );
254
255 fl_end_group( );
256
257 fl_bgn_group( );
258
259 obj = fl_add_lightbutton( FL_RADIO_BUTTON, 20, 450, 100, 30, "Normal" );
260 fl_set_object_callback( obj, set_style, FL_NORMAL_STYLE );
261 fl_set_button( obj, 1 );
262
263 obj = fl_add_lightbutton( FL_RADIO_BUTTON, 120, 450, 100, 30, "Bold" );
264 fl_set_object_callback( obj, set_style, FL_BOLD_STYLE );
265
266 obj = fl_add_lightbutton( FL_RADIO_BUTTON, 220, 450, 100, 30, "Italic" );
267 fl_set_object_callback( obj, set_style, FL_ITALIC_STYLE );
268
269 obj = fl_add_lightbutton( FL_RADIO_BUTTON, 320, 450, 100, 30,
270 "BoldItalic" );
271 fl_set_object_callback( obj, set_style, FL_BOLDITALIC_STYLE );
272
273 obj = fl_add_lightbutton( FL_RADIO_BUTTON, 420, 450, 100, 30, "Fixed" );
274 fl_set_object_callback( obj, set_style, FL_FIXED_STYLE );
275
276 fl_end_group( );
277
278 fl_end_form( );
279 }
280
281
282 /***************************************
283 ***************************************/
284
285 static void
fill_browsers(void)286 fill_browsers( void )
287 {
288 int i,
289 j;
290 char buf[ 128 ];
291
292 for ( i = 0; i < 4; i++ )
293 for ( j = 1; j <= 100; j++ )
294 {
295 if ( j == 5 || j == 6 )
296 sprintf( buf, "@NLine with qb %3d", j );
297 else if ( j == 10 )
298 strcpy( buf, "@-trailing text should be ignored" );
299 else if ( j == 40 )
300 sprintf( buf, "@mLine with qb %3d", j );
301 else
302 sprintf( buf, "Line with qb %3d",j );
303
304 fl_add_browser_line( br[ i ], buf );
305 }
306 }
307
308
309 /*
310 * Local variables:
311 * tab-width: 4
312 * indent-tabs-mode: nil
313 * End:
314 */
315