Advertisement
AntonioVillanueva

DialogoPersonal II wxWidgets cpp

Jul 24th, 2018
251
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.03 KB | None | 0 0
  1. /*
  2.  * Implementacion DialogoPersonal Antonio Villanueva
  3.  *  * se tiene que utilizar con DialogoPersonal.h donde estan las definiciones https://pastebin.com/2R8zD1jG
  4.  * //g++ -Wall -static-libstdc++ -std=c++11 -Wunused-but-set-variable `wx-config --cxxflags` -o DialogPers *.cpp `wx-config --libs`
  5.  */
  6. #include "wx/valtext.h"
  7. #include "wx/valgen.h"
  8. #include "DialogoPersonal.h"
  9.  
  10. //----------------------------------------------------------------------
  11.  
  12. #include <wx/image.h>
  13.  
  14. IMPLEMENT_APP(DialogoPersonalApp);
  15.  
  16. bool DialogoPersonalApp::OnInit()
  17. {    
  18.     bool wxsOK = true;
  19.     wxInitAllImageHandlers();
  20.     if ( wxsOK )
  21.     {
  22.         DialogoPersonal Dlg(0); //Instancia la DialogoPersonal  
  23.         SetTopWindow(&Dlg);
  24.         Dlg.ShowModal();
  25.         wxsOK = false;
  26.     }
  27.     return wxsOK;
  28. }
  29.  
  30. //----------------------------------------------------------------------
  31.  
  32.  
  33. IMPLEMENT_CLASS(DialogoPersonal,wxDialog)
  34.  
  35. //Definiciones de la tabla de eventos, funciones asociadas a los eventos
  36. BEGIN_EVENT_TABLE(DialogoPersonal,wxDialog)
  37.     EVT_UPDATE_UI(ID_VOTO,DialogoPersonal::OnVotoUpdate)
  38.     EVT_BUTTON(ID_RESET,DialogoPersonal::OnResetClick)
  39.     EVT_BUTTON(ID_HELP,DialogoPersonal::OnHelpClick)   
  40.     EVT_BUTTON(ID_OK,DialogoPersonal::OnOK)
  41.     EVT_BUTTON(ID_CANCELAR,DialogoPersonal::OnCancelar)    
  42. END_EVENT_TABLE()
  43.  
  44. //Constructores de DialogoPersonal
  45. DialogoPersonal::DialogoPersonal(){
  46.     Init();
  47. }
  48.  
  49. DialogoPersonal::DialogoPersonal(wxWindow* parent,
  50.     wxWindowID id ,const wxString& caption,
  51.     const wxPoint& pos,const wxSize& size ,long style){
  52.     Init();
  53.     Crea(parent,id,caption,pos,size,style);    
  54. }
  55.  
  56. //Inicializacion por defecto de las variables miembro m_
  57. //Inicializar en constructor......
  58. void DialogoPersonal::DialogoPersonal::Init(){
  59.     m_nombre=wxEmptyString;//nombre por defecto vacio
  60.     m_edad=25;
  61.     m_sexo=false;
  62.     m_voto=false;
  63. }
  64.  
  65. //Creacion
  66. bool DialogoPersonal::Crea(wxWindow* parent,wxWindowID id,
  67.     const wxString& caption,const wxPoint& pos,const wxSize& size,long style){     
  68.        
  69.     //Para extra estilos , antes de la creacion del Dialogo
  70.     SetExtraStyle(wxWS_EX_BLOCK_EVENTS| wxDIALOG_EX_CONTEXTHELP);
  71.    
  72.     //Si error  en la funcion wxDialog::Create retorna falso opciones DEFECTO minimizar y resizer ...  
  73.     if (! wxDialog::Create(parent,id,caption,pos,size,wxDEFAULT_DIALOG_STYLE |wxMINIMIZE_BOX|wxRESIZE_BORDER)){return false;}
  74.  
  75.     CreaControles();
  76.     SetDialogHelp();
  77.     SetDialogValidators();
  78.  
  79.     //Ajusta el Dialogo al minimo tamano dictado por sizers
  80.     GetSizer()->Fit (this);
  81.    
  82.     //Asegua el tamnao minimo del Dialogo
  83.     GetSizer()->SetSizeHints(this);
  84.    
  85.     //Centra el Dialogo en el parent o si no existe en la pantalla 
  86.     Centre();
  87.  
  88.     return true;   
  89.     };
  90. //Control creacion de DialogoPersonal
  91. void DialogoPersonal::CreaControles(){
  92.    
  93.     //wxBoxSizer Superior
  94.     wxBoxSizer* topSizer=new wxBoxSizer(wxVERTICAL);
  95.     this->SetSizer(topSizer);
  96.    
  97.     //Segundo wxBoxSizer  para dar mas espacio alrededor de los controles
  98.     wxBoxSizer* boxSizer=new wxBoxSizer(wxVERTICAL);
  99.     //Se anade al wxBoxSizer Superior topSizer
  100.     topSizer->Add(boxSizer,0,wxALIGN_CENTER_HORIZONTAL|wxALL,5);
  101.        
  102.     //Mensaje del Dialogo
  103.     wxStaticText* descr=new wxStaticText(this,wxID_STATIC,
  104.         wxT("Introduzca su nombre ,edad,sexo y su intencion de voto"),
  105.         wxDefaultPosition,wxDefaultSize,0);          
  106.     boxSizer->Add(descr,0,wxALIGN_LEFT| wxALL,5);
  107.    
  108.     //Espacio
  109.     //boxSizer->Add(5,5,0,wxALIGN_CENTER_HORIZONTAL|wxALL,5);
  110.     boxSizer->AddSpacer(5);
  111.    
  112.     //Label text control
  113.     wxStaticText* nombreLabel=new wxStaticText(this,wxID_STATIC,
  114.         wxT("&Nombre "),wxDefaultPosition,wxDefaultSize,0);
  115.        
  116.     boxSizer->Add(nombreLabel);
  117.    
  118.     //wxTextControl ...el control de texto
  119.     wxTextCtrl* nombreCtrl=new  wxTextCtrl (this,ID_NOMBRE,wxT("Icaro"),
  120.     wxDefaultPosition,wxDefaultSize,0);  
  121.     boxSizer->Add(nombreCtrl,0,wxGROW|wxALL,5);//Se expande
  122.    
  123.     //wxBoxSizer Horizontal para guardar las distintas selecciones  edad,sexo,voto
  124.     wxBoxSizer* SeleccionHor=new wxBoxSizer(wxHORIZONTAL);
  125.    
  126.     boxSizer->Add(SeleccionHor,0,wxGROW|wxALL,5);
  127.    
  128.     //wxSpinControl seleccion de Edad  
  129.     wxSpinCtrl* edadSpin=new wxSpinCtrl(this,ID_EDAD,wxT("&Edad :"),
  130.         wxDefaultPosition,wxSize(60,-1),wxSP_ARROW_KEYS,0,120,25);
  131.  
  132.     SeleccionHor->Add(edadSpin,0,wxALIGN_CENTER_VERTICAL|wxALL,5);
  133.      
  134.     //Etiqueta control de sexo
  135.     wxStaticText* sexLabel=new wxStaticText(this,wxID_STATIC,wxT("&Sex"),
  136.         wxDefaultPosition,wxDefaultSize,0);
  137.        
  138.     SeleccionHor->Add(sexLabel,0,wxALIGN_CENTER_VERTICAL|wxALL,5);
  139.    
  140.     //Crea un array de wxStrings con dos selecciones Macho Hembra
  141.     wxString sexStrings[]={wxT("Macho"),wxT("Hembra")};
  142.    
  143.     wxChoice* sexChoice=new wxChoice(this,ID_SEXO,wxDefaultPosition,wxSize(80,-1),
  144.         WXSIZEOF(sexStrings),sexStrings,0);
  145.        
  146.     sexChoice->SetStringSelection(wxT("Hembra"));//Seleccion wxString por defecto  
  147.     SeleccionHor->Add(sexChoice,0,wxALIGN_CENTER_VERTICAL|wxALL,5);//Anade Choice
  148.  
  149.     //Ande un espacio ... Spacer wxSizer::Add(size, size, 0)
  150.     boxSizer->Add(5,5,1,wxALL,5);//ERROR !!!!!!!
  151.    
  152.     //wxCheckBox VOTO
  153.     wxCheckBox* votoCheck=new wxCheckBox(this,ID_VOTO,wxT("&Voto"),wxDefaultPosition,wxDefaultSize,0);
  154.     votoCheck->SetValue(true);//Seleccion por defecto
  155.    
  156.     SeleccionHor->Add(votoCheck,0,wxALIGN_CENTER_VERTICAL|wxALL,5);
  157.     //SeleccionHor->AddSpacer(5);
  158.    
  159.     //Una linea divisora antes de los botones OK y CANCEL la ponemos en el boxSizer casi principal
  160.     wxStaticLine* linea=new wxStaticLine(this,wxID_STATIC,wxDefaultPosition,wxDefaultSize,wxLI_HORIZONTAL);
  161.     boxSizer->Add(linea,0,wxGROW|wxALL,5);
  162.    
  163.     //wxBoxSizer para los BOTONES inferiores OK,RESET,CANCEL,HELP  
  164.     wxBoxSizer* Botonera=new wxBoxSizer(wxHORIZONTAL);
  165.     boxSizer->Add(Botonera,0, wxALL,5);
  166.  
  167.     //BOTONES RESET OK CANCEL HELP 
  168.     wxButton* botonReset=new wxButton( this, ID_RESET , wxT("&Reset") ,wxDefaultPosition , wxDefaultSize , 0);
  169.     Botonera->Add(botonReset,0,wxALL,5);//RESET
  170.  
  171.     wxButton* botonHelp=new wxButton( this, ID_HELP , wxT("&Help") ,wxDefaultPosition , wxDefaultSize , 0);
  172.     Botonera->Add(botonHelp,0,wxALL,5);//HELP  
  173.  
  174.     wxButton* botonOk=new wxButton( this, ID_OK , wxT("&Ok") ,wxDefaultPosition , wxDefaultSize , 0);
  175.     Botonera->Add(botonOk,0,wxALL,5);//OK  
  176.  
  177.     wxButton* botonCancel=new wxButton( this, ID_CANCELAR , wxT("&Cancel") ,wxDefaultPosition , wxDefaultSize , 0);
  178.     Botonera->Add(botonCancel,0,wxALL,5);//CANCEL
  179. }
  180.    
  181. //Fija los "validators" para los controles de Dialogo
  182. void DialogoPersonal::SetDialogValidators(){   
  183.     FindWindow(ID_NOMBRE)->SetValidator(wxTextValidator(wxFILTER_ALPHA,& m_nombre));
  184.     FindWindow(ID_EDAD)->SetValidator(wxGenericValidator(& m_edad));
  185.     FindWindow(ID_SEXO)->SetValidator(wxGenericValidator(& m_sexo));
  186.     FindWindow(ID_VOTO)->SetValidator(wxGenericValidator(& m_voto));           
  187. }
  188.  
  189. //Fija el texto de ayuda para los controles de dialogo
  190. void DialogoPersonal::SetDialogHelp(){
  191.     wxString nombreHelp=wxT(" Entre su nombre ");
  192.     wxString edadHelp=wxT(" Indique su edad ");
  193.     wxString sexoHelp=wxT(" Especifique su sexo ");
  194.     wxString votoHelp=wxT("Marcar si quiere votar ");
  195.        
  196.     FindWindow(ID_NOMBRE)->SetHelpText(nombreHelp);
  197.     FindWindow(ID_NOMBRE)->SetToolTip(nombreHelp);
  198.        
  199.     FindWindow(ID_EDAD)->SetHelpText(edadHelp);
  200.     FindWindow(ID_EDAD)->SetToolTip(edadHelp); 
  201.    
  202.     FindWindow(ID_SEXO)->SetHelpText(sexoHelp);
  203.     FindWindow(ID_SEXO)->SetToolTip(sexoHelp); 
  204.    
  205.     FindWindow(ID_VOTO)->SetHelpText(votoHelp);
  206.     FindWindow(ID_VOTO)->SetToolTip(votoHelp);     
  207. }
  208.  
  209. //wxEVT_UPDATE_UI gestion eventos for ID_CHECKBOX
  210.  
  211. void DialogoPersonal::OnVotoUpdate(wxUpdateUIEvent& event){
  212.     wxSpinCtrl* ctrlEdad=(wxSpinCtrl*) FindWindow(ID_EDAD);
  213.     if (ctrlEdad->GetValue() <18){ //Edad mayor de edad ?
  214.         event.Enable(false);//Por defecto lo deja en falso
  215.         event.Check(false);//Sin posibilidad de checkeo
  216.     }else{ event.Enable(true);} //Verdadero
  217. }
  218.  
  219. //wxEVT_COMMAND_BUTTON_CLICKED gestion eventos para ID_RESET
  220. void DialogoPersonal::OnResetClick(wxCommandEvent& event){
  221.     Init();
  222.     TransferDataToWindow();
  223.         wxMessageBox (wxT("t e s t  "));
  224. }
  225.        
  226. //wxEVT_COMMAND_BUTTON_CLICKED gestion eventos para ID_HELP
  227. void DialogoPersonal::OnHelpClick(wxCommandEvent& event){
  228.     //Un message Box ...
  229.     wxString helpText=wxT("Indique nombre edad y sexo \n")
  230.     wxT("Asi como su voto \n ");   
  231.     wxMessageBox (helpText,wxT("Ayuda "),wxOK|wxICON_INFORMATION,this);
  232. }
  233.  
  234. //wxEVT_COMMAND_BUTTON_CLICKED event handler para ID_OK
  235. void DialogoPersonal::OnOK(wxCommandEvent& event){
  236.      //Antes valida y transfiere datos de la ventana a las variables
  237.      if (Validate () && TransferDataFromWindow()) {
  238.         wxMessageBox (m_nombre +
  239.          " , "+ wxString::Format(wxT("%i"),m_edad)+
  240.          " , "+ wxString::Format(wxT("%i"),m_sexo)+
  241.          " , "+ wxString::Format(wxT("%i"),m_voto)           
  242.          );
  243.     }
  244. }
  245.  
  246. //wxEVT_COMMAND_BUTTON_CLICKED event handler para ID_CANCEL
  247. void DialogoPersonal::OnCancelar(wxCommandEvent& event){
  248.     wxMessageBox (wxT("Close "));
  249.     Close(); //Genera wxCloseEvent 
  250. }
  251.        
  252. DialogoPersonal::~DialogoPersonal(){wxMessageBox (wxT("Destructor"));} //Destructor
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement