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 /* Demo: complete pop-ups.
22 * test font/cursor change
23 * test attaching pup to menu
24 */
25
26 #ifdef HAVE_CONFIG_H
27 #include "config.h"
28 #endif
29
30 #include "include/forms.h"
31 #include <stdlib.h>
32
33 static FL_FORM * pup;
34
35 static FL_OBJECT * done,
36 * pret,
37 * b1,
38 * b2,
39 * b3,
40 * menu;
41
42 static void create_form_pup( void );
43
44 static void init_menu( void );
45
46 static int post( FL_OBJECT *,
47 int,
48 FL_Coord,
49 FL_Coord,
50 int,
51 void * );
52
53
54 /***************************************
55 ***************************************/
56
57 int
main(int argc,char * argv[])58 main( int argc,
59 char * argv[ ] )
60 {
61 FL_IOPT aa;
62 unsigned int mask = FL_PDVisual;
63
64 aa.vclass = FL_DefaultVisual;
65 fl_set_defaults( mask, &aa );
66
67 fl_initialize( &argc, argv, "FormDemo", 0, 0 );
68
69 create_form_pup( );
70
71 /* Initialize */
72
73 fl_set_object_posthandler( b1, post );
74 fl_set_object_posthandler( b2, post );
75 fl_set_object_posthandler( b3, post );
76
77 fl_show_form( pup, FL_PLACE_MOUSE, FL_TRANSIENT, "PupDemo" );
78 init_menu( );
79
80 fl_do_forms( ); /* never returns */
81
82 return 0;
83 }
84
85
86 /***************************************
87 * post-handler
88 ***************************************/
89
90 static int
post(FL_OBJECT * ob,int ev,FL_Coord mx FL_UNUSED_ARG,FL_Coord my FL_UNUSED_ARG,int key FL_UNUSED_ARG,void * xev FL_UNUSED_ARG)91 post( FL_OBJECT * ob,
92 int ev,
93 FL_Coord mx FL_UNUSED_ARG,
94 FL_Coord my FL_UNUSED_ARG,
95 int key FL_UNUSED_ARG,
96 void * xev FL_UNUSED_ARG )
97 {
98 static int n1 = -1,
99 n2 = -1;
100
101 if ( n1 == -1 )
102 {
103 n1 = fl_defpup( FL_ObjWin( ob ), "line1|line2" );
104 fl_setpup_shadow( n1, 0 );
105 fl_setpup_bw( n1, 0 );
106 fl_setpup_pad( n1, 3, 0 );
107
108 n2 = fl_defpup( FL_ObjWin( ob ), "button1|button2" );
109 fl_setpup_shadow( n2, 0 );
110 fl_setpup_bw( n2, -1 );
111 fl_setpup_pad( n2, 3, 0 );
112 }
113
114 if ( ev == FL_ENTER )
115 {
116 if ( ob == b3 )
117 fl_show_oneliner( "button3", ob->form->x + ob->x + 5,
118 ob->form->y + ob->y + ob->h + 5 );
119 else
120 {
121 fl_setpup_position( ob->form->x+ob->x,
122 ob->form->y + ob->y + ob->h + 5 );
123 fl_showpup( ob == b1 ? n1 : n2 );
124 }
125 }
126 else if ( ev == FL_LEAVE )
127 {
128 if ( ob == b3 )
129 fl_hide_oneliner( );
130 else
131 fl_hidepup( ob == b1 ? n1 : n2 );
132 }
133
134 return 0;
135 }
136
137
138 /***************************************
139 ***************************************/
140
141 static int
style_cb(FL_POPUP_RETURN * r)142 style_cb( FL_POPUP_RETURN *r )
143 {
144 int style,
145 size,
146 mod;
147
148 fl_popup_entry_get_font( r->user_data, &style, &size );
149 mod = style & ( FL_SHADOW_STYLE | FL_ENGRAVED_STYLE | FL_EMBOSSED_STYLE );
150 fl_popup_entry_set_font( r->user_data, r->val | mod, size );
151 return FL_IGNORE;
152 }
153
154
155 /***************************************
156 ***************************************/
157
158 static int
size_cb(FL_POPUP_RETURN * r)159 size_cb( FL_POPUP_RETURN *r )
160 {
161 int style;
162
163 fl_popup_entry_get_font( r->user_data, &style, NULL );
164 fl_popup_entry_set_font( r->user_data, style, r->val );
165 fl_popup_get_title_font( r->user_data, &style, NULL );
166 fl_popup_set_title_font( r->user_data, style, r->val );
167 return FL_IGNORE;
168 }
169
170
171 /***************************************
172 ***************************************/
173
174 static int
mod_cb(FL_POPUP_RETURN * r)175 mod_cb( FL_POPUP_RETURN *r )
176 {
177 int style,
178 size;
179
180 fl_popup_entry_get_font( r->user_data, &style, &size );
181 style &= ~ ( FL_SHADOW_STYLE | FL_ENGRAVED_STYLE | FL_EMBOSSED_STYLE );
182 fl_popup_entry_set_font( r->user_data, style | r->val, size );
183 return FL_IGNORE;
184 }
185
186
187 /***************************************
188 ***************************************/
189
190 static int
pol_cb(FL_POPUP_RETURN * r)191 pol_cb( FL_POPUP_RETURN *r )
192 {
193 FL_POPUP_ENTRY *e;
194
195 for ( e = r->popup->entries; e != NULL; e = e->next )
196 if ( e != r->entry )
197 fl_popup_entry_clear_state( e, FL_POPUP_CHECKED );
198 fl_popup_set_policy( r->user_data, r->val );
199 return FL_IGNORE;
200 }
201
202
203 /***************************************
204 ***************************************/
205
206 static void
do_pup(FL_OBJECT * ob,long q FL_UNUSED_ARG)207 do_pup( FL_OBJECT * ob,
208 long q FL_UNUSED_ARG )
209 {
210 static FL_POPUP *m = NULL,
211 *sm1,
212 *sm2,
213 *sm3,
214 *sm4;
215
216 if ( m == NULL )
217 {
218 m = fl_popup_add( FL_ObjWin( ob ), "Popup" );
219 sm1 = fl_popup_add( FL_ObjWin( ob ), NULL );
220 sm2 = fl_popup_add( FL_ObjWin( ob ), NULL );
221 sm3 = fl_popup_add( FL_ObjWin( ob ), NULL );
222 sm4 = fl_popup_add( FL_ObjWin( ob ), NULL );
223
224 fl_popup_add_entries( sm4, "FL_POPUP_NORMAL_SELECT%T%x%u%f",
225 FL_POPUP_NORMAL_SELECT, m, pol_cb );
226 fl_popup_add_entries( sm4, "FL_POPUP_DRAG_SELECT%t%x%u%f",
227 FL_POPUP_DRAG_SELECT, m, pol_cb );
228
229 fl_popup_add_entries( sm3, "None%x%R%u%f",
230 0, 1, m, mod_cb );
231 fl_popup_add_entries( sm3, "FL_SHADOW_STYLE%x%r%u%f",
232 FL_SHADOW_STYLE, 1, m, mod_cb );
233 fl_popup_add_entries( sm3, "FL_ENGRAVED_STYLE%x%r%u%f",
234 FL_ENGRAVED_STYLE, 1, m, mod_cb );
235 fl_popup_add_entries( sm3, "FL_EMBOSSED_STYLE%x%r%u%f",
236 FL_EMBOSSED_STYLE, 1, m, mod_cb );
237
238 fl_popup_add_entries( sm1, "FL_NORMAL_STYLE%Sn%x%R%u%f%s",
239 FL_NORMAL_STYLE, 1, m, style_cb, "n" );
240 fl_popup_add_entries( sm1, "FL_BOLD_STYLE%Sb%x%r%u%f%s",
241 FL_BOLD_STYLE, 1, m, style_cb, "b" );
242 fl_popup_add_entries( sm1, "FL_ITALIC_STYLE%Si%x%r%u%f%s",
243 FL_ITALIC_STYLE, 1, m, style_cb, "i" );
244 fl_popup_add_entries( sm1, "FL_BOLDITALIC_STYLE%SI%x%r%u%f%s",
245 FL_BOLDITALIC_STYLE, 1, m, style_cb, "I" );
246 fl_popup_add_entries( sm1, "%l|Font modifier%Sm%m%s", sm3, "m" );
247
248 fl_popup_add_entries( sm2, "FL_TINY_SIZE%x%r%u%f",
249 FL_TINY_SIZE, 1, m, size_cb );
250 fl_popup_add_entries( sm2, "FL_SMALL_SIZE%x%r%u%f",
251 FL_SMALL_SIZE, 1, m, size_cb );
252 fl_popup_add_entries( sm2, "FL_NORMAL_SIZE%x%R%u%f",
253 FL_NORMAL_SIZE, 1, m, size_cb );
254 fl_popup_add_entries( sm2, "FL_MEDIUM_SIZE%x%r%u%f",
255 FL_MEDIUM_SIZE, 1, m, size_cb );
256 fl_popup_add_entries( sm2, "FL_LARGE_SIZE%x%r%u%f",
257 FL_LARGE_SIZE, 1, m, size_cb );
258 fl_popup_add_entries( sm2, "FL_HUGE_SIZE%x%r%u%f",
259 FL_HUGE_SIZE, 1, m, size_cb );
260
261 fl_popup_add_entries( m, "Font style%m", sm1 );
262 fl_popup_add_entries( m, "Font size%m", sm2 );
263 fl_popup_add_entries( m, "Policy%m", sm4 );
264
265 fl_popup_set_min_width( m, 100 );
266 }
267
268 if ( fl_get_button_numb( ob ) >= FL_SHORTCUT )
269 fl_popup_set_position( m, ob->form->x + ob->x,
270 ob->form->y + ob->y + ob->h );
271
272 fl_popup_do( m );
273 }
274
275
276 /***************************************
277 ***************************************/
278
279 static void
init_menu(void)280 init_menu( void )
281 {
282 FL_POPUP *mm,
283 *smm;
284
285 mm = fl_popup_add( fl_default_win( ), NULL );
286 smm = fl_popup_add( fl_default_win( ), NULL );
287
288 fl_popup_add_entries( smm, "SubItem1%x|SubItem2%x|SubItem3%x", 11, 12, 13 );
289 fl_popup_add_entries( mm, "MenuItem1|MenuItem2%m|MenuItem3", smm );
290
291 fl_set_nmenu_popup( menu, mm );
292 }
293
294
295 /***************************************
296 ***************************************/
297
298 static void
do_menu(FL_OBJECT * ob,long data FL_UNUSED_ARG)299 do_menu( FL_OBJECT * ob,
300 long data FL_UNUSED_ARG )
301 {
302 char buf[ 128 ];
303 FL_POPUP_RETURN *ret = fl_get_nmenu_item( ob );
304
305 if ( ret->val >= 0 )
306 sprintf( buf, "%ld (%s)", ret->val, ret->text );
307 else
308 sprintf( buf, "%ld", ret->val );
309
310 fl_set_object_label( pret, buf );
311 }
312
313
314 /***************************************
315 ***************************************/
316
317 static void
done_cb(FL_OBJECT * ob FL_UNUSED_ARG,long data FL_UNUSED_ARG)318 done_cb( FL_OBJECT * ob FL_UNUSED_ARG,
319 long data FL_UNUSED_ARG )
320 {
321 fl_finish( );
322 exit( 0 );
323 }
324
325
326 /***************************************
327 ***************************************/
328
329 static void
do_nothing(FL_OBJECT * ob FL_UNUSED_ARG,long data FL_UNUSED_ARG)330 do_nothing( FL_OBJECT * ob FL_UNUSED_ARG,
331 long data FL_UNUSED_ARG )
332 {
333 }
334
335
336 /***************************************
337 ***************************************/
338
339 static void
create_form_pup(void)340 create_form_pup( void )
341 {
342 FL_OBJECT *obj;
343
344 if ( pup )
345 return;
346
347 pup = fl_bgn_form( FL_UP_BOX, 260, 210 );
348
349 fl_add_box( FL_UP_BOX, 0, 0, 260, 210, "" );
350
351 done = obj = fl_add_button( FL_NORMAL_BUTTON, 150, 150, 90, 35, "Done" );
352 fl_set_object_callback( obj, done_cb, 0 );
353
354 obj = fl_add_button( FL_MENU_BUTTON, 30, 90, 100, 30, "PopUp" );
355 fl_set_button_shortcut( obj, "Pp#p", 1 );
356 fl_set_object_callback( obj, do_pup, 0 );
357
358 menu = obj = fl_add_nmenu( FL_NORMAL_NMENU, 160, 95, 60, 25, "Menu" );
359 fl_set_button_shortcut( obj, "Mm#m", 1 );
360 fl_set_object_callback( obj, do_menu, 0 );
361
362 pret = obj = fl_add_text( FL_NORMAL_TEXT, 20, 60, 220, 30, "" );
363 fl_set_object_lalign( obj, FL_ALIGN_CENTER );
364
365 b1 = fl_add_button( FL_NORMAL_BUTTON, 20, 10, 60, 30, "Button1" );
366 fl_set_object_callback( b1, do_nothing, 0 );
367 b2 = fl_add_button( FL_NORMAL_BUTTON, 90, 10, 60, 30, "Button2" );
368 fl_set_object_callback( b2, do_nothing, 0 );
369 b3 = fl_add_button( FL_NORMAL_BUTTON, 160, 10, 60, 30, "Button3" );
370 fl_set_object_callback( b3, do_nothing, 0 );
371
372 fl_end_form( );
373 }
374
375
376 /*
377 * Local variables:
378 * tab-width: 4
379 * indent-tabs-mode: nil
380 * End:
381 */
382