// Test gui //#ifndef __CINT__ #include "RQ_OBJECT.h" #include "TG3DLine.h" #include "TGButton.h" #include "TGButtonGroup.h" #include "TGComboBox.h" #include "TGFileDialog.h" #include "TGFrame.h" #include "TGLabel.h" #include "TGLayout.h" #include "TGListBox.h" #include "TGMenu.h" #include "TGMsgBox.h" #include "TGNumberEntry.h" #include "TGTab.h" #include "TGTableLayout.h" #include "TGTextBuffer.h" #include "TGTextEntry.h" #include "TKey.h" #include "TList.h" #include "TObjString.h" #include "TString.h" #include "TROOT.h" #include "TSystem.h" //#endif #include // Menu commands enum EMenuCommands { M_FILE, M_FILE_OPEN, M_FILE_EXIT, }; // Button Ids enum EButtonIds { B_CANCEL = 1, B_OK, B_BROWSE_UNITEST, }; class XFilterFrame { RQ_OBJECT("XFilterFrame") private: TGMainFrame *fMain; // MenuBar Frame TGPopupMenu *fMenuFile; TGMenuBar *fMenuBar; TGHorizontal3DLine *fLineH1; TGHorizontalFrame *fHF1; TGVerticalFrame *fVF1; TGCompositeFrame *fFrame; TGCompositeFrame *fFTwoGrps; TGCanvas *fCanvas; TGTab *fTab; TGCompositeFrame *fFTUFltr; TGGroupFrame *fFGFtrCr; TGTextEntry *fTxtUT; TGTextBuffer *fBufUT; TGTextButton *fBrowseUTBtn; TGLayoutHints *fMenuBarLayout; TGLayoutHints *fMenuBarItemLayout; TGLayoutHints *fMenuBarHelpLayout; TGLayoutHints *fLineLayout; TGLayoutHints *fLayout; TGLayoutHints *fHintTL; TGLayoutHints *fHintTX; TGLayoutHints *fHintTXY; TGLayoutHints *fHintRXY; TGLayoutHints *fHintLY; TGLayoutHints *fHintXY; TList *fTrash; public: XFilterFrame() {} XFilterFrame(const TGWindow *window, UInt_t w, UInt_t h); virtual ~XFilterFrame(); void DoMenu(Int_t id); void DoCloseWindow(); private: void CreateMenuBar(); void DeleteMenuBar(); void CreateFrameTwoGroups(TGCompositeFrame *parent); void DeleteFrameTwoGroups(); void CreateTabFilterCriterion(TGTab *tab); void DeleteTabFilterCriterion(); void CreateFrameFilterCriterion(TGCompositeFrame *parent); void DeleteFrameFilterCriterion(); #if !defined (__CINT__) || defined (__MAKECINT__) ClassDef(XFilterFrame,0) //FilterFrame #endif }; //______________________________________________________________________________ //______________________________________________________________________________ //debug: print function names const Bool_t kCS = 1; #if !defined (__CINT__) || defined (__MAKECINT__) ClassImp(XFilterFrame); #endif const Int_t kBufSize = 512; //______________________________________________________________________________ XFilterFrame::XFilterFrame(const TGWindow *window, UInt_t w, UInt_t h) { if(kCS) cout << "------XFilterFrame::XFilterFrame------" << endl; fTrash = new TList(); fHintTL = new TGLayoutHints(kLHintsTop | kLHintsLeft); fHintTX = new TGLayoutHints(kLHintsTop | kLHintsExpandX); fHintTXY = new TGLayoutHints(kLHintsTop | kLHintsExpandX | kLHintsExpandY); fHintRXY = new TGLayoutHints(kLHintsRight | kLHintsExpandX | kLHintsExpandY); fHintLY = new TGLayoutHints(kLHintsLeft | kLHintsExpandY); fHintXY = new TGLayoutHints(kLHintsExpandX | kLHintsExpandY); fMain = new TGMainFrame(window, w, h); fMain->Connect("CloseWindow()", "XFilterFrame", this, "DoCloseWindow()"); //////////////////////// // Commenting out CreateMenuBar AND fBrowseUTBtn button (lines 343-347): // ALL keys can be pressed!!! //////////////////////// CreateMenuBar(); // Basic frame layout fLayout = new TGLayoutHints(kLHintsTop | kLHintsExpandX | kLHintsExpandY); fHF1 = new TGHorizontalFrame(fMain, 20, 20); fMain->AddFrame(fHF1, fLayout); fVF1 = new TGVerticalFrame(fHF1, 500, 200); fHF1->AddFrame(fVF1, fLayout); CreateFrameTwoGroups(fVF1); // Main settings fMain->SetWindowName("TwoGroups"); fMain->MapSubwindows(); fMain->Resize(640, 620); fMain->MapWindow(); fMain->Move(420, 20); }//Constructor //______________________________________________________________________________ XFilterFrame::~XFilterFrame() { if(kCS) cout << "------XFilterFrame::~XFilterFrame------" << endl; DeleteFrameTwoGroups(); DeleteMenuBar(); delete fLayout; delete fHintTL; delete fHintTX; delete fHintTXY; delete fHintRXY; delete fHintLY; delete fHintXY; delete fHF1; delete fVF1; fTrash->Delete(); delete fTrash; delete fMain; }//Destructor //______________________________________________________________________________ void XFilterFrame::DoMenu(Int_t id) { if(kCS) cout << "------XFilterFrame::DoMenu------" << endl; switch (id) { // File menu case M_FILE_OPEN: // OpenFile(); break; case M_FILE_EXIT: DoCloseWindow(); break; default: break; } }//DoMenu //______________________________________________________________________________ void XFilterFrame::DoCloseWindow() { if(kCS) cout << "------XFilterFrame::DoCloseWindow------" << endl; delete this; //does not exit root }//DoCloseWindow //______________________________________________________________________________ void XFilterFrame::CreateMenuBar() { if(kCS) cout << "------XFilterFrame::CreateMenuBar------" << endl; // File menu fMenuFile = new TGPopupMenu(gClient->GetRoot()); fMenuFile->AddEntry("&Open...", M_FILE_OPEN); fMenuFile->AddEntry("&Exit", M_FILE_EXIT); fMenuFile->Connect("Activated(Int_t)","XFilterFrame",this,"DoMenu(Int_t)"); // Create menubar layout hints fMenuBarLayout = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX, 0, 0, 1, 1); fMenuBarItemLayout = new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 4, 0, 0); fMenuBarHelpLayout = new TGLayoutHints(kLHintsTop | kLHintsRight); // Add menus to MenuBar fMenuBar = new TGMenuBar(fMain, 1, 1, kHorizontalFrame); fMenuBar->AddPopup("&File", fMenuFile, fMenuBarItemLayout); fMain->AddFrame(fMenuBar, fMenuBarLayout); // Line to separate menubar fLineH1 = new TGHorizontal3DLine(fMain); fLineLayout = new TGLayoutHints(kLHintsTop | kLHintsExpandX); fMain->AddFrame(fLineH1, fLineLayout); fLineH1->DrawBorder(); }//CreateMenuBar //______________________________________________________________________________ void XFilterFrame::DeleteMenuBar() { if(kCS) cout << "------XFilterFrame::DeleteMenuBar------" << endl; delete fLineLayout; delete fLineH1; delete fMenuBarLayout; delete fMenuBarItemLayout; delete fMenuBarHelpLayout; delete fMenuBar; delete fMenuFile; }//DeleteMenuBar //______________________________________________________________________________ void XFilterFrame::CreateFrameTwoGroups(TGCompositeFrame *parent) { if(kCS) cout << "------XFilterFrame::CreateFrameTwoGroups------" << endl; // Create tabs in canvas fFTwoGrps = new TGVerticalFrame(parent, 0, 0); fCanvas = new TGCanvas(fFTwoGrps, 10, 10, 0); fTab = new TGTab(fCanvas->GetViewPort(), 200, 20); fTab->Associate(parent); //? fCanvas->SetContainer(fTab); // Create tabs CreateTabFilterCriterion(fTab); fFTwoGrps->AddFrame(fCanvas, fHintXY); fFTwoGrps->Resize(200, 260); parent->AddFrame(fFTwoGrps, fHintRXY); }//CreateFrameTwoGroups //______________________________________________________________________________ void XFilterFrame::DeleteFrameTwoGroups() { if(kCS) cout << "------XFilterFrame::DeleteFrameTwoGroups------" << endl; DeleteTabFilterCriterion(); delete fTab; delete fCanvas; delete fFTwoGrps; }//DeleteFrameTwoGroups //______________________________________________________________________________ void XFilterFrame::CreateTabFilterCriterion(TGTab *tab) { // Create Filter tab frames if(kCS) cout << "------XFilterFrame::CreateTabFilterCriterion------" << endl; TGLayoutHints *hint = 0; TGCompositeFrame *tabframe = 0; // Tab Select tabframe = tab->AddTab("Filter Criterion"); fFTUFltr = new TGCompositeFrame(tabframe, 20, 20, kVerticalFrame | kFixedSize); hint = new TGLayoutHints(kLHintsTop | kLHintsLeft, 5, 5, 10, 5); tabframe->AddFrame(fFTUFltr, hint); fTrash->Add(hint); fFTUFltr->Resize(600,525); CreateFrameFilterCriterion(fFTUFltr); }//CreateTabFilterCriterion //______________________________________________________________________________ void XFilterFrame::DeleteTabFilterCriterion() { if(kCS) cout << "------XFilterFrame::DeleteTabFilterCriterion------" << endl; DeleteFrameFilterCriterion(); delete fFTUFltr; }//DeleteTabFilterCriterion //______________________________________________________________________________ void XFilterFrame::CreateFrameFilterCriterion(TGCompositeFrame *parent) { // Create Filter Criterion frames if(kCS) cout << "------XFilterFrame::CreateFrameFilterCriterion------" << endl; TGTableLayout *layout = 0; TGTableLayoutHints *thint = 0; fFGFtrCr = new TGGroupFrame(parent, "Select Filter Criterion", kVerticalFrame); layout = new TGTableLayout(fFGFtrCr, 1, 2); fFGFtrCr->SetLayoutManager(layout); //layout deleted by fFGUFiCr! parent->AddFrame(fFGFtrCr, fHintTX); fTxtUT = new TGTextEntry(fFGFtrCr, fBufUT = new TGTextBuffer(kBufSize), -1); fTxtUT->Resize(320,20); thint = new TGTableLayoutHints(0,1, 0,1, kLHintsLeft, 0, 5, 5, 5); fFGFtrCr->AddFrame(fTxtUT, thint); fTrash->Add(thint); //////////////////////// // a, displaying this button: keys "o" and "f" cannot be pressed!! // b, commenting out this button: key "o" can be pressed, but not key "f" //////////////////////// //* fBrowseUTBtn = new TGTextButton(fFGFtrCr, "Br&owse...", B_BROWSE_UNITEST); // fBrowseUTBtn->Connect("Clicked()", "XFilterFrame", this, "DoSelectFile()"); thint = new TGTableLayoutHints(1,2, 0,1, kLHintsRight, 1, 6, 5, 5); fFGFtrCr->AddFrame(fBrowseUTBtn,thint); fTrash->Add(thint); //*/ }//CreateFrameFilterCriterion //______________________________________________________________________________ void XFilterFrame::DeleteFrameFilterCriterion() { if(kCS) cout << "------XFilterFrame::DeleteFrameFilterCriterion------" << endl; delete fBrowseUTBtn; delete fTxtUT; delete fFGFtrCr; }//DeleteFrameFilterCriterion //______________________________________________________________________________ void guiTestKeys() { new XFilterFrame(gClient->GetRoot(), 400, 220); }