Hi Michael,
sorry I was not clear enough, the embedded object TGNumberEntryField
derives from TGTextEntry and has the SetFocus() method. Therefore,
create a TGNumberEntry object and then get its entry field via
GetNumberEntry(). Notice that slot methods like FChangeFocus() must have
a dictionary. So when run from the interpreter this is always the case
but when from compiled code you have to first generate a dictionary for
the class which has the FChangeFocus method.
Cheers, Fons.
On Fri, 2003-02-14 at 00:13, Michael T. Gericke wrote:
> Hi Fons,
>
> Thank you for your quick help.
> Unfortunately, the TGNumberEntry class does not have a member
> SetFocus(). So I changed from TGNumberEntry to TGTextEntry and
> converted the strings to numbers after reading them.
> But now when I run the program, I get the following error
> message:
>
> Error in <TQObject::CheckConnectArgs>: slot FChangeFocus() does not
> exist
>
>
> I believe that I included all the necessary function calls, judging from
> you example.
>
> Do you know what this means?
>
> Thanks,
>
> Michael Gericke
>
>
>
> On Wed, 2003-02-12 at 16:04, Fons Rademakers wrote:
> > Hi Michael,
> >
> > use the SetFocus() method of TGTextEntry of which TGNumberEntry
> > derives. See the attached example.
> >
> > Cheers, Fons.
> >
> >
> > On Wed, 2003-02-12 at 22:58, Michael T. Gericke wrote:
> > > Hi,
> > >
> > > I was wondering if anyone knows how to force a dialog box
> > > (TGTransientFrame) to switch focus from one of its widgets
> > > (say a TGNumberEntry widget) to another using the "Tab"
> > > button....
> > >
> > >
> > > Thanks,
> > >
> > > Michael Gericke
> > --
> > 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
> > ----
> >
>
> >
> > //--------------------------------------//
> > // macro gui1.C //
> > //--------------------------------------//
> > #include <stdio.h>
> > #include <stdlib.h>
> > #include <iostream.h>
> >
> > #include <TROOT.h>
> > #include <TApplication.h>
> > #include <TVirtualX.h>
> >
> > #include <RQ_OBJECT.h>
> > #include <TGFrame.h>
> > #include <TGMenu.h>
> > #include <TGTextEntry.h>
> > #include <TGTextBuffer.h>
> > #include <TGListBox.h>
> > #include <TGFileDialog.h>
> > #include <TSystem.h>
> > #include <TEnv.h>
> >
> >
> > const char *filetypes[] = { "All files", "*",
> > "ROOT files", "*.root",
> > "ROOT macros", "*.C",
> > 0, 0 };
> >
> > class TNewDlog {
> >
> > RQ_OBJECT()
> >
> > private:
> > TGMainFrame *fMain;
> > TGCompositeFrame *fFrameLT;
> > TGGroupFrame *fFrameInfo;
> > TGTextEntry *fNameF;
> > TGTextBuffer *fBufF;
> > TGTextEntry *fNameL;
> > TGTextBuffer *fBufL;
> > TGGroupFrame *fFrameDir;
> > // TGListBox *fDir;
> > TGTextEntry *fDir;
> > TGTextBuffer *fBufDir;
> > TGButton *fBrowseBtn;
> > TGCompositeFrame *fFrameLB;
> > TGButton *fOkBtn;
> > TGButton *fCancelBtn;
> >
> > public:
> > TNewDlog(const TGWindow *vWindow,
> > UInt_t vWidth, UInt_t vHeight, UInt_t vOptions =
> > kVerticalFrame);
> > virtual ~TNewDlog();
> >
> > // slots
> > void FCloseWindow();
> > void FBrowse();
> > void FPressOK();
> > void FCancel();
> > void FChangeFocus();
> > };
> >
> >
> > TNewDlog::TNewDlog(const TGWindow *vWindow,
> > UInt_t vWidth, UInt_t vHeight, UInt_t
> > vOptions)
> > {
> > fMain = new TGMainFrame(vWindow, vWidth, vHeight, vOptions);
> > fMain->Connect("CloseWindow()", "TNewDlog", this, "FCloseWindow()");
> >
> > // FrameLT for subframes
> > fFrameLT = new TGCompositeFrame(fMain, 200, 20, kVerticalFrame);
> > fMain->AddFrame(fFrameLT, new TGLayoutHints(kLHintsLeft |
> > kLHintsTop));
> >
> > // Subframe Project Info
> > fFrameInfo = new TGGroupFrame(fFrameLT, "Author Info",
> > kVerticalFrame);
> > // fFrameInfo->SetLayoutManager(new TGTableLayout(fFrameInfo,2,2));
> > //error
> > fFrameInfo->SetLayoutManager(new TGMatrixLayout(fFrameInfo,0,2,10));
> > fFrameLT->AddFrame(fFrameInfo,
> > new TGLayoutHints(kLHintsTop | kLHintsLeft |
> > kLHintsExpandX,5,5,5,5));
> >
> > fFrameInfo->AddFrame(new TGLabel(fFrameInfo,new TGString("First
> > Name")),
> > new TGLayoutHints(kLHintsTop | kLHintsLeft));
> >
> > fNameF = new TGTextEntry(fFrameInfo, fBufF = new TGTextBuffer(100),
> > -1);
> > fNameF->Connect("ReturnPressed()", "TNewDlog", this, "FPressOK()");
> > fNameF->Connect("TabPressed()", "TNewDlog", this, "FChangeFocus()");
> > fFrameInfo->AddFrame(fNameF,
> > new TGLayoutHints(kLHintsTop | kLHintsLeft, 2, 2, 2, 2));
> >
> > fNameF->Resize(250, fNameF->GetDefaultHeight());
> >
> > fFrameInfo->AddFrame(new TGLabel(fFrameInfo,new TGString("Last
> > Name")),
> > new TGLayoutHints(kLHintsTop | kLHintsLeft));
> >
> > fNameL = new TGTextEntry(fFrameInfo, fBufL = new TGTextBuffer(100),
> > -1);
> > fNameL->Connect("ReturnPressed()", "TNewDlog", this, "FPressOK()");
> > fNameL->Connect("TabPressed()", "TNewDlog", this, "FChangeFocus()");
> > fFrameInfo->AddFrame(fNameL,
> > new TGLayoutHints(kLHintsTop | kLHintsLeft, 2, 2, 2, 2));
> >
> > fNameL->Resize(250, fNameL->GetDefaultHeight());
> >
> > // Subframe Directory
> > fFrameDir = new TGGroupFrame(fFrameLT, "Directory",
> > kHorizontalFrame);
> > fFrameLT->AddFrame(fFrameDir,
> > new TGLayoutHints(kLHintsTop | kLHintsLeft |
> > kLHintsExpandX,5, 5, 5, 5));
> >
> > fDir = new TGTextEntry(fFrameDir, fBufDir = new TGTextBuffer(255),
> > -1);
> > fDir->Connect("ReturnPressed()", "TNewDlog", this, "FPressOK()");
> > fDir->Connect("TabPressed()", "TNewDlog", this, "FChangeFocus()");
> > // fDir = new TGListBox(fFrameDir,-1);
> > fDir->Resize(400,20);
> > char tmp[255];
> > sprintf(tmp,"%s",gSystem->WorkingDirectory());
> > fDir->SetText(tmp);
> > // fDir->AddEntry(tmp,1);
> > fFrameDir->AddFrame(fDir, new
> > TGLayoutHints(kLHintsLeft|kLHintsTop,2,2,2,2));
> >
> > fBrowseBtn = new TGTextButton(fFrameDir, "&Browse...", 1);
> > fBrowseBtn->Connect("Clicked()", "TNewDlog", this, "FBrowse()");
> > fFrameDir->AddFrame(fBrowseBtn, new TGLayoutHints(kLHintsRight |
> > kLHintsTop));
> >
> > // FrameLB for OK, Cancel
> > fFrameLB = new TGHorizontalFrame(fMain, 200, 20, kFixedWidth);
> > fMain->AddFrame(fFrameLB, new TGLayoutHints(kLHintsLeft |
> > kLHintsBottom));
> >
> > fOkBtn = new TGTextButton(fFrameLB, "&OK", 1);
> > fOkBtn->Connect("Clicked()", "TNewDlog", this, "FPressOK()");
> > //fOkBtn->Resize(150,20); // does not work
> > fFrameLB->AddFrame(fOkBtn,
> > new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX,
> > 5, 5, 5, 5));
> >
> > fCancelBtn = new TGTextButton(fFrameLB, "&Cancel", 1);
> > fCancelBtn->Connect("Clicked()", "TNewDlog", this, "FCancel()");
> > fFrameLB->AddFrame(fCancelBtn,
> > new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX,
> > 5, 5, 5, 5));
> >
> > fFrameLB->Resize(150, fOkBtn->GetDefaultHeight());
> >
> > fMain->MapSubwindows();
> > fMain->Resize(fMain->GetDefaultSize());
> > fMain->SetWMPosition(140,120);
> > fMain->Move(140,120);
> > // fMain->Resize(400,220);
> >
> > fMain->SetWindowName("New Dialog");
> >
> > fMain->MapWindow();
> > }//Constructor
> >
> > //----------------------------------------------------------------------//
> >
> > TNewDlog::~TNewDlog()
> > {
> > delete fOkBtn; delete fCancelBtn; delete fFrameLB;
> > delete fBrowseBtn; delete fDir; delete fFrameDir;
> > delete fNameL; delete fNameF; delete fFrameInfo;
> > delete fFrameLT;
> >
> > delete fMain;
> > }//Destructor
> >
> > //----------------------------------------------------------------------//
> >
> > void TNewDlog::FCloseWindow()
> > {
> > delete this;
> > }//FCloseWindow
> >
> > //----------------------------------------------------------------------//
> >
> > void TNewDlog::FBrowse()
> > {
> > printf("Browse\n");
> >
> > TGFileInfo fi;
> > fi.fFileTypes = filetypes;
> > fi.fIniDir = StrDup(fBufDir->GetString());
> > printf("fIniDir = %s\n", fi.fIniDir);
> > new TGFileDialog(gClient->GetRoot(), fMain, kFDOpen, &fi);
> > printf("Open file: %s (dir: %s)\n", fi.fFilename, fi.fIniDir);
> > fDir->SetText(fi.fIniDir);
> > }//FBrowseProject
> >
> > //----------------------------------------------------------------------//
> >
> > void TNewDlog::FCancel()
> > {
> > // Clear entries
> > fBufF->Clear();
> > fBufL->Clear();
> >
> > printf("Cancel\n");
> > }//FCancel
> >
> > //----------------------------------------------------------------------//
> >
> > void TNewDlog::FPressOK()
> > {
> > cout << "First Name: " << fBufF->GetString() << endl;
> > cout << "Last Name: " << fBufL->GetString() << endl;
> > cout << "Directory: " << fBufDir->GetString() << endl;
> >
> > fMain->SendCloseMessage();
> > }//FPressOK
> >
> > //----------------------------------------------------------------------//
> >
> > void TNewDlog::FChangeFocus()
> > {
> > if (gTQSender == fNameF)
> > fNameL->SetFocus();
> >
> > if (gTQSender == fNameL)
> > fDir->SetFocus();
> >
> > if (gTQSender == fDir)
> > fNameF->SetFocus();
> > }
> >
> > //----------------------------------------------------------------------//
> >
> > void guiex2()
> > {
> > new TNewDlog(gClient->GetRoot(), 400, 220);
> > }
> >
> > //-------------------------END-------------------
> >
--
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 : Thu Jan 01 2004 - 17:50:09 MET