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