#include #include #include #include #include #include #include #include namespace TestEnv { const unsigned short InitialMainWidth = 700; const unsigned short InitialMainHeight = 500; const unsigned short BoxWidth = 400; const unsigned short BoxHeight = 400; const unsigned int MyColor = 0x00FF00; const unsigned short MaxNrFrames = 3; typedef vector MdiFrameList; class TestGraphics { private: TGMainFrame * fMain; TGMdiMainFrame * fMainFrame; TGMdiMenuBar * fMenuBar; TGPopupMenu * fMenuFile; MdiFrameList MdiFrames; public: TestGraphics () : fMain (NULL), fMainFrame (NULL), fMenuBar (NULL), fMenuFile (NULL) { fMain = new TGMainFrame(gClient->GetRoot (), InitialMainWidth, InitialMainHeight); fMenuBar = new TGMdiMenuBar(fMain, 10, 10); fMenuFile = new TGPopupMenu(gClient->GetRoot()); fMenuFile->AddEntry(new TGHotString("E&xit"), 1001); fMenuBar->AddPopup(new TGHotString("&File"), fMenuFile, new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 4, 0, 0)); fMenuFile->Connect("Activated(Int_t)", "TestEnv::TestGraphics", this, "HandleMenu(Int_t)"); fMain->AddFrame(fMenuBar, new TGLayoutHints(kLHintsTop | kLHintsExpandX)); fMainFrame = new TGMdiMainFrame (fMain, fMenuBar, InitialMainWidth, InitialMainHeight); fMain->AddFrame (fMainFrame, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY)); fMain->MapWindow(); NextFrame (); Redraw (); } void HandleMenu(Int_t id) { if (id == 1001) { delete this; gApplication->Terminate(); } } void HandleNextButton () { TTimer::SingleShot(200, "TestEnv::TestGraphics", this, "NextFrame ()"); } void NextFrame () { // Delete MDI frames and create the next one. if (MdiFrames.size () >= MaxNrFrames) { for (size_t It = 0; It < MdiFrames.size (); ++It) { MdiFrames[It]->Cleanup (); MdiFrames[It]->DeleteWindow (); } MdiFrames.clear (); } TGMdiFrame * fMdiFrame = new TGMdiFrame (fMainFrame, BoxWidth, BoxHeight, kVerticalFrame); MdiFrames.push_back (fMdiFrame); fMdiFrame->DontCallClose (); fMdiFrame->SetMdiHints(kMdiDefaultHints | kMdiHelp); fMdiFrame->SetWindowName ("Child"); TGCanvas * fCanvas = new TGCanvas (fMdiFrame); TGCompositeFrame *const fContainer = new TGCompositeFrame (fCanvas->GetViewPort(), 10, 10, kHorizontalFrame | kOwnBackground, MyColor); fContainer->SetLayoutManager (new TGMatrixLayout (fContainer, 0, 3)); fCanvas->SetContainer (fContainer); fMdiFrame->AddFrame (fCanvas, new TGLayoutHints (kLHintsExpandX | kLHintsExpandY)); TGTextButton * NextButton = new TGTextButton (fContainer, "Next frame"); NextButton->Connect ("Clicked()", "TestEnv::TestGraphics", this, "HandleNextButton()"); fContainer->AddFrame (NextButton); fMdiFrame->MapSubwindows (); fMdiFrame->Layout (); Redraw (); } void Redraw () { // A function to make the changes in the main frame and its sub-frames // visible. fMain->MapSubwindows (); fMain->Layout (); } virtual ~TestGraphics () { for (size_t It = 0; It < MdiFrames.size (); ++It) { MdiFrames[It]->Cleanup (); MdiFrames[It]->DeleteWindow (); } MdiFrames.clear (); fMain->Cleanup (); fMain->DeleteWindow (); } ClassDef(TestGraphics, 1); }; } // End of namespace ClassImp (TestEnv::TestGraphics);