43 class TGMdiTestSubclass {
45 RQ_OBJECT(
"TGMdiTestSubclass")
48 TGMdiFrame *fMdiFrame;
49 TGCanvas *fCanvasWindow;
50 TGCompositeFrame *fContainer;
53 TGMdiTestSubclass(TGMdiMainFrame *main,
int w,
int h);
55 TGMdiFrame *GetMdiFrame()
const {
return fMdiFrame; }
56 virtual Bool_t CloseWindow();
61 RQ_OBJECT(
"TGMdiHintTest")
64 TGMdiFrame *fMdiFrame;
66 TGCheckButton *fClose, *fMenu, *fMin, *fMax, *fSize, *fHelp;
69 TGMdiHintTest(TGMdiMainFrame *main,
int w,
int h);
72 void HandleText(const
char *);
75 class TGAppMainFrame {
77 RQ_OBJECT(
"TGAppMainFrame")
81 TGMdiMainFrame *fMainFrame;
82 TGMdiMenuBar *fMenuBar;
83 TGLayoutHints *fMenuBarItemLayout;
84 TGPopupMenu *fMenuFile, *fMenuWindow, *fMenuHelp;
90 TGAppMainFrame(const TGWindow *p,
int w,
int h);
92 void HandleMenu(Int_t
id);
97 TGAppMainFrame::TGAppMainFrame(const TGWindow *p,
int w,
int h)
99 fMain =
new TGMainFrame(p, w, h, kVerticalFrame);
100 fMenuBar =
new TGMdiMenuBar(fMain, 10, 10);
101 fMain->AddFrame(fMenuBar,
new TGLayoutHints(kLHintsTop | kLHintsExpandX));
103 fMainFrame =
new TGMdiMainFrame(fMain, fMenuBar, 300, 300);
104 fMain->AddFrame(fMainFrame,
new TGLayoutHints(kLHintsExpandX | kLHintsExpandY));
106 const TGPicture *pbg = gClient->GetPicture(
"mditestbg.xpm");
108 fMainFrame->GetContainer()->SetBackgroundPixmap(pbg->GetPicture());
110 TGMdiFrame *mdiFrame;
114 TGMdiTestSubclass *t =
new TGMdiTestSubclass(fMainFrame, 320, 240);
115 mdiFrame = t->GetMdiFrame();
116 mdiFrame->SetMdiHints(kMdiClose | kMdiMenu);
117 mdiFrame->SetWindowName(
"One");
118 mdiFrame->MapSubwindows();
124 gClient->GetColorByName(
"red", ic);
125 mdiFrame =
new TGMdiFrame(fMainFrame, 200, 200,
127 mdiFrame->AddFrame(
new TGTextButton(mdiFrame,
new TGHotString(
"&Press me!"), 1),
128 new TGLayoutHints(kLHintsCenterX | kLHintsCenterY));
129 mdiFrame->SetMdiHints(kMdiDefaultHints | kMdiHelp);
130 mdiFrame->SetWindowName(
"Two");
131 mdiFrame->MapSubwindows();
133 mdiFrame->Move(150, 200);
137 gClient->GetColorByName(
"green", ic);
138 mdiFrame =
new TGMdiFrame(fMainFrame, 200, 200, kOwnBackground, ic);
139 mdiFrame->AddFrame(
new TGTextButton(mdiFrame,
new TGHotString(
"Button 1"), 11),
140 new TGLayoutHints(kLHintsCenterX | kLHintsCenterY));
141 mdiFrame->AddFrame(
new TGTextButton(mdiFrame,
new TGHotString(
"Button 2"), 12),
142 new TGLayoutHints(kLHintsCenterX | kLHintsCenterY));
143 mdiFrame->SetMdiHints(kMdiDefaultHints | kMdiHelp);
144 mdiFrame->SetWindowName(
"Three");
145 mdiFrame->MapSubwindows();
147 mdiFrame->Move(180, 220);
151 gClient->GetColorByName(
"blue", ic);
152 mdiFrame =
new TGMdiFrame(fMainFrame, 200, 400, kOwnBackground, ic);
154 TGListBox *fListBox =
new TGListBox(mdiFrame,1);
155 fListBox->AddEntry(
"Entry 1", 1);
156 fListBox->AddEntry(
"Entry 2", 2);
157 fListBox->AddEntry(
"Entry 3", 3);
158 fListBox->AddEntry(
"Entry 4", 4);
159 fListBox->AddEntry(
"Entry 5", 5);
160 fListBox->AddEntry(
"Entry 6", 6);
161 fListBox->AddEntry(
"Entry 7", 7);
162 fListBox->AddEntry(
"Entry 8", 8);
163 fListBox->AddEntry(
"Entry 9", 9);
164 fListBox->Resize(100,70);
165 fListBox->SetMultipleSelections(kFALSE);
166 mdiFrame->AddFrame(fListBox,
167 new TGLayoutHints(kLHintsCenterX | kLHintsCenterY));
168 mdiFrame->AddFrame(
new TGHSlider(mdiFrame, 50, kSlider1, 1,
169 kHorizontalFrame, ic),
170 new TGLayoutHints(kLHintsCenterX | kLHintsCenterY));
171 mdiFrame->Move(400, 300);
172 mdiFrame->SetWindowName(
"Four");
173 mdiFrame->MapSubwindows();
178 new TGMdiHintTest(fMainFrame, 200, 200);
182 fMain->SetWindowName(
"MDI test");
183 fMain->SetClassHints(
"mdi test",
"mdi test");
185 if (pbg && pbg->GetWidth() > 600 && pbg->GetHeight() > 400)
186 fMain->Resize(pbg->GetWidth(), pbg->GetHeight()+25);
188 fMain->Resize(640, 400);
190 fMain->MapSubwindows();
195 void TGAppMainFrame::HandleMenu(Int_t
id)
201 new TGMdiFrame(fMainFrame, 200, 100);
205 fMainFrame->Close(fMainFrame->GetCurrent());
213 fMainFrame->TileHorizontal();
217 fMainFrame->TileVertical();
220 case M_WINDOW_CASCADE:
221 fMainFrame->Cascade();
224 case M_WINDOW_ARRANGE:
225 fMainFrame->ArrangeMinimized();
228 case M_WINDOW_OPAQUE:
229 if (fMenuWindow->IsEntryChecked(M_WINDOW_OPAQUE)) {
230 fMenuWindow->UnCheckEntry(M_WINDOW_OPAQUE);
231 fMainFrame->SetResizeMode(kMdiNonOpaque);
233 fMenuWindow->CheckEntry(M_WINDOW_OPAQUE);
234 fMainFrame->SetResizeMode(kMdiOpaque);
239 fMainFrame->SetCurrent(
id);
244 void TGAppMainFrame::InitMenu()
246 fMenuBarItemLayout =
new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 4, 0, 0);
248 fMenuFile =
new TGPopupMenu(gClient->GetRoot());
249 fMenuFile->AddEntry(
new TGHotString(
"&New Window"), M_FILE_NEW);
250 fMenuFile->AddEntry(
new TGHotString(
"&Close Window"), M_FILE_CLOSE);
251 fMenuFile->AddSeparator();
252 fMenuFile->AddEntry(
new TGHotString(
"E&xit"), M_FILE_EXIT);
254 fMenuWindow =
new TGPopupMenu(gClient->GetRoot());
255 fMenuWindow->AddEntry(
new TGHotString(
"Tile &Horizontally"), M_WINDOW_HOR);
256 fMenuWindow->AddEntry(
new TGHotString(
"Tile &Vertically"), M_WINDOW_VERT);
257 fMenuWindow->AddEntry(
new TGHotString(
"&Cascade"), M_WINDOW_CASCADE);
258 fMenuWindow->AddSeparator();
259 fMenuWindow->AddPopup(
new TGHotString(
"&Windows"), fMainFrame->GetWinListMenu());
260 fMenuWindow->AddSeparator();
261 fMenuWindow->AddEntry(
new TGHotString(
"&Arrange icons"), M_WINDOW_ARRANGE);
262 fMenuWindow->AddSeparator();
263 fMenuWindow->AddEntry(
new TGHotString(
"&Opaque resize"), M_WINDOW_OPAQUE);
265 fMenuWindow->CheckEntry(M_WINDOW_OPAQUE);
267 fMenuHelp =
new TGPopupMenu(gClient->GetRoot());
268 fMenuHelp->AddEntry(
new TGHotString(
"&Contents"), M_HELP_CONTENTS);
269 fMenuHelp->AddSeparator();
270 fMenuHelp->AddEntry(
new TGHotString(
"&About"), M_HELP_ABOUT);
272 fMenuHelp->DisableEntry(M_HELP_CONTENTS);
273 fMenuHelp->DisableEntry(M_HELP_ABOUT);
276 fMenuFile->Connect(
"Activated(Int_t)",
"TGAppMainFrame",
this,
277 "HandleMenu(Int_t)");
278 fMenuWindow->Connect(
"Activated(Int_t)",
"TGAppMainFrame",
this,
279 "HandleMenu(Int_t)");
280 fMenuHelp->Connect(
"Activated(Int_t)",
"TGAppMainFrame",
this,
281 "HandleMenu(Int_t)");
283 fMenuBar->AddPopup(
new TGHotString(
"&File"), fMenuFile, fMenuBarItemLayout);
284 fMenuBar->AddPopup(
new TGHotString(
"&Windows"),fMenuWindow,fMenuBarItemLayout);
285 fMenuBar->AddPopup(
new TGHotString(
"&Help"), fMenuHelp, fMenuBarItemLayout);
288 void TGAppMainFrame::CloseWindow()
290 gApplication->Terminate(0);
295 TGMdiTestSubclass::TGMdiTestSubclass(TGMdiMainFrame *main,
int w,
int h)
297 fMdiFrame =
new TGMdiFrame(main, w, h);
298 fMdiFrame->Connect(
"CloseWindow()",
"TGMdiTestSubclass",
this,
"CloseWindow()");
299 fMdiFrame->DontCallClose();
301 fCanvasWindow =
new TGCanvas(fMdiFrame, 400, 240);
302 fContainer =
new TGCompositeFrame(fCanvasWindow->GetViewPort(), 10, 10,
303 kHorizontalFrame | kOwnBackground,
304 fMdiFrame->GetWhitePixel());
305 fContainer->SetLayoutManager(
new TGTileLayout(fContainer, 8));
306 fCanvasWindow->SetContainer(fContainer);
308 for (
int i = 0; i < 256; ++i)
309 fCanvasWindow->AddFrame(
new TGFrame(fCanvasWindow->GetContainer(),
310 32, 32, kOwnBackground, (i+1) & 255),
311 new TGLayoutHints(kLHintsNormal));
313 fMdiFrame->AddFrame(fCanvasWindow,
new TGLayoutHints(kLHintsExpandX | kLHintsExpandY));
315 fMdiFrame->SetWindowIcon(gClient->GetPicture(
"ofolder_t.xpm"));
318 Bool_t TGMdiTestSubclass::CloseWindow()
322 new TGMsgBox(gClient->GetRoot(), fMdiFrame,
323 fMdiFrame->GetWindowName(),
"Really want to close the window?",
324 kMBIconExclamation, kMBYes | kMBNo, &ret);
326 if (ret == kMBYes)
return fMdiFrame->CloseWindow();
334 TGMdiHintTest::TGMdiHintTest(TGMdiMainFrame *main,
int w,
int h)
336 fMdiFrame =
new TGMdiFrame(main, w, h);
338 fClose =
new TGCheckButton(fMdiFrame,
new TGHotString(
"Close"), 11);
339 fMenu =
new TGCheckButton(fMdiFrame,
new TGHotString(
"Menu (left icon)"), 12);
340 fMin =
new TGCheckButton(fMdiFrame,
new TGHotString(
"Minimize"), 13);
341 fMax =
new TGCheckButton(fMdiFrame,
new TGHotString(
"Maximize"), 14);
342 fSize =
new TGCheckButton(fMdiFrame,
new TGHotString(
"Resize"), 15);
343 fHelp =
new TGCheckButton(fMdiFrame,
new TGHotString(
"Help"), 16);
345 TGLayoutHints *lh =
new TGLayoutHints(kLHintsLeft | kLHintsTop, 5, 100, 5, 0);
347 fMdiFrame->AddFrame(fClose, lh);
348 fMdiFrame->AddFrame(fMenu, lh);
349 fMdiFrame->AddFrame(fMin, lh);
350 fMdiFrame->AddFrame(fMax, lh);
351 fMdiFrame->AddFrame(fSize, lh);
352 fMdiFrame->AddFrame(fHelp, lh);
354 fClose->SetState(kButtonDown);
355 fMin->SetState(kButtonDown);
356 fMenu->SetState(kButtonDown);
357 fMax->SetState(kButtonDown);
358 fSize->SetState(kButtonDown);
360 fClose->Connect(
"Clicked()",
"TGMdiHintTest",
this,
"HandleButtons()");
361 fMenu->Connect(
"Clicked()",
"TGMdiHintTest",
this,
"HandleButtons()");
362 fMin->Connect(
"Clicked()",
"TGMdiHintTest",
this,
"HandleButtons()");
363 fMax->Connect(
"Clicked()",
"TGMdiHintTest",
this,
"HandleButtons()");
364 fSize->Connect(
"Clicked()",
"TGMdiHintTest",
this,
"HandleButtons()");
365 fHelp->Connect(
"Clicked()",
"TGMdiHintTest",
this,
"HandleButtons()");
367 fWName =
new TGTextEntry(fMdiFrame, (
const char *)
"", 20);
368 fMdiFrame->AddFrame(fWName,
new TGLayoutHints(kLHintsTop | kLHintsExpandX,
371 fWName->GetBuffer()->AddText(0,
"MDI hints test");
372 fWName->Connect(
"TextChanged(char*)",
"TGMdiHintTest",
this,
"HandleText(char*)");
374 fMdiFrame->SetMdiHints(kMdiDefaultHints);
375 fMdiFrame->SetWindowName(fWName->GetBuffer()->GetString());
377 fMdiFrame->SetWindowIcon(gClient->GetPicture(
"app_t.xpm"));
379 fMdiFrame->MapSubwindows();
383 void TGMdiHintTest::HandleButtons()
387 if (fClose->GetState() != kButtonUp) hints |= kMdiClose;
388 if (fMenu->GetState() != kButtonUp) hints |= kMdiMenu;
389 if (fMin->GetState() != kButtonUp) hints |= kMdiMinimize;
390 if (fMax->GetState() != kButtonUp) hints |= kMdiMaximize;
391 if (fSize->GetState() != kButtonUp) hints |= kMdiSize;
392 if (fHelp->GetState() != kButtonUp) hints |= kMdiHelp;
394 fMdiFrame->SetMdiHints(hints);
397 void TGMdiHintTest::HandleText(
const char *)
399 fMdiFrame->SetWindowName(fWName->GetBuffer()->GetString());
404 new TGAppMainFrame(gClient->GetRoot(), 640, 400);
410 int main(
int argc,
char **argv)
412 TApplication theApp(
"MdiTest", &argc, argv);