[ROOT] Problem adding/removing Tab

From: cstrato (aon.912121399@aon.at)
Date: Wed Feb 26 2003 - 21:01:23 MET


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