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); }
This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:51:11 MET