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 #ifdef HAVE_CONFIG_H
22 #include "config.h"
23 #endif
24
25 #include "include/forms.h"
26 #include <stdlib.h>
27
28
29 /***************************************
30 ***************************************/
31
32 void
done_cb(FL_OBJECT * ob FL_UNUSED_ARG,long data FL_UNUSED_ARG)33 done_cb( FL_OBJECT * ob FL_UNUSED_ARG,
34 long data FL_UNUSED_ARG )
35 {
36 fl_finish( );
37 exit( 0 );
38 }
39
40
41 /***************************************
42 ***************************************/
43
44 int
style_cb(FL_POPUP_RETURN * r)45 style_cb( FL_POPUP_RETURN *r )
46 {
47 int style,
48 size,
49 mod;
50
51 fl_popup_entry_get_font( r->user_data, &style, &size );
52 mod = style & ( FL_SHADOW_STYLE | FL_ENGRAVED_STYLE | FL_EMBOSSED_STYLE );
53 fl_popup_entry_set_font( r->user_data, r->val | mod, size );
54 return FL_IGNORE;
55 }
56
57
58 /***************************************
59 ***************************************/
60
61 int
size_cb(FL_POPUP_RETURN * r)62 size_cb( FL_POPUP_RETURN *r )
63 {
64 int style;
65
66 fl_popup_entry_get_font( r->user_data, &style, NULL );
67 fl_popup_entry_set_font( r->user_data, style, r->val );
68 fl_popup_get_title_font( r->user_data, &style, NULL );
69 fl_popup_set_title_font( r->user_data, style, r->val );
70 return FL_IGNORE;
71 }
72
73
74 /***************************************
75 ***************************************/
76
77 int
mod_cb(FL_POPUP_RETURN * r)78 mod_cb( FL_POPUP_RETURN *r )
79 {
80 int style,
81 size;
82
83 fl_popup_entry_get_font( r->user_data, &style, &size );
84 style &= ~ ( FL_SHADOW_STYLE | FL_ENGRAVED_STYLE | FL_EMBOSSED_STYLE );
85 fl_popup_entry_set_font( r->user_data, style | r->val, size );
86 return FL_IGNORE;
87 }
88
89
90 /***************************************
91 ***************************************/
92
93 int
pol_cb(FL_POPUP_RETURN * r)94 pol_cb( FL_POPUP_RETURN *r )
95 {
96 FL_POPUP_ENTRY *e;
97
98 for ( e = r->popup->entries; e != NULL; e = e->next )
99 if ( e != r->entry )
100 fl_popup_entry_clear_state( e, FL_POPUP_CHECKED );
101 fl_popup_set_policy( r->user_data, r->val );
102 return FL_IGNORE;
103 }
104
105
106 /***************************************
107 ***************************************/
108
109 void
do_pup(FL_OBJECT * obj,long q FL_UNUSED_ARG)110 do_pup( FL_OBJECT * obj,
111 long q FL_UNUSED_ARG )
112 {
113 static FL_POPUP *m = NULL,
114 *sm1,
115 *sm2,
116 *sm3,
117 *sm4;
118
119 if ( m == NULL )
120 {
121 m = fl_popup_add( FL_ObjWin( obj ), "Popup" );
122 sm1 = fl_popup_add( FL_ObjWin( obj ), NULL );
123 sm2 = fl_popup_add( FL_ObjWin( obj ), NULL );
124 sm3 = fl_popup_add( FL_ObjWin( obj ), NULL );
125 sm4 = fl_popup_add( FL_ObjWin( obj ), NULL );
126
127 fl_popup_add_entries( sm4, "FL_POPUP_NORMAL_SELECT%T%x%u%f",
128 FL_POPUP_NORMAL_SELECT, m, pol_cb );
129 fl_popup_add_entries( sm4, "FL_POPUP_DRAG_SELECT%t%x%u%f",
130 FL_POPUP_DRAG_SELECT, m, pol_cb );
131
132 fl_popup_add_entries( sm3, "None%x%R%u%f",
133 0, 1, m, mod_cb );
134 fl_popup_add_entries( sm3, "FL_SHADOW_STYLE%x%r%u%f",
135 FL_SHADOW_STYLE, 1, m, mod_cb );
136 fl_popup_add_entries( sm3, "FL_ENGRAVED_STYLE%x%r%u%f",
137 FL_ENGRAVED_STYLE, 1, m, mod_cb );
138 fl_popup_add_entries( sm3, "FL_EMBOSSED_STYLE%x%r%u%f",
139 FL_EMBOSSED_STYLE, 1, m, mod_cb );
140
141 fl_popup_add_entries( sm1, "FL_NORMAL_STYLE%Sn%x%R%u%f%s",
142 FL_NORMAL_STYLE, 1, m, style_cb, "n" );
143 fl_popup_add_entries( sm1, "FL_BOLD_STYLE%Sb%x%r%u%f%s",
144 FL_BOLD_STYLE, 1, m, style_cb, "b" );
145 fl_popup_add_entries( sm1, "FL_ITALIC_STYLE%Si%x%r%u%f%s",
146 FL_ITALIC_STYLE, 1, m, style_cb, "i" );
147 fl_popup_add_entries( sm1, "FL_BOLDITALIC_STYLE%SI%x%r%u%f%s",
148 FL_BOLDITALIC_STYLE, 1, m, style_cb, "I" );
149 fl_popup_add_entries( sm1, "%l|Font modifier%SCtrl-M%m%s", sm3, "^m" );
150
151 fl_popup_add_entries( sm2, "FL_TINY_SIZE%x%r%u%f",
152 FL_TINY_SIZE, 1, m, size_cb );
153 fl_popup_add_entries( sm2, "FL_SMALL_SIZE%x%r%u%f",
154 FL_SMALL_SIZE, 1, m, size_cb );
155 fl_popup_add_entries( sm2, "FL_NORMAL_SIZE%x%R%u%f",
156 FL_NORMAL_SIZE, 1, m, size_cb );
157 fl_popup_add_entries( sm2, "FL_MEDIUM_SIZE%x%r%u%f",
158 FL_MEDIUM_SIZE, 1, m, size_cb );
159 fl_popup_add_entries( sm2, "FL_LARGE_SIZE%x%r%u%f",
160 FL_LARGE_SIZE, 1, m, size_cb );
161 fl_popup_add_entries( sm2, "FL_HUGE_SIZE%x%r%u%f",
162 FL_HUGE_SIZE, 1, m, size_cb );
163
164 fl_popup_add_entries( m, "Font style%m", sm1 );
165 fl_popup_add_entries( m, "Font size%m", sm2 );
166 fl_popup_add_entries( m, "Policy%m", sm4 );
167
168 fl_popup_set_min_width( m, 100 );
169 }
170
171 if ( fl_get_button_numb( obj ) >= FL_SHORTCUT )
172 fl_popup_set_position( m, obj->form->x + obj->x,
173 obj->form->y + obj->y + obj->h );
174
175 fl_popup_do( m );
176 }
177
178
179 /***************************************
180 ***************************************/
181
182 int
main(int argc,char * argv[])183 main( int argc,
184 char * argv[ ] )
185 {
186 FL_FORM *form;
187 FL_OBJECT *obj;
188
189 fl_initialize( &argc, argv, "FormDemo", 0, 0 );
190
191 form = fl_bgn_form( FL_UP_BOX, 260, 210 );
192
193 fl_add_box( FL_UP_BOX, 0, 0, 260, 210, "" );
194
195 obj = fl_add_button( FL_NORMAL_BUTTON, 150, 150, 90, 35, "Done" );
196 fl_set_object_callback( obj, done_cb, 0 );
197
198 obj = fl_add_button( FL_MENU_BUTTON, 30, 90, 100, 30, "Popup" );
199 fl_set_button_shortcut( obj, "Pp#p", 1 );
200 fl_set_object_callback( obj, do_pup, 0 );
201
202 fl_end_form( );
203
204 /* initialize */
205
206 fl_show_form( form, FL_PLACE_MOUSE, FL_TRANSIENT, "New Popup Demo" );
207
208 fl_do_forms( );
209
210 return 0;
211 }
212
213
214 /*
215 * Local variables:
216 * tab-width: 4
217 * indent-tabs-mode: nil
218 * End:
219 */
220