#include const int VisitasWin::numCampos = ULTIMO+1; // +1 porque los enums empiezan en 0 VisitasWin::VisitasWin(int x, int y) : Fl_Double_Window (x,y,458,444,"Tarjeta Visitas") { inicializarVariables(); inicializarMarcoTarjeta(); inicializarMarcoDatos(); inicializarDatos(); inicializarSelectorDatos(); inicializarTextoEntrada(); inicializarSelectorFuentes(); inicializarSelectorTamanyos(); inicializarRollers(); end(); Fl::visual(FL_DOUBLE|FL_INDEX); show(); } void VisitasWin::inicializarVariables() { datoActual = NOMBRE; margen = 4; widgH = 28; wx = x(); wy = y(); ww = w(); wh = h(); boxDato = new Fl_Box* [numCampos]; textoDato = new string [numCampos]; } void VisitasWin::inicializarMarcoTarjeta() { marcoTarjeta = new Fl_Box (margen, wh-margen-300, ww-2*margen, 300); marcoTarjeta->box(FL_ENGRAVED_BOX); marcoTarjeta->color(fl_rgb_color(236, 226, 180)); } void VisitasWin::inicializarMarcoDatos() { int bx = margen, by = margen, bw = ww-8, bh = 4*widgH+5*margen; marcoDatos= new Fl_Box (bx, by, bw, bh); marcoDatos->box(FL_ENGRAVED_FRAME); } void VisitasWin::inicializarSelectorDatos() { int bx = marcoDatos->x(); int by = marcoDatos->y(); const Fl_Menu_Item datos[] = // campos disponibles { {"Nombre", 0, datosCB, (void*)NOMBRE}, {"Cargo", 0, datosCB, (void*)CARGO}, {"Dirección",0, datosCB, (void*)DIRECCION}, {"E-mail", 0, datosCB, (void*)CORREO}, {"WEB", 0, datosCB, (void*)WEB}, {0} }; chDatos = new Fl_Choice (bx+margen+66, by+margen, ww/3, widgH, "Dato: "); // ... } void VisitasWin::inicializarSelectorFuentes() { Fl_Menu_Item fuentes[] = // fuentes disponibles { {"Times", 0, fuentesCB, (void*)FL_TIMES}, {"Times-Bold", 0, fuentesCB, (void*)FL_TIMES_BOLD}, {"Times-Italic", 0, fuentesCB, (void*)FL_TIMES_ITALIC}, {"Helvetica", 0, fuentesCB, (void*)FL_HELVETICA}, {"Helvetica-Bold", 0, fuentesCB, (void*)FL_HELVETICA_BOLD}, {"Helvetica-Italic", 0, fuentesCB, (void*)FL_HELVETICA_ITALIC}, {"Courier", 0, fuentesCB, (void*)FL_COURIER}, {"Courier-Bold", 0, fuentesCB, (void*)FL_COURIER_BOLD}, {"Courier-Italic", 0, fuentesCB, (void*)FL_COURIER_ITALIC}, {0} }; int bx = marcoDatos->x(); int by = marcoDatos->y(); chFuentes = new Fl_Choice (bx+margen+66, by+2*widgH+3*margen, ww/3, widgH, "Fuente: "); // ... } void VisitasWin::inicializarSelectorTamanyos() { int bx = marcoDatos->x(); int by = marcoDatos->y(); vsTamanyos = new Fl_Value_Slider(bx+margen+66, by+4*margen+3*widgH, ww/3, widgH, "Tamaño: "); vsTamanyos->type(FL_HOR_SLIDER); // vsTamanyos->maximum(80); // ... // ... // ... vsTamanyos->align (FL_ALIGN_LEFT); // vsTamanyos->callback (tamanyosCB); } void VisitasWin::inicializarTextoEntrada() { int bx = marcoDatos->x(); int by = marcoDatos->y(); inTexto = new Fl_Input (bx+margen+66, by+2*margen+widgH, ww/3, widgH, "Texto: "); // ... // ... } void VisitasWin::inicializarRollers() { int bx = marcoDatos->x(); int by = marcoDatos->y(); // roller de posición X rollX = new Fl_Roller (bx+2*margen+66+ww/3+widgH, by+widgH+widgH/2+2*margen, ww/4-margen, widgH+margen); rollX->type (FL_HORIZONTAL); rollX->range(-180.0, 180.0); rollX->value(0); rollX->step (5.0); // ... // ... rollY = new Fl_Roller (bx+5*margen+66+ww/3+ww/4+widgH, by+margen, widgH+margen, 4*widgH+3*margen); rollY->type (FL_VERTICAL); // ... // ... // ... // ... } void VisitasWin::inicializarDatos() { for (int i = 0; ialign(FL_ALIGN_CENTER); boxDato[i]->labelfont(FL_TIMES); boxDato[i]->labelsize(14); } } void VisitasWin::datosCB(Fl_Widget *w, void *v) { VisitasWin *win = (VisitasWin *)w->parent(); win->cambiarDatos((int) v); } void VisitasWin::cambiarDatos(int nuevoDatoActual) { datoActual = nuevoDatoActual; inTexto->value(boxDato[datoActual]->label()); int id_font= (int) boxDato[datoActual]->labelfont(); const Fl_Menu_Item *fuentes = chFuentes->menu(); bool found = false; int i = 0; while (!found) if (id_font == (int)fuentes[i].user_data()) found = true; else i++; chFuentes->value(i); vsTamanyos->value((int) boxDato[datoActual]->labelsize()); rollX->value ((int) boxDato[datoActual]->x()-4); rollY->value ((int) boxDato[datoActual]->y()-140); } void VisitasWin::textoCB(Fl_Widget *w, void *texto) { VisitasWin *win = (VisitasWin *)w->parent(); win->cambiarTexto((char *)((Fl_Input*)w)->value()); } void VisitasWin::cambiarTexto(char *texto) { textoDato[datoActual] = texto; boxDato[datoActual]->label(textoDato[datoActual].c_str()); boxDato[datoActual]->redraw_label(); } void VisitasWin::fuentesCB(Fl_Widget *w, void *fuente) { VisitasWin *win = (VisitasWin *)w->parent(); win->cambiarFuente((int) fuente); } void VisitasWin::cambiarFuente(int fuente) { boxDato[datoActual]->labelfont(fuente); boxDato[datoActual]->redraw_label(); } void VisitasWin::tamanyosCB(Fl_Widget *w, void *v) { Fl_Value_Slider *vs= (Fl_Value_Slider *)w; VisitasWin *win = (VisitasWin *)w->parent(); // ... } void VisitasWin::rollerXCB(Fl_Widget *w, void *v) { Fl_Value_Slider *vs = (Fl_Value_Slider *)w; VisitasWin *win = (VisitasWin *)w->parent(); Fl_Roller *rollerX = (Fl_Roller *)w; win->cambiarX((int)rollerX->value()); } void VisitasWin::cambiarX(int nuevaX) { int x = nuevaX + 4; int y = (int)boxDato[datoActual]->y(); boxDato[datoActual]->position(x, y); boxDato[datoActual]->redraw_label(); } /* void VisitasWin::rollerYCB(Fl_Widget *w, void *v) { } */ /*void VisitasWin::cambiarY(int nuevaY) { // ... // int y = nuevaY + 140; // ... // ... } */