1 /********************************************************************************
2 * *
3 * Test 4-Way Splitter Widget *
4 * *
5 *********************************************************************************
6 * Copyright (C) 1999,2006 by Jeroen van der Zijp. All Rights Reserved. *
7 *********************************************************************************
8 * $Id: foursplit.cpp,v 1.21 2006/02/20 03:32:13 fox Exp $ *
9 ********************************************************************************/
10 #include "fx.h"
11
12
13
14 /*******************************************************************************/
15
16
17 // Mini application object
18 class FourSplitWindow : public FXMainWindow {
19 FXDECLARE(FourSplitWindow)
20 protected:
21 FXMenuBar* menubar;
22 FXMenuPane* filemenu;
23 FXMenuPane* expandmenu;
24 FX4Splitter* splitter;
25 FX4Splitter* subsplitter;
26 protected:
FourSplitWindow()27 FourSplitWindow(){}
28 public:
29 FourSplitWindow(FXApp *a);
30 virtual void create();
31 virtual ~FourSplitWindow();
32 };
33
34
35
36 /*******************************************************************************/
37
38
39 // Object implementation
40 FXIMPLEMENT(FourSplitWindow,FXMainWindow,NULL,0)
41
42
43 // Make some windows
FourSplitWindow(FXApp * a)44 FourSplitWindow::FourSplitWindow(FXApp *a):FXMainWindow(a,"4-Way Splitter Test",NULL,NULL,DECOR_ALL,0,0,900,700,0,0){
45 FXButton *temp;
46
47 // Menu bar
48 menubar=new FXMenuBar(this,LAYOUT_SIDE_TOP|LAYOUT_FILL_X);
49
50 // Status bar
51 new FXStatusBar(this,LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X|STATUSBAR_WITH_DRAGCORNER);
52
53 FXHorizontalFrame* hf=new FXHorizontalFrame(this,LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X);
54
55 splitter=new FX4Splitter(this,LAYOUT_SIDE_TOP|LAYOUT_FILL_X|LAYOUT_FILL_Y|FOURSPLITTER_TRACKING);
56
57 // File menu
58 filemenu=new FXMenuPane(this);
59 new FXMenuCommand(filemenu,"&Quit\tCtl-Q\tQuit the application.",NULL,getApp(),FXApp::ID_QUIT);
60 new FXMenuTitle(menubar,"&File",NULL,filemenu);
61
62 // Expand menu
63 expandmenu=new FXMenuPane(this);
64 new FXMenuCheck(expandmenu,"All four",splitter,FX4Splitter::ID_EXPAND_ALL);
65 new FXMenuCheck(expandmenu,"Top/left",splitter,FX4Splitter::ID_EXPAND_TOPLEFT);
66 new FXMenuCheck(expandmenu,"Top/right",splitter,FX4Splitter::ID_EXPAND_TOPRIGHT);
67 new FXMenuCheck(expandmenu,"Bottom/left",splitter,FX4Splitter::ID_EXPAND_BOTTOMLEFT);
68 new FXMenuCheck(expandmenu,"Bottom/right",splitter,FX4Splitter::ID_EXPAND_BOTTOMRIGHT);
69 new FXMenuTitle(menubar,"&Expand",NULL,expandmenu);
70
71
72 // Four widgets in the four splitter
73 FXButton *tl=new FXButton(splitter,"Top &Left\tThis splitter tracks",NULL,NULL,0,FRAME_RAISED|FRAME_THICK);
74 FXButton *tr=new FXButton(splitter,"Top &Right\tThis splitter tracks",NULL,NULL,0,FRAME_RAISED|FRAME_THICK);
75
76 // To check bug from Tony <verant@hotpop.com>
77 FXSplitter* spl2=new FXSplitter(splitter,SPLITTER_VERTICAL|SPLITTER_TRACKING|LAYOUT_FILL_X|LAYOUT_FILL_Y);
78 FXSplitter* spl3=new FXSplitter(spl2,SPLITTER_HORIZONTAL|SPLITTER_TRACKING|LAYOUT_FILL_X|LAYOUT_FILL_Y);
79 new FXButton(spl3,"In SPLITTER_HORIZONTAL",NULL,NULL,0,FRAME_RAISED|FRAME_THICK);
80 new FXButton(spl3,"In SPLITTER_HORIZONTAL",NULL,NULL,0,FRAME_RAISED|FRAME_THICK);
81 new FXButton(spl2,"In SPLITTER_VERTICAL",NULL,NULL,0,FRAME_RAISED|FRAME_THICK);
82
83 subsplitter=new FX4Splitter(splitter,LAYOUT_FILL_X|LAYOUT_FILL_Y);
84 temp=new FXButton(subsplitter,"&Of course\tThis splitter does NOT track",NULL,NULL,0,FRAME_SUNKEN|FRAME_THICK);
85 temp->setBackColor(FXRGB(0,128,0));
86 temp->setTextColor(FXRGB(255,255,255));
87 temp=new FXButton(subsplitter,"the&y CAN\tThis splitter does NOT track",NULL,NULL,0,FRAME_SUNKEN|FRAME_THICK);
88 temp->setBackColor(FXRGB(128,0,0));
89 temp->setTextColor(FXRGB(255,255,255));
90 temp=new FXButton(subsplitter,"be &NESTED\tThis splitter does NOT track",NULL,NULL,0,FRAME_SUNKEN|FRAME_THICK);
91 temp->setBackColor(FXRGB(0,0,200));
92 temp->setTextColor(FXRGB(255,255,255));
93 temp=new FXButton(subsplitter,"&arbitrarily!\tThis splitter does NOT track",NULL,NULL,0,FRAME_SUNKEN|FRAME_THICK);
94 temp->setBackColor(FXRGB(128,128,0));
95 temp->setTextColor(FXRGB(255,255,255));
96
97 new FXLabel(hf,"Hide: ",NULL,LAYOUT_CENTER_Y|LAYOUT_LEFT);
98 new FXCheckButton(hf,"Top Left",tl,ID_TOGGLESHOWN,ICON_BEFORE_TEXT|LAYOUT_CENTER_Y|LAYOUT_LEFT);
99 new FXCheckButton(hf,"Top Right",tr,ID_TOGGLESHOWN,ICON_BEFORE_TEXT|LAYOUT_CENTER_Y|LAYOUT_LEFT);
100 new FXCheckButton(hf,"Bottom Left",spl2,ID_TOGGLESHOWN,ICON_BEFORE_TEXT|LAYOUT_CENTER_Y|LAYOUT_LEFT);
101 new FXCheckButton(hf,"Bottom Right",subsplitter,ID_TOGGLESHOWN,ICON_BEFORE_TEXT|LAYOUT_CENTER_Y|LAYOUT_LEFT);
102
103 new FXCheckButton(hf,"Bottom Right",splitter,FX4Splitter::ID_EXPAND_BOTTOMRIGHT,ICON_BEFORE_TEXT|LAYOUT_CENTER_Y|LAYOUT_RIGHT);
104 new FXCheckButton(hf,"Bottom Left",splitter,FX4Splitter::ID_EXPAND_BOTTOMLEFT,ICON_BEFORE_TEXT|LAYOUT_CENTER_Y|LAYOUT_RIGHT);
105 new FXCheckButton(hf,"Top Right",splitter,FX4Splitter::ID_EXPAND_TOPRIGHT,ICON_BEFORE_TEXT|LAYOUT_CENTER_Y|LAYOUT_RIGHT);
106 new FXCheckButton(hf,"Top Left",splitter,FX4Splitter::ID_EXPAND_TOPLEFT,ICON_BEFORE_TEXT|LAYOUT_CENTER_Y|LAYOUT_RIGHT);
107 new FXCheckButton(hf,"All",splitter,FX4Splitter::ID_EXPAND_ALL,ICON_BEFORE_TEXT|LAYOUT_CENTER_Y|LAYOUT_RIGHT);
108 new FXLabel(hf,"Expand: ",NULL,LAYOUT_CENTER_Y|LAYOUT_RIGHT);
109 new FXToolTip(getApp());
110 }
111
112
113 // Clean up
~FourSplitWindow()114 FourSplitWindow::~FourSplitWindow(){
115 delete filemenu;
116 delete expandmenu;
117 }
118
119
120 // Start
create()121 void FourSplitWindow::create(){
122 FXMainWindow::create();
123 show(PLACEMENT_SCREEN);
124 }
125
126
127 /*******************************************************************************/
128
129
130 // Start the whole thing
main(int argc,char * argv[])131 int main(int argc,char *argv[]){
132 FXApp application("FourSplit","FoxTest");
133 application.init(argc,argv);
134 new FourSplitWindow(&application);
135 application.create();
136 return application.run();
137 }
138
139
140