//EDITOR DI MASCHERE #include #include "ba2600.h" //Costruttore della classe TEditMask_window: gestisce la maschera TEditMask_window::TEditMask_window(short x,short y,short dx,short dy, const char*title,long flags, WIN_TYPE wt) { create(x,y,dx,dy,title,flags,wt); _controllo=NULL; _controls=NULL; _pixmap=TRUE; set_font(); _sheet=NULL; _total_page=_page=1; _name.add(TR("Maschera"),0); _name.add(TR("Maschera"),1); _type_vz="a"; _coordx=x; _coordy=y; _alt=dy; _lung=dx; _tool=FALSE; _mode=TRUE; _y_tool=19; _rt.left=_rt.right=_rt.bottom=0; _rt.top=_y_tool*ROWY; _rct_sel.left=_rct_sel.top=_rct_sel.bottom=_rct_sel.right=0; _nsheet=0; } //Permette il ridimensionamento RCT& TEditMask_window::resize_rect(short x, short y, short dx, short dy, WIN_TYPE wt, bool intool) const { static RCT r; if (_tool) // Mask with Toolbar { if (y >= 0) { /* Scommentare quando verranno inseriti i tab buttons if (_total_page>1) y++; */ } if (x > 0 || (wt != WO_TE && x == 0)) { RCT pc; xvt_vobj_get_client_rect(win(), &pc); const int width = pc.right; const int tot = 80*CHARX; if (width > tot) x += (width-tot) / (2*CHARX); } } wt = WC_TEXTEDIT; r.left = (x+1)*CHARX; r.top = y*ROWY; r.right = dx*CHARX; r.bottom = (CHARY << 1) - (CHARY-2); if (y >= 0 && _tool && intool) r.top += ROWY*_y_tool; if (dy > 1) r.bottom += ROWY*(dy-1); if (x < 0 || y < 0 || dx <= 0 || dy <= 0) { RCT pc; xvt_vobj_get_client_rect(win(), &pc); const short MAXX = pc.right; const short MAXY = (_tool && !intool) ? ROWY*_y_tool : pc.bottom; if (x < 0) { x = -x; if (wt != WC_TEXTEDIT && x == 1) x = 11; if (x > 10) { const int num = x/10 -1; const int tot = x%10; const int spc = (MAXX - tot*r.right) / (tot+1); r.left = spc + num*(spc+r.right); } else r.left = MAXX - r.right - x*CHARX; } if (y < 0) { y = -y; if (wt != WC_TEXTEDIT && y == 1) y = 11; if (y > 10) { const int num = y/10 -1; const int tot = y%10; const int spc = (MAXY - tot*r.bottom) / (tot+1); r.top = spc + num*(spc+r.bottom); } else r.top = MAXY - r.bottom - (y-1)*ROWY; } if (dx <= 0) r.right = MAXX + dx*CHARX; else r.right += r.left; if (dy <= 0) r.bottom = MAXY + dy*ROWY; else r.bottom += r.top; } else { r.right += r.left; r.bottom += r.top; } return r; } //Costruttore della classe TEditMask_control che gestisce i controlli TEditMask_control::TEditMask_control(TEditMask_window* parent) { _intool=FALSE; _parent=parent; _pag=parent->page(); _left=_top=1; _latox=15; _latoy=1; resize_rect(); _id="DLG_USER"; _type_field="control"; _selected=FALSE; _focus=0; } //Costruttore della classe TEditMask_control per definirne la copia TEditMask_control::TEditMask_control(const TEditMask_control& ctl) { _intool=ctl._intool; _parent=ctl._parent; _focus=ctl._focus; _pag=ctl._pag; _rct=ctl._rct; _left=ctl._left; _top=ctl._top; _prompt=ctl._prompt; _id=ctl._id; _latox=ctl._latox; _latoy=ctl._latoy; _field=ctl._field; _key=ctl._key; _warning=ctl._warning; _check=ctl._check; _flag=ctl._flag; _group=ctl._group; _message=ctl._message; _selected=ctl._selected; _type_field=ctl._type_field; } //Permette il riordino dei controlli in base alla priorità del focus static int compare(const TObject** o1,const TObject** o2) { if (o1 == o2) return 0; TEditMask_control* s1 = (TEditMask_control*)*o1; TEditMask_control* s2 = (TEditMask_control*)*o2; return (s1->get_focus() - s2->get_focus()); } //Ricerca durante la lettura la maschera corrispondente allo spread numero i TEditMask_control* TEditMask_window::find_sheet(int i) { for(int j=0; j<_controls.items(); j++) { TEditMask_control& sh=(TEditMask_control& )_controls[j]; if (sh.get_idsheet()==i) return &sh; } return NULL; } //Definisce la presenza di pagine prive di controlli int TEditMask_window::page_null(int page) { bool cont=FALSE; for(int i=0; i<_controls.items(); i++) { TEditMask_control& down=(TEditMask_control& )_controls[i]; if (down.page()==page) { cont=TRUE; break; } } return cont; } //Salva su file la scrittura delle pagine void TEditMask_window::save_page(ostream& out) { RCT r={_rt.top,0,_rt.bottom,_rt.right}; _controls.sort(compare);//ordinamento secondo la priorità focus for (int k=1; k <= _total_page ; k++) { if (page_null(k)) { out << "PAGE \""<< _name[k] <<"\" "<< _coordx <<" " <<_coordy; out << " " <<_lung <<" " <<_alt << "\n\n"; for(int i=0; i<_controls.items(); i++) { TEditMask_control& up=(TEditMask_control& )_controls[i]; if(up.page()==k) { PNT p={up.rectangle().top,up.rectangle().left}; if(up.type()=="BUTTON ") { TString tipo=up.ident(); if(tipo=="DLG_OK" || tipo=="DLG_CANCEL" ||\ tipo=="DLG_DELREC" ||tipo=="DLG_QUIT" || tipo=="DLG_PRINT" ||\ tipo=="DLG_SELECT") up.set_prompt(""); } if(xvt_rect_has_point(&r,p) != 0) ; else out<<_controls[i]; } } out << "ENDPAGE\n\n"; } } out << "\nENDMASK\n\n"; } //Creazione del file .uml void TEditMask_window::create_file() { _file.lower(); _file.ext("uml"); ofstream file(_file); RCT r={_rt.top,0,_rt.bottom,_rt.right}; _file.ext("h"); file<<"#include \"" << _file<<"\"\n\n"; _file.ext("uml"); int k=101; if(_tool) { file<<"TOOLBAR \"TOOLBAR\" 0 "<<_y_tool<<" 0 0\n\n"; for(int i=0; i<_controls.items(); i++) { //i controlli della toolbar TEditMask_control& up=(TEditMask_control& )_controls[i]; PNT p={up.rectangle().top,up.rectangle().left}; if(up.type()=="BUTTON ") { TString tipo=up.ident(); if (tipo=="DLG_OK" || tipo=="DLG_CANCEL" || tipo=="DLG_DELREC" ||tipo=="DLG_QUIT" || tipo=="DLG_PRINT" || tipo=="DLG_SELECT") up.set_prompt(""); } if(xvt_rect_has_point(&r,p) != 0) file<<_controls[i]; } file<<"ENDPAGE\n\n"; } save_page(file); //controlli della finestra principale for(int i=0; i<_controls.items(); i++) //controlli dello spread { TEditMask_control& up=(TEditMask_control& )_controls[i]; if(up.figlio()!=NULL) up.figlio()->save_page(file); } file.close(); } //Creazione del file .h void TEditMask_window::create_fileh() { TFilename header(_file); header.lower(); header.ext("h"); ofstream fileh(header); int k=101; for(int i=0; i<_controls.items(); i++) { TEditMask_control& up=(TEditMask_control& )_controls[i]; if(up.ident()!=("DLG_NULL")) { fileh<<"#define "< RCT& TEditMask_control::resize_rect(short x, short y, short dx, short dy, WIN_TYPE wt,bool intool)const { return _parent->resize_rect(x,y,dx,dy,wt,intool); } //Ridimensiona come sopra void TEditMask_control::resize_rect() { set_dim(_latox,_latoy); } //Definisce il padre TEditMask_window& TEditMask_control::padre() const { CHECK(_parent,"Campo senza maschera"); return *_parent; } //Setta il prompt const TString& TEditMask_control::set_prompt(const TString& prompt) { return _prompt=(prompt); } //Setta il tipo di controllo const TString& TEditMask_control::set_type(const TString& fld) { return _type_field=(fld); } //Setta l'identificativo const TString& TEditMask_control::set_id(const TString& id) { return _id=(id); } //Setta il campo FLAGS const TString& TEditMask_control::set_flag(const TString& fl) { return _flag=(fl); } //Setta il campo GROUP const TString& TEditMask_control::set_group(const TString& gr) { return _group=(gr); } //Setta il campo CHECKTYPE const TString& TEditMask_control::set_check(const TString& ck) { return _check=(ck); } //Setta il flag relativo alla selezione bool TEditMask_control::set_selected(bool sl) { _selected=sl; return _selected; } //Disegna linee void TEditMask_control::line(short x0,short y0,short x1,short y1) const { PNT f = {y0,x0}; PNT t = {y1,x1}; xvt_dwin_draw_set_pos(maschera(), f); xvt_dwin_draw_line(maschera(), t); } //Scrive il prompt sul controllo void TEditMask_control::frase(short x, short y) const { padre().stringat(x, y,_prompt); } //Setta i campi comuni sulla maschera di supporto void TEditMask_control::set_field(TMask& mask) { mask.set(F_PROMPT,_prompt); mask.set(F_PAGE,_pag); mask.set(F_FOCUS,_focus); mask.set(F_IDENT,_id); mask.set(F_LEFT,_left); mask.set(F_UPPER,_top); mask.set(F_INTOOL,_intool ? "X" : " "); } //Legge i MESSAGE dalla maschera di supporto void TEditMask_control::get_message(TSheet_field& sp) { _message=sp.rows_array(); } //Setta i MESSAGE sulla maschera di supporto void TEditMask_control::set_message(TSheet_field& sp) { sp.rows_array()=_message; } //Stampa su file.uml i MESSAGE void TEditMask_control::print_message(ostream& out)const { TToken_string mes; for(int i=0;i<_message.items();i++) { mes=_message.row(i); if(!mes.blank()) { mes.replace('^','|'); out<<" MESSAGE "<< mes <<"\n"; } } } //Setta i campi opzionali comuni sulla maschera di supporto void TEditMask_control::set_option(TMask& mask) { mask.set(F_FLAG,_flag); mask.set(F_GROUP,_group); mask.set(F_WARNING,_warning); mask.set(F_CHECK,_check); mask.set(F_KEY,_key); mask.set(F_FIELD,_field); } //Legge i campi comuni dalla maschera di supporto void TEditMask_control::get_field(TMask& mask) { _prompt=mask.get(F_PROMPT); _focus=mask.get_int(F_FOCUS); _left=mask.get_int(F_LEFT); _top=mask.get_int(F_UPPER); _pag=mask.get_int(F_PAGE); _id=mask.get(F_IDENT); _intool=mask.get_bool(F_INTOOL); _pag=_parent->max_page(_pag); } //Setta le dimensioni del controllo void TEditMask_control::set_dim(int ln, int lg) { _latox = ln; _latoy = lg; _rct = resize_rect(_left,_top,_latox,_latoy,WO_TE,_intool); } //Setta le coordinate del controllo void TEditMask_control::set_crd(int x, int y) { _left = x; _top = y; } //Legge dalla maschera di supporto i campi comuni opzionali void TEditMask_control::get_option(TMask& mask) { _flag=mask.get(F_FLAG); _group=mask.get(F_GROUP); _warning=mask.get(F_WARNING); _check=mask.get(F_CHECK); _key=mask.get(F_KEY); _field=mask.get(F_FIELD); } //Stampa su file .uml il controllo(i campi comuni e particolari) void TEditMask_control::print_on(ostream& out) const { char c; out<<" BEGIN"<<"\n" ; out<<" PROMPT " << _left << " " <<_top<<" \""; out<<_prompt; for(int i=off(); i > 0; i--) out << ' '; out<<"\"\n"; if(_flag.not_empty()) { for(int j=0;j<_flag.len();j++) { c=toupper(_flag.operator[](j)); if (c!=' ') out<<" FLAGS "<<"\""<< c <<"\"\n"; } } print_message(out); if(_group.not_empty()) out<<" GROUP "<<_group<<"\n"; if(_field.not_empty()) { out<<" FIELD "; for(int f=0;f<_field.len();f++) { c=toupper(_field.operator[](f)); out<= 0 && !isalpha(prt[i]) && !ispunct(prt[i]); i--) off++; return _offset=off; } //Legge da file .uml solo il browse void TEditMask_string::read_use(TScanner& scanner,const TString& tok) { if(tok=="USE" || tok=="JOIN" || tok=="INPUT" ||\ tok=="OUTPUT" || tok=="DISPLAY" || tok=="COPY") { _use <<(tok); _use <<(' '); _use <<(scanner.line()); _use <<('\n'); } } //Legge da file .uml il controllo void TEditMask_string::read_from(TScanner& scanner, bool intool) { TString tok; set_id(scanner.pop()); read_lngz(scanner); tok=scanner.pop(); while(tok!="END") { read_field(scanner,tok, intool); read_use(scanner,tok); if(tok=="ADD") { tok=scanner.pop(); tok=scanner.pop(); _addr=(tok); } tok=scanner.pop(); } tok=prt(); read_off(tok); tok.rtrim(); set_prompt(tok); set_dim(_lungvd+prompt_len()+off(),1); } /////////////////////////////////////////////////////////// // TeditMask_number :controllo tipo NUMBER /////////////////////////////////////////////////////////// //Costruttore del controllo NUMBER TEditMask_number::TEditMask_number(TEditMask_window* parent) :TEditMask_string(parent) { _latox=10; _decimals=0; set_prompt(PR("Numero")); set_type("NUMBER "); set_id("F_NUMBER"); set_dim(_latox + prompt_len() + off(),1); } //Costruttore copia del controllo TEditMask_number::TEditMask_number(const TEditMask_number& ctl) :TEditMask_string(ctl) { _latox=ctl._latox; _decimals=ctl._decimals; _picture=ctl._picture; set_prompt(ctl.prt()); set_type(ctl.type()); set_id(ctl.ident()); set_dim(_latox + prompt_len() + off(),1); } //Setta i decimali void TEditMask_number::set_decimal(int d) { _decimals=d; } //Gestisce la maschera di supporto KEY TEditMask_number::main_loop() { TMask _mask("ba2600r"); TSheet_field& s=_mask.sfield(F_MESSAGE); _mask.set(F_LONGEFF,_latox); _mask.set(F_PICTURE,_picture); _mask.set(F_DECIMAL,_decimals); set_field(_mask); set_option(_mask); set_message(s); set_bwoff(_mask); KEY k = _mask.run(); if (k == K_ENTER) { get_message(s); get_field(_mask); get_option(_mask); get_bwoff(_mask); _latox=_mask.get_int(F_LONGEFF); _picture=_mask.get(F_PICTURE); _decimals=_mask.get_int(F_DECIMAL); set_dim(_latox + prompt_len() + off(),1); } return k; } //Stampa su file .uml il controllo void TEditMask_number::print_on(ostream& out) const { if(_decimals<=0) out<set_prompt(BR("Conferma", 9)); btn_ok->set_id("DLG_OK"); btn_ok->set_crd(-13,-1); btn_ok->set_dim(10+2,2); TEditMask_control* btn_cancel=_sheetmask.addbutton(); btn_cancel->set_prompt(BR("Annulla", 9)); btn_cancel->set_id("DLG_CANCEL"); btn_cancel->set_crd(-23,-1); btn_cancel->set_dim(10+2,2); TEditMask_control* btn_del=_sheetmask.addbutton(); btn_del->set_prompt(BR("Elimina", 9)); btn_del->set_id("DLG_DELREC"); btn_del->set_crd(-33,-1); btn_del->set_dim(10+2,2); xvt_app_get_default_ctools(&t); //per eliminare la modalità M_XOR xvt_dwin_set_draw_ctools(maschera(),&t); } //Fa l'update del controllo void TEditMask_sheet::update()const { RCT r=rectangle(); int longe=r.right-(r.left+3*CHARX); int large=r.bottom-(r.top+ROWY); int latolong=longe/6; RCT rt={r.top,r.left,r.top+ROWY,r.right-10}; //orizzontale RCT rc={r.top,r.left,r.top+ROWY+3*CHARY,r.left+3*CHARX};//verticale RCT rg={r.top,r.left,r.bottom,r.right}; RCT rn={r.top+ROWY,r.left+3*CHARX,r.top+ROWY+3*CHARY,r.right-10}; padre().set_brush(MASK_DARK_COLOR); xvt_dwin_draw_rect(maschera(),&rg); padre().set_brush(NORMAL_BACK_COLOR); xvt_dwin_draw_rect(maschera(),&rn); padre().set_brush(BTN_BACK_COLOR); xvt_dwin_draw_rect(maschera(),&rc); xvt_dwin_draw_rect(maschera(),&rt); padre().hide_brush(); padre().set_pen(BTN_LIGHT_COLOR,2); line(r.left+2,r.top+2,r.right-12,r.top+2); line(r.left+2,r.top+2,r.left+2,r.top+ROWY+3*CHARY); line(r.left+3*CHARX+2,r.top+2,r.left+3*CHARX+2,r.top+ROWY-2);//primo pezz..verticale line(r.left+2,r.top+ROWY+2,r.left+3*CHARX,r.top+ROWY+2); //primo pezz..orizz. for (int i=2;i<6;i+=2) //verticali line(r.left+3*CHARX+i*latolong+2,r.top+2,r.left+3*CHARX+i*latolong+2,r.top+ROWY-2); for (int s=1;s<3;s++) //orizz. line(r.left+2,r.top+ROWY+2+s*CHARY,r.left+3*CHARX-2,r.top+ROWY+s*CHARY+2); padre().set_pen(BTN_DARK_COLOR,2); line(r.left+2,r.top+ROWY-2,r.right-10,r.top+ROWY-2);//orizz. line(r.left+3*CHARX,r.top,r.left+3*CHARX,r.top+ROWY+3*CHARY); //verticale line(r.right-12,r.top+1,r.right-12,r.top+ROWY); for (int f=2;f<6;f+=2) //righe verticali line(r.left+3*CHARX+f*latolong,r.top+2,r.left+3*CHARX+f*latolong,r.top+ROWY-2); for (int h=1;h<4;h++) //righe orizzontali line(r.left+2,r.top+ROWY+h*CHARY,r.left+3*CHARX-2,r.top+ROWY+h*CHARY); padre().set_pen(COLOR_BLACK,2); line(r.left+2,r.top+ROWY,r.right-12,r.top+ROWY);//orizz. line(r.right-12,r.top+1,r.right-12,r.top+ROWY); padre().set_pen(COLOR_BLACK,1); for (int j=2;j<6;j+=2) //verticali line(r.left+3*CHARX+j*latolong,r.top+ROWY,r.left+3*CHARX+j*latolong,r.top+ROWY+3*CHARY); for (int y=1;y<3;y++) //orizzontali line(r.left+3*CHARX,r.top+ROWY+y*CHARY,r.right-10,r.top+ROWY+y*CHARY); padre().stringat(r.left+2*CHARX,r.top+ROWY,"1"); padre().stringat(r.left+2*CHARX,r.top+2*CHARY+CHARX,"2"); padre().stringat(r.left+2*CHARX,r.top+3*CHARY+CHARX,"3"); } //Setta sulla maschera di supporto solo _item e browse void TEditMask_sheet::set_itbr(TMask& m,TSheet_field& sp) { sp.rows_array()=_item; m.set(F_USE,_browse); } //Legge dalla maschera di supporto solo _item e browse void TEditMask_sheet::getitbr(TMask& m,TSheet_field& sp) { _item=sp.rows_array(); _browse=m.get(F_USE); } //Gestisce la maschera di supporto KEY TEditMask_sheet::main_loop() { TToken_string spr, sd; TMask _mask("ba2600d"); TSheet_field& s=_mask.sfield(F_ITEM); set_field(_mask); set_option(_mask); _mask.set(F_LONGEFF,_latox); _mask.set(F_LARGE,_latoy); set_itbr(_mask,s); KEY k= _mask.run(); if(k==K_ENTER) { get_field(_mask); get_option(_mask); getitbr(_mask,s); _latox=_mask.get_int(F_LONGEFF); _latoy=_mask.get_int(F_LARGE); set_dim(_latox,_latoy); } return k; } //Stampa su file .uml solo _item void TEditMask_sheet::print_item(ostream& out)const { TString message,desc; for(int i=0;i<_item.items();i++) { TToken_string& it=(TToken_string&)_item.row(i); desc=it.get(0); if(!desc.blank()) { out<<" ITEM \""<= 0; i--) { TEditMask_control& down=(TEditMask_control& )_controls[i]; if (_page==down.page() && down.contains(pnt)) { down.set_selected(TRUE); return &down; } } return NULL; } //Ritorna TRUE se esistono controlli selezionati bool TEditMask_window::search(RCT* rct) { bool sel=FALSE; for(int i=_controls.items()-1; i >= 0; i--) { TEditMask_control& down=(TEditMask_control& )_controls[i]; PNT p={down.rectangle().top,down.rectangle().left}; bool selected=xvt_rect_has_point(rct,p) != 0; if (selected && _page == down.page()) { down.set_selected(TRUE); sel=TRUE; selected=FALSE; } } return sel; } //Ridisegna il controllo spostato bool TEditMask_control::redesign(int dx, int dy) { PNT dev; dev.h = _rct.left; dev.v = _rct.top; PNT log = padre().logic(dev, _intool); _left = log.h + dx / CHARX; if (_left < 0) _left = 0; if (_left > 78) _left = 78; _top = log.v + dy / ROWY ; if (_top < 0) _top = 0; if (_top > ROWY) _top = ROWY; resize_rect(); return TRUE; } //Ridisegna il rettangolo di selezione bool TEditMask_window::redesign(RCT* rct, int dx, int dy) { int height = xvt_rect_get_height(rct); int width = xvt_rect_get_width(rct); bool intool; PNT dev; dev.h = rct->left; dev.v = rct->top; PNT log = logic(dev, intool); int x = log.h + dx/CHARX; if (x < 0) x = 0; if (x > 78) x = 78; int y = log.v + dy/ROWY; if (y < 0) y = 0; if (y > 19) y = 19; *rct = resize_rect(x,y,1,1,WO_TE,intool); rct->right = rct->left +width; rct->bottom=rct->top + height; return TRUE; } //Permette di spostare uno o più controlli selezionati void TEditMask_window::move(RCT* rct,PNT pntinz, PNT pntfin) { int dx=(pntfin.h-pntinz.h); //trasla lungo x int dy=(pntfin.v-pntinz.v); //trasla lungo y if(pntfin.h/CHARX==pntinz.h/CHARX && pntfin.v/ROWY==pntinz.v/ROWY) ; else { redesign(rct,dx,dy); for(int i=0; i<_controls.items(); i++) { TEditMask_control& down=(TEditMask_control& )_controls[i]; if (down.get_selected()) down.redesign(dx,dy); } } } //Distrugge il controllo con tasto ELIMINA di maschera di supporto void TEditMask_window::destroy_control(TEditMask_control* c) { for(int i=_controls.last(); i >= 0; i--) { if (_controls.objptr(i) == c) { _controls.destroy(i, TRUE); break; } } _controllo=NULL; } //Controllo sull'ordine delle pagine int TEditMask_window::max_page(int pag) { if(pag>_total_page) { int diff=pag-_total_page; if(diff==1) _total_page=pag; else { error_box("Non esagerare, va avanti una pagina per volta! Ti aiuto io... "); _total_page+=1; pag=_total_page; } _name.add("Maschera",pag); _name.pack(); } return pag; } //Copia i controlli selezionati void TEditMask_window::copy_crt_sel() { int items=_controls.items(); PNT inz={_rct_sel.top,_rct_sel.left}; PNT fin={1*ROWY,1*CHARX}; for(int i=items-1; i>=0; i--) { TEditMask_control& down=(TEditMask_control& )_controls[i]; if (down.get_selected()) { down.set_selected(FALSE); int j=_controls.add(down); TEditMask_control& gr=(TEditMask_control& )_controls[j]; gr.set_selected(TRUE); } } move(&_rct_sel,inz,fin); force_update(); } //Cancella i controlli selezionati void TEditMask_window::erase_crt_sel() { for(int i=_controls.last(); i >= 0; i--) { TEditMask_control& down=(TEditMask_control& )_controls[i]; if (down.get_selected()) _controls.destroy(i, TRUE); } _controllo=NULL; inizialition(); xvt_win_set_cursor(win(), CURSOR_ARROW); force_update(); } //Muove nella pagina richiesta(se permessa)i controlli selezionati void TEditMask_window::move_crt_sel() { int pag; TMask m("ba2600l"); KEY k=m.run(); if(k==K_ENTER) { if(xvt_rect_is_empty(&_rct_sel)) warning_box(TR("Pensi di avere selezionato qualcosa??")); else { pag=m.get_int(101); if(pag==0) { warning_box(TR("La pagina 0 non esiste! Lascio tutto ancora nella stessa pagina.")); pag=_page; } else { pag=max_page(pag); for(int i=0; i<_controls.items(); i++) { TEditMask_control& down=(TEditMask_control& )_controls[i]; if (down.get_selected()) down.set_page(pag); } } } } } //Disegna una linea sulla "maschera" void TEditMask_window::line(short x0,short y0,short x1,short y1) const { PNT f = {y0,x0}; PNT t = {y1,x1}; xvt_dwin_draw_set_pos(win(), f); xvt_dwin_draw_line(win(), t); } //Gestisce l'evento legato ad E_CHAR void TEditMask_window::o_key(KEY key) { switch(key) { case K_NEXT: if(_page==_total_page) ; else _page+=1; update(); break; case K_PREV: if(_page!=1 && _page>1) _page-=1; update(); break; case K_DEL: erase_crt_sel(); break; case K_F6: copy_crt_sel(); break; case K_F2: { move_crt_sel(); force_update(); } break; case K_F3: { vision_ctrl(); } break; case K_F4: { vision_spread(); } break; case K_F5: { vision_sp_ctl(); } break; default: break; } } //Deseleziona i controlli selezionati void TEditMask_window::deselection() { for(int i=0; i<_controls.items(); i++) { TEditMask_control& down=(TEditMask_control& )_controls[i]; down.set_selected(FALSE); } xvt_win_set_cursor(win(), CURSOR_ARROW); } //Controlla l'appartenenza di un punto al rettangolo di selezione bool TEditMask_window::selection(RCT* rct,PNT pnt) { return (xvt_rect_has_point(rct,pnt) != 0); } //Crea il rettangolo di selezione void TEditMask_window::rubber_rect(WINDOW win, RCT*rctp,PNT p) { RCT rct; DRAW_CTOOLS t; xvt_app_get_default_ctools(&t); t.pen.color=COLOR_BLACK; t.brush.color=MASK_BACK_COLOR; t.pen.pat=PAT_RUBBER; t.brush.pat=PAT_HOLLOW; t.mode=M_XOR; xvt_dwin_set_draw_ctools(win,&t); normalize_rect(&rct,rctp); xvt_dwin_draw_rect(win,&rct); } //Normalizza un rettangolo void TEditMask_window::normalize_rect(RCT *norm_rctp, RCT*rctp) { xvt_rect_set(norm_rctp, min(rctp->left, rctp->right), min(rctp->top, rctp->bottom),max(rctp->left, rctp->right), max(rctp->top, rctp->bottom)); } //Gestisce la selezione void TEditMask_window::selected_crt(WINDOW win, EVENT* ep) { static PNT last_pnt,posinz,posfin; static bool first_move,down=FALSE,sel=FALSE; static bool is_rect=FALSE; switch(ep->type) { case E_MOUSE_DOWN: if(ep->v.mouse.button==0) //solo con il tasto sinistro { down=TRUE; last_pnt=posinz=ep->v.mouse.where; //punto iniziale if(xvt_rect_is_empty(&_rct_sel)) //fase primordiale { _controllo=search(posinz); if(_controllo) { _rct_sel=_controllo->rectangle(); //diventa il controllo stesso _controllo->set_selected(TRUE); is_rect=TRUE; } } if(selection(&_rct_sel,last_pnt)) { is_rect=TRUE; sel=TRUE; } else { is_rect=FALSE; deselection(); //deseleziono i controlli _rct_sel.left=ep->v.mouse.where.h; //si definisce la posizione iniziale _rct_sel.top=ep->v.mouse.where.v; first_move=TRUE; //per dire se esiste un rubber rect } xvt_win_trap_pointer(win); //arresta tutti gli altri possibili eventi } break; case E_MOUSE_MOVE: last_pnt=ep->v.mouse.where; if(!down) //non ho premuto down percio' non disegno { bool in_rct = selection(&_rct_sel,last_pnt); xvt_win_set_cursor(win, in_rct ? CURSOR_PLUS : CURSOR_ARROW); is_rect = in_rct; return ; } if(!selection(&_rct_sel,last_pnt)) { if(!is_rect) { if(!first_move) rubber_rect(win,&_rct_sel,last_pnt); //cancella il vecchio rettangolo first_move=FALSE; //risetto solamente _rct_sel.right=ep->v.mouse.where.h; //disegno il nuovo rettangolo->rinnova sempre _rct_sel.bottom=ep->v.mouse.where.v; //le coordinate finali per disegnarlo mentre si muove il mouse rubber_rect(win,&_rct_sel,last_pnt); } } break; case E_MOUSE_UP: DRAW_CTOOLS t; posfin=ep->v.mouse.where; if(sel) { move(&_rct_sel,posinz,posfin); force_update(); sel=FALSE; } else { if(posinz.h==posfin.h && posinz.v==posfin.v) inizialition(); if(!first_move) rubber_rect(win,&_rct_sel,last_pnt); //cancella il rubber rettangolo if(!xvt_rect_is_empty(&_rct_sel)) { if(!search(&_rct_sel)) { inizialition(); deselection(); } else is_rect=TRUE; } xvt_win_set_cursor(win, CURSOR_ARROW); xvt_win_release_pointer(); //rilascia gli eventi } down=FALSE; xvt_app_get_default_ctools(&t); //per eliminare la modalità M_XOR xvt_dwin_set_draw_ctools(win,&t); break; } } //Converte da pixel a caratteri PNT& TEditMask_window::logic(const PNT& p, bool& intool) { static PNT pnt; RCT r; const int MAXX=640; xvt_vobj_get_client_rect(win(), &r); //client_area const int width = r.right; int x = p.h; if (width > MAXX) { const int dim = (width - MAXX) / 2; x -= dim; } pnt.h = x < 2*CHARX ? 0 : x/CHARX-1; pnt.v = p.v/ROWY; /* Scommentare quando verranno inseriti i tab buttons if (_tool && _total_page > 1) { if (pnt.v > 0) pnt.v--; } */ if (_tool && pnt.v > _y_tool) { pnt.v -= _y_tool; intool = TRUE; } else intool = FALSE; return pnt; } //Gestisce gli eventi long TEditMask_window::handler(WINDOW win, EVENT *ep) { static bool down=FALSE; switch (ep->type) { case E_MOUSE_DOWN: { _controllo=search(ep->v.mouse.where); if(_controllo && _controllo->type()=="SPREADSHEET ") { _controllo->set_hismask(TRUE); _idsheet=_controllo->get_idsheet(); } if(ep->v.mouse.button==1) { if (_controllo) { KEY k = _controllo->main_loop(); if (k == K_DEL) destroy_control(_controllo); } else main_loop(); update(); break; } } case E_MOUSE_UP: case E_MOUSE_MOVE: { TString80 s; const PNT& p = ep->v.mouse.where; bool intool; const PNT pnt=logic(p, intool); s.format(FR("Coordinate:%3d,%3d"), pnt.h , pnt.v); xvtil_statbar_set(s); if(win) selected_crt(win,ep); } break; case E_CHAR: { TString16 p; o_key(e_char_to_key(ep)); p.format(FR("Pag.%d"),_page); xvtil_statbar_set(p); set_caption(_name.row(_page)); } break; default: break; } return TWindow::handler(win, ep); } //Aggiunge un controllo tipo STRING TEditMask_control* TEditMask_window::addstring() { TEditMask_string* c=new TEditMask_string(this); _controls.add(c); c->update(); return c; } //Aggiunge un controllo tipo NUMBER TEditMask_control* TEditMask_window::addnumber() { TEditMask_number* c=new TEditMask_number(this); _controls.add(c); c->update(); return c; } //Aggiunge un controllo tipo CURRENCY TEditMask_control* TEditMask_window::addcurrency() { TEditMask_currency* c=new TEditMask_currency(this); _controls.add(c); c->update(); return c; } //Aggiunge un controllo tipo DATE TEditMask_control* TEditMask_window::adddate() { TEditMask_date* c=new TEditMask_date(this); _controls.add(c); c->update(); return c; } //Aggiunge un controllo tipo BOOLEAN TEditMask_control* TEditMask_window::addboolean() { TEditMask_boolean* c=new TEditMask_boolean(this); _controls.add(c); c->update(); return c; } //Aggiunge un controllo tipo TEXT TEditMask_control* TEditMask_window::addtext() { TEditMask_text* c=new TEditMask_text(this); _controls.add(c); c->update(); return c; } //Aggiunge un controllo tipo BUTTON TEditMask_control* TEditMask_window::addbutton() { TEditMask_button* c=new TEditMask_button(this); _controls.add(c); c->update(); return c; } //Aggiunge un controllo tipo GROUP TEditMask_control* TEditMask_window::addgroup() { TEditMask_group* c=new TEditMask_group(this); _controls.add(c); c->update(); return c; } //Aggiunge un controllo tipo RADIOBUTTON TEditMask_control* TEditMask_window::addradio() { TEditMask_radio* c=new TEditMask_radio(this); _controls.add(c); c->update(); return c; } //Aggiunge un controllo tipo MEMO TEditMask_control* TEditMask_window::addmemo() { TEditMask_memo* c=new TEditMask_memo(this); _controls.add(c); c->update(); return c; } //Aggiunge un controllo tipo ZOOM TEditMask_control* TEditMask_window::addzoom() { TEditMask_zoom* c=new TEditMask_zoom(this); _controls.add(c); c->update(); return c; } //Aggiunge un controllo tipo SPREADSHEET TEditMask_control* TEditMask_window::addsheet() { TEditMask_sheet* c=new TEditMask_sheet(this); _controls.add(c); c->update(); return c; } //Aggiunge un controllo tipo LISTBOX TEditMask_control* TEditMask_window::addlist() { TEditMask_list* c=new TEditMask_list(this); _controls.add(c); c->update(); return c; } //Aggiunge un controllo generico(esplicitato da m) void TEditMask_window::add_control(MENU_TAG m) { TEditMask_control* ctl=NULL; TEditMask_window* w=this; bool is_sheet = get_sheet() != NULL; for(int i=0;i<_controls.items() ;i++) { TEditMask_control& sp = (TEditMask_control&)_controls[i]; if(sp.type()=="SPREADSHEET " && _page==sp.page() && sp.get_hismask()) { w =find_sheet(_idsheet)->figlio(); is_sheet= TRUE; w->set_focus(); sp.set_hismask(FALSE); break; } else w = this; } switch(m) { case MENU_ITEM_ID(31): w->addbutton(); break; case MENU_ITEM_ID(32): w->addboolean(); break; case MENU_ITEM_ID(33): w->addcurrency(); break; case MENU_ITEM_ID(34): w->adddate(); break; case MENU_ITEM_ID(35): w->addgroup(); break; case MENU_ITEM_ID(36): w->addlist(); break; case MENU_ITEM_ID(37): w->addmemo(); break; case MENU_ITEM_ID(38): w->addnumber(); break; case MENU_ITEM_ID(39): w->addradio(); break; case MENU_ITEM_ID(311): w->addstring(); break; case MENU_ITEM_ID(312): w->addtext(); break; case MENU_ITEM_ID(313): w->addzoom(); break; case MENU_ITEM_ID(310): if (!is_sheet) { ctl = w->addsheet(); _nsheet++; ctl->set_idsheet(_nsheet); } break; default: break; } } //Setta la "maschera" a seconda della presenza o no della tool void TEditMask_window::set_toolbar(bool tb) { TToken_string& it=(TToken_string&)_name.row(_page); if (tb != _tool || !tb) { xvt_vobj_destroy(win()); do_events(); _tool = tb; if (tb) create(0,0,0,0,it,0,W_PLAIN); else { create(_coordx,_coordy,_lung,_alt,it,WSF_SIZE,W_DOC); } open(); set_font(); for(int i=0; i<_controls.items(); i++) { TEditMask_control& up=(TEditMask_control& )_controls[i]; up.resize_rect(); up.update(); } } } //Fa l'update della "maschera" void TEditMask_window::update() { RCT r={_rt.top,0,_rt.bottom,_rt.right}; xvt_dwin_clear(win(), MASK_BACK_COLOR); if(_tool) { set_pen(MASK_LIGHT_COLOR); set_brush(MASK_BACK_COLOR); _rt=::resize_rect(0,_y_tool,0,0,W_DOC,win()); line(0,_rt.top,_rt.right,_rt.top); set_pen(MASK_DARK_COLOR); line(0,_rt.top-2,_rt.right-2,_rt.top-2); set_pen(PROMPT_COLOR); line(0,_rt.top-1,_rt.right-1,_rt.top-1); hide_brush(); } for(int i=0; i<_controls.items(); i++) { _controls.pack(); TEditMask_control& up=(TEditMask_control& )_controls[i]; PNT p={up.rectangle().top,up.rectangle().left}; if(up.page()==_page && up.flag_crt()!=1) up.update(); if(xvt_rect_has_point(&r,p) != 0) up.update(); } } //Setta i campi della maschera di supporto della "maschera" void TEditMask_window::set_mask(TMask& m) { m.set(F_PAG,_page); m.set(F_TOOL,_tool ? "X" : " "); m.set(F_TYPE,_type_vz); m.set(F_X,_coordx); m.set(F_Y,_coordy); m.set(F_LG,_alt); m.set(F_LN,_lung); m.set(F_TOTALP,_total_page); m.set(F_TOOLY,_y_tool); } //Legge dalla maschera di supporto i campi void TEditMask_window::get_mask(TMask& m) { _type_vz=m.get(F_TYPE); _coordx=m.get_int(F_X); _coordy=m.get_int(F_Y); _alt=m.get_int(F_LG); _lung=m.get_int(F_LN); _y_tool=m.get_int(F_TOOLY); if(_type_vz==("a")) _coordx=_coordy=-1; set_toolbar(m.get_bool(F_TOOL)); } //Legge da file .uml solo i controlli TEditMask_control* TEditMask_window::read_control(TScanner& scanner,const TString& k, bool intool) //aggiunge i controlli { TEditMask_control* ctl=NULL; if (k == "ST") ctl = addstring(); if (k == "NU") ctl = addnumber(); if (k == "CU") ctl = addcurrency(); if (k == "DA") ctl = adddate(); if (k == "BO") ctl = addboolean(); if (k == "TE") ctl = addtext(); if (k == "BU") ctl = addbutton(); if (k == "LI") ctl = addlist(); if (k == "ME") ctl = addmemo(); if (k == "ZO") ctl = addzoom(); if (k == "GR") ctl = addgroup(); if (k == "SP") { ctl = addsheet(); _nsheet++; ctl->set_idsheet(_nsheet); } if (k == "RA") ctl = addradio(); if(ctl) ctl->read_from(scanner, intool); /* else warning_box("Ce sta' un campo un po' strano.. AGGIORNAMI!! "); */ return ctl; } //Legge da file .uml solo le proprietà della pagina void TEditMask_window::read_page(TScanner& scanner, int pg,bool tool) { if(!tool) _name.add(TR("Maschera"),0); _page=_total_page=pg; _name.add(scanner.string(),_page); set_caption(_name.row(_page)); _coordx=scanner.integer(); _coordy=scanner.integer(); _lung=scanner.integer(); _alt=scanner.integer(); if(!tool) set_toolbar(FALSE); } //Legge da file .uml solo la toolbar bool TEditMask_window::read_tool(TScanner& scanner) { TString s; _name.add(scanner.string(),0); set_toolbar(TRUE); scanner.rectangle(_rt.left, _rt.top, _rt.right, _rt.bottom); _y_tool=_rt.top; if (_y_tool < 0) _y_tool = _y_tool + 22; s=scanner.pop(); int fieldno=1; while(s!="ENDPAGE") { TEditMask_control* ctrl = read_control(scanner,scanner.key(), TRUE); if (ctrl) ctrl->set_focus(fieldno++); s=scanner.pop(); } return TRUE; } //Gestisce la lettura da file .uml della "maschera" void TEditMask_window::restore_mask(const char* filename) { int pg=0,sh=0; TString in; bool tool=FALSE, endpage=FALSE; _file=filename; _file.lower(); TScanner scanner(_file); TEditMask_window* w=this; in=scanner.pop(); if(scanner.ok()) { while(!scanner.eof()) { for(int i=-1; i<_nsheet; i++) { if(_nsheet!=0) { pg=0; sh++; tool=FALSE; in=scanner.pop(); w=find_sheet(sh)->figlio(); } while (in!="ENDMASK") { while (in!="ENDPAGE") { if (in =="TOOLBAR") { tool=w->read_tool(scanner); in=scanner.pop(); } if (in == "PAGE") { pg++; int fieldno=1; w->read_page(scanner, pg, tool); in=scanner.pop(); while (in != "ENDPAGE") { TEditMask_control* ctrl = w->read_control(scanner,scanner.key()); if (ctrl) ctrl->set_focus(fieldno++); in=scanner.pop(); } endpage=TRUE; } if (!endpage) in=scanner.pop(); } in=scanner.pop(); } } in=scanner.pop(); } } endpage=tool=FALSE; } //Salva come.. la "maschera" su file .uml void TEditMask_window::save_as_mask() { FILE_SPEC fs; memset(&fs, 0, sizeof(FILE_SPEC)); strcpy(fs.type,"UML"); strcpy(fs.creator, "ba2"); xvt_fsys_get_default_dir(&fs.dir); if (xvt_dm_post_file_save(&fs, TR("Salva con nome:"))== FL_OK) { xvt_fsys_set_dir(&fs.dir); _file=fs.name; create_file(); create_fileh(); } else return; } //Risalva la "maschera" su file .uml void TEditMask_window::save_mask() { create_file(); create_fileh(); } //Visualizza i controlli della "maschera" dello spreadsheet corrente void TEditMask_window::vision_sp_ctl() { TEditMask_window* w=this; for(int i=0;i<_controls.items() ;i++) { TEditMask_control& sp = (TEditMask_control&)_controls[i]; if(sp.type()=="SPREADSHEET " && _page==sp.page()) { w =sp.figlio(); w->vision_ctrl(); } } } //Visualizza la "maschera" relativa allo spreadsheet corrente void TEditMask_window::vision_spread() { TEditMask_window* w=this; for(int i=0;i<_controls.items() ;i++) { TEditMask_control& sp = (TEditMask_control&)_controls[i]; if(sp.type()=="SPREADSHEET " && _page==sp.page()) { w =sp.figlio(); w->set_focus(); } } } //Visualizza tutti i controlli presenti nella pagina corrente void TEditMask_window::vision_ctrl() { TArray_sheet elenco(-1,-1,76,20,TR("Elenco dei controlli"), HR("Tipo@15|Identificativo@15|Prompt@25|Pagina@8|Flags@10"), 0x4); for(int i=0;i<_controls.items() ;i++) { TEditMask_control& e = (TEditMask_control&)_controls[i]; if(_page==e.page()) { TToken_string* ts = new TToken_string(80); ts->add(e.type()); ts->add(e.ident()); ts->add(e.prt()); ts->add(e.page()); ts->add(e.flag()); elenco.add(ts); } } KEY k = elenco.run(); if (k == K_ENTER || k == K_DEL) { TEditMask_control& e = (TEditMask_control&)_controls[(int)elenco.selected()]; if (k == K_ENTER) k = e.main_loop(); if (k == K_DEL) destroy_control(&e); force_update(); } } //Gestisce la maschera di supporto della "maschera" KEY TEditMask_window::main_loop() { TMask _mask("ba2600s"); TString name; set_mask(_mask); for(int k=0;k<=_total_page;k++) if(_page==k) _mask.set(F_PRT,_name.row(k)); KEY key=_mask.run(); if(key==K_ENTER) { _page=_mask.get_int(F_PAG); max_page(_page); _name.add(_mask.get(F_PRT),_page); _name.pack(); get_mask(_mask); } return key; } //////////////////////////////////////////////////////////////////////// // TMaskEditor_application :classe per la gestione dell'applicazione //////////////////////////////////////////////////////////////////////// //Richiama bool TMaskEditor_application::create() { dispatch_e_menu(MENU_ITEM_ID(11)); return true; } //Richiama bool TMaskEditor_application::destroy() { destroy_window(); return TApplication::destroy(); } //Distrugge la finestra("maschera") presente void TMaskEditor_application::destroy_window() { if(_window) { do_events(); delete _window; _window=NULL; } } //Crea una nuova finestra("maschera") void TMaskEditor_application::new_mask() { destroy_window(); _window = new TEditMask_window(-1,-1,78,20,TR("Maschera"), WSF_SIZE,W_DOC); _window->open(); _dirty = TRUE; } //Apre una "maschera" void TMaskEditor_application::open_mask() { TFilename in; if (_dirty && _save && yesno_box(TR("Salvare la maschera corrente?"))) save_as_mask(); _dirty = _save = FALSE; destroy_window(); FILE_SPEC fs; memset(&fs, 0, sizeof(FILE_SPEC)); strcpy(fs.type, "UML"); strcpy(fs.name, ""); strcpy(fs.creator, "ba2"); xvt_fsys_get_default_dir(&fs.dir); if (xvt_dm_post_file_open(&fs, TR("Apri file:")) == FL_OK) //apre solo virtualmente { xvt_fsys_set_dir(&fs.dir); in=fs.name; in.lower(); } else return; if(!in.exist()) { xvt_dm_post_error((char *)TR("Il file non può essere aperto... non esiste!")); return; } else { destroy_window(); _window = new TEditMask_window(-1,-1,68,16,TR("Maschera"), WSF_SIZE,W_DOC); _save=TRUE; _window->set_mod(FALSE); _window->open(); _window->restore_mask(fs.name); _window->force_update(); } } //Risalva la "maschera" void TMaskEditor_application::save_mask() { _window->save_mask(); } //Salva come.. la "maschera" void TMaskEditor_application::save_as_mask() { _save=TRUE; _window->save_as_mask(); } //Aggiunge un controllo scelto da menu void TMaskEditor_application::add_control(MENU_TAG m) { _window->set_mod(TRUE); _window->add_control(m); } //Copia i controlli selezionati void TMaskEditor_application::copy_crt_sel() { _window->copy_crt_sel(); } //Cancella i controlli selezionati void TMaskEditor_application::erase_crt_sel() { _window->erase_crt_sel(); } //Sposta in un'altra pagina i controlli selezionati void TMaskEditor_application::move_crt_sel() { _window->move_crt_sel(); } //Permette di compilare la "maschera" creata void TMaskEditor_application::build() { TString app; if(!_window->filename().empty()) { app<<"mskcomp.bat " << _window->filename(); TExternal_app compile(app); compile.run(); } else save_as_mask(); } void TMaskEditor_application::execute() { TString app; if(!_window->filename().empty()) { TFilename name=_window->filename(); name.ext(""); app<<"ba3 -3 " << name; TExternal_app exe(app); exe.run(); } else save_as_mask(); } //Visualizza i controlli presenti nella pagina corrente void TMaskEditor_application::vision_ctrl() { _window->vision_ctrl(); } //Visualizza la "maschera" dello spreadsheet corrente void TMaskEditor_application::vision_spread() { _window->vision_spread(); } //Visualizza i controllo della "maschera" dello spreadsheet corrente void TMaskEditor_application::vision_sp_ctl() { _window->vision_sp_ctl(); } //Gestisce le scelte da menu bool TMaskEditor_application::menu(MENU_TAG m) { switch (m) { case MENU_ITEM_ID(11): // Nuovo... { _save=FALSE; new_mask(); } break; case MENU_ITEM_ID(12): // Apri... open_mask(); break; case MENU_ITEM_ID(13): // Salva... if(_window) { _window->deselection(); _window->inizialition(); if(_save) save_mask(); else save_as_mask(); } break; case MENU_ITEM_ID(14): // Salva con nome if(_window) { _window->deselection(); _window->inizialition(); save_as_mask(); } break; case MENU_ITEM_ID(21): // Copia i controlli selezionati if(_window) copy_crt_sel(); break; case MENU_ITEM_ID(22): // Elimina i controlli selezionati if(_window) erase_crt_sel(); break; case MENU_ITEM_ID(23): // Sposta i controlli selezionati in un'altra pagina if(_window) move_crt_sel(); break; //Aggiunge controlli alla maschera case MENU_ITEM_ID(31): //bottone case MENU_ITEM_ID(32): //checkbox case MENU_ITEM_ID(33): //currency case MENU_ITEM_ID(34): //data case MENU_ITEM_ID(35): //group case MENU_ITEM_ID(36): //lista case MENU_ITEM_ID(37): //memo case MENU_ITEM_ID(38): //radio_bottoni case MENU_ITEM_ID(39): //number case MENU_ITEM_ID(310): //spreadsheet case MENU_ITEM_ID(311): //stringa case MENU_ITEM_ID(312): //text case MENU_ITEM_ID(313): //zoom if(_window) { _window->deselection(); _window->inizialition(); add_control(m); } break; case MENU_ITEM_ID(41): // Visualizza controlli di pag. if(_window) { _window->deselection(); _window->inizialition(); vision_ctrl(); } break; case MENU_ITEM_ID(42): // Visualizza mask di spread if(_window) { _window->deselection(); _window->inizialition(); vision_spread(); } break; case MENU_ITEM_ID(43): // Visualizza controlli di mask di spread if(_window) { _window->deselection(); _window->inizialition(); vision_sp_ctl(); } break; case MENU_ITEM_ID(51): // Fa la compilazione della maschera if(_window) { _window->deselection(); _window->inizialition(); build(); } break; case MENU_ITEM_ID(52): // Fa l'esecuzione della maschera if(_window) { _window->deselection(); _window->inizialition(); execute(); } break; default: break; } return TRUE; } int ba2600(int argc, char* argv[]) { TMaskEditor_application a; a.run(argc, argv, TR("Editor di maschere")); return 0; }