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