1 /********************************************************************************
2 *                                                                               *
3 *                                 Test Group Box                                *
4 *                                                                               *
5 *********************************************************************************
6 * Copyright (C) 1997,2006 by Jeroen van der Zijp.   All Rights Reserved.        *
7 *********************************************************************************
8 * $Id: groupbox.cpp,v 1.115.2.1 2008/04/29 17:18:23 fox Exp $                       *
9 ********************************************************************************/
10 #include "fx.h"
11 #include <stdio.h>
12 #include <stdlib.h>
13 #include <string.h>
14 
15 
16 #include "xincs.h"
17 
18 /*******************************************************************************/
19 
20 
21 // Mini application object
22 class GroupWindow : public FXMainWindow {
23   FXDECLARE(GroupWindow)
24 protected:
25 
26   // Member data
27   FXToolTip*         tooltip;
28   FXMenuBar*         menubar;
29   FXMenuPane*        filemenu;
30   FXMenuPane*        popupmenu;
31   FXMenuPane*        helpmenu;
32   FXMenuPane*        editmenu;
33   FXMenuPane*        submenu1;
34   FXScrollPane*      scrollpane;
35   FXPopup*           pop;
36   FXPopup*           coolpop;
37   FXHorizontalFrame* contents;
38   FXPacker*          group1;
39   FXGroupBox*        group2;
40   FXGroupBox*        group3;
41   FXIcon            *doc;
42   FXIcon            *folder_open;
43   FXIcon            *folder_closed;
44   FXFont            *bigfont;
45   FXDataTarget       radiotarget;
46   FXuint             choice;
47 
48 protected:
GroupWindow()49   GroupWindow(){}
50 
51 public:
52 
53   // Message handlers
54   long onCmdFileDlgAny(FXObject*,FXSelector,void*);
55   long onCmdFileDlgExisting(FXObject*,FXSelector,void*);
56   long onCmdFileDlgMultiple(FXObject*,FXSelector,void*);
57   long onCmdFileDlgDirectory(FXObject*,FXSelector,void*);
58   long onCmdFileDlgMultipleAll(FXObject*,FXSelector,void*);
59   long onCmdDirDlg(FXObject*,FXSelector,void*);
60   long onCmdDownSize(FXObject*,FXSelector,void*);
61   long onCmdDelete(FXObject*,FXSelector,void*);
62   long onCmdAbout(FXObject*,FXSelector,void*);
63   long onCmdRadio(FXObject*,FXSelector,void*);
64   long onCmdPopup(FXObject*,FXSelector,void*);
65   long onUpdRadio(FXObject*,FXSelector,void*);
66   long onCmdOption(FXObject*,FXSelector,void*);
67   long onCmdIconify(FXObject*,FXSelector,void*);
68   long onCmdDeiconify(FXObject*,FXSelector,void*);
69   long onCmdChoice(FXObject*,FXSelector,void*);
70 
71 public:
72 
73   // Messages
74   enum {
75     ID_DOWNSIZE=FXMainWindow::ID_LAST,
76     ID_POPUP,
77     ID_ABOUT,
78     ID_ICONIFY,
79     ID_DEICONIFY,
80     ID_DELETE,
81     ID_FILEDLG_ANY,
82     ID_FILEDLG_EXISTING,
83     ID_FILEDLG_MULTIPLE,
84     ID_FILEDLG_DIRECTORY,
85     ID_FILEDLG_MULTIPLE_ALL,
86     ID_DIRDLG,
87     ID_OPTION1,
88     ID_OPTION2,
89     ID_OPTION3,
90     ID_OPTION4,
91     ID_RADIO1,
92     ID_RADIO2,
93     ID_RADIO3,
94     ID_CHOICE
95     };
96 
97 public:
98   GroupWindow(FXApp* a);
99   virtual void create();
100   virtual ~GroupWindow();
101   };
102 
103 
104 
105 /*******************************************************************************/
106 
107 // Map
108 FXDEFMAP(GroupWindow) GroupWindowMap[]={
109 
110   //__Message_Type__________ID___________________________________________________Message_Handler_____
111   FXMAPFUNC(SEL_COMMAND,  GroupWindow::ID_DOWNSIZE,                          GroupWindow::onCmdDownSize),
112   FXMAPFUNC(SEL_COMMAND,  GroupWindow::ID_DELETE,                            GroupWindow::onCmdDelete),
113   FXMAPFUNCS(SEL_COMMAND, GroupWindow::ID_RADIO1,GroupWindow::ID_RADIO3,     GroupWindow::onCmdRadio),
114   FXMAPFUNCS(SEL_UPDATE,  GroupWindow::ID_RADIO1,GroupWindow::ID_RADIO3,     GroupWindow::onUpdRadio),
115   FXMAPFUNC(SEL_COMMAND,  GroupWindow::ID_POPUP,                             GroupWindow::onCmdPopup),
116   FXMAPFUNC(SEL_COMMAND,  GroupWindow::ID_ABOUT,                             GroupWindow::onCmdAbout),
117   FXMAPFUNC(SEL_COMMAND,  GroupWindow::ID_FILEDLG_ANY,                       GroupWindow::onCmdFileDlgAny),
118   FXMAPFUNC(SEL_COMMAND,  GroupWindow::ID_FILEDLG_EXISTING,                  GroupWindow::onCmdFileDlgExisting),
119   FXMAPFUNC(SEL_COMMAND,  GroupWindow::ID_FILEDLG_MULTIPLE,                  GroupWindow::onCmdFileDlgMultiple),
120   FXMAPFUNC(SEL_COMMAND,  GroupWindow::ID_FILEDLG_MULTIPLE_ALL,              GroupWindow::onCmdFileDlgMultipleAll),
121   FXMAPFUNC(SEL_COMMAND,  GroupWindow::ID_FILEDLG_DIRECTORY,                 GroupWindow::onCmdFileDlgDirectory),
122   FXMAPFUNC(SEL_COMMAND,  GroupWindow::ID_DIRDLG,                            GroupWindow::onCmdDirDlg),
123   FXMAPFUNC(SEL_COMMAND,  GroupWindow::ID_ICONIFY,                           GroupWindow::onCmdIconify),
124   FXMAPFUNC(SEL_TIMEOUT,  GroupWindow::ID_DEICONIFY,                         GroupWindow::onCmdDeiconify),
125   FXMAPFUNCS(SEL_COMMAND, GroupWindow::ID_OPTION1,GroupWindow::ID_OPTION4,   GroupWindow::onCmdOption),
126   FXMAPFUNC(SEL_COMMAND,  GroupWindow::ID_CHOICE,                            GroupWindow::onCmdChoice),
127   };
128 
129 
130 // Object implementation
131 FXIMPLEMENT(GroupWindow,FXMainWindow,GroupWindowMap,ARRAYNUMBER(GroupWindowMap))
132 
133 
134 
135 /*******************************************************************************/
136 
137 
138 const unsigned char minidoc1[]={
139   0x47,0x49,0x46,0x38,0x37,0x61,0x10,0x00,0x10,0x00,0xf1,0x00,0x00,0xbf,0xbf,0xbf,
140   0x00,0x00,0x00,0xff,0xff,0xff,0x7f,0x7f,0x7f,0x2c,0x00,0x00,0x00,0x00,0x10,0x00,
141   0x10,0x00,0x00,0x02,0x39,0x84,0x8f,0x89,0xc1,0x1d,0x7a,0x82,0x98,0x93,0x41,0x20,
142   0x87,0x16,0xf2,0x29,0x49,0x71,0xcd,0x27,0x68,0x9b,0x16,0x0c,0x09,0x18,0x56,0xea,
143   0x52,0x9a,0x5b,0xba,0xb6,0x14,0x0d,0xcb,0xf3,0x1b,0xd9,0x6e,0xad,0x1b,0x70,0x78,
144   0x06,0x56,0x0b,0x17,0x71,0x28,0x89,0x86,0xa0,0xec,0x02,0x05,0x14,0x00,0x00,0x3b
145   };
146 
147 const unsigned char minifolderopen[]={
148   0x47,0x49,0x46,0x38,0x37,0x61,0x10,0x00,0x10,0x00,0xf2,0x00,0x00,0xb2,0xc0,0xdc,
149   0x00,0x00,0x00,0x7f,0x7f,0x7f,0xff,0xff,0xff,0xd9,0xd9,0xd9,0xff,0xff,0x00,0x00,
150   0x00,0x00,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x00,0x03,
151   0x42,0x08,0xba,0xdc,0x2c,0x10,0xba,0x37,0x6a,0x15,0x13,0x88,0x41,0x4a,0x27,0x43,
152   0x14,0x29,0x9b,0x67,0x82,0x56,0x18,0x68,0xdc,0xe9,0x12,0x42,0x20,0xce,0x62,0x11,
153   0x6f,0x69,0x1e,0xc3,0x72,0xfb,0xb9,0xb2,0x18,0xeb,0x47,0xbc,0xad,0x4a,0xc4,0x93,
154   0x6c,0xc5,0x7a,0x99,0x62,0x4c,0x1a,0x2d,0xc0,0x04,0x50,0xaf,0x58,0x6c,0x66,0xcb,
155   0x6d,0x24,0x00,0x00,0x3b
156   };
157 
158 /* Generated by reswrap from file minifolderclosed.gif */
159 const unsigned char minifolderclosed[]={
160   0x47,0x49,0x46,0x38,0x37,0x61,0x10,0x00,0x10,0x00,0xf2,0x00,0x00,0xb2,0xc0,0xdc,
161   0x80,0x80,0x80,0xc0,0xc0,0xc0,0xff,0xff,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0x00,
162   0x00,0x00,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x00,0x03,
163   0x3b,0x08,0xba,0xdc,0x1b,0x10,0x3a,0x16,0xc4,0xb0,0x22,0x4c,0x50,0xaf,0xcf,0x91,
164   0xc4,0x15,0x64,0x69,0x92,0x01,0x31,0x7e,0xac,0x95,0x8e,0x58,0x7b,0xbd,0x41,0x21,
165   0xc7,0x74,0x11,0xef,0xb3,0x5a,0xdf,0x9e,0x1c,0x6f,0x97,0x03,0xba,0x7c,0xa1,0x64,
166   0x48,0x05,0x20,0x38,0x9f,0x50,0xe8,0x66,0x4a,0x75,0x24,0x00,0x00,0x3b
167   };
168 
169 
170 // Make some windows
GroupWindow(FXApp * a)171 GroupWindow::GroupWindow(FXApp* a):FXMainWindow(a,"Group Box Test",NULL,NULL,DECOR_ALL,0,0,0,0),radiotarget(choice){
172 
173   tooltip=new FXToolTip(getApp(),0,100,100);
174 
175   doc=new FXGIFIcon(getApp(),minidoc1);
176   folder_open=new FXGIFIcon(getApp(),minifolderopen);
177   folder_closed=new FXGIFIcon(getApp(),minifolderclosed);
178 
179   bigfont=new FXFont(getApp(),"helvetica,240,bold,italic");
180 
181   // Menubar
182   menubar=new FXMenuBar(this,LAYOUT_SIDE_TOP|LAYOUT_FILL_X);
183   filemenu=new FXMenuPane(this);
184     new FXMenuCommand(filemenu,"Open any",folder_open,this,ID_FILEDLG_ANY);
185     new FXMenuCommand(filemenu,"Open existing",folder_open,this,ID_FILEDLG_EXISTING);
186     new FXMenuCommand(filemenu,"Open multiple",folder_open,this,ID_FILEDLG_MULTIPLE);
187     new FXMenuCommand(filemenu,"Open multiple all",folder_open,this,ID_FILEDLG_MULTIPLE_ALL);
188     new FXMenuCommand(filemenu,"Open directory",folder_open,this,ID_FILEDLG_DIRECTORY);
189     new FXMenuCommand(filemenu,"Open directory dialog",folder_open,this,ID_DIRDLG);
190     new FXMenuCommand(filemenu,"Open choice dialog",NULL,this,ID_CHOICE);
191     new FXMenuRadio(filemenu,"Radio&1",&radiotarget,FXDataTarget::ID_OPTION+1);
192     new FXMenuRadio(filemenu,"Radio&2",&radiotarget,FXDataTarget::ID_OPTION+2);
193     new FXMenuRadio(filemenu,"Radio&3",&radiotarget,FXDataTarget::ID_OPTION+3);
194 
195     new FXMenuCommand(filemenu,"Delete\tCtl-X",NULL,this,ID_DELETE,0);
196     new FXMenuCommand(filemenu,"Downsize\tF5\tResize to minimum",NULL,this,ID_DOWNSIZE,0);
197     new FXMenuCommand(filemenu,"&Size",NULL,this,ID_DOWNSIZE,0);
198     new FXMenuCommand(filemenu,"Maximize",NULL,this,ID_MAXIMIZE,0);     // TEST
199     new FXMenuCommand(filemenu,"Minimize",NULL,this,ID_ICONIFY,0);     // TEST
200     new FXMenuCommand(filemenu,"Restore",NULL,this,ID_RESTORE,0);       // TEST
201     new FXMenuCommand(filemenu,"Dump Widgets",NULL,getApp(),FXApp::ID_DUMP);
202 
203     // Make edit popup menu
204     editmenu=new FXMenuPane(this);
205       new FXMenuCommand(editmenu,"Undo");
206       new FXMenuCommand(editmenu,"Cut");
207         submenu1=new FXMenuPane(this);
208           new FXMenuCommand(submenu1,"&One");
209           new FXMenuCommand(submenu1,"&Two");
210           new FXMenuCommand(submenu1,"Th&ree");
211           new FXMenuCommand(submenu1,"&Four");
212       new FXMenuCascade(editmenu,"&Submenu1",NULL,submenu1);
213     new FXMenuCascade(filemenu,"&Edit",NULL,editmenu);
214     new FXMenuCommand(filemenu,"&Quit\tCtl-Q",NULL,getApp(),FXApp::ID_QUIT,0);
215   new FXMenuTitle(menubar,"&File",NULL,filemenu);
216 
217 
218   helpmenu=new FXMenuPane(this);
219     new FXMenuCommand(helpmenu,"&About FOX...",NULL,this,ID_ABOUT,0);
220   new FXMenuTitle(menubar,"&Help",NULL,helpmenu,LAYOUT_RIGHT);
221 
222   popupmenu=new FXMenuPane(this);
223     FXTextField* poptext=new FXTextField(popupmenu,10,NULL,0,FRAME_SUNKEN|FRAME_THICK|LAYOUT_SIDE_TOP,0,0,0,0);
224     poptext->setText("Popup with text");
225 
226   scrollpane=new FXScrollPane(this,10,PACK_UNIFORM_HEIGHT);
227   new FXMenuCommand(scrollpane,"One");
228   new FXMenuCommand(scrollpane,"Two");
229   new FXMenuCommand(scrollpane,"Three");
230   new FXMenuCommand(scrollpane,"Four");
231   new FXMenuCommand(scrollpane,"Five");
232   new FXMenuCommand(scrollpane,"Six");
233   new FXMenuCommand(scrollpane,"Seven");
234   new FXMenuCommand(scrollpane,"Eight");
235   new FXMenuCommand(scrollpane,"Nine");
236   new FXMenuCommand(scrollpane,"Ten");
237   new FXMenuCommand(scrollpane,"Eleven");
238   new FXMenuCommand(scrollpane,"Twelve");
239   new FXMenuCommand(scrollpane,"Thirteen");
240   new FXMenuCommand(scrollpane,"Fourteen");
241   new FXMenuCommand(scrollpane,"Fifteen");
242   new FXMenuCommand(scrollpane,"Sixteen");
243   new FXMenuCommand(scrollpane,"Seventeen");
244   new FXMenuCommand(scrollpane,"Eighteen");
245   new FXMenuCommand(scrollpane,"Nineteen");
246   new FXMenuCommand(scrollpane,"Twenty");
247   new FXMenuTitle(menubar,"&Scroll",NULL,scrollpane);
248 
249   // Status bar
250   FXStatusBar *status=new FXStatusBar(this,LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X|STATUSBAR_WITH_DRAGCORNER);
251 
252   new FXLabel(status,"10:15 PM",NULL,LAYOUT_FILL_Y|LAYOUT_RIGHT|FRAME_SUNKEN);
253 
254   // Content
255   contents=new FXHorizontalFrame(this,LAYOUT_SIDE_TOP|FRAME_NONE|LAYOUT_FILL_X|LAYOUT_FILL_Y);
256 
257   group1=new FXGroupBox(contents,"Title Left",GROUPBOX_TITLE_LEFT|FRAME_RIDGE|LAYOUT_FILL_X|LAYOUT_FILL_Y);
258   group2=new FXGroupBox(contents,"Slider Tests",GROUPBOX_TITLE_CENTER|FRAME_RIDGE|LAYOUT_FILL_X|LAYOUT_FILL_Y);
259   group3=new FXGroupBox(contents,"Title Right",GROUPBOX_TITLE_RIGHT|FRAME_RIDGE|LAYOUT_FILL_X|LAYOUT_FILL_Y);
260 
261   FXLabel *testlabel=new FXLabel(group1,"Big Font",NULL,LAYOUT_CENTER_X|JUSTIFY_CENTER_X);
262   testlabel->setFont(bigfont);
263 
264   new FXButton(group1,"Small &Button",NULL,NULL,0,FRAME_RAISED|FRAME_THICK);
265   new FXButton(group1,"Big Fat Wide Button\nComprising\nthree lines",NULL,NULL,0,FRAME_RAISED|FRAME_THICK);
266   new FXToggleButton(group1,"C&losed\tTooltip for closed\tHelp for closed","O&pen\nState\tTooltip for open\tHelp for open",folder_closed,folder_open,NULL,0,ICON_BEFORE_TEXT|JUSTIFY_LEFT|FRAME_RAISED|FRAME_THICK);
267   FXTriStateButton *tsb=new FXTriStateButton(group1,"False","True","Maybe",folder_closed,folder_open,doc,NULL,0,ICON_BEFORE_TEXT|JUSTIFY_LEFT|FRAME_RAISED|FRAME_THICK);
268   tsb->setState(MAYBE);
269 
270   pop=new FXPopup(this);
271 
272   new FXOption(pop,"&First\tTip #1\tHelp first",NULL,this,ID_OPTION1,JUSTIFY_HZ_APART|ICON_AFTER_TEXT);
273   new FXOption(pop,"&Second\tTip #2\tHelp second",NULL,this,ID_OPTION2,JUSTIFY_HZ_APART|ICON_AFTER_TEXT);
274   new FXOption(pop,"Th&ird\tTip #3\tHelp third",NULL,this,ID_OPTION3,JUSTIFY_HZ_APART|ICON_AFTER_TEXT);
275   new FXOption(pop,"F&ourth\tTip #4\tHelp fourth",NULL,this,ID_OPTION4,JUSTIFY_HZ_APART|ICON_AFTER_TEXT);
276 
277   new FXOptionMenu(group1,pop,LAYOUT_TOP|FRAME_RAISED|FRAME_THICK|JUSTIFY_HZ_APART|ICON_AFTER_TEXT);
278 
279   new FXLabel(group1,"Te&kstje",NULL,LAYOUT_TOP|JUSTIFY_LEFT);
280   new FXButton(group1,"Add an `&&' by doubling\tTooltip\tHelp text for status",NULL,NULL,0,LAYOUT_TOP|FRAME_RAISED|FRAME_THICK);
281   new FXButton(group1,"Te&kstje",NULL,this,ID_POPUP,LAYOUT_TOP|FRAME_RAISED|FRAME_THICK);
282 
283   new FXMenuButton(group1,"&Menu",NULL,filemenu,MENUBUTTON_ATTACH_BOTH|MENUBUTTON_DOWN|JUSTIFY_HZ_APART|LAYOUT_TOP|FRAME_RAISED|FRAME_THICK|ICON_AFTER_TEXT);
284   new FXMenuButton(group1,"&Menu",NULL,filemenu,MENUBUTTON_UP|LAYOUT_TOP|FRAME_RAISED|FRAME_THICK|ICON_AFTER_TEXT);
285 
286   coolpop=new FXPopup(this,POPUP_HORIZONTAL);
287   new FXButton(coolpop,"A\tTipA",NULL,NULL,0,FRAME_THICK|FRAME_RAISED|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT,0,0,30,30);
288   new FXButton(coolpop,"B\tTipB",NULL,NULL,0,FRAME_THICK|FRAME_RAISED|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT,0,0,30,30);
289   new FXButton(coolpop,"C\tTipC",NULL,NULL,0,FRAME_THICK|FRAME_RAISED|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT,0,0,30,30);
290   new FXButton(coolpop,"D\tTipD",NULL,NULL,0,FRAME_THICK|FRAME_RAISED|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT,0,0,30,30);
291   new FXMenuButton(group1,"&S\tSideways",NULL,coolpop,MENUBUTTON_ATTACH_BOTH|MENUBUTTON_LEFT|MENUBUTTON_NOARROWS|LAYOUT_TOP|FRAME_RAISED|FRAME_THICK|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT,0,0,30,30);
292 
293   FXMatrix* matrix=new FXMatrix(group1,3,FRAME_RAISED|LAYOUT_TOP|LAYOUT_FILL_X|LAYOUT_FILL_Y);
294 
295   new FXButton(matrix,"A",NULL,NULL,0,FRAME_RAISED|FRAME_THICK|LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_FILL_ROW);
296   new FXButton(matrix,"&Wide button",NULL,NULL,0,FRAME_RAISED|FRAME_THICK|LAYOUT_FILL_X);
297   new FXButton(matrix,"A",NULL,NULL,0,FRAME_RAISED|FRAME_THICK|LAYOUT_FILL_X);
298 
299   new FXButton(matrix,"BBBB",NULL,NULL,0,FRAME_RAISED|FRAME_THICK|LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_FILL_ROW|LAYOUT_FILL_COLUMN);
300   new FXButton(matrix,"B",NULL,NULL,0,FRAME_RAISED|FRAME_THICK|LAYOUT_FILL_X|LAYOUT_FILL_COLUMN);
301   new FXButton(matrix,"BB",NULL,NULL,0,FRAME_RAISED|FRAME_THICK|LAYOUT_FILL_X|LAYOUT_FILL_COLUMN);
302 
303   new FXButton(matrix,"C",NULL,NULL,0,FRAME_RAISED|FRAME_THICK|LAYOUT_CENTER_Y|LAYOUT_CENTER_X|LAYOUT_FILL_ROW);
304   new FXButton(matrix,"&wide",NULL,NULL,0,FRAME_RAISED|FRAME_THICK);
305   new FXButton(matrix,"CC",NULL,NULL,0,FRAME_RAISED|FRAME_THICK|LAYOUT_RIGHT);
306 
307   FXSlider *slider;
308   new FXLabel(group2,"No Arrow");
309   slider=new FXSlider(group2,NULL,0,LAYOUT_TOP|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT|SLIDER_HORIZONTAL,0,0,200,30);
310 
311   new FXLabel(group2,"Up Arrow");
312   slider=new FXSlider(group2,NULL,0,LAYOUT_TOP|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT|SLIDER_HORIZONTAL|SLIDER_ARROW_UP|SLIDER_TICKS_TOP,0,0,200,30);
313   slider->setRange(0,10);
314 
315   new FXLabel(group2,"Down Arrow");
316   slider=new FXSlider(group2,NULL,0,LAYOUT_TOP|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT|SLIDER_HORIZONTAL|SLIDER_ARROW_DOWN|SLIDER_TICKS_BOTTOM,0,0,200,30);
317   slider->setRange(0,10);
318 
319   new FXLabel(group2,"Inside Bar");
320   slider=new FXSlider(group2,NULL,0,LAYOUT_TOP|LAYOUT_FILL_X|LAYOUT_FIX_HEIGHT|SLIDER_HORIZONTAL|SLIDER_INSIDE_BAR|SLIDER_TICKS_BOTTOM,0,0,200,20);
321   slider->setRange(0,3);
322 
323   FXHorizontalFrame *frame=new FXHorizontalFrame(group2,LAYOUT_FILL_X|LAYOUT_FILL_Y);
324 
325 
326   slider=new FXSlider(frame,NULL,0,LAYOUT_FIX_HEIGHT|SLIDER_VERTICAL|SLIDER_TICKS_LEFT|SLIDER_TICKS_RIGHT,0,0,30,200);
327   slider->setRange(0,10);
328   slider=new FXSlider(frame,NULL,0,LAYOUT_FIX_HEIGHT|SLIDER_VERTICAL|SLIDER_ARROW_RIGHT|SLIDER_TICKS_RIGHT,0,0,30,200);
329   slider->setRange(0,10);
330   slider=new FXSlider(frame,NULL,0,LAYOUT_FIX_HEIGHT|SLIDER_VERTICAL|SLIDER_ARROW_LEFT|SLIDER_TICKS_LEFT,0,0,30,200);
331   slider->setRange(0,10);
332   slider=new FXSlider(frame,NULL,0,LAYOUT_FIX_HEIGHT|SLIDER_VERTICAL|SLIDER_INSIDE_BAR|SLIDER_TICKS_LEFT,0,0,20,200);
333   slider->setRange(0,7);
334   slider->setTickDelta(7);
335   new FXScrollBar(frame,NULL,0,SCROLLBAR_VERTICAL|LAYOUT_FIX_HEIGHT|LAYOUT_FIX_WIDTH,0,0,20,300);
336 
337   FXVerticalFrame *vframe1=new FXVerticalFrame(frame,LAYOUT_FILL_X|LAYOUT_FILL_Y);
338   new FXArrowButton(vframe1,NULL,0,LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_RAISED|FRAME_THICK|ARROW_UP);
339   new FXArrowButton(vframe1,NULL,0,LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_RAISED|FRAME_THICK|ARROW_DOWN);
340   new FXArrowButton(vframe1,NULL,0,LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_RAISED|FRAME_THICK|ARROW_LEFT);
341   new FXArrowButton(vframe1,NULL,0,LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_RAISED|FRAME_THICK|ARROW_RIGHT);
342   FXVerticalFrame *vframe2=new FXVerticalFrame(frame,LAYOUT_FILL_X|LAYOUT_FILL_Y);
343   new FXArrowButton(vframe2,NULL,0,LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_RAISED|FRAME_THICK|ARROW_UP|ARROW_TOOLBAR);
344   new FXArrowButton(vframe2,NULL,0,LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_RAISED|FRAME_THICK|ARROW_DOWN|ARROW_TOOLBAR);
345   new FXArrowButton(vframe2,NULL,0,LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_RAISED|FRAME_THICK|ARROW_LEFT|ARROW_TOOLBAR);
346   new FXArrowButton(vframe2,NULL,0,LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_RAISED|FRAME_THICK|ARROW_RIGHT|ARROW_TOOLBAR);
347 
348   FXGroupBox *gp=new FXGroupBox(group3,"Group Box",LAYOUT_SIDE_TOP|FRAME_GROOVE|LAYOUT_FILL_X, 0,0,0,0);
349   new FXRadioButton(gp,"Radio &1",&radiotarget,FXDataTarget::ID_OPTION+1,ICON_BEFORE_TEXT|LAYOUT_SIDE_TOP);
350   new FXRadioButton(gp,"Radio &2",&radiotarget,FXDataTarget::ID_OPTION+2,ICON_BEFORE_TEXT|LAYOUT_SIDE_TOP);
351   new FXRadioButton(gp,"Radio &3",&radiotarget,FXDataTarget::ID_OPTION+3,ICON_BEFORE_TEXT|LAYOUT_SIDE_TOP);
352 
353   FXPacker *vv=new FXGroupBox(group3,"Group Box",LAYOUT_SIDE_TOP|FRAME_GROOVE|LAYOUT_FILL_X, 0,0,0,0);
354   new FXCheckButton(vv,"Hilversum 1",NULL,0,ICON_BEFORE_TEXT|LAYOUT_SIDE_TOP);
355   new FXCheckButton(vv,"Hilversum 2",NULL,0,ICON_BEFORE_TEXT|LAYOUT_SIDE_TOP);
356   FXCheckButton *chk1=new FXCheckButton(vv,"One multi-line\nCheckbox Widget",NULL,0,CHECKBUTTON_PLUS|JUSTIFY_LEFT|JUSTIFY_TOP|ICON_BEFORE_TEXT|LAYOUT_SIDE_TOP);
357   chk1->setCheck(MAYBE);
358   FXCheckButton *chk2=new FXCheckButton(vv,fromAscii("Ouvres votre fen\\u00EAtre"),NULL,0,ICON_BEFORE_TEXT|LAYOUT_SIDE_TOP);
359   chk2->setCheck(MAYBE);
360 
361   FXSpinner *spinner=new FXSpinner(group3,20,NULL,0,SPIN_NORMAL|FRAME_SUNKEN|FRAME_THICK|LAYOUT_SIDE_TOP);
362   spinner->setRange(1,20);
363   spinner->setTipText("tip");
364   spinner->setHelpText("help");
365 
366   FXRealSpinner *realspinner=new FXRealSpinner(group3,20,NULL,0,REALSPIN_CYCLIC|FRAME_SUNKEN|FRAME_THICK|LAYOUT_SIDE_TOP);
367   realspinner->setRange(1.0,2.0);
368   realspinner->setValue(1.0);
369   realspinner->setIncrement(0.1);
370 
371   FXComboBox* combobox=new FXComboBox(group3,5,NULL,0,COMBOBOX_INSERT_LAST|FRAME_SUNKEN|FRAME_THICK|LAYOUT_SIDE_TOP);
372   combobox->setNumVisible(5);
373   combobox->appendItem("Very Wide Item");
374   for(int i=0; i<3; i++){
375     char name[50];
376     sprintf(name,"%04d",i);
377     combobox->appendItem(name);
378     }
379 
380   FXTreeListBox *treebox=new FXTreeListBox(group3,NULL,0,FRAME_SUNKEN|FRAME_THICK|LAYOUT_SIDE_TOP,0,0,200,0);
381   FXTreeItem *branch,*twig,*leaf,*topmost,*topmost2;
382 
383   treebox->setNumVisible(10);
384   topmost=treebox->appendItem(NULL,"Top",folder_open,folder_closed);
385   topmost2=treebox->appendItem(NULL,"Top2",folder_open,folder_closed);
386            treebox->appendItem(topmost2,"First",doc,doc);
387 
388   treebox->appendItem(topmost,"First",doc,doc);
389   treebox->appendItem(topmost,"Second",doc,doc);
390   treebox->appendItem(topmost,"Third",doc,doc);
391   branch=treebox->appendItem(topmost,"Fourth",folder_open,folder_closed);
392     treebox->appendItem(branch,"Fourth-First",doc,doc);
393     treebox->appendItem(branch,"Fourth-Second",doc,doc);
394     twig=treebox->appendItem(branch,"Fourth-Third",folder_open,folder_closed);
395       treebox->appendItem(twig,"Fourth-Third-First",doc,doc);
396       treebox->appendItem(twig,"Fourth-Third-Second",doc,doc);
397       treebox->appendItem(twig,"Fourth-Third-Third",doc,doc);
398       leaf=treebox->appendItem(twig,"Fourth-Third-Fourth",folder_open,folder_closed);
399         treebox->appendItem(leaf,"Fourth-Third-Fourth-First",doc,doc);
400         treebox->appendItem(leaf,"Fourth-Third-Fourth-Second",doc,doc);
401         treebox->appendItem(leaf,"Fourth-Third-Fourth-Third",doc,doc);
402     twig=treebox->appendItem(branch,"Fourth-Fourth",folder_open,folder_closed);
403       treebox->appendItem(twig,"Fourth-Fourth-First",doc,doc);
404       treebox->appendItem(twig,"Fourth-Fourth-Second",doc,doc);
405       treebox->appendItem(twig,"Fourth-Fourth-Third",doc,doc);
406 
407   new FXLabel(group3,"H&it the hotkey",NULL,LAYOUT_CENTER_X|JUSTIFY_CENTER_X|FRAME_RAISED);
408   FXTextField* textfield0=new FXTextField(group3,20,NULL,0,FRAME_SUNKEN|FRAME_THICK|LAYOUT_SIDE_TOP|LAYOUT_FILL_X);
409   textfield0->setText("Normal Text Field");
410   FXTextField* textfield1=new FXTextField(group3,20,NULL,0,JUSTIFY_RIGHT|FRAME_SUNKEN|FRAME_THICK|LAYOUT_SIDE_TOP|LAYOUT_FILL_X);
411   textfield1->setText("Reverse Text Field");
412   FXTextField* textfield5=new FXTextField(group3,20,NULL,0,FRAME_SUNKEN|FRAME_THICK|LAYOUT_SIDE_TOP|LAYOUT_FILL_X);
413   textfield5->setText("Centered Text Field");
414   textfield5->setJustify(JUSTIFY_CENTER_X);
415   FXTextField* textfield2=new FXTextField(group3,20,NULL,0,JUSTIFY_RIGHT|TEXTFIELD_PASSWD|FRAME_SUNKEN|FRAME_THICK|LAYOUT_SIDE_TOP|LAYOUT_FILL_X);
416   textfield2->setText("Password");
417   FXTextField* textfield3=new FXTextField(group3,20,NULL,0,TEXTFIELD_READONLY|FRAME_SUNKEN|FRAME_THICK|LAYOUT_SIDE_TOP|LAYOUT_FILL_X);
418   textfield3->setText("Read Only");
419   FXTextField* textfield4=new FXTextField(group3,20,NULL,0,TEXTFIELD_READONLY|FRAME_SUNKEN|FRAME_THICK|LAYOUT_SIDE_TOP|LAYOUT_FILL_X);
420   textfield4->setText("Grayed out");
421   textfield4->disable();
422 
423   FXTextField* realnumber=new FXTextField(group3,20,NULL,0,TEXTFIELD_REAL|FRAME_SUNKEN|FRAME_THICK|LAYOUT_SIDE_TOP|LAYOUT_FIX_HEIGHT,0,0,0,30);
424   realnumber->setText("1.0E+3");
425   FXTextField* intnumber=new FXTextField(group3,20,NULL,0,TEXTFIELD_INTEGER|FRAME_SUNKEN|FRAME_THICK|LAYOUT_SIDE_TOP|LAYOUT_FIX_HEIGHT,0,0,0,30);
426   intnumber->setText("1000");
427 
428   FXDial *dial2=new FXDial(group3,NULL,0,DIAL_CYCLIC|DIAL_HAS_NOTCH|DIAL_HORIZONTAL|LAYOUT_FILL_X|FRAME_RAISED|FRAME_THICK,0,0,120,0);
429   new FXScrollBar(group3,NULL,0,SCROLLBAR_HORIZONTAL|LAYOUT_FIX_HEIGHT|LAYOUT_FIX_WIDTH,0,0,300,20);
430 
431   FXProgressBar *pbar=new FXProgressBar(group3,NULL,0,LAYOUT_FILL_X|FRAME_SUNKEN|FRAME_THICK|PROGRESSBAR_PERCENTAGE);
432   pbar->setProgress(48);
433   pbar->setTotal(360);
434   FXProgressBar *pbar2=new FXProgressBar(group3,NULL,0,LAYOUT_FILL_Y|FRAME_SUNKEN|FRAME_THICK|PROGRESSBAR_VERTICAL|PROGRESSBAR_PERCENTAGE|LAYOUT_SIDE_LEFT);
435   pbar2->setTotal(360);
436   FXDial *dial1=new FXDial(group3,NULL,0,DIAL_CYCLIC|DIAL_HAS_NOTCH|DIAL_VERTICAL|FRAME_RAISED|FRAME_THICK|LAYOUT_FILL_Y|LAYOUT_SIDE_LEFT);
437   pbar2->setProgress(48);
438   dial1->setTarget(pbar2);
439   dial1->setSelector(FXWindow::ID_SETVALUE);
440   dial2->setTarget(pbar);
441   dial2->setSelector(FXWindow::ID_SETVALUE);
442   choice=0;
443 
444   }
445 
~GroupWindow()446 GroupWindow::~GroupWindow(){
447   delete filemenu;
448   delete helpmenu;
449   delete editmenu;
450   delete submenu1;
451   delete pop;
452   delete coolpop;
453   delete popupmenu;
454   delete doc;
455   delete folder_open;
456   delete folder_closed;
457   delete bigfont;
458   }
459 
460 
461 
462 static const FXchar sourcefiles[]="All Files (*)\nC++ Source Files (*.cpp,*.cxx,*.cc)\nC Source Files (*.c)\nC++ Header Files (*.hpp,*.hxx,*.hh,*.h)\n*.o\nAny Extension (*.*)\nThree Letter (*.\?\?\?)\nREADME*";
463 
464 
465 // Open any file
onCmdFileDlgAny(FXObject *,FXSelector,void *)466 long GroupWindow::onCmdFileDlgAny(FXObject*,FXSelector,void*){
467   FXString file=FXFileDialog::getSaveFilename(this,"Save file","../tests/groupbox.cpp",sourcefiles,1);
468   fxmessage("File=\"%s\"\n",file.text());
469   return 1;
470   }
471 
472 
473 // Open existing file
onCmdFileDlgExisting(FXObject *,FXSelector,void *)474 long GroupWindow::onCmdFileDlgExisting(FXObject*,FXSelector,void*){
475   FXString file=FXFileDialog::getOpenFilename(this,"Open file","../tests/dippy.h",sourcefiles,3);
476   fxmessage("File=\"%s\"\n",file.text());
477   return 1;
478   }
479 
480 
481 // Open multiple
onCmdFileDlgMultiple(FXObject *,FXSelector,void *)482 long GroupWindow::onCmdFileDlgMultiple(FXObject*,FXSelector,void*){
483   FXString* files=FXFileDialog::getOpenFilenames(this,"Open files","../tests/groupbox.cpp",sourcefiles);
484   if(files){
485     for(int i=0; !files[i].empty(); i++){
486       fxmessage("Files=\"%s\"\n",files[i].text());
487       }
488     delete [] files;
489     }
490   return 1;
491   }
492 
493 
494 // Open multiple all
onCmdFileDlgMultipleAll(FXObject *,FXSelector,void *)495 long GroupWindow::onCmdFileDlgMultipleAll(FXObject*,FXSelector,void*){
496   FXFileDialog open(this,"Open files or directories");
497   open.setSelectMode(SELECTFILE_MULTIPLE_ALL);
498   if(open.execute(PLACEMENT_CURSOR)){
499     FXString* files=open.getFilenames();
500     if(files){
501       for(int i=0; !files[i].empty(); i++){
502         fxmessage("Files=\"%s\"\n",files[i].text());
503         }
504       delete [] files;
505       }
506     }
507   return 1;
508   }
509 
510 
511 // Open existing directory
onCmdFileDlgDirectory(FXObject *,FXSelector,void *)512 long GroupWindow::onCmdFileDlgDirectory(FXObject*,FXSelector,void*){
513   FXString dir=FXFileDialog::getOpenDirectory(this,"Open directory",PATHSEPSTRING);
514   fxmessage("Dir=\"%s\"\n",dir.text());
515   return 1;
516   }
517 
518 
519 // Open
onCmdDirDlg(FXObject *,FXSelector,void *)520 long GroupWindow::onCmdDirDlg(FXObject*,FXSelector,void*){
521   FXDirDialog open(this,"Open directory");
522   open.showFiles(TRUE);
523   if(open.execute()){
524     fxmessage("Dir=%s\n",open.getDirectory().text());
525     }
526   return 1;
527   }
528 
529 
530 // Option
onCmdOption(FXObject *,FXSelector sel,void *)531 long GroupWindow::onCmdOption(FXObject*,FXSelector sel,void*){
532   fprintf(stderr,"Chose option %d\n",FXSELID(sel)-ID_OPTION1+1);
533   return 1;
534   }
535 
536 
537 // Test something
onCmdDownSize(FXObject *,FXSelector,void *)538 long GroupWindow::onCmdDownSize(FXObject*,FXSelector,void*){
539   resize(getDefaultWidth(),getDefaultHeight());
540   return 1;
541   }
542 
543 
544 // Test delete
onCmdDelete(FXObject *,FXSelector,void *)545 long GroupWindow::onCmdDelete(FXObject*,FXSelector,void*){
546   delete group2;
547   group2=NULL;
548   return 1;
549   }
550 
551 
552 // Pop up menu
onCmdPopup(FXObject *,FXSelector,void *)553 long GroupWindow::onCmdPopup(FXObject*,FXSelector,void*){
554   FXint x,y; FXuint buttons;
555   getRoot()->getCursorPosition(x,y,buttons);
556   popupmenu->popup(NULL,x,y);
557   return 1;
558   }
559 
560 
561 // Set choice
onCmdRadio(FXObject *,FXSelector sel,void *)562 long GroupWindow::onCmdRadio(FXObject*,FXSelector sel,void*){
563   choice=FXSELID(sel);
564   return 1;
565   }
566 
567 // Test of iconify
onCmdIconify(FXObject *,FXSelector,void *)568 long GroupWindow::onCmdIconify(FXObject*,FXSelector,void*){
569   minimize();
570   getApp()->addTimeout(this,ID_DEICONIFY,2000);
571   FXTRACE((1,"iconify\n"));
572   return 1;
573   }
574 
575 
576 // Test of deiconify
onCmdDeiconify(FXObject *,FXSelector,void *)577 long GroupWindow::onCmdDeiconify(FXObject*,FXSelector,void*){
578   restore();
579   FXTRACE((1,"deiconify\n"));
580   return 1;
581   }
582 
583 
584 // Update menu
onUpdRadio(FXObject * sender,FXSelector sel,void *)585 long GroupWindow::onUpdRadio(FXObject* sender,FXSelector sel,void*){
586   sender->handle(this,(FXSELID(sel)==choice)?FXSEL(SEL_COMMAND,ID_CHECK):FXSEL(SEL_COMMAND,ID_UNCHECK),(void*)&choice);
587   return 1;
588   }
589 
590 
591 // About
onCmdAbout(FXObject *,FXSelector,void *)592 long GroupWindow::onCmdAbout(FXObject*,FXSelector,void*){
593   FXMessageBox::information(this,MBOX_OK,"About FOX:- An intentionally long title","FOX is a really, really cool C++ library!\nExample written by Jeroen");
594   return 1;
595   }
596 
597 
598 // Set choice
onCmdChoice(FXObject *,FXSelector,void *)599 long GroupWindow::onCmdChoice(FXObject*,FXSelector,void*){
600   FXGIFIcon icon(getApp(),minifolderclosed);
601   FXint choice=FXChoiceBox::ask(this,DECOR_RESIZE,"Choose","What is your choice?",&icon,"One\nTwo\nThree\nFour\nFive\nSix\nSeven\nOne very very very very very long entry");
602   FXTRACE((1,"choice=%d\n",choice));
603   return 1;
604   }
605 
606 
607 // Start
create()608 void GroupWindow::create(){
609   FXMainWindow::create();
610   show(PLACEMENT_SCREEN);
611   }
612 
613 
614 /*******************************************************************************/
615 
616 
617 // Start the whole thing
main(int argc,char * argv[])618 int main(int argc,char *argv[]){
619 
620   // Make application
621   FXApp application("Groupbox","FoxTest");
622 
623   // Open display
624   application.init(argc,argv);
625 
626   // Make window
627   new GroupWindow(&application);
628 
629   // Create app
630   application.create();
631 
632   // Run
633   return application.run();
634   }
635 
636 
637