No dtors are needed for those two classes since there is nothing to delete. Did you try to compile your guiNum.C (.x guiNum.C++)? Does this give the same error? Cheers, Fons. On Sunday 09 December 2001 18:59, cstrato@EUnet.at wrote: > Dear Rooters > > I have created a gui macro displaying a frame containing > a TGNumberEntry field (see macro guiNum.C below). > > Everything works fine, also when I close the gui. > However, when I want to restart the macro, I get a > *** Break *** segmentation violation. > Normally, this happens when I forgot to delete an object, > however, I could not find any problem with my macro. > > When checking "TGNumberEntry.cxx" I realized that > classes TGNumberEntryField, TGNumberEntryLayout do not > have a destructor? > Is this a bug, and could this be the problem? Or do they simply inherit > the destructor? > > Thank you in advance for your help. > > Best regards > Christian > ---------------------------------- > C.h.r.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 > > //------------------guiNum.C-------------------- > class XNumEntryGroup { > > RQ_OBJECT() > > private: > TGCompositeFrame *fCF; > TGLabel *fLab; > TGNumberEntry *fNum; > > TList *fTrash; > > public: > XNumEntryGroup(TGCompositeFrame *vFrame, UInt_t vWidth, UInt_t > vHeight, > const char *vLabel, Double_t vNum, Int_t vDigits, > TGNumberFormat::EStyle vStyle = TGNumberFormat::kNESReal, > TGNumberFormat::EAttribute vAttr = > TGNumberFormat::kNEAAnyNumber, > TGNumberFormat::ELimit vLimits = TGNumberFormat::kNELNoLimits, > Double_t vMin = 0, Double_t vMax = 1); > virtual ~XNumEntryGroup(); > > void FSetText(const char *vText) {fNum->SetText(vText);} > void FSetSetDate(Int_t y, Int_t m, Int_t d) {fNum->SetDate(y, m, > d);} > void FGetDate(Int_t& y, Int_t& m, Int_t& d) const > {fNum->GetDate(y, m, d);} > }; > > class MyClass { > > RQ_OBJECT() > > private: > TGMainFrame *fMain; > TGCompositeFrame *fFrameLB; > TGButton *fOkBtn; > TGButton *fCancelBtn; > TGGroupFrame *fF1V1; > XNumEntryGroup *fEGDate; > > TGLayoutHints *fLH1, *fLH2; > TList *fTrash; > > public: > MyClass(const TGWindow *vWindow, > UInt_t vWidth, UInt_t vHeight, UInt_t vOptions = > kVerticalFrame); > virtual ~MyClass(); > > // slots > void FCloseWindow(); > void FClickOK(); > void FClickCancel(); > > // ClassDef(MyClass,0) //NewProjectDlog > }; > > //----------------------------------------------------------------------// > > XNumEntryGroup::XNumEntryGroup(TGCompositeFrame *vFrame, UInt_t vWidth, > UInt_t vHeight, const char *vLabel, Double_t vNum, Int_t > vDigits, > TGNumberFormat::EStyle vStyle, > TGNumberFormat::EAttribute vAttr, > TGNumberFormat::ELimit vLimits, Double_t vMin, Double_t > vMax) > { > fTrash = new TList; > TGLayoutHints *vLH; > > fCF = new TGCompositeFrame(vFrame, vWidth, vHeight, > kHorizontalFrame); > vLH = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX); > vFrame->AddFrame(fCF, vLH); > fTrash->Add(vLH); > > fLab = new TGLabel(fCF, new TGString(vLabel)); > vLH = new TGLayoutHints(kLHintsTop | kLHintsLeft, 5, 5, 5, 5); > fCF->AddFrame(fLab, vLH); > fTrash->Add(vLH); > > fNum = new > TGNumberEntry(fCF,vNum,vDigits,-1,vStyle,vAttr,vLimits,vMin,vMax); > vLH = new TGLayoutHints(kLHintsTop | kLHintsRight, 2, 2, 5, 5); > fCF->AddFrame(fNum, vLH); > fNum->Resize(vWidth, fNum->GetDefaultHeight()); > fTrash->Add(vLH); > }//Constructor > > XNumEntryGroup::~XNumEntryGroup() > { > delete fNum; delete fLab; delete fCF; > > if (fTrash) fTrash->Delete(); > delete fTrash; > }//Destructor > > > //----------------------------------------------------------------------// > > MyClass::MyClass(const TGWindow *vWindow, > UInt_t vWidth, UInt_t vHeight, UInt_t vOptions) > { > fTrash = new TList; > > TGLayoutHints *vLH; > > fMain = new TGMainFrame(vWindow, vWidth, vHeight, vOptions); > fMain->Connect("CloseWindow()", "MyClass", this, "FCloseWindow()"); > > // 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, "FClickOK()"); > vLH = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX, 2, > 15, 2, 2); > fFrameLB->AddFrame(fOkBtn, vLH); > fTrash->Add(vLH); > > fCancelBtn = new TGTextButton(fFrameLB, "&Cancel", 2); > fCancelBtn->Connect("Clicked()", "MyClass", this, "FClickCancel()"); > vLH = new TGLayoutHints(kLHintsTop | kLHintsRight, 5, 2, 2, 2); > fFrameLB->AddFrame(fCancelBtn, vLH); > fTrash->Add(vLH); > > fF1V1 = new TGGroupFrame(fMain, "Date Info", kVerticalFrame); > vLH = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX, 5, > 5, 5, 5); > fMain->AddFrame(fF1V1, vLH); > fTrash->Add(vLH); > > // Date > fEGDate = new XNumEntryGroup(fF1V1, 100, 20, "Date(mm/dd/yyyy):", > 20010101, 10, > TGNumberFormat::kNESMDayYear); > > // Main frame settings > fMain->MapSubwindows(); > fMain->Resize(fMain->GetDefaultSize()); > fMain->SetWMSizeHints(500,300,500,300,0,0); //no grow > > fMain->SetWindowName("Test"); > fMain->MapWindow(); > }//Constructor > > MyClass::~MyClass() > { > delete fEGDate; delete fF1V1; > delete fOkBtn; delete fCancelBtn; delete fFrameLB; > delete fMain; > > if (fTrash) fTrash->Delete(); > delete fTrash; > }//Destructor > > void MyClass::FCloseWindow() > { > delete this; > }//FCloseWindow > > void MyClass::FClickCancel() > { > fMain->SendCloseMessage(); > }//FClickCancel > > void MyClass::FClickOK() > { > if (fOkBtn->GetState() != kButtonDisabled) { > fMain->SendCloseMessage(); > }//if > }//FClickOK > > > //----------------------------------------------------------------------// > > void guiNum() > { > new MyClass(gClient->GetRoot(), 400, 220); > } -- Org: CERN, European Laboratory for Particle Physics. Mail: 1211 Geneve 23, Switzerland E-Mail: Fons.Rademakers@cern.ch Phone: +41 22 7679248 WWW: http://root.cern.ch/~rdm/ Fax: +41 22 7679480
This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:51:11 MET