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