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