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