Hi Valeriy et al, On Tue, 19 Mar 2002 14:00:36 +0100 Valeriy Onuchin <Valeri.Onoutchine@cern.ch> wrote concerning "Re: [ROOT] Tab-key": > Hi Ivan, > > Ivan Kronkvist wrote: > > > How can I get my ROOT-GUI program to capture the Tab-key and > > move to the next TextEntry field or button? > > > > Check TabPressed signal > > http://root.cern.ch/root/html/TGTextEntry.html#TGTextEntry:TabPressed > > to move focus to another textentry use SetFocus method > > http://root.cern.ch/root/html/TGTextEntry.html#TGTextEntry:SetFocus Is there a way to put focus onto any kind of widget, so that the next keyboard event will be for that widget? I was thinking of something like a dialog box: class MyDialog { RQ_OBJECT("MyDialog") private: TGMainFrame* fMain; TGGroupFrame* fTopFrame; TGTextEntry* fEntry; TGHButtonGroup* fButtons; TGTextButton* fOkButton; TGTextButton* fCancelButton; TGFrame* fCurrent; public: MyDialog() { fMain = new TGMainFrame(gClient->GetRoot(), 1, 1); fTopFrame = new TGGroupFrame(fMain, "Hello"); fEntry = new TGTextEntry(fTopFrame, "Hello World"); fButtons = new TGHButtonGroup(fMain); fOkButton = new TGTextButton(fButtons,"&Ok"); fCancelButton = new TGTextButton(fButtons,"&Cancel"); fMain->AddFrame(fTopFrame); fMain->AddFrame(fButtons); fTopFrame->AddFrame(fEntry); fEntry->Connect("ReturnPressed()", "MyDialog", this, "HandleReturn()"); fEntry->Connect("TabPressed()", "MyDialog", this, "HandleTab()"); fOkButton->Connect("TabPressed()", "MyDialog", this, "HandleTab()"); fOkButton->Connect("ReturnPressed()", "MyDialog", this, "HandleReturn()"); fCancelButton->Connect("TabPressed()", "MyDialog", this, "HandleTab()"); fCancelButton->Connect("ReturnPressed()", "MyDialog", this, "HandleReturn()"); fButtons->Connect("Clicked(Int_t)", "MyDialog", this, "HandleClicked(Int_t)"); fCurrent = fEntry; fEntry->SetFocus(); fMain->MapSubwindows(); fMain->Resize(fMain->GetDefaultSize()); fMain->MapWindow(); } void HandleTab() { if (fCurrent == fEntry) fCurrent = fOkButton; else if (fCurrent == fOkButton) fCurrent = fCancelButton; else if (fCurrent == fCancelButton) fCurrent = fEntry; fCurrent->SetFocus(); } void HandleReturn() { if (fCurrent == fEntry) fCurrent = fOkButton; else if (fCurrent == fOkButton) { cout << fEntry->GetText() << endl; gApplication->Terminate(); } else if (fCurrent == fCancelButton) gApplication->Terminate(); } void HandleClicked(Int_t id) { if (id = 1) { cout << fEntry->GetText() << endl; gApplication->Terminate(); } gApplication->Terminate(); } }; That would really make the ROOT UI behave much like anyother UI out there. Perhaps, on Tab, the composite frames should cycle through it's children, giving focus to those that want it, and if nobody wants it, or reach the end, or whatever, give the event to the parent, so that the parent may choose the next in line for the event. Yours, Christian Holm Christensen ------------------------------------------- Address: Sankt Hansgade 23, 1. th. Phone: (+45) 35 35 96 91 DK-2200 Copenhagen N Cell: (+45) 28 82 16 23 Denmark Office: (+45) 353 25 305 Email: cholm@nbi.dk Web: www.nbi.dk/~cholm
This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:50:46 MET