1 /********************************************************************************
2 *                                                                               *
3 *                                 Test Dialog Box                               *
4 *                                                                               *
5 *********************************************************************************
6 * Copyright (C) 1997,2006 by Jeroen van der Zijp.   All Rights Reserved.        *
7 *********************************************************************************
8 * $Id: dialog.cpp,v 1.45 2006/01/22 17:58:59 fox Exp $                          *
9 ********************************************************************************/
10 #include "fx.h"
11 #include <stdio.h>
12 #include <stdlib.h>
13 #include <string.h>
14 
15 
16 
17 /*******************************************************************************/
18 
19 class FXTestDialog : public FXDialogBox {
20   FXDECLARE(FXTestDialog)
21 protected:
22   FXHorizontalFrame* contents;
23   FXHorizontalFrame* buttons;
24   FXMenuPane*        menu;
25   FXMenuPane*        submenu;
26   FXPopup*           pane;
27 private:
FXTestDialog()28   FXTestDialog(){}
29 public:
30   FXTestDialog(FXWindow* owner);
31   virtual ~FXTestDialog();
32   };
33 
34 
35 /*******************************************************************************/
36 
37 
38 // Mini application object
39 class DialogTester : public FXMainWindow {
40   FXDECLARE(DialogTester)
41 protected:
42 
43   // Member data
44   FXMenuBar         *menubar;
45   FXMenuPane        *filemenu;
46   FXHorizontalFrame *contents;
47   FXTestDialog      *dialog;
48 
49 protected:
DialogTester()50   DialogTester(){}
51 
52 public:
53 
54   // Message handlers
55   long onCmdShowDialog(FXObject*,FXSelector,void*);
56   long onCmdShowDialogModal(FXObject*,FXSelector,void*);
57 
58 public:
59 
60   // Messages
61   enum {
62     ID_SHOWDIALOG=FXMainWindow::ID_LAST,
63     ID_SHOWDIALOGMODAL
64     };
65 
66 public:
67   DialogTester(FXApp *app);
68   virtual void create();
69   virtual ~DialogTester();
70   };
71 
72 
73 /*******************************************************************************/
74 
75 
76 // FXTestDialog implementation
77 FXIMPLEMENT(FXTestDialog,FXDialogBox,NULL,0)
78 
79 
80 // Construct a dialog box
FXTestDialog(FXWindow * owner)81 FXTestDialog::FXTestDialog(FXWindow* owner):
82   FXDialogBox(owner,"Test of Dialog Box",DECOR_TITLE|DECOR_BORDER){
83 
84   // Bottom buttons
85   buttons=new FXHorizontalFrame(this,LAYOUT_SIDE_BOTTOM|FRAME_NONE|LAYOUT_FILL_X|PACK_UNIFORM_WIDTH,0,0,0,0,40,40,20,20);
86 
87   // Separator
88   new FXHorizontalSeparator(this,LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X|SEPARATOR_GROOVE);
89 
90   // Contents
91   contents=new FXHorizontalFrame(this,LAYOUT_SIDE_TOP|FRAME_NONE|LAYOUT_FILL_X|LAYOUT_FILL_Y|PACK_UNIFORM_WIDTH);
92 
93   submenu=new FXMenuPane(this);
94   new FXMenuCommand(submenu,"One");
95   new FXMenuCommand(submenu,"Two");
96   new FXMenuCommand(submenu,"Three");
97 
98   // Menu
99   menu=new FXMenuPane(this);
100   new FXMenuCommand(menu,"&Accept",NULL,this,ID_ACCEPT);
101   new FXMenuCommand(menu,"&Cancel",NULL,this,ID_CANCEL);
102   new FXMenuCascade(menu,"Submenu",NULL,submenu);
103   new FXMenuCommand(menu,"&Quit\tCtl-Q",NULL,getApp(),FXApp::ID_QUIT);
104 
105   // Popup menu
106   pane=new FXPopup(this);
107   new FXOption(pane,"One",NULL,NULL,0,JUSTIFY_HZ_APART|ICON_AFTER_TEXT);
108   new FXOption(pane,"Two",NULL,NULL,0,JUSTIFY_HZ_APART|ICON_AFTER_TEXT);
109   new FXOption(pane,"Three",NULL,NULL,0,JUSTIFY_HZ_APART|ICON_AFTER_TEXT);
110   new FXOption(pane,"Four",NULL,NULL,0,JUSTIFY_HZ_APART|ICON_AFTER_TEXT);
111   new FXOption(pane,"Five",NULL,NULL,0,JUSTIFY_HZ_APART|ICON_AFTER_TEXT);
112   new FXOption(pane,"Six",NULL,NULL,0,JUSTIFY_HZ_APART|ICON_AFTER_TEXT);
113   new FXOption(pane,"Seven",NULL,NULL,0,JUSTIFY_HZ_APART|ICON_AFTER_TEXT);
114   new FXOption(pane,"Eight",NULL,NULL,0,JUSTIFY_HZ_APART|ICON_AFTER_TEXT);
115   new FXOption(pane,"Nine",NULL,NULL,0,JUSTIFY_HZ_APART|ICON_AFTER_TEXT);
116   new FXOption(pane,"Ten",NULL,NULL,0,JUSTIFY_HZ_APART|ICON_AFTER_TEXT);
117 
118   FXComboBox* combobox=new FXComboBox(contents,10,NULL,0,COMBOBOX_STATIC|FRAME_SUNKEN|FRAME_THICK|LAYOUT_SIDE_TOP);
119   combobox->setNumVisible(4);
120   combobox->appendItem("One");
121   combobox->appendItem("Two");
122   combobox->appendItem("Three");
123   combobox->appendItem("Four");
124 
125   // Option menu
126   new FXOptionMenu(contents,pane,FRAME_RAISED|FRAME_THICK|JUSTIFY_HZ_APART|ICON_AFTER_TEXT|LAYOUT_CENTER_X|LAYOUT_CENTER_Y);
127 
128   // Button to pop menu
129   new FXMenuButton(contents,"&Menu",NULL,menu,MENUBUTTON_DOWN|JUSTIFY_LEFT|LAYOUT_TOP|FRAME_RAISED|FRAME_THICK|ICON_AFTER_TEXT|LAYOUT_CENTER_X|LAYOUT_CENTER_Y);
130 
131   // Accept
132  new FXButton(buttons,"&Accept",NULL,this,ID_ACCEPT,BUTTON_DEFAULT|BUTTON_INITIAL|FRAME_RAISED|FRAME_THICK|LAYOUT_RIGHT|LAYOUT_CENTER_Y);
133 
134   // Cancel
135   new FXButton(buttons,"&Cancel",NULL,this,ID_CANCEL,BUTTON_DEFAULT|FRAME_RAISED|FRAME_THICK|LAYOUT_RIGHT|LAYOUT_CENTER_Y);
136   }
137 
138 
139 // Must delete the menus
~FXTestDialog()140 FXTestDialog::~FXTestDialog(){
141   delete menu;
142   delete submenu;
143   delete pane;
144   }
145 
146 /*******************************************************************************/
147 
148 // Map
149 FXDEFMAP(DialogTester) DialogTesterMap[]={
150   FXMAPFUNC(SEL_COMMAND,  DialogTester::ID_SHOWDIALOG,      DialogTester::onCmdShowDialog),
151   FXMAPFUNC(SEL_COMMAND,  DialogTester::ID_SHOWDIALOGMODAL, DialogTester::onCmdShowDialogModal),
152   };
153 
154 
155 // FXDialogBoxApp implementation
FXIMPLEMENT(DialogTester,FXMainWindow,DialogTesterMap,ARRAYNUMBER (DialogTesterMap))156 FXIMPLEMENT(DialogTester,FXMainWindow,DialogTesterMap,ARRAYNUMBER(DialogTesterMap))
157 
158 
159 
160 /*******************************************************************************/
161 
162 
163 // Make some windows
164 DialogTester::DialogTester(FXApp* a):FXMainWindow(a,"Group Box Test",NULL,NULL,DECOR_ALL,0,0,400,200){
165 
166   // Tooltip
167   new FXToolTip(getApp());
168 
169   // Menubar
170   menubar=new FXMenuBar(this,LAYOUT_SIDE_TOP|LAYOUT_FILL_X);
171 
172   // File Menu
173   filemenu=new FXMenuPane(this);
174   new FXMenuCommand(filemenu,"&Quit\tCtl-Q",NULL,getApp(),FXApp::ID_QUIT,0);
175   new FXMenuTitle(menubar,"&File",NULL,filemenu);
176 
177   // Separator
178   new FXHorizontalSeparator(this,LAYOUT_SIDE_TOP|LAYOUT_FILL_X|SEPARATOR_GROOVE);
179 
180   // Contents
181   contents=new FXHorizontalFrame(this,LAYOUT_SIDE_BOTTOM|FRAME_NONE|LAYOUT_FILL_X|PACK_UNIFORM_WIDTH);
182 
183   // Button to pop normal dialog
184   new FXButton(contents,"&Non-Modal Dialog...\tDisplay normal dialog",NULL,this,ID_SHOWDIALOG,FRAME_RAISED|FRAME_THICK|LAYOUT_CENTER_X|LAYOUT_CENTER_Y);
185 
186   // Button to pop modal dialog
187   new FXButton(contents,"&Modal Dialog...\tDisplay modal dialog",NULL,this,ID_SHOWDIALOGMODAL,FRAME_RAISED|FRAME_THICK|LAYOUT_CENTER_X|LAYOUT_CENTER_Y);
188 
189   // Build a dialog box
190   dialog=new FXTestDialog(this);
191 
192   // Separator
193   new FXHorizontalSeparator(this,LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X|SEPARATOR_GROOVE);
194 
195   }
196 
197 
198 // Clean up
~DialogTester()199 DialogTester::~DialogTester(){
200   delete filemenu;
201   }
202 
203 
204 // Open
onCmdShowDialog(FXObject *,FXSelector,void *)205 long DialogTester::onCmdShowDialog(FXObject*,FXSelector,void*){
206   dialog->show(PLACEMENT_OWNER);
207   return 1;
208   }
209 
210 
211 // Option
onCmdShowDialogModal(FXObject *,FXSelector,void *)212 long DialogTester::onCmdShowDialogModal(FXObject*,FXSelector,void*){
213   FXTestDialog modaldialog(this);
214   modaldialog.execute(PLACEMENT_OWNER);
215   return 1;
216   }
217 
218 
219 // Start
create()220 void DialogTester::create(){
221   FXMainWindow::create();
222   show(PLACEMENT_SCREEN);
223   }
224 
225 
226 /*******************************************************************************/
227 
228 
229 // Start the whole thing
main(int argc,char * argv[])230 int main(int argc,char *argv[]){
231 
232   // Make application
233   FXApp  application("Dialog","FoxTest");
234 
235   // Open display
236   application.init(argc,argv);
237 
238   new DialogTester(&application);
239 
240   // Create app
241   application.create();
242 
243   // Run
244   return application.run();
245   }
246 
247 
248