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