Dear Rooters
Enlosed I am sending you a macro where Tab1 contains a checkbox.
If I check the box, Tab2 should be added (which works), however,
if I uncheck the box, I would like to remove Tab2. Sorrowly, this is
not possible, in contrast, sometimes a further Tab is added.
Do you know, if something is wrong with my code, or if there is
another way to achieve this?
Thank you in advance.
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
_._._._._._._._._._._._._._._._
class MyClass {
RQ_OBJECT()
private:
TGMainFrame *fMain;
TGCompositeFrame *fFrameLB;
TGButton *fOkBtn;
TGButton *fCancelBtn;
TGGroupFrame *fF1V1;
TGTab *fTab;
TGCompositeFrame *fT0;
TGTextEntry *fTxt0;
TGTextBuffer *fBuf0;
TGCompositeFrame *fT1;
TGTextEntry *fTxt1;
TGTextBuffer *fBuf1;
TGCheckButton *fCheck1;
TGCompositeFrame *fT2;
TGTextEntry *fTxt2;
TGTextBuffer *fBuf2;
TGCompositeFrame *fT3;
TGTextEntry *fTxt3;
TGTextBuffer *fBuf3;
TGLayoutHints *fLH1, *fLH2;
TList *fTrash;
Bool_t fHasTab2;
public:
MyClass(const TGWindow *window, UInt_t w, UInt_t h, UInt_t opt = kVerticalFrame);
virtual ~MyClass();
// slots
void DoCloseWindow();
void DoClickOK();
void DoClickCancel();
// void DoClickCheck1(Bool_t vIsOn);
void DoClickCheck1();
private:
void CreateTab0();
void DeleteTab0();
void CreateTab1();
void DeleteTab1();
void CreateTab2();
void DeleteTab2();
void CreateTab3();
void DeleteTab3();
// ClassDef(MyClass,0) //MyClass
};
//ClassImp(MyClass)
//----------------------------------------------------------------------//
MyClass::MyClass(const TGWindow *window, UInt_t w, UInt_t h, UInt_t opt)
{
fTrash = new TList;
TGLayoutHints *lh;
fMain = new TGMainFrame(window, w, h, opt);
fMain->Connect("CloseWindow()", "MyClass", this, "DoCloseWindow()");
// FrameLB for OK, Cancel
fFrameLB = new TGHorizontalFrame(fMain, 120, 20, kFixedWidth);
fLH1 = new TGLayoutHints(kLHintsBottom | kLHintsCenterX, 2, 2, 5, 1);
fMain->AddFrame(fFrameLB, fLH1);
fTrash->Add(fLH1);
fOkBtn = new TGTextButton(fFrameLB, "&OK", 1);
fOkBtn->Connect("Clicked()", "MyClass", this, "DoClickOK()");
lh = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX, 2, 15, 2, 2);
fFrameLB->AddFrame(fOkBtn, lh);
fTrash->Add(lh);
fCancelBtn = new TGTextButton(fFrameLB, "&Cancel", 2);
fCancelBtn->Connect("Clicked()", "MyClass", this, "DoClickCancel()");
lh = new TGLayoutHints(kLHintsTop | kLHintsRight, 5, 2, 2, 2);
fFrameLB->AddFrame(fCancelBtn, lh);
fTrash->Add(lh);
fF1V1 = new TGGroupFrame(fMain, "Text Info", kHorizontalFrame);
lh = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX, 5, 5, 5, 5);
fMain->AddFrame(fF1V1, lh);
fTrash->Add(lh);
// Frame for Tab widgets
fTab = new TGTab(fF1V1, 150, 150);
this->CreateTab0();
this->CreateTab1();
this->CreateTab3();
fHasTab2 = kFALSE;
lh = new TGLayoutHints(kLHintsTop | kLHintsLeft);
fF1V1->AddFrame(fTab, lh);
fTrash->Add(lh);
// Main frame settings
fMain->MapSubwindows();
fMain->Resize(fMain->GetDefaultSize());
fMain->SetWMSizeHints(300,200,300,200,0,0); //no grow
fMain->SetWindowName("Test");
fMain->MapWindow();
}//Constructor
MyClass::~MyClass()
{
this-DeleteTab3();
// this->DeleteTab2();
this->DeleteTab1();
this->DeleteTab0();
delete fTab; delete fF1V1;
delete fOkBtn; delete fCancelBtn; delete fFrameLB;
delete fMain;
if (fTrash) fTrash->Delete();
delete fTrash;
}//Destructor
void MyClass::DoCloseWindow()
{
delete this;
}//DoCloseWindow
void MyClass::DoClickCancel()
{
fMain->SendCloseMessage();
}//DoClickCancel
void MyClass::DoClickOK()
{
if (fOkBtn->GetState() != kButtonDisabled) {
fMain->SendCloseMessage();
}//if
}//DoClickOK
/*
void MyClass::DoClickCheck1(Bool_t isOn)
{
// if (fCheck1->GetState() == kButtonDown) {
if (isOn) {
cout << "down" << endl;
} else {
cout << "up" << endl;
}//if
fTab->MapSubwindows();
fTab->Layout();
}//DoClickCheck1
*/
void MyClass::DoClickCheck1()
{
this->DeleteTab3();
if (fHasTab2) {
fTab->RemoveTab(3);
} else {
fTab->RemoveTab(2);
}//if
fTab->Layout();
if (fCheck1->GetState() == kButtonDown) {
cout << "down" << endl;
this->CreateTab2();
this->CreateTab3();
} else {
cout << "up" << endl;
if (fHasTab2) {
this->DeleteTab2();
fTab->RemoveTab(2);
}//if
this->CreateTab3();
}//if
fTab->MapSubwindows();
fTab->Layout();
}//DoClickCheck1
void MyClass::CreateTab0()
{
TGLayoutHints *lh;
TGCompositeFrame *tabFrame;
tabFrame = fTab->AddTab("Tab 0");
fT0 = new TGCompositeFrame(tabFrame, 60, 20, kVerticalFrame);
lh = new TGLayoutHints(kLHintsTop | kLHintsLeft, 2, 2, 5, 2);
tabFrame->AddFrame(fT0, lh);
fTrash->Add(lh);
fTxt0 = new TGTextEntry(fT0, fBuf0 = new TGTextBuffer(255), -1);
fTxt0->Resize(200, fTxt0->GetDefaultHeight());
lh = new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsExpandX, 2, 2, 5, 5);
fT0->AddFrame(fTxt0, lh);
fTrash->Add(lh);
}//CreateTab0
void MyClass::DeleteTab0()
{
delete fTxt0; delete fT0;
}//DeleteTab0
void MyClass::CreateTab1()
{
TGLayoutHints *lh;
TGCompositeFrame *tabFrame;
tabFrame = fTab->AddTab("Tab 1");
fT1 = new TGCompositeFrame(tabFrame, 60, 20, kVerticalFrame);
lh = new TGLayoutHints(kLHintsTop | kLHintsLeft, 2, 2, 5, 2);
tabFrame->AddFrame(fT1, lh);
fTrash->Add(lh);
fTxt1 = new TGTextEntry(fT1, fBuf1 = new TGTextBuffer(255), -1);
fTxt1->Resize(200, fTxt1->GetDefaultHeight());
lh = new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsExpandX, 2, 2, 5, 5);
fT1->AddFrame(fTxt1, lh);
fTrash->Add(lh);
fCheck1 = new TGCheckButton(fT1, "Add Tab 2", 10);
// fCheck1->Connect("Clicked()", "MyClass", this, "DoClickCheck1()");
fCheck1->Connect("Pressed()", "MyClass", this, "DoClickCheck1()");
fT1->AddFrame(fCheck1, lh);
}//CreateTab1
void MyClass::DeleteTab1()
{
delete fTxt1; delete fT1;
}//DeleteTab1
void MyClass::CreateTab2()
{
TGLayoutHints *lh;
TGCompositeFrame *tabFrame;
tabFrame = fTab->AddTab("Tab 2");
fT2 = new TGCompositeFrame(tabFrame, 60, 20, kVerticalFrame);
lh = new TGLayoutHints(kLHintsTop | kLHintsLeft, 2, 2, 5, 2);
tabFrame->AddFrame(fT2, lh);
fTrash->Add(lh);
fTxt2 = new TGTextEntry(fT2, fBuf2 = new TGTextBuffer(255), -1);
fTxt2->Resize(200, fTxt2->GetDefaultHeight());
lh = new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsExpandX, 2, 2, 5, 5);
fT2->AddFrame(fTxt2, lh);
fTrash->Add(lh);
fHasTab2 = kTRUE;
}//CreateTab2
void MyClass::DeleteTab2()
{
delete fTxt2; delete fT2;
fHasTab2 = kFALSE;
}//DeleteTab2
void MyClass::CreateTab3()
{
TGLayoutHints *lh;
TGCompositeFrame *tabFrame;
tabFrame = fTab->AddTab("Tab 3");
fT3 = new TGCompositeFrame(tabFrame, 60, 20, kVerticalFrame);
lh = new TGLayoutHints(kLHintsTop | kLHintsLeft, 2, 2, 5, 2);
tabFrame->AddFrame(fT3, lh);
fTrash->Add(lh);
fTxt3 = new TGTextEntry(fT3, fBuf3 = new TGTextBuffer(255), -1);
fTxt3->Resize(200, fTxt3->GetDefaultHeight());
lh = new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsExpandX, 2, 2, 5, 5);
fT3->AddFrame(fTxt3, lh);
fTrash->Add(lh);
}//CreateTab3
void MyClass::DeleteTab3()
{
delete fTxt3; delete fT3;
}//DeleteTab3
//----------------------------------------------------------------------//
void guiAddTab()
{
new MyClass(gClient->GetRoot(), 300, 120);
}
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:09 MET