Re: [ROOT] Problem hiding group frame

From: Ilka Antcheva (Ilka.Antcheva@cern.ch)
Date: Mon Feb 16 2004 - 10:14:38 MET


Hi Christian,

You need to add the following two lines of code after mapping the main
frame:

...
   fMain->MapWindow();
   fMain->Move(420, 20);
   
   fFGTst->HideFrame(fFGroup1);   //<--- added 
   fFGTst->HideFrame(fFGroup2);   //<--- added
   
}//Constructor

Best regards, Ilka


cstrato wrote:
> 
> Dear Rooters
> 
> The enclosed macro "guiTestGroups.C" shows my problem.
> 
> When I select tab "Group Test" then I see in the upper
> left corner TGGroupFrame "Group 2" although it should
> be hidden! Only after selecting "Group 2" from TGComboBox,
> is Group 2 displayed correctly.
> 
> I have tried different options, but the problem remains.
> 
> Does anybody know where the mistake may be hidden?
> Thank you in advance.
> 
> My system is ROOT 4.00/01 (1.Feb 04) on MacOS X 10.3.1.
> 
> Best regards
> Christian
> _._._._._._._._._._._._._._._._
> C.h.i.s.t.i.a.n S.t.r.a.t.o.w.a
> V.i.e.n.n.a       A.u.s.t.r.i.a
> _._._._._._._._._._._._._._._._
> 
>   ------------------------------------------------------------------------
> // Test gui
> 
> //#ifndef __CINT__
> #include "RQ_OBJECT.h"
> #include "TG3DLine.h"
> #include "TGButton.h"
> #include "TGComboBox.h"
> #include "TGFrame.h"
> #include "TGLabel.h"
> #include "TGLayout.h"
> #include "TGListBox.h"
> #include "TGMenu.h"
> #include "TGTab.h"
> 
> #include "TList.h"
> #include "TString.h"
> #include "TROOT.h"
> #include "TSystem.h"
> //#endif
> #include <Riostream.h>
> 
> // Menu commands
> enum EMenuCommands {
>    M_FILE,
>    M_FILE_EXIT,
> };
> 
> class XFrameTestGroups {
> 
>    RQ_OBJECT("XFrameTestGroups")
> 
>    private:
>       TGMainFrame        *fMain;
> 
>       TGPopupMenu        *fMenuFile;
>       TGMenuBar          *fMenuBar;
>       TGHorizontal3DLine *fLineH1;
>       TGLayoutHints      *fMenuBarLayout;
>       TGLayoutHints      *fMenuBarItemLayout;
>       TGLayoutHints      *fLineLayout;
>       TGLayoutHints      *fHintTL;
>       TGLayoutHints      *fHintXY;
>       TGLayoutHints      *fHintRXY;
> 
>       TGCompositeFrame   *fFrame;
>       TGCanvas           *fCanvas;
>       TGTab              *fTab;
>       TGCompositeFrame    *fFTab1;      //Tab 1
>       TGGroupFrame         *fFG1;
>       TGCompositeFrame    *fFTest;      //Tab Test
>       TGGroupFrame         *fFGTst;
>       TGComboBox            *fTestBox;
>       TGGroupFrame          *fFGroup1;
>       TGGroupFrame          *fFGroup2;
> 
>       TList   *fTrash;
>       Int_t    fTestID;
> 
>    public:
>       XFrameTestGroups() {}
>       XFrameTestGroups(const TGWindow *window, UInt_t w, UInt_t h);
>       virtual ~XFrameTestGroups();
> 
>       void DoMenu(Int_t id);
>       void DoCloseWindow();
>       void DoSelectGroup(Int_t id = -1);
> 
>    private:
>       void CreateMenuBar();
>       void DeleteMenuBar();
> 
>       void CreateTab1(TGTab *tab);
>       void DeleteTab1();
>       void CreateTabTest(TGTab *tab);
>       void DeleteTabTest();
>       void CreateGroup1(TGCompositeFrame *parent);
>       void DeleteGroup1();
>       void CreateGroup2(TGCompositeFrame *parent);
>       void DeleteGroup2();
> 
> #if !defined (__CINT__) || defined (__MAKECINT__)
>       ClassDef(XFrameTestGroups,0) //FrameMultiGroup
> #endif
> };
> 
> // Test Ids
> enum ETest {
>    CB_GROUP1 = 1,
>    CB_GROUP2,
> };
> 
> const Int_t kNTest = 2;
> const char *kTest[2] = { "Group 1",
>                          "Group 2"};
> 
> //debug: print function names
> const Bool_t kCS = 1;
> 
> #if !defined (__CINT__) || defined (__MAKECINT__)
> ClassImp(XFrameTestGroups);
> #endif
> 
> //______________________________________________________________________________
> XFrameTestGroups::XFrameTestGroups(const TGWindow *window, UInt_t w, UInt_t h)
> {
>    if(kCS) cout << "------XFrameTestGroups::XFrameTestGroups------" << endl;
> 
>    fTestID = 1;
> 
>    fTrash   = new TList();
>    fHintTL  = new TGLayoutHints(kLHintsTop | kLHintsLeft);
>    fHintXY  = new TGLayoutHints(kLHintsExpandX | kLHintsExpandY);
>    fHintRXY = new TGLayoutHints(kLHintsRight | kLHintsExpandX | kLHintsExpandY);
> 
>    fMain = new TGMainFrame(window, w, h);
>    fMain->Connect("CloseWindow()", "XFrameTestGroups", this, "DoCloseWindow()");
> 
>    CreateMenuBar();
> 
>    fFrame = new TGVerticalFrame(fMain, w, h);
>    fCanvas = new TGCanvas(fFrame, w, h, 0);
>    fTab = new TGTab(fCanvas->GetViewPort(), 200, 20);
>    fTab->Associate(fMain);  //?
>    fCanvas->SetContainer(fTab);
> 
>    CreateTab1(fTab);
>    CreateTabTest(fTab);
> 
>    fFrame->AddFrame(fCanvas, fHintXY);
>    fFrame->Resize(200, 260);
> 
>    fMain->AddFrame(fFrame, fHintRXY);
> 
>    fMain->SetWindowName("TestGroups");
>    fMain->MapSubwindows();
>    fMain->Resize(640, 620);
>    fMain->MapWindow();
>    fMain->Move(420, 20);
> }//Constructor
> 
> //______________________________________________________________________________
> XFrameTestGroups::~XFrameTestGroups()
> {
>    if(kCS) cout << "------XFrameTestGroups::~XFrameTestGroups------" << endl;
> 
>    delete fHintTL; delete fHintXY; delete fHintRXY;
> 
>    DeleteMenuBar();
> 
>    DeleteTabTest();
>    DeleteTab1();
> 
>    delete fTab; delete fCanvas; delete fFrame;
> 
>    fTrash->Delete();
>    delete fTrash;
> 
>    delete fMain;
> }//Destructor
> 
> //______________________________________________________________________________
> void XFrameTestGroups::CreateMenuBar()
> {
>    if(kCS) cout << "------XFrameTestGroups::CreateMenuBar------" << endl;
> 
>    fMenuFile = new TGPopupMenu(gClient->GetRoot());
>    fMenuFile->AddEntry("&Exit",    M_FILE_EXIT);
>    fMenuFile->Connect("Activated(Int_t)","XFrameTestGroups",this,"DoMenu(Int_t)");
> 
>    fMenuBarLayout = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX, 0, 0, 1, 1);
>    fMenuBarItemLayout = new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 4, 0, 0);
> 
>    fMenuBar = new TGMenuBar(fMain, 1, 1, kHorizontalFrame);
>    fMenuBar->AddPopup("&File",        fMenuFile, fMenuBarItemLayout);
> 
>    fMain->AddFrame(fMenuBar, fMenuBarLayout);
> 
>    fLineH1 = new TGHorizontal3DLine(fMain);
>    fLineLayout = new TGLayoutHints(kLHintsTop | kLHintsExpandX);
>    fMain->AddFrame(fLineH1, fLineLayout);
>    fLineH1->DrawBorder();
> }//CreateMenuBar
> 
> //______________________________________________________________________________
> void XFrameTestGroups::DeleteMenuBar()
> {
>    if(kCS) cout << "------XFrameTestGroups::DeleteMenuBar------" << endl;
> 
>    delete fLineLayout;
>    delete fLineH1;
> 
>    delete fMenuBarLayout;
>    delete fMenuBarItemLayout;
> 
>    delete fMenuBar;
>    delete fMenuFile;
> }//DeleteMenuBar
> 
> //______________________________________________________________________________
> void XFrameTestGroups::DoMenu(Int_t id)
> {
>    if(kCS) cout << "------XFrameTestGroups::DoMenu------" << endl;
> 
>    switch (id) {
>       case M_FILE_EXIT:
>          DoCloseWindow();
>          break;
> 
>       default:
>          printf("Error: <XFrameTestGroups::DoMenu> Unknown ID %d selected\n", id);
>          break;
>    }
> }//DoMenu
> 
> //______________________________________________________________________________
> void XFrameTestGroups::DoCloseWindow()
> {
>    if(kCS) cout << "------XFrameTestGroups::DoCloseWindow------" << endl;
> 
>    delete this;  //does not exit root
> //   gApplication->Terminate(0);  //exit root, needed for standalone App
> }//DoCloseWindow
> 
> //______________________________________________________________________________
> void XFrameTestGroups::DoSelectGroup(Int_t id)
> {
>    if(kCS) cout << "------XFrameTestGroups::DoSelectGroup------" << endl;
> 
>    if (id == fTestID) return;
> 
>    fFGTst->HideFrame(fFGroup1);
>    fFGTst->HideFrame(fFGroup2);
> 
>    switch (id) {
>       case CB_GROUP1:
>          fFGTst->ShowFrame(fFGroup1);
>          break;
> 
>       case CB_GROUP2:
>          fFGTst->ShowFrame(fFGroup2);
>          break;
> 
>       default:
>          printf("Error: <XFrameTestGroups::DoSelectGroup> Unknown ID %d selected\n", id);
>          break;
>    }//switch
> 
>    fTestID = id;
> }//DoSelectGroup
> 
> //______________________________________________________________________________
> void XFrameTestGroups::CreateTab1(TGTab *tab)
> {
>    if(kCS) cout << "------XFrameTestGroups::CreateTab1------" << endl;
> 
>    TGLayoutHints    *hint     = 0;
>    TGCompositeFrame *tabframe = 0;
> 
>    tabframe = tab->AddTab("Tab 1");
>    fFTab1 = new TGCompositeFrame(tabframe, 20, 20, kVerticalFrame);
>    hint = new TGLayoutHints(kLHintsTop | kLHintsLeft, 5, 5, 10, 5);
>    tabframe->AddFrame(fFTab1, hint);
>    fTrash->Add(hint);
> 
>    fFG1 = new TGGroupFrame(fFTab1, "Group Tab 1", kVerticalFrame);
>    hint = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX, 0, 0, 10, 10);
>    fFTab1->AddFrame(fFG1, hint);
>    fTrash->Add(hint);
>    fFG1->Resize(400,200);
> 
>    TGLabel *lab = new TGLabel(fFG1, new TGString("Group for Tab 1"));
>    hint = new TGLayoutHints(kLHintsTop | kLHintsLeft, 5, 5, 10, 5);
>    fFG1->AddFrame(lab,hint);
>    fTrash->Add(hint);
>    fTrash->Add(lab);
> }//CreateTab1
> 
> //______________________________________________________________________________
> void XFrameTestGroups::DeleteTab1()
> {
>    // Delete Groups tab frames
>    if(kCS) cout << "------XFrameTestGroups::DeleteTab1------" << endl;
> 
>    delete fFG1;
>    delete fFTab1;
> }//DeleteTab1
> 
> //______________________________________________________________________________
> void XFrameTestGroups::CreateTabTest(TGTab *tab)
> {
>    if(kCS) cout << "------XFrameTestGroups::CreateTabTest------" << endl;
> 
>    TGLayoutHints    *hint     = 0;
>    TGCompositeFrame *tabframe = 0;
> 
>    tabframe = tab->AddTab("Group Test");
>    fFTest = new TGCompositeFrame(tabframe, 20, 20, kVerticalFrame);
>    hint = new TGLayoutHints(kLHintsTop | kLHintsLeft, 5, 5, 10, 5);
>    tabframe->AddFrame(fFTest, hint);
>    fTrash->Add(hint);
> 
>    fFGTst = new TGGroupFrame(fFTest, "Select Group", kVerticalFrame | kFixedSize);
>    fFTest->AddFrame(fFGTst, fHintTL);
>    fFGTst->Resize(600,460);
> 
>    fTestBox = new TGComboBox(fFGTst, -1);
>    fTestBox->Connect("Selected(Int_t)", "XFrameTestGroups", this, "DoSelectGroup(Int_t)");
>    hint = new TGLayoutHints(kLHintsTop | kLHintsRight, 5, 5, 15, 15);
>    fFGTst->AddFrame(fTestBox, hint);
>    fTestBox->Resize(250, 20);
>    for (Int_t i = 0; i < kNTest; i++) {
>       fTestBox->AddEntry(kTest[i], i+1);
>    }//for_i
>    fTestBox->Select(1);
> 
>    this->CreateGroup1(fFGTst);
>    this->CreateGroup2(fFGTst);
> 
>    fFGTst->HideFrame(fFGroup2);
>    fFGTst->MapSubwindows();
>    fFGTst->Layout();
> 
> //   DoSelectGroup(1);
> }//CreateTabTest
> 
> //______________________________________________________________________________
> void XFrameTestGroups::DeleteTabTest()
> {
>    if(kCS) cout << "------XFrameTestGroups::DeleteTabTest------" << endl;
> 
>    this->DeleteGroup2();
>    this->DeleteGroup1();
> 
>    delete fTestBox; delete fFGTst;
>    delete fFTest;
> }//DeleteTabTest
> 
> //______________________________________________________________________________
> void XFrameTestGroups::CreateGroup1(TGCompositeFrame *parent)
> {
>    if(kCS) cout << "------XFrameTestGroups::CreateGroup1------" << endl;
> 
>    TGLayoutHints *hint = 0;
> 
>    fFGroup1 = new TGGroupFrame(parent, "Group 1", kVerticalFrame);
>    hint = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX, 0, 0, 10, 10);
>    parent->AddFrame(fFGroup1, hint);
>    fTrash->Add(hint);
>    fFGroup1->Resize(400,200);
> 
>    TGLabel *lab = new TGLabel(fFGroup1, new TGString("This is Group 1"));
>    hint = new TGLayoutHints(kLHintsTop | kLHintsLeft, 5, 5, 10, 5);
>    fFGroup1->AddFrame(lab,hint);
>    fTrash->Add(hint);
>    fTrash->Add(lab);
> }//CreateGroup1
> 
> //______________________________________________________________________________
> void XFrameTestGroups::DeleteGroup1()
> {
>    if(kCS) cout << "------XFrameTestGroups::DeleteGroup1------" << endl;
> 
>    delete fFGroup1;
> }//DeleteGroup1
> 
> //______________________________________________________________________________
> void XFrameTestGroups::CreateGroup2(TGCompositeFrame *parent)
> {
>    if(kCS) cout << "------XFrameTestGroups::CreateGroup2------" << endl;
> 
>    TGLayoutHints *hint = 0;
> 
>    fFGroup2 = new TGGroupFrame(parent, "Group 2", kVerticalFrame);
>    hint = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX, 0, 0, 10, 10);
>    parent->AddFrame(fFGroup2, hint);
>    fTrash->Add(hint);
>    fFGroup2->Resize(400,200);
> 
>    TGLabel *lab = new TGLabel(fFGroup2, new TGString("This is Group 2!!"));
>    hint = new TGLayoutHints(kLHintsTop | kLHintsLeft, 5, 5, 10, 5);
>    fFGroup2->AddFrame(lab,hint);
>    fTrash->Add(hint);
>    fTrash->Add(lab);
> 
> //   parent->HideFrame(fFGroup2);
> }//CreateGroup2
> 
> //______________________________________________________________________________
> void XFrameTestGroups::DeleteGroup2()
> {
>    if(kCS) cout << "------XFrameTestGroups::DeleteGroup2------" << endl;
> 
>    delete fFGroup2;
> }//DeleteGroup2
> 
> //______________________________________________________________________________
> void guiTestGroups()
> {
>    new XFrameTestGroups(gClient->GetRoot(), 400, 220);
> }



This archive was generated by hypermail 2b29 : Sun Jan 02 2005 - 05:50:05 MET