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  * Demo showing the use of groups
23  *
24  * T.C. Zhao and M. Overmars
25  */
26 
27 #ifdef HAVE_CONFIG_H
28 #include "config.h"
29 #endif
30 
31 #include "include/forms.h"
32 #include "porsche.xpm"
33 #include "nomail.xbm"
34 #include "bm1.xbm"
35 
36 extern void show_group( FL_OBJECT *,
37                         long );
38 
39 /**** Forms and Objects ****/
40 
41 #define NGROUP  4
42 
43 typedef struct {
44     FL_FORM   * objsform;
45     void      * vdata;
46     char      * cdata;
47     long        ldata;
48     FL_OBJECT * bitbutton;
49     FL_OBJECT * pixbutton;
50     FL_OBJECT * bit;
51     FL_OBJECT * pix;
52     FL_OBJECT * chart;
53     FL_OBJECT * quit;
54     FL_OBJECT * menu;
55     FL_OBJECT * choice;
56     FL_OBJECT * browser;
57     FL_OBJECT * xyplot;
58     FL_OBJECT * button[ 5 ];
59     FL_OBJECT * group[ 5 ];
60 } FD_objsform;
61 
62 
63 extern FD_objsform *create_form_objsform( void );
64 
65 FD_objsform *fd_objsform;
66 
67 /* callbacks for form objsform */
68 
69 /***************************************
70  ***************************************/
71 
72 void
show_group(FL_OBJECT * ob FL_UNUSED_ARG,long data)73 show_group( FL_OBJECT * ob    FL_UNUSED_ARG,
74             long        data )
75 {
76     int i;
77 
78     for ( i = 0; i <= NGROUP;i++)
79         ( i == data ?
80           fl_show_object : fl_hide_object )( fd_objsform->group[ i ] );
81 }
82 
83 
84 /***************************************
85  ***************************************/
86 
87 void
init_gui(FD_objsform * fd)88 init_gui( FD_objsform *fd )
89 {
90     float x[ ] = { 0, 1, 2, 3, 4, 5 };
91     float y[ ] = { 5.5, 4, 4.5, 3.8, 4, 5};
92     char *label[ ] = { "Mon", "Tue", "Wed", "Thur", "Fri", "Sat" };
93     size_t i;
94 
95     fl_addto_menu( fd->menu, "One\tF1|Two\tF2|Three\tF3|Four\tF4" );
96     fl_addto_choice( fd->choice, "Option1|Option2|Option3" );
97 
98     fl_set_pixmapbutton_data( fd->pixbutton, porsche );
99     fl_set_pixmap_data( fd->pix, porsche );
100     fl_set_bitmapbutton_data( fd->bitbutton, bm1_width, bm1_height, bm1_bits );
101     fl_set_bitmap_data( fd->bit, nomail_width, nomail_height, nomail_bits );
102 
103     fl_set_browser_fontsize( fd->browser, FL_NORMAL_SIZE );
104     fl_addto_browser( fd->browser, "browser line 1\nbrowser line 2" );
105     fl_addto_browser( fd->browser, "browser line 3\nbrowser line 4" );
106     fl_addto_browser( fd->browser, "browser line 5\nbrowser line 6" );
107     fl_addto_browser( fd->browser, "browser line 7\nbrowser line 8" );
108     fl_addto_browser( fd->browser, "browser line 9\nbrowser line 10" );
109     fl_addto_browser( fd->browser, "browser line 11\nbrowser line 12" );
110     fl_addto_browser( fd->browser, "browser line 13\nbrowser line 14" );
111     fl_addto_browser( fd->browser, "browser line 15\nbrowser line 16" );
112     fl_addto_browser( fd->browser, "browser line 17\nbrowser line 18" );
113 
114     for ( i = 0; i < sizeof y / sizeof *y; i++ )
115         fl_add_chart_value( fd->chart, y[ i ], label[ i ], i + 1 );
116 
117     fl_set_xyplot_data( fd->xyplot, x, y, 6, "", "","" );
118     fl_add_xyplot_overlay( fd->xyplot, 1, x, y, 6, FL_RED );
119     fl_add_xyplot_text( fd->xyplot, 2.5, 5.2, "Weekly Summary",
120                         FL_ALIGN_CENTER, FL_BLUE );
121     fl_add_xyplot_text( fd->xyplot, 3, 3.85, "@-22->", FL_ALIGN_TOP, FL_RED );
122 
123     fl_set_xyplot_overlay_type( fd->xyplot, 1, FL_NORMAL_XYPLOT );
124     fl_set_xyplot_alphaxtics( fd->xyplot, "Mon|Tue|Wed|Thu|Fri|Sat", 0 );
125     fl_set_xyplot_ytics( fd->xyplot, -1, -1 );
126     fl_set_xyplot_linewidth( fd->xyplot, 0, 3 );
127 }
128 
129 
130 /***************************************
131  ***************************************/
132 
133 int
main(int argc,char * argv[])134 main( int    argc,
135       char * argv[ ] )
136 {
137     fl_initialize( &argc, argv, 0, 0, 0 );
138     fd_objsform = create_form_objsform( );
139     init_gui( fd_objsform );
140 
141     /* fill-in form initialization code */
142 
143     fl_set_button( fd_objsform->button[ 0 ], 1 );
144     show_group( 0, 0 );
145 
146     /* show the first form */
147 
148     fl_show_form( fd_objsform->objsform, FL_PLACE_CENTER,
149                   FL_FULLBORDER, "objsform" );
150 
151     while ( fl_do_forms( ) != fd_objsform->quit )
152         /* empty */ ;
153 
154     fl_finish( );
155     return 0;
156 }
157 
158 
159 /* Form definition file generated with fdesign. */
160 
161 #include <stdlib.h>
162 
163 /***************************************
164  ***************************************/
165 
166 FD_objsform *
create_form_objsform(void)167 create_form_objsform( void )
168 {
169     FL_OBJECT *obj;
170     FD_objsform *fdui = fl_calloc( 1, sizeof *fdui );
171 
172     fdui->objsform = fl_bgn_form( FL_NO_BOX, 456, 361 );
173 
174     fl_add_box( FL_FLAT_BOX, 0, 0, 456, 361, "" );
175 
176     fl_add_box( FL_UP_BOX, 0, 0, 455, 360, "" );
177 
178     fl_add_box( FL_UP_BOX, 0, 0, 456, 70, "" );
179 
180     fdui->button[ 0 ] = obj = fl_add_button( FL_RADIO_BUTTON, 15, 20, 75, 30,
181                                              "Static" );
182     fl_set_object_lsize( obj, FL_NORMAL_SIZE);
183     fl_set_object_lstyle( obj, FL_TIMESBOLD_STYLE );
184     fl_set_object_callback( obj, show_group, 0 );
185 
186     fdui->button[ 1 ] = obj = fl_add_button( FL_RADIO_BUTTON, 90, 20, 75, 30,
187                                              "Button" );
188     fl_set_object_lsize( obj, FL_NORMAL_SIZE );
189     fl_set_object_lstyle( obj, FL_TIMESBOLD_STYLE );
190     fl_set_object_callback( obj, show_group, 1 );
191 
192     fdui->button[ 2 ] = obj = fl_add_button( FL_RADIO_BUTTON, 165, 20, 70, 30,
193                                              "Valuator" );
194     fl_set_object_lsize( obj, FL_NORMAL_SIZE );
195     fl_set_object_lstyle( obj, FL_TIMESBOLD_STYLE );
196     fl_set_object_callback( obj, show_group, 2 );
197 
198     fdui->button[ 3 ] = obj = fl_add_button( FL_RADIO_BUTTON, 235, 20, 70, 30,
199                                              "Input" );
200     fl_set_object_lsize( obj, FL_NORMAL_SIZE );
201     fl_set_object_lstyle( obj, FL_TIMESBOLD_STYLE );
202     fl_set_object_callback( obj, show_group, 3 );
203 
204     fdui->button[ 4 ] = obj = fl_add_button( FL_RADIO_BUTTON, 305, 20, 70, 30,
205                                              "Other" );
206     fl_set_object_lsize( obj, FL_NORMAL_SIZE );
207     fl_set_object_lstyle( obj, FL_TIMESBOLD_STYLE );
208     fl_set_object_callback( obj, show_group, 4 );
209 
210     fl_add_box( FL_UP_BOX, 0, 70, 456, 291, "" );
211 
212     fl_add_box( FL_DOWN_BOX, 9, 90, 435, 260, "" );
213 
214     fdui->group[ 2 ] = fl_bgn_group( );
215 
216     obj = fl_add_text( FL_NORMAL_TEXT, 260, 140, 80, 30, "Text" );
217     fl_set_object_lalign( obj, fl_to_inside_lalign( FL_ALIGN_LEFT ) );
218 
219     fl_add_slider( FL_HOR_BROWSER_SLIDER, 60, 120, 170, 25, "" );
220 
221     obj = fl_add_slider( FL_HOR_FILL_SLIDER, 60, 160, 170, 30, "" );
222     fl_set_slider_value( obj, 0.54 );
223 
224     obj = fl_add_slider( FL_VERT_SLIDER, 390, 110, 30, 170, "" );
225     fl_set_slider_value( obj, 0.48 );
226 
227     fl_add_valslider( FL_VERT_SLIDER, 350, 110, 30, 170, "" );
228 
229     obj = fl_add_dial( FL_FILL_DIAL, 50, 220, 90, 70, "" );
230     fl_set_object_color( obj, FL_COL1, FL_BLUE );
231 
232     fl_add_positioner( FL_NORMAL_POSITIONER, 150, 210,120, 100, "" );
233 
234     fl_add_counter( FL_NORMAL_COUNTER, 300, 300, 130, 30, "" );
235 
236     fl_end_group( );
237 
238     fdui->group[ 1 ] = fl_bgn_group( );
239 
240     fdui->bitbutton = fl_add_bitmapbutton( FL_NORMAL_BUTTON, 60, 250, 50, 40,
241                                            "" );
242 
243     fdui->pixbutton = fl_add_pixmapbutton( FL_NORMAL_BUTTON, 85, 120, 80, 80,
244                                            "" );
245 
246     fl_add_button( FL_NORMAL_BUTTON, 290, 270, 90, 35, "Button" );
247 
248     obj = fl_add_round3dbutton( FL_PUSH_BUTTON, 260, 95, 60, 40,
249                                 "Round3DButton" );
250     fl_set_object_color( obj, FL_COL1, FL_MAGENTA );
251 
252     fl_add_roundbutton( FL_PUSH_BUTTON, 220, 140, 60, 40, "RoundButton" );
253 
254     obj = fl_add_checkbutton( FL_PUSH_BUTTON, 190, 230, 50, 40, "CheckButton" );
255     fl_set_object_color( obj, FL_COL1, FL_BLUE );
256 
257     fl_add_lightbutton( FL_PUSH_BUTTON, 290, 200, 100, 30, "LightButton" );
258 
259     obj = fl_add_button( FL_PUSH_BUTTON, 120, 290, 100, 35 ,"Button");
260     fl_set_object_boxtype( obj, FL_ROUNDED3D_UPBOX );
261 
262     fl_end_group( );
263 
264     fdui->group[ 0 ] = fl_bgn_group( );
265 
266     obj = fl_add_box( FL_UP_BOX, 40, 120, 70, 70, "A Box" );
267     fl_set_object_lsize( obj,FL_NORMAL_SIZE );
268     fl_set_object_lstyle( obj, FL_TIMESBOLD_STYLE );
269 
270     fdui->bit = fl_add_bitmap( FL_NORMAL_BITMAP, 30, 220, 80, 70, "bitmap" );
271 
272     fl_add_clock( FL_ANALOG_CLOCK, 330, 240, 90, 80, "" );
273 
274     obj = fl_add_frame( FL_ENGRAVED_FRAME, 130, 120, 80, 70, "A Frame" );
275     fl_set_object_lsize( obj, FL_NORMAL_SIZE );
276     fl_set_object_lstyle( obj, FL_TIMESBOLD_STYLE );
277 
278     fdui->pix = fl_add_pixmap( FL_NORMAL_PIXMAP, 340, 110, 90, 70, "pixmap" );
279 
280     fdui->chart = fl_add_chart( FL_PIE_CHART, 160, 210, 130, 110, "chart" );
281 
282     obj = fl_add_text( FL_NORMAL_TEXT, 240, 130, 100, 30,
283                        "Text stuff\nand more stuff" );
284     fl_set_object_lalign( obj,FL_ALIGN_CENTER );
285 
286     fl_end_group( );
287 
288     fdui->group[ 3 ] = fl_bgn_group( );
289 
290     fl_add_input( FL_NORMAL_INPUT, 140, 120, 150, 30, "Input" );
291 
292     fl_add_input( FL_MULTILINE_INPUT, 60, 170, 320, 130, "" );
293 
294     fl_end_group( );
295 
296     fdui->quit = fl_add_button( FL_NORMAL_BUTTON, 385, 20, 60, 30, "Quit" );
297 
298     fdui->group[ 4 ] = fl_bgn_group( );
299 
300     fdui->menu = obj = fl_add_menu( FL_PULLDOWN_MENU, 190, 110, 40, 19,
301                                     "Menu" );
302     fl_set_object_boxtype( obj, FL_FLAT_BOX );
303 
304     fdui->choice = fl_add_choice( FL_NORMAL_CHOICE, 290, 110, 120, 30, "" );
305 
306     fdui->browser = fl_add_browser( FL_NORMAL_BROWSER, 30, 140, 140, 150, "" );
307 
308     fdui->xyplot = obj = fl_add_xyplot( FL_IMPULSE_XYPLOT, 190, 150, 240, 180,
309                                         "" );
310     fl_set_object_lsize( obj, FL_DEFAULT_SIZE );
311 
312     fl_end_group( );
313 
314     fl_end_form( );
315 
316     fdui->objsform->fdui = fdui;
317 
318     return fdui;
319 }
320 
321 
322 /*
323  * Local variables:
324  * tab-width: 4
325  * indent-tabs-mode: nil
326  * End:
327  */
328