Hi Isidro, you forgot to implement SettingDialog::DoRadio() to handle the radio button toggling. Also where you connected the signals to the DoRadio() slot you did specify the TestMsgBox class instead of SettingDialog. Attached working version. -- Fons -- 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 /////////////////////////////////////////////////////////////////////////// // // // Input Dialog Widget // // // /////////////////////////////////////////////////////////////////////////// #ifndef SettingsDialog_h #define SettingsDialog_h 1 #include <TGFrame.h> #include <TGLayout.h> #include <TGButtonGroup.h> #include <TGTextEntry.h> #include <TGTextBuffer.h> #include <TGLabel.h> #include <TGButton.h> class SettingDialog { public: SettingDialog(); ~SettingDialog(); void DoCancel(); void DoRadio(); private: TGTransientFrame *fDialog; // transient frame, main dialog window TGLayoutHints *fLDialog; TGCompositeFrame *fRadios; // frame with materials and energy rad. buttons TGLayoutHints *fLRadios; //Materials TGGroupFrame *fGMaterial; //Group frame with material buttons TGRadioButton *fRMaterial[4]; TGLayoutHints *fLMaterial; //Energies TGGroupFrame *fGEnergy; //Group frame with energy buttons TGRadioButton *fREnergy[5]; TGLayoutHints *fLEnergy; //Text for NEvents TGCompositeFrame *fText; TGLayoutHints *fLText1, *fLText2; TGTextEntry *fENEvents; TGTextBuffer *fTNEvents; TGLabel *fLNEvents; //Buttons TGHorizontalFrame *fButtons; TGLayoutHints *fLButtons; TGTextButton *fOk,*fCancel; }; #endif #include "SettingsDialog.h" #include <TGString.h> SettingDialog::~SettingDialog() { } SettingDialog::SettingDialog() { // Create simple input dialog. const TGWindow *main = gClient->GetRoot(); fDialog = new TGTransientFrame(main, main, 100, 100, kVerticalFrame); fDialog->Connect("CloseWindow()", "SettingDialog", this, "CloseWindow()"); fLDialog = new TGLayoutHints(kLHintsTop | kLHintsExpandX, 2, 2, 3, 0); // Main frame for materials and energy radio buttons fRadios = new TGCompositeFrame(fDialog, 60, 20, kHorizontalFrame); fLRadios = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX | kLHintsExpandY, 2, 2, 2, 2); //------------- Group Frame for materials fLMaterial = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX, 0, 0, 5, 0); fGMaterial = new TGGroupFrame(fRadios, new TGString("Materials")); fRMaterial[0] = new TGRadioButton(fGMaterial, new TGHotString("All"), 11); fRMaterial[1] = new TGRadioButton(fGMaterial, new TGHotString("Aluminium"), 12); fRMaterial[2] = new TGRadioButton(fGMaterial, new TGHotString("Iron"), 13); fRMaterial[3] = new TGRadioButton(fGMaterial, new TGHotString("Lead"), 14); for (unsigned int i = 0; i < 4; ++i) { fGMaterial->AddFrame(fRMaterial[i], fLMaterial); fRMaterial[i]->Connect("Pressed()", "SettingDialog", this, "DoRadio()"); } fRadios->AddFrame(fGMaterial,fLRadios); //------------ Group Frame for materials fLEnergy = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX, 0, 0, 5, 0); fGEnergy = new TGGroupFrame(fRadios, new TGString("Energies")); fREnergy[0] = new TGRadioButton(fGEnergy, new TGHotString("All"), 21); fREnergy[1] = new TGRadioButton(fGEnergy, new TGHotString("113 MeV"), 22); fREnergy[2] = new TGRadioButton(fGEnergy, new TGHotString("256 MeV"), 23); fREnergy[3] = new TGRadioButton(fGEnergy, new TGHotString("597 MeV"), 24); fREnergy[4] = new TGRadioButton(fGEnergy, new TGHotString("800 MeV"), 25); for (unsigned int i = 0; i < 5; ++i) { fGEnergy->AddFrame(fREnergy[i], fLEnergy); fREnergy[i]->Connect("Pressed()", "SettingDialog", this, "DoRadio()"); } fRadios->AddFrame(fGEnergy,fLRadios); //Number of Events fText = new TGCompositeFrame(fDialog, 60, 20, kHorizontalFrame); fLNEvents = new TGLabel(fText, new TGString("Number of Events:")); fENEvents = new TGTextEntry(fText, fTNEvents = new TGTextBuffer(7)); fTNEvents->AddText(0,"200000"); fENEvents->Resize(100, fENEvents->GetDefaultHeight()); fLText1 = new TGLayoutHints(kLHintsTop | kLHintsCenterY, 3, 5, 0, 0); fLText2 = new TGLayoutHints(kLHintsBottom | kLHintsCenterY, 0, 2, 0, 0); fText->AddFrame(fLNEvents, fLText1); fText->AddFrame(fENEvents, fLText2); //Buttons fButtons = new TGHorizontalFrame(fDialog, 60, 20, kFixedWidth); fLButtons = new TGLayoutHints(kLHintsCenterY | kLHintsExpandX, 5, 5, 0, 0); fOk = new TGTextButton(fButtons, "&Ok", 1); fCancel = new TGTextButton(fButtons, "&Cancel", 2); fOk->Connect("Clicked()", "SettingDialog", this, "DoOk()"); fCancel->Connect("Clicked()", "SettingDialog", this, "DoCancel()"); fButtons->AddFrame(fOk,fLButtons); fButtons->AddFrame(fCancel,fLButtons); //Add subframes fDialog->AddFrame(fRadios, fLDialog); fDialog->AddFrame(fText, fLDialog); fDialog->AddFrame(fButtons, fLDialog); fDialog->MapSubwindows(); fDialog->Resize(fDialog->GetDefaultSize()); fDialog->SetWindowName("Settings"); fDialog->MapWindow(); gClient->WaitFor(fDialog); } void SettingDialog::DoCancel() { // Handle Close button. fDialog->SendCloseMessage(); } void SettingDialog::DoRadio() { // Handle radio buttons. TGButton *btn = (TGButton *) gTQSender; Int_t id = btn->WidgetId(); if (id >= 11 && id <= 14) { for (int i = 0; i < 4; i++) if (fRMaterial[i]->WidgetId() != id) fRMaterial[i]->SetState(kButtonUp); } if (id >= 21 && id <= 25) { for (int i = 0; i < 5; i++) if (fREnergy[i]->WidgetId() != id) fREnergy[i]->SetState(kButtonUp); } }
This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:51:05 MET