Dear Rooters, dear Fons Enclosed I add the original macro displaying a frame containing a TGTextEntry field (see macro guiTxt.C below). In contrast to macro "guiNum.C" I can restart the macro from root without getting a segmentation violation. This macro uses the signal/slot mechanism of root, which worked without any problem in root 3.02/05. Sorrowly, the new version 3.02/06 can no longer emit the signal. Running the macro, I get now the following message: Error in <TQObject::CheckConnectArgs>: signal TQObjSender::FReturnPressed() does not exist This time, even compilation does not work (.x guiTxt.C++). This means that my whole gui code breaks!! Can you tell me what has changed between 3.02/05 and 3.02/06, so that I can no longer use the signal/slot mechanism? I realize that the static function "CheckConnectArgs" has been completely re-written in 3.02/06. Could this be the problem? Regarding the problem with TGNumberEntry, would it help to add the following destructor? TGNumberEntryLayout::~TGNumberEntryLayout() { fBox = 0; } 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 //--------------guiTxt.C----------------------- class XEntryGroup { RQ_OBJECT() private: TGCompositeFrame *fCF; TGLabel *fLab; TGTextEntry *fText; TGTextBuffer *fBuf; TList *fTrash; public: XEntryGroup(TGCompositeFrame *vFrame, UInt_t vWidth, UInt_t vHeight, const char *vLabel, const char *vText = "", Bool_t vIsEnabled = kTRUE, UInt_t vHDist = 5, UInt_t vVDist = 5); virtual ~XEntryGroup(); void FSetEnabled(Bool_t vIsEnabled) {fText->SetEnabled(vIsEnabled);} void FSetFocus() {fText->SetFocus();} void FSetText(TString vText) {fText->SetText(vText);} const char *FGetText() {return fText->GetText();} void FReturnPressed(); //*SIGNAL* void FTabPressed(); //*SIGNAL* void FTextChanged(const char *vText = 0); //*SIGNAL* // ClassDef(XEntryGroup,0) //EntryGroup }; class MyClass { RQ_OBJECT() private: TGMainFrame *fMain; TGCompositeFrame *fFrameLB; TGButton *fOkBtn; TGButton *fCancelBtn; TGGroupFrame *fF1V1; XEntryGroup *fEGText; 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 }; //ClassImp(XEntryGroup) //ClassImp(MyClass) //----------------------------------------------------------------------// XEntryGroup::XEntryGroup(TGCompositeFrame *vFrame, UInt_t vWidth, UInt_t vHeight, const char *vLabel, const char *vText, Bool_t vIsEnabled, UInt_t vHDist, UInt_t vVDist) { 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, vHDist, 2, vVDist, vVDist); fCF->AddFrame(fLab, vLH); fTrash->Add(vLH); fText = new TGTextEntry(fCF, fBuf = new TGTextBuffer(255), -1); fText->SetText(vText); //needs to be before Connect()!! fText->SetEnabled(vIsEnabled); fText->Connect("TextChanged(char *)", "XEntryGroup", this, "FTextChanged(char *)"); fText->Connect("TabPressed()", "XEntryGroup", this, "FTabPressed()"); fText->Connect("ReturnPressed()", "XEntryGroup", this, "FReturnPressed()"); vLH = new TGLayoutHints(kLHintsTop | kLHintsRight, 2, vHDist, vVDist, vVDist); fCF->AddFrame(fText, vLH); fText->Resize(vWidth, fText->GetDefaultHeight()); fTrash->Add(vLH); }//Constructor XEntryGroup::~XEntryGroup() { delete fText; delete fLab; delete fCF; if (fTrash) fTrash->Delete(); delete fTrash; }//Destructor void XEntryGroup::FReturnPressed() { Emit("FReturnPressed()"); }//FReturnPressed void XEntryGroup::FTabPressed() { Emit("FTabPressed()"); }//FTabPressed void XEntryGroup::FTextChanged(const char *vText) { Emit("FTextChanged(char*)", this->FGetText()); }//FTextChanged //----------------------------------------------------------------------// 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, "Text Info", kVerticalFrame); vLH = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX, 5, 5, 5, 5); fMain->AddFrame(fF1V1, vLH); fTrash->Add(vLH); // Text fEGText = new XEntryGroup(fF1V1, 200, 20, "Enter text:", "", kTRUE); fEGText->Connect("FReturnPressed()", "MyClass", this, "FClickOK()"); // 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 fEGText; 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 guiTxt() { new MyClass(gClient->GetRoot(), 400, 220); }
This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:51:12 MET