Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
splitterVertical.C
Go to the documentation of this file.
1 /// \file
2 /// \ingroup tutorial_gui
3 /// This macro gives an example of how to create a vertical splitter.
4 /// To run it do either:
5 /// ~~~
6 /// .x splitterVertical.C
7 /// .x splitterVertical.C++
8 /// ~~~
9 ///
10 /// \macro_code
11 ///
12 /// \author Ilka Antcheva 1/12/2006
13 
14 
15 #include <TGClient.h>
16 #include <TGButton.h>
17 #include <TGLabel.h>
18 #include <TGFrame.h>
19 #include <TGLayout.h>
20 #include <TGSplitter.h>
21 
22 
23 class MyMainFrame : public TGMainFrame {
24 
25 public:
26  MyMainFrame(const TGWindow *p, UInt_t w, UInt_t h);
27  virtual ~MyMainFrame();
28  void DoSave();
29  void CloseWindow();
30 
31  ClassDef(MyMainFrame, 0)
32 };
33 
34 //______________________________________________________________________________
35 void MyMainFrame::DoSave()
36 {
37  Printf("Save in progress...");
38  SaveSource("","");
39 }
40 
41 //______________________________________________________________________________
42 MyMainFrame::MyMainFrame(const TGWindow *p, UInt_t w, UInt_t h) :
43  TGMainFrame(p, w, h)
44 {
45  // Create vertical splitter
46 
47  TGHorizontalFrame *fHf = new TGHorizontalFrame(this, 50, 50);
48 
49  TGVerticalFrame *fV1 = new TGVerticalFrame(fHf, 10, 10, kFixedWidth);
50  TGVerticalFrame *fV2 = new TGVerticalFrame(fHf, 10, 10);
51  TGCompositeFrame *fFleft = new TGCompositeFrame(fV1, 10, 10, kSunkenFrame);
52  TGCompositeFrame *fFright = new TGCompositeFrame(fV2, 10, 10, kSunkenFrame);
53 
54  TGLabel *fLleft = new TGLabel(fFleft, "Left Frame");
55  TGLabel *fLright = new TGLabel(fFright, "Right Frame");
56 
57  fFleft->AddFrame(fLleft, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,
58  3, 0, 0, 0));
59  fFright->AddFrame(fLright, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,
60  3, 0, 0, 0));
61 
62  fV1->AddFrame(fFleft, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY,
63  0, 0, 5, 10));
64  fV2->AddFrame(fFright, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY,
65  0, 0, 5, 10));
66 
67  fV1->Resize(fFleft->GetDefaultWidth()+20, fV1->GetDefaultHeight());
68  fV2->Resize(fFright->GetDefaultWidth(), fV1->GetDefaultHeight());
69  fHf->AddFrame(fV1, new TGLayoutHints(kLHintsLeft | kLHintsExpandY));
70 
71  TGVSplitter *splitter = new TGVSplitter(fHf,2,2);
72  splitter->SetFrame(fV1, kTRUE);
73  fHf->AddFrame(splitter, new TGLayoutHints(kLHintsLeft | kLHintsExpandY));
74 
75  fHf->AddFrame(fV2, new TGLayoutHints(kLHintsRight | kLHintsExpandX |
76  kLHintsExpandY));
77  AddFrame(fHf, new TGLayoutHints(kLHintsRight | kLHintsExpandX |
78  kLHintsExpandY));
79 
80  // button frame
81  TGVerticalFrame *vframe = new TGVerticalFrame(this, 10, 10);
82  TGCompositeFrame *cframe2 = new TGCompositeFrame(vframe, 170, 20,
83  kHorizontalFrame | kFixedWidth);
84  TGTextButton *save = new TGTextButton(cframe2, "&Save");
85  cframe2->AddFrame(save, new TGLayoutHints(kLHintsTop | kLHintsExpandX,
86  3, 2, 2, 2));
87  save->Connect("Clicked()", "MyMainFrame", this, "DoSave()");
88  save->SetToolTipText("Click on the button to save the application as C++ macro");
89 
90  TGTextButton *exit = new TGTextButton(cframe2, "&Exit ","gApplication->Terminate(0)");
91  cframe2->AddFrame(exit, new TGLayoutHints(kLHintsTop | kLHintsExpandX,
92  2, 0, 2, 2));
93  vframe->AddFrame(cframe2, new TGLayoutHints(kLHintsExpandX, 2, 2, 5, 1));
94  AddFrame(vframe, new TGLayoutHints(kLHintsExpandX, 2, 2, 5, 1));
95 
96  // What to clean up in destructor
97  SetCleanup(kDeepCleanup);
98 
99  // Set a name to the main frame
100  SetWindowName("Vertical Splitter");
101  SetWMSizeHints(350, 200, 600, 400, 0, 0);
102  MapSubwindows();
103  Resize(GetDefaultSize());
104  MapWindow();
105 }
106 
107 
108 //______________________________________________________________________________
109 MyMainFrame::~MyMainFrame()
110 {
111  // Clean up all widgets, frames and layouthints that were used
112  Cleanup();
113 }
114 
115 //______________________________________________________________________________
116 void MyMainFrame::CloseWindow()
117 {
118  // Called when window is closed via the window manager.
119 
120  delete this;
121 }
122 
123 void splitterVertical()
124 {
125  // Popup the GUI...
126  new MyMainFrame(gClient->GetRoot(), 350, 200);
127 }