#include #include #include #include #include #include #include #include #include #include #include using namespace std; class FechaNacimiento : // ... { public: FechaNacimiento(int x, int y, int year) : Fl_Group(x,y,400,30,"") { c_edad = new Fl_Counter(x+80,y+5,80,30,"Edad (años):"); // ... alinear izquierda // ... contador simple // ... de 1 en 1 // ... mayor o igual a 0 vi_anyoNacim = new Fl_Value_Input(x+300,y+5,50,30,"Año nacimiento:"); // ... asignar anyo que se indica // asignar edad segÃn anyo de nacimiento // ... edad = anyo actual - anyo nacimiento // ... asignar al control // las funciones de callback // ... de c_edad // ... de vi_anyNacim end(); } void setEdad(int edad) { c_edad->value(edad); // ... // only if setEdad() is public } private: int getAnyoActual() { curtime = time (NULL); loctime = localtime (&curtime); return 1900+loctime->tm_year; } void setAnyoNacimiento(int year) { vi_anyoNacim->value(year); } private: // Contador *c_edad; Fl_Value_Input *vi_anyoNacim; time_t curtime; struct tm *loctime; private: // las funciones de callback static void edad_cb(Fl_Widget *w, void *datos=NULL); static void anyo_cb(Fl_Widget *w, void *datos=NULL); }; void FechaNacimiento::edad_cb(Fl_Widget *w, void *datos) { FechaNacimiento *fn = (FechaNacimiento *) w->parent(); // edad = leer del contador // anyo nacimiento = anyo actual - edad // asignar anyo al widget correspondiente // .... /// permitir que FechaNacimiento tenga función de callback } void FechaNacimiento::anyo_cb(Fl_Widget *w, void *datos) { FechaNacimiento *fn = (FechaNacimiento *) w->parent(); // anyo nacimiento = leer del control // edad = anyo actual - anyo nacimiento // asignar edad al widget correspondiente } class VentanaPrueba : public Fl_Window { public: VentanaPrueba(int x, int y, int w, int h, char *title); private: Fl_Button *btSalir; FechaNacimiento *fnPadre, *fnMadre; // PestaÃas *t_padres; private: // funciones de callback static void salir_cb(Fl_Widget *w, void *datos=NULL); static void tab_cb(Fl_Widget *w, void *datos=NULL); static void fn_cb(Fl_Widget *w, void *datos=NULL); }; VentanaPrueba::VentanaPrueba(int x, int y, int w, int h, char *title) : Fl_Window(x,y,w,h,title) { begin(); // opcional btSalir= new Fl_Button(w-100,160,80,35,"&Terminar"); btSalir->callback(salir_cb); // ... ejemplo de "tooltip" t_padres = new Fl_Tabs(5,5,w-10,h-50); // ... callback (si queremos saber cuando se seleccionan) // Pestanya de datos del padre Fl_Group *g_padre = new Fl_Group(0,40,w-10,h-50,"&Padre"); // ... una fecha de nacimiento = new FechaNacimiento(20,70,1960); // ... cambiar la edad por programa g_padre->end(); // no hay mÃs controles en esta pestaÃa // Pestanya de datos de la madre Fl_Group *g_madre = new Fl_Group(0,40,w-10,h-50,"&Madre"); fnMadre = new FechaNacimiento(20,70,1950); // ... si queremos saber cuando se modifica la edad/anyo g_madre->end(); // no hay mÃs controles en esta pestaÃa t_padres->end(); // no hay mÃs pestanyas end(); // no hay mÃs controles en la ventana } void VentanaPrueba::fn_cb(Fl_Widget *w, void *datos) { cout << "modificando FechaNacimiento" << endl; } void VentanaPrueba::tab_cb(Fl_Widget *w, void *datos) { VentanaPrueba *v = (VentanaPrueba *) w->parent(); // Que destaque mÃs la pestanya seleccionada /* ... */ } void VentanaPrueba::salir_cb(Fl_Widget *w, void *datos) { VentanaPrueba *v = (VentanaPrueba *) w->parent(); v->hide(); } int main() { VentanaPrueba v1(10,10,400,200,"Datos familiares"); v1.show(); return Fl::run(); }