Files correlati : ba0.exe Ricompilazione Demo : [ ] Commento : Migliorata gestione sfondi git-svn-id: svn://10.65.10.50/trunk@20562 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			3500 lines
		
	
	
		
			84 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			3500 lines
		
	
	
		
			84 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
//EDITOR DI MASCHERE
 | 
						||
#include <xvt.h>
 | 
						||
#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<69> 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<69> 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  "<<up.ident()<< "    "<< k <<'\n';
 | 
						||
      k++; 
 | 
						||
    }
 | 
						||
  } 
 | 
						||
}
 | 
						||
 | 
						||
//Definizione di un controllo disabilitato o nascosto
 | 
						||
int TEditMask_control::flag_crt() const
 | 
						||
{
 | 
						||
   if(_flag.find('H')!=-1 || _flag.find('h')!=-1)
 | 
						||
     return 1; 
 | 
						||
   if(_flag.find('D')!=-1 || _flag.find('d')!=-1)
 | 
						||
     return 2;
 | 
						||
   
 | 
						||
   return 0;  
 | 
						||
}             
 | 
						||
 | 
						||
//Ridimensiona le coordinate e le dimensioni del controllo <TEditMask_window::resize_rect(..)>
 | 
						||
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<<c;
 | 
						||
    } 
 | 
						||
    out<<"\n";
 | 
						||
  }
 | 
						||
       
 | 
						||
  if(_key.not_empty())
 | 
						||
    out<<"  KEY "<<_key<<"\n";
 | 
						||
  
 | 
						||
     
 | 
						||
  if(_check.not_empty())
 | 
						||
  {
 | 
						||
    if(_check!=("a"))
 | 
						||
      out<<"  CHECKTYPE ";
 | 
						||
    if (_check==("b")) out << "NORMAL\n";
 | 
						||
    if (_check==("c")) out << "REQUIRED\n";
 | 
						||
    if (_check==("d")) out << "SEARCH\n";
 | 
						||
    if (_check==("e")) out << "FORCED\n";
 | 
						||
  }                                
 | 
						||
                                     
 | 
						||
  if(_warning.not_empty())
 | 
						||
    out<<"  WARNING \"" << _warning << "\"\n";
 | 
						||
}
 | 
						||
 | 
						||
//Legge da file .uml lecaratteristiche comuni dei controlli
 | 
						||
void TEditMask_control::read_field(TScanner& scanner,const TString& tok,bool intool)
 | 
						||
{
 | 
						||
   TString s; 
 | 
						||
   
 | 
						||
   if(tok=="PROMPT")
 | 
						||
   {
 | 
						||
     _left = scanner.integer();   
 | 
						||
     _top = scanner.integer();    
 | 
						||
     _prompt = scanner.string();
 | 
						||
     _intool = intool;
 | 
						||
     _rct = resize_rect(_left,_top,_latox,_latoy,WO_TE,intool);
 | 
						||
   }          
 | 
						||
 | 
						||
   if(tok=="FLAGS" || tok=="WARNING")   
 | 
						||
   {                                  
 | 
						||
     s=(scanner.string()); 
 | 
						||
     if(tok=="FLAGS") 
 | 
						||
       _flag <<' '<<(s); 
 | 
						||
     else  _warning=(s);
 | 
						||
   }  
 | 
						||
 | 
						||
   if(tok=="KEY" || tok=="FIELD" ||\
 | 
						||
      tok=="GROUP" || tok=="MESSAGE")
 | 
						||
   {
 | 
						||
     TString kf=scanner.line();
 | 
						||
 | 
						||
     if(tok=="KEY")   _key <<(kf); 
 | 
						||
     else if(tok=="FIELD") _field=(kf);
 | 
						||
       else if(tok=="GROUP") _group <<' '<<(kf);
 | 
						||
         else
 | 
						||
         {
 | 
						||
           kf.replace('|','^');
 | 
						||
           _message.add(kf);
 | 
						||
         }  
 | 
						||
   }
 | 
						||
     
 | 
						||
   if(tok=="CHECKTYPE")  
 | 
						||
   {
 | 
						||
     s=scanner.pop();
 | 
						||
     if(s==("NORMAL"))   set_check("b");  
 | 
						||
     if(s==("REQUIRED")) set_check("c");
 | 
						||
     if(s==("SEARCH"))   set_check("d");
 | 
						||
     if(s==("FORCED"))   set_check("e");
 | 
						||
   }
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
///////////////////////////////////////////////////////////
 | 
						||
//   TeditMask_string :controllo tipo STRING
 | 
						||
///////////////////////////////////////////////////////////
 | 
						||
 | 
						||
//Costruttore del controllo STRING
 | 
						||
TEditMask_string::TEditMask_string(TEditMask_window* parent):
 | 
						||
                  TEditMask_control(parent)
 | 
						||
{ 
 | 
						||
   _lungvd=_lungsz=15;
 | 
						||
   _lngspt=0;
 | 
						||
   _offset = 1;
 | 
						||
   set_prompt(PR("Stringa"));      
 | 
						||
   set_type("STRING  ");
 | 
						||
   set_id("F_STRING"); 
 | 
						||
   set_dim(_lungvd+prompt_len()+off(),1);
 | 
						||
}                  
 | 
						||
 | 
						||
//Costruttore copia del controllo
 | 
						||
TEditMask_string::TEditMask_string(const TEditMask_string& ctl):
 | 
						||
                  TEditMask_control(ctl)
 | 
						||
{ 
 | 
						||
   _lungvd=_lungsz=ctl._lungvd;
 | 
						||
   _lngspt=ctl._lngspt;
 | 
						||
   _offset =ctl._offset;
 | 
						||
   set_prompt(ctl.prt());      
 | 
						||
   set_type(ctl.type());
 | 
						||
   set_id(ctl.ident());
 | 
						||
   set_dim(_lungvd+prompt_len()+off(),1);
 | 
						||
}                  
 | 
						||
 | 
						||
//Setta l'offset
 | 
						||
void TEditMask_string::set_offset(int d)
 | 
						||
{ 
 | 
						||
   _offset=d;
 | 
						||
}
 | 
						||
 | 
						||
//Controlla l'assenza di valori per le lunghezze
 | 
						||
void TEditMask_string::error_lung(int lsz, int lvd)
 | 
						||
{
 | 
						||
   if(lsz==0) _lungsz=8;
 | 
						||
   if (_lungvd<=0) 
 | 
						||
   {
 | 
						||
     _lungvd=_lungsz;
 | 
						||
     _lngspt=0; 
 | 
						||
   }
 | 
						||
   else _lngspt=_lungvd;
 | 
						||
}
 | 
						||
 | 
						||
//Fa l'update del controllo
 | 
						||
void TEditMask_string::update()const
 | 
						||
{
 | 
						||
   RCT r=rectangle();
 | 
						||
   int lenght=prompt_len()*CHARX;
 | 
						||
   int off=_offset*CHARX;
 | 
						||
    
 | 
						||
   RCT ret={r.top,r.left+lenght+off,r.bottom-(CHARY-2)/8,r.right};
 | 
						||
   
 | 
						||
   padre().set_pen(COLOR_BLACK);
 | 
						||
   if(flag_crt()==2) padre().set_brush(MASK_BACK_COLOR);
 | 
						||
   else padre().set_brush(NORMAL_BACK_COLOR);
 | 
						||
   xvt_dwin_draw_rect(maschera(),&ret);
 | 
						||
    
 | 
						||
   padre().hide_brush();
 | 
						||
   frase(r.left,r.top);
 | 
						||
}        
 | 
						||
 | 
						||
//Setta solo browse e offset sulla maschera di supporto
 | 
						||
void TEditMask_string::set_bwoff(TMask& m)
 | 
						||
{  
 | 
						||
   m.set(F_USE,_use);       
 | 
						||
   m.set(F_OFFSET,_offset);
 | 
						||
}                          
 | 
						||
 | 
						||
//Setta solo le lunghezze sulla maschera di supporto
 | 
						||
void TEditMask_string::set_lngz(TMask& m)
 | 
						||
{  
 | 
						||
   m.set(F_LONGEFF,_lungsz);       
 | 
						||
   m.set(F_LONGEVD,_lungvd);
 | 
						||
}                          
 | 
						||
 | 
						||
//Legge dalla maschera di supporto solo le lunghezze
 | 
						||
void TEditMask_string::get_lngz(TMask& m)
 | 
						||
{
 | 
						||
   _lungsz=m.get_int(F_LONGEFF);       
 | 
						||
   _lungvd=m.get_int(F_LONGEVD);   
 | 
						||
   error_lung(_lungsz,_lungvd);
 | 
						||
}
 | 
						||
 | 
						||
//Legge dalla maschera di supporto solo browse e offset
 | 
						||
void TEditMask_string::get_bwoff(TMask& m)
 | 
						||
{
 | 
						||
   _use=m.get(F_USE);       
 | 
						||
   _offset=m.get_int(F_OFFSET);
 | 
						||
}
 | 
						||
 | 
						||
//Gestisce la maschera di supporto
 | 
						||
KEY TEditMask_string::main_loop()
 | 
						||
{ 
 | 
						||
   TMask _mask("ba2600g");
 | 
						||
   TSheet_field& s=_mask.sfield(F_MESSAGE);
 | 
						||
   
 | 
						||
   set_lngz(_mask);
 | 
						||
   _mask.set(F_ADDR,_addr);
 | 
						||
   set_bwoff(_mask);             
 | 
						||
   set_field(_mask);             
 | 
						||
   set_option(_mask);              
 | 
						||
   set_message(s);
 | 
						||
   KEY k = _mask.run();
 | 
						||
   if (k == K_ENTER)
 | 
						||
   {
 | 
						||
     get_lngz(_mask);
 | 
						||
     get_message(s);
 | 
						||
     get_field(_mask);
 | 
						||
     get_option(_mask);   
 | 
						||
     get_bwoff(_mask);
 | 
						||
     _addr=_mask.get(F_ADDR);
 | 
						||
     set_dim(_lungvd+prompt_len()+off(),1);  
 | 
						||
   }
 | 
						||
 | 
						||
    return k;
 | 
						||
}                                           
 | 
						||
 | 
						||
//Stampa su file .uml solo le lunghezze
 | 
						||
void TEditMask_string::print_lngz(ostream& out) const
 | 
						||
{
 | 
						||
   if(_lngspt<=0)
 | 
						||
     out << _lungsz <<'\n';
 | 
						||
   else  
 | 
						||
     out<< _lungsz <<' '<< _lungvd <<'\n';
 | 
						||
}
 | 
						||
 | 
						||
//Stampa su file .uml solo il browse
 | 
						||
void TEditMask_string::print_use(ostream& out)const
 | 
						||
{   
 | 
						||
   TString in;
 | 
						||
   
 | 
						||
   if(_use.not_empty())
 | 
						||
   { 
 | 
						||
     for(int k=0;;k++)
 | 
						||
     {
 | 
						||
       int y;
 | 
						||
       for(y = 0;_use[k]!='\n' && _use[k];k++,y++)
 | 
						||
         in[y]=_use[k];
 | 
						||
       in[y]='\0';
 | 
						||
       out<<"  "<< in <<"\n";
 | 
						||
       if(!_use[k]) break;
 | 
						||
     }       
 | 
						||
   } 
 | 
						||
} 
 | 
						||
 | 
						||
//Stampa su file .uml il controllo
 | 
						||
void TEditMask_string::print_on(ostream& out) const
 | 
						||
{ 
 | 
						||
   out<<type()<< ident() << ' ';
 | 
						||
   print_lngz(out);
 | 
						||
   TEditMask_control::print_on(out);
 | 
						||
   if(_addr.not_empty())
 | 
						||
     out<<"  ADD RUN "<<_addr<<"\n";
 | 
						||
   print_use(out);
 | 
						||
   out <<" END"<<"\n\n";
 | 
						||
 | 
						||
}
 | 
						||
 | 
						||
//Legge da file .uml solo i valori delle lunghezze
 | 
						||
void TEditMask_string::read_lngz(TScanner& scanner)
 | 
						||
{
 | 
						||
   _lungsz=scanner.integer();
 | 
						||
   if(_lungsz<=0) _lungsz=8;
 | 
						||
   _lungvd=scanner.integer(); 
 | 
						||
   if(_lungvd <=0 )
 | 
						||
   {
 | 
						||
     _lungvd=_lungsz;
 | 
						||
     _lngspt=0;
 | 
						||
   }
 | 
						||
   else _lngspt=_lungvd;  
 | 
						||
}   
 | 
						||
 | 
						||
//Legge da file .uml solo l'offset
 | 
						||
int TEditMask_string::read_off(const TString& prt)
 | 
						||
{
 | 
						||
   int off=0;
 | 
						||
 | 
						||
   for(int i = prt.len()-1; i >= 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<<type()<<ident() << "  "<< _latox <<'\n';
 | 
						||
   else  
 | 
						||
     out<<type()<<ident() << "  "<< _latox <<"  "<<_decimals<<'\n';
 | 
						||
   TEditMask_control::print_on(out);
 | 
						||
   if(_picture.not_empty())
 | 
						||
     out<<"  PICTURE \""<<_picture<<"\"\n";
 | 
						||
   print_use(out);
 | 
						||
   out <<" END"<<"\n\n";
 | 
						||
}
 | 
						||
 | 
						||
//Legge da file .uml il controllo
 | 
						||
void TEditMask_number::read_from(TScanner& scanner,bool intool)
 | 
						||
{
 | 
						||
   TString tok;
 | 
						||
   
 | 
						||
   set_id(scanner.pop());          
 | 
						||
   _latox=scanner.integer();
 | 
						||
   _decimals=scanner.integer(); 
 | 
						||
   tok=scanner.pop();
 | 
						||
   while(tok!="END")
 | 
						||
   {
 | 
						||
     read_field(scanner,tok,intool);
 | 
						||
     read_use(scanner,tok);
 | 
						||
     if(tok=="PICTURE") 
 | 
						||
       _picture=(scanner.string());
 | 
						||
     tok=scanner.pop();
 | 
						||
   }             
 | 
						||
 | 
						||
   tok=prt();  read_off(tok);  tok.rtrim();  set_prompt(tok);
 | 
						||
   set_dim(_latox+prompt_len()+off(),1);
 | 
						||
}
 | 
						||
 | 
						||
const TString& TEditMask_number::set_picture(const TString& pic) 
 | 
						||
{
 | 
						||
   return _picture=(pic);
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
///////////////////////////////////////////////////////////
 | 
						||
//   TeditMask_currency :controllo tipo CURRENCY
 | 
						||
///////////////////////////////////////////////////////////
 | 
						||
 | 
						||
//Costruttore del controllo CURRENCY
 | 
						||
TEditMask_currency::TEditMask_currency(TEditMask_window* parent)
 | 
						||
                                   :TEditMask_number(parent)
 | 
						||
{
 | 
						||
   _latox=10;   
 | 
						||
   set_picture("");
 | 
						||
   set_prompt(PR("Valuta  "));
 | 
						||
   set_type("CURRENCY  ");
 | 
						||
   set_id("F_CUR");
 | 
						||
   set_dim(_latox + prompt_len(),1);
 | 
						||
}
 | 
						||
 | 
						||
//Costruttore copia del controllo
 | 
						||
TEditMask_currency::TEditMask_currency(const TEditMask_currency& ctl)
 | 
						||
                                   :TEditMask_number(ctl)
 | 
						||
{
 | 
						||
   _latox=ctl._latox;   
 | 
						||
   set_prompt(ctl.prt());
 | 
						||
   set_type(ctl.type());
 | 
						||
   set_id(ctl.ident());
 | 
						||
   set_dim(_latox + prompt_len(),1);
 | 
						||
}
 | 
						||
 | 
						||
//Gestisce la maschera di supporto
 | 
						||
KEY TEditMask_currency::main_loop()
 | 
						||
{ 
 | 
						||
   TMask _mask("ba2600y");
 | 
						||
   TSheet_field& s=_mask.sfield(F_MESSAGE);
 | 
						||
   
 | 
						||
   _mask.set(F_LONGEFF,_latox);
 | 
						||
   _mask.set(F_PICTURE,_picture);
 | 
						||
   set_field(_mask);
 | 
						||
   set_option(_mask);
 | 
						||
   set_message(s);
 | 
						||
   set_bwoff(_mask);
 | 
						||
   KEY k = _mask.run();
 | 
						||
   if (k == K_ENTER)
 | 
						||
   {
 | 
						||
     get_field(_mask);
 | 
						||
     get_option(_mask);
 | 
						||
     get_message(s);
 | 
						||
     get_bwoff(_mask);          
 | 
						||
     _latox=_mask.get_int(F_LONGEFF);
 | 
						||
     _picture=_mask.get(F_PICTURE);  
 | 
						||
     set_picture(_picture);
 | 
						||
     set_dim(_latox + prompt_len() + off(),1);
 | 
						||
   }
 | 
						||
    return k;
 | 
						||
}             
 | 
						||
   
 | 
						||
void TEditMask_currency::read_from(TScanner& scanner,bool intool)
 | 
						||
{
 | 
						||
   TEditMask_number::read_from(scanner,intool);
 | 
						||
   set_decimal(0);
 | 
						||
}
 | 
						||
 | 
						||
///////////////////////////////////////////////////////////
 | 
						||
//   TeditMask_date :controllo tipo DATE
 | 
						||
///////////////////////////////////////////////////////////
 | 
						||
 | 
						||
//Costruttore del controllo DATE
 | 
						||
TEditMask_date::TEditMask_date(TEditMask_window* parent)
 | 
						||
      :TEditMask_string(parent)
 | 
						||
{
 | 
						||
   set_prompt(PR("Data"));
 | 
						||
   set_type("DATE  ");
 | 
						||
   set_dim(10+prompt_len()+off(),1);
 | 
						||
   set_id("F_DATE");
 | 
						||
}
 | 
						||
 | 
						||
//Costruttore copia del controllo
 | 
						||
TEditMask_date::TEditMask_date(const TEditMask_date& ctl)
 | 
						||
      :TEditMask_string(ctl)
 | 
						||
{
 | 
						||
   set_prompt(ctl.prt());
 | 
						||
   set_type(ctl.type());
 | 
						||
   set_id(ctl.ident());
 | 
						||
   set_dim(10+prompt_len()+off(),1);
 | 
						||
}
 | 
						||
 | 
						||
//Gestisce la maschera di supporto
 | 
						||
KEY TEditMask_date::main_loop()
 | 
						||
{ 
 | 
						||
   TMask _mask("ba2600e");
 | 
						||
   TSheet_field& s=_mask.sfield(F_MESSAGE);
 | 
						||
   
 | 
						||
   set_field(_mask);
 | 
						||
   set_option(_mask);
 | 
						||
   set_message(s);
 | 
						||
   set_bwoff(_mask);
 | 
						||
   KEY k= _mask.run();      
 | 
						||
   if(k==K_ENTER) 
 | 
						||
   {
 | 
						||
     get_field(_mask); 
 | 
						||
     get_option(_mask);
 | 
						||
     get_message(s);
 | 
						||
     get_bwoff(_mask);    
 | 
						||
     set_dim(12 + prompt_len() + off(),1);  
 | 
						||
   }     
 | 
						||
    return k;
 | 
						||
 | 
						||
}
 | 
						||
 | 
						||
//Stampa su file .uml il controllo
 | 
						||
void TEditMask_date::print_on(ostream& out) const
 | 
						||
{ 
 | 
						||
   TString id=ident(); 
 | 
						||
   
 | 
						||
   out<<type()<<ident() <<"\n";
 | 
						||
   TEditMask_control::print_on(out);
 | 
						||
   print_use(out);
 | 
						||
   out <<" END"<<"\n\n";
 | 
						||
}
 | 
						||
 | 
						||
//Legge da file .uml il controllo
 | 
						||
void TEditMask_date::read_from(TScanner& scanner,bool intool)
 | 
						||
{
 | 
						||
   TString id,tok;
 | 
						||
 | 
						||
   set_id(scanner.pop());
 | 
						||
   tok=scanner.pop();
 | 
						||
   while(tok!="END")
 | 
						||
   {
 | 
						||
     read_field(scanner,tok,intool);
 | 
						||
     read_use(scanner,tok);
 | 
						||
     tok=scanner.pop();
 | 
						||
   }  
 | 
						||
   tok=prt();  read_off(tok);  tok.rtrim();  set_prompt(tok);
 | 
						||
   set_dim(12+prompt_len()+off(),1);
 | 
						||
}
 | 
						||
 | 
						||
///////////////////////////////////////////////////////////
 | 
						||
//   TeditMask_boolean :controllo tipo BOOLEAN
 | 
						||
///////////////////////////////////////////////////////////
 | 
						||
 | 
						||
//Costruttore del controllo BOOLEAN
 | 
						||
TEditMask_boolean::TEditMask_boolean(TEditMask_window* parent)
 | 
						||
      :TEditMask_control(parent)
 | 
						||
{
 | 
						||
   set_type("BOOLEAN  ");
 | 
						||
   set_id("F_CHECK");
 | 
						||
   set_prompt(PR("Booleano "));
 | 
						||
   set_dim(prompt_len()+2,1);
 | 
						||
 | 
						||
}
 | 
						||
 | 
						||
//Costruttore copia del controllo
 | 
						||
TEditMask_boolean::TEditMask_boolean(const TEditMask_boolean& ctl)
 | 
						||
      :TEditMask_control(ctl)
 | 
						||
{
 | 
						||
   set_type(ctl.type());
 | 
						||
   set_id(ctl.ident());
 | 
						||
   set_prompt(ctl.prt());
 | 
						||
   set_dim(prompt_len()+2,1);
 | 
						||
 | 
						||
}
 | 
						||
 | 
						||
//Fa l'update del controllo
 | 
						||
void TEditMask_boolean::update()const
 | 
						||
{
 | 
						||
   RCT r=rectangle();   
 | 
						||
   int lato=(r.bottom - r.top)/2;
 | 
						||
   r.bottom=r.top+(CHARY-2);
 | 
						||
   int top = r.top;
 | 
						||
   r.top = r.bottom - lato;
 | 
						||
   
 | 
						||
   padre().set_pen(MASK_LIGHT_COLOR);
 | 
						||
   line(r.left,r.top,r.left+lato,r.top);
 | 
						||
   line(r.left,r.top,r.left,r.bottom);
 | 
						||
 | 
						||
   padre().set_pen(MASK_DARK_COLOR);
 | 
						||
   line(r.left+lato,r.top,r.left+lato,r.bottom);
 | 
						||
   line(r.left,r.bottom,r.left+lato,r.bottom);
 | 
						||
 | 
						||
   padre().set_pen(COLOR_BLACK);
 | 
						||
   frase(r.left+lato+CHARX,top);
 | 
						||
 | 
						||
}
 | 
						||
 | 
						||
//Gestisce la maschera di supporto
 | 
						||
KEY TEditMask_boolean::main_loop()
 | 
						||
{ 
 | 
						||
   TMask _mask("ba2600k");
 | 
						||
   TSheet_field& s=_mask.sfield(116);
 | 
						||
  
 | 
						||
   set_field(_mask);
 | 
						||
   set_option(_mask);
 | 
						||
   set_message(s);
 | 
						||
   KEY k= _mask.run();
 | 
						||
   if(k==K_ENTER) 
 | 
						||
   {
 | 
						||
     get_field(_mask); 
 | 
						||
     get_option(_mask);
 | 
						||
     get_message(s);
 | 
						||
     set_dim(prompt_len()+2,1);
 | 
						||
   } 
 | 
						||
    return k;
 | 
						||
}             
 | 
						||
 | 
						||
//Stampa su file .uml il controllo
 | 
						||
void TEditMask_boolean::print_on(ostream& out) const
 | 
						||
{ 
 | 
						||
   out<<type()<<ident()<< "\n";
 | 
						||
   TEditMask_control::print_on(out);
 | 
						||
   out <<" END"<<"\n\n";
 | 
						||
}
 | 
						||
 | 
						||
//Legge da file .uml il controllo
 | 
						||
void TEditMask_boolean::read_from(TScanner& scanner,bool intool)  
 | 
						||
{
 | 
						||
   TString tok;
 | 
						||
   
 | 
						||
   set_id(scanner.pop());
 | 
						||
   tok=scanner.pop();
 | 
						||
   while(tok!="END")
 | 
						||
   {
 | 
						||
     read_field(scanner,tok,intool);
 | 
						||
     tok=scanner.pop();
 | 
						||
   }  
 | 
						||
   set_dim(prompt_len()+2,1);
 | 
						||
}
 | 
						||
 | 
						||
///////////////////////////////////////////////////////////
 | 
						||
//   TeditMask_text :controllo tipo TEXT
 | 
						||
///////////////////////////////////////////////////////////
 | 
						||
 | 
						||
//Costruttore del controllo TEXT
 | 
						||
TEditMask_text::TEditMask_text(TEditMask_window* parent)
 | 
						||
             :TEditMask_string(parent)
 | 
						||
{
 | 
						||
   set_prompt(PR("Testo"));
 | 
						||
   set_dim(prompt_len(),1);
 | 
						||
   set_type("TEXT  ");
 | 
						||
   set_id("DLG_NULL");
 | 
						||
   set_focus(-1);
 | 
						||
}
 | 
						||
 | 
						||
//Costruttore copia del controllo
 | 
						||
TEditMask_text::TEditMask_text(const TEditMask_text& ctl)
 | 
						||
             :TEditMask_string(ctl)
 | 
						||
{
 | 
						||
   _flag=ctl._flag;
 | 
						||
   _group=ctl._group;
 | 
						||
   set_prompt(ctl.prt());
 | 
						||
   set_type(ctl.type());
 | 
						||
   set_id(ctl.ident());
 | 
						||
   set_dim(prompt_len(),1);
 | 
						||
   set_focus(-1);
 | 
						||
}
 | 
						||
 | 
						||
//Fa l'update del controllo
 | 
						||
void TEditMask_text::update() const
 | 
						||
{
 | 
						||
   RCT r=rectangle();
 | 
						||
   if(flag_crt()==2) padre().set_pen(MASK_BACK_COLOR);
 | 
						||
   else padre().set_pen(COLOR_BLACK);
 | 
						||
   frase(r.left,r.top);
 | 
						||
}
 | 
						||
 | 
						||
//Gestisce la maschera di supporto
 | 
						||
KEY TEditMask_text::main_loop()
 | 
						||
{ 
 | 
						||
   TMask _mask("ba2600t");
 | 
						||
  
 | 
						||
   set_field(_mask);
 | 
						||
   _mask.set(F_FLAG,_flag);
 | 
						||
   _mask.set(F_GROUP,_group);
 | 
						||
   KEY k= _mask.run();
 | 
						||
   if(k==K_ENTER) {
 | 
						||
     get_field(_mask);       
 | 
						||
     _flag=_mask.get(F_FLAG);   
 | 
						||
     _group=_mask.get(F_GROUP);       
 | 
						||
     set_flag(_flag);
 | 
						||
     set_group(_group);
 | 
						||
     set_dim(prompt_len(),1);  
 | 
						||
   } 
 | 
						||
    return k;
 | 
						||
}             
 | 
						||
 | 
						||
//Stampa su file .uml il controllo
 | 
						||
void TEditMask_text::print_on(ostream& out) const
 | 
						||
{ 
 | 
						||
   
 | 
						||
   out<<type()<< ident() <<"\n";
 | 
						||
   TEditMask_control::print_on(out);
 | 
						||
   out <<" END"<<"\n\n";
 | 
						||
}
 | 
						||
 | 
						||
//Legge da file .uml il controllo
 | 
						||
void TEditMask_text::read_from(TScanner& scanner,bool intool)
 | 
						||
{
 | 
						||
   TString tok;
 | 
						||
   
 | 
						||
   set_id(scanner.pop()); 
 | 
						||
   tok=scanner.pop();
 | 
						||
   while(tok!="END")
 | 
						||
   {
 | 
						||
     read_field(scanner,tok,intool);
 | 
						||
     tok=scanner.pop();
 | 
						||
   }  
 | 
						||
   set_dim(prompt_len(),1);
 | 
						||
} 
 | 
						||
 | 
						||
///////////////////////////////////////////////////////////
 | 
						||
//   TeditMask_button :controllo tipo BUTTON
 | 
						||
///////////////////////////////////////////////////////////
 | 
						||
 | 
						||
//Costruttore
 | 
						||
TEditMask_button::TEditMask_button(TEditMask_window* parent)
 | 
						||
    :TEditMask_control(parent)
 | 
						||
{
 | 
						||
   _latox=10;
 | 
						||
   _latoy=2;
 | 
						||
   
 | 
						||
   set_prompt(FR("Bottone"));
 | 
						||
   set_type("BUTTON  ");
 | 
						||
   set_id("DLG_NULL");
 | 
						||
   set_dim(_latox+2,_latoy);
 | 
						||
}
 | 
						||
 | 
						||
//Costruttore copia del controllo
 | 
						||
TEditMask_button::TEditMask_button(const TEditMask_button& ctl)
 | 
						||
    :TEditMask_control(ctl)
 | 
						||
{
 | 
						||
   _latox=ctl._latox;
 | 
						||
   _latoy=ctl._latoy;
 | 
						||
   
 | 
						||
   set_prompt(ctl.prt());
 | 
						||
   set_type(ctl.type());
 | 
						||
   set_id(ctl.ident());
 | 
						||
   set_dim(_latox+2,_latoy);
 | 
						||
}
 | 
						||
 | 
						||
//Definisce i bottoni standard
 | 
						||
void TEditMask_button::type_button(const TString& id,const TString& pr)
 | 
						||
{
 | 
						||
    if(pr=="")
 | 
						||
    {
 | 
						||
//      if(id=="DLG_NULL") ;
 | 
						||
      if(id=="DLG_OK")     set_prompt(BR("Conferma", 9)) ;
 | 
						||
			else
 | 
						||
				if(id=="DLG_CANCEL") set_prompt(BR("Annulla", 9));
 | 
						||
				else
 | 
						||
					if(id=="DLG_DELREC") set_prompt(BR("Elimina", 9));
 | 
						||
					else
 | 
						||
						if(id=="DLG_QUIT")   set_prompt(BR("Fine", 9));    
 | 
						||
						else
 | 
						||
				      if(id=="DLG_PRINT")  set_prompt(BR("Stampa", 9));
 | 
						||
							else
 | 
						||
								if(id=="DLG_SELECT") set_prompt(BR("Seleziona", 9));
 | 
						||
    }
 | 
						||
}
 | 
						||
 | 
						||
//Fa l'update del controllo
 | 
						||
void TEditMask_button::update()const
 | 
						||
{
 | 
						||
   RCT rt=rectangle();           
 | 
						||
   RCT r={rt.top,rt.left,rt.bottom-(CHARY-2)/2,rt.right}; 
 | 
						||
   int lenght=prompt_len()*CHARX;
 | 
						||
   int latol=(r.right-r.left);
 | 
						||
   int posfx=(latol-lenght)/2;
 | 
						||
   int posfy=((r.bottom-r.top)/2);
 | 
						||
   
 | 
						||
   if(flag_crt()==2) padre().set_brush(DISABLED_BACK_COLOR);
 | 
						||
   else padre().set_brush(BTN_BACK_COLOR);
 | 
						||
   xvt_dwin_draw_rect(maschera(),&r);
 | 
						||
 | 
						||
   padre().set_pen(BTN_LIGHT_COLOR,2);
 | 
						||
   line(r.left+2,r.top+2,r.right-2,r.top+2);
 | 
						||
   line(r.left+2,r.top+2,r.left+2,r.bottom-2);
 | 
						||
 | 
						||
   padre().set_pen(BTN_DARK_COLOR,2);
 | 
						||
   line(r.right-2,r.top+2,r.right-2,r.bottom-2);
 | 
						||
   line(r.left+2,r.bottom-2,r.right-2,r.bottom-2);
 | 
						||
   padre().set_pen(COLOR_BLACK,1);
 | 
						||
   frase(r.left+posfx,r.top+posfy-10);
 | 
						||
        
 | 
						||
}                         
 | 
						||
 | 
						||
//Gestisce la maschera di supporto
 | 
						||
KEY TEditMask_button::main_loop()
 | 
						||
{ 
 | 
						||
   TMask _mask("ba2600n");  
 | 
						||
   TSheet_field& s=_mask.sfield(F_MESSAGE);
 | 
						||
 | 
						||
   set_field(_mask);
 | 
						||
   set_option(_mask);
 | 
						||
   set_message(s);
 | 
						||
   _mask.set(F_LONGEFF,_latox);
 | 
						||
   _mask.set(F_LARGE,_latoy);
 | 
						||
   KEY k= _mask.run();      
 | 
						||
   if(k==K_ENTER) {
 | 
						||
     get_field(_mask);
 | 
						||
     get_option(_mask);      
 | 
						||
     get_message(s);
 | 
						||
     _latox=_mask.get_int(F_LONGEFF);
 | 
						||
     _latoy=_mask.get_int(F_LARGE);        
 | 
						||
     set_dim(_latox+2,_latoy); 
 | 
						||
     type_button(ident(),prt());
 | 
						||
   }                                          
 | 
						||
 | 
						||
    return k;                        
 | 
						||
}             
 | 
						||
 | 
						||
//Stampa su file .uml il controllo
 | 
						||
void TEditMask_button::print_on(ostream& out) const     
 | 
						||
{ 
 | 
						||
   const TString tipo=prt();
 | 
						||
   
 | 
						||
   out<<type()<<ident()<<" "<<_latox<<" "<<_latoy<<"\n";
 | 
						||
   TEditMask_control::print_on(out);
 | 
						||
   out <<" END"<<"\n\n";
 | 
						||
}
 | 
						||
 | 
						||
//Legge fa dile .uml il controllo
 | 
						||
void TEditMask_button::read_from(TScanner& scanner,bool intool)  
 | 
						||
{
 | 
						||
   TString id,tok;
 | 
						||
   
 | 
						||
   id=scanner.pop();  set_id(id); 
 | 
						||
   _latox=scanner.integer();
 | 
						||
   if(_latox<=0) _latox=10;
 | 
						||
   _latoy=scanner.integer(); 
 | 
						||
   if(_latoy<=0) _latoy=2;
 | 
						||
   set_dim(_latox+2,_latoy); 
 | 
						||
   tok=scanner.pop();
 | 
						||
   while(tok!="END")
 | 
						||
   {
 | 
						||
     read_field(scanner,tok,intool);
 | 
						||
     tok=scanner.pop();
 | 
						||
   }  
 | 
						||
   tok=prt(); 
 | 
						||
   type_button(id,tok); 
 | 
						||
}
 | 
						||
 | 
						||
///////////////////////////////////////////////////////////
 | 
						||
//   TeditMask_group :controllo tipo GROUP
 | 
						||
///////////////////////////////////////////////////////////
 | 
						||
 | 
						||
//Costruttore del controllo GROUP
 | 
						||
TEditMask_group::TEditMask_group(TEditMask_window* parent)
 | 
						||
     :TEditMask_control(parent)
 | 
						||
{
 | 
						||
   set_prompt(PR("Gruppo"));
 | 
						||
   set_type("GROUPBOX  ");
 | 
						||
   set_id("DLG_NULL");
 | 
						||
   _latox=18;
 | 
						||
   _latoy=6;
 | 
						||
   set_dim(_latox,_latoy);
 | 
						||
   set_focus(-2);
 | 
						||
}
 | 
						||
 | 
						||
//Costruttore copia del controllo
 | 
						||
TEditMask_group::TEditMask_group(const TEditMask_group& ctl)
 | 
						||
     :TEditMask_control(ctl)
 | 
						||
{
 | 
						||
   set_prompt(ctl.prt());
 | 
						||
   set_type(ctl.type());
 | 
						||
   set_id(ctl.ident());
 | 
						||
   _latox=ctl._latox;
 | 
						||
   _latoy=ctl._latoy;
 | 
						||
   set_dim(_latox,_latoy);
 | 
						||
   set_focus(-2);
 | 
						||
}
 | 
						||
 | 
						||
//Presenza o no del flags "R"
 | 
						||
bool TEditMask_group::fl_crt() const
 | 
						||
{
 | 
						||
  TString fl=flag();
 | 
						||
  if(fl.find('R')!=-1 || fl.find('r')!=-1)
 | 
						||
    return TRUE;
 | 
						||
  return FALSE; 
 | 
						||
}
 | 
						||
 | 
						||
//Fa l'update del controllo
 | 
						||
void TEditMask_group::update()const
 | 
						||
{
 | 
						||
  RCT r=rectangle();
 | 
						||
 
 | 
						||
  if(fl_crt()) 
 | 
						||
    padre().set_pen(MASK_DARK_COLOR);
 | 
						||
  else 
 | 
						||
    padre().set_pen(MASK_LIGHT_COLOR);
 | 
						||
  line(r.left,r.top+1+ROWY/2,r.right,r.top+1+ROWY/2);
 | 
						||
  line(r.left,r.top+1+ROWY/2,r.left,r.bottom+1-ROWY/2);
 | 
						||
  if(fl_crt()) 
 | 
						||
    padre().set_pen(MASK_LIGHT_COLOR);
 | 
						||
  else 
 | 
						||
    padre().set_pen(MASK_DARK_COLOR);
 | 
						||
  line(r.right,r.top+1+ROWY/2,r.right,r.bottom+1-ROWY/2);
 | 
						||
  line(r.left,r.bottom+1-ROWY/2,r.right,r.bottom+1-ROWY/2);
 | 
						||
  padre().set_pen(COLOR_BLACK);
 | 
						||
  frase(r.left+2,r.top);
 | 
						||
}
 | 
						||
 | 
						||
//Gestisce la maschera di supporto
 | 
						||
KEY TEditMask_group::main_loop()
 | 
						||
{ 
 | 
						||
  TMask _mask("ba2600p");
 | 
						||
  TSheet_field& s=_mask.sfield(F_MESSAGE);
 | 
						||
  
 | 
						||
    
 | 
						||
  set_field(_mask);
 | 
						||
  set_option(_mask);
 | 
						||
  set_message(s);
 | 
						||
  _mask.set(F_LARGE,_latoy);
 | 
						||
  _mask.set(F_LONGEFF,_latox);
 | 
						||
  KEY k= _mask.run();      
 | 
						||
  if(k==K_ENTER) 
 | 
						||
  {
 | 
						||
    get_field(_mask); 
 | 
						||
    get_option(_mask);
 | 
						||
    get_message(s);
 | 
						||
    _latoy=_mask.get_int(F_LARGE);
 | 
						||
    _latox=_mask.get_int(F_LONGEFF);
 | 
						||
    set_dim(_latox,_latoy);
 | 
						||
  }
 | 
						||
  return k; 
 | 
						||
}             
 | 
						||
 | 
						||
//Stampa su file .uml il controllo
 | 
						||
void TEditMask_group::print_on(ostream& out) const     
 | 
						||
{ 
 | 
						||
   
 | 
						||
   out<<type()<<ident()<<" "<<_latox<<" "<<_latoy<<"\n";
 | 
						||
   TEditMask_control::print_on(out);
 | 
						||
   out <<" END"<<"\n\n";
 | 
						||
}
 | 
						||
 | 
						||
//Legge da file .uml il controllo
 | 
						||
void TEditMask_group::read_from(TScanner& scanner,bool intool)       
 | 
						||
{
 | 
						||
   TString tok;
 | 
						||
   
 | 
						||
   set_id(scanner.pop()); 
 | 
						||
   _latox=scanner.integer();
 | 
						||
   _latoy=scanner.integer(); 
 | 
						||
   set_dim(_latox,_latoy); 
 | 
						||
   tok=scanner.pop();
 | 
						||
   while(tok!="END")
 | 
						||
   {
 | 
						||
     read_field(scanner,tok,intool);
 | 
						||
     tok=scanner.pop();
 | 
						||
   }  
 | 
						||
} 
 | 
						||
 | 
						||
///////////////////////////////////////////////////////////
 | 
						||
//   TeditMask_list :controllo tipo LIST
 | 
						||
///////////////////////////////////////////////////////////
 | 
						||
 | 
						||
//Costruttore del controllo LIST
 | 
						||
TEditMask_list::TEditMask_list(TEditMask_window* parent)
 | 
						||
                              :TEditMask_string(parent)
 | 
						||
{
 | 
						||
   _num_item=0;
 | 
						||
   _offset=1;
 | 
						||
   set_id("F_LIST");
 | 
						||
   set_prompt(PR("Lista"));
 | 
						||
   set_type("LIST  ");
 | 
						||
   set_dim(dim_video()+ prompt_len()+off(),1);
 | 
						||
}
 | 
						||
 | 
						||
//Costruttore copia del controllo
 | 
						||
TEditMask_list::TEditMask_list(const TEditMask_list& ctl)
 | 
						||
                              :TEditMask_string(ctl)
 | 
						||
{
 | 
						||
   _num_item=ctl._num_item;
 | 
						||
   _offset=ctl._offset;                       
 | 
						||
   _item=ctl._item;
 | 
						||
   set_id(ctl.ident());
 | 
						||
   set_prompt(ctl.prt());
 | 
						||
   set_type(ctl.type());
 | 
						||
   set_dim(dim_video()+ prompt_len()+off(),1);
 | 
						||
}
 | 
						||
 | 
						||
//Disegna la freccia del controllo
 | 
						||
void TEditMask_list::image()const 
 | 
						||
{
 | 
						||
   RCT r=rectangle();
 | 
						||
   int lato=r.bottom-r.top;
 | 
						||
 | 
						||
   PNT rt[]= {{r.top+lato/2-4,r.right-lato/2-2}, {r.top+lato/2-4,r.right-lato/2+1}, 
 | 
						||
              {r.top+lato/2,r.right-lato/2+1},{r.top+lato/2,r.right-lato/2-2},
 | 
						||
              {r.top+lato/2-4,r.right-lato/2-2}};
 | 
						||
 | 
						||
   PNT p[] = {{r.top+lato/2,r.right-lato+5}, {r.top+lato/2,r.right-5}, 
 | 
						||
              {r.top+lato/2+3,r.right-(lato/2)},{r.top+lato/2,r.right-lato+5}};
 | 
						||
 | 
						||
   padre().set_brush(COLOR_BLACK); 
 | 
						||
   xvt_dwin_draw_polygon(maschera(), rt, 5); 
 | 
						||
   xvt_dwin_draw_polygon(maschera(), p, 4); 
 | 
						||
   line(r.right-lato+5,r.top+lato/2+5,r.right-5,r.top+lato/2+5);
 | 
						||
   padre().hide_brush();
 | 
						||
}
 | 
						||
 | 
						||
//Fa l'update del controllo
 | 
						||
void TEditMask_list::update()const
 | 
						||
{
 | 
						||
   RCT r=rectangle();
 | 
						||
   r.bottom=r.bottom-(CHARY-2)/8;
 | 
						||
   int lato=(r.bottom-r.top);    
 | 
						||
   RCT rt={r.top, r.right-lato,r.bottom,r.right};
 | 
						||
   
 | 
						||
   TEditMask_string::update();                           
 | 
						||
   
 | 
						||
   padre().set_brush(BTN_BACK_COLOR);
 | 
						||
   xvt_dwin_draw_rect(maschera(),&rt);
 | 
						||
   
 | 
						||
   padre().set_pen(BTN_LIGHT_COLOR,2);
 | 
						||
   line((r.right+2)-lato,r.top+2,(r.right-2),r.top+2);
 | 
						||
   line((r.right+2)-lato,r.top+2,(r.right+2)-lato,r.bottom-2); 
 | 
						||
   
 | 
						||
   padre().set_pen(BTN_DARK_COLOR,2);
 | 
						||
   line((r.right-2),r.top+2,r.right-2,r.bottom-2);
 | 
						||
   line((r.right+2)-lato,r.bottom-2,r.right-2,r.bottom-2);
 | 
						||
   padre().set_pen(COLOR_BLACK,1);
 | 
						||
   image();
 | 
						||
   
 | 
						||
}
 | 
						||
 | 
						||
//Setta sulla maschera di supporto solo _item
 | 
						||
void TEditMask_list::set_item(TSheet_field& sp)
 | 
						||
{
 | 
						||
   sp.rows_array()=_item;
 | 
						||
} 
 | 
						||
 | 
						||
//Legge dalla maschera di supporto solo _item
 | 
						||
void TEditMask_list::get_item(TSheet_field& sp)
 | 
						||
{
 | 
						||
   _item=sp.rows_array();
 | 
						||
   _num_item=sp.items();
 | 
						||
} 
 | 
						||
 | 
						||
//Gestisce la maschera di supporto
 | 
						||
KEY TEditMask_list::main_loop()
 | 
						||
{ 
 | 
						||
   TMask _mask("ba2600x");
 | 
						||
   TSheet_field& s=_mask.sfield(F_ITEM);
 | 
						||
   
 | 
						||
   set_lngz(_mask);
 | 
						||
   _mask.set(F_OFFSET,_offset);
 | 
						||
   set_field(_mask);
 | 
						||
   set_option(_mask);
 | 
						||
   set_item(s);
 | 
						||
  
 | 
						||
   KEY k= _mask.run();       
 | 
						||
  
 | 
						||
   if(k==K_ENTER)
 | 
						||
   {
 | 
						||
     get_lngz(_mask);
 | 
						||
     get_field(_mask);
 | 
						||
     get_option(_mask);
 | 
						||
     get_item(s);
 | 
						||
     _offset=_mask.get_int(F_OFFSET);
 | 
						||
     set_offset(_offset);
 | 
						||
     set_dim(dim_video()+prompt_len()+off(),1);
 | 
						||
   }
 | 
						||
    return k;
 | 
						||
}             
 | 
						||
 | 
						||
//Stampa su file .uml solo _item
 | 
						||
void TEditMask_list::print_item(ostream& out)const
 | 
						||
{   
 | 
						||
   TString message,codice,desc;
 | 
						||
   
 | 
						||
   for(int i=0;i<_item.items();i++)
 | 
						||
   {
 | 
						||
     TToken_string& it=(TToken_string&)_item.row(i);
 | 
						||
     codice=it.get(0);
 | 
						||
     desc=it.get();
 | 
						||
     if(!codice.blank() && !desc.blank())   
 | 
						||
     {
 | 
						||
       out<<"  ITEM \""<<codice<<'|'<<desc<<"\"\n";            
 | 
						||
       message=it.get(2);
 | 
						||
       if(!message.blank())
 | 
						||
       {
 | 
						||
         message.replace('^','|');
 | 
						||
         out<<"  MESSAGE "<< message<<"\n";  
 | 
						||
       }  
 | 
						||
     }
 | 
						||
   }
 | 
						||
}     
 | 
						||
 | 
						||
//Stampa su file .uml il controllo
 | 
						||
void TEditMask_list::print_on(ostream& out) const
 | 
						||
{ 
 | 
						||
   
 | 
						||
   out<<type() << ident() <<' ';
 | 
						||
   print_lngz(out);
 | 
						||
   TEditMask_control::print_on(out);
 | 
						||
   print_item(out);
 | 
						||
   out <<" END"<<"\n\n";
 | 
						||
}
 | 
						||
 | 
						||
//Legge da file .uml solo _item
 | 
						||
TString& TEditMask_list::read_item(TScanner& scanner, TString& tok) 
 | 
						||
{
 | 
						||
   TToken_string it,mes;
 | 
						||
 | 
						||
   if(tok=="ITEM")        
 | 
						||
   {
 | 
						||
     _num_item++;
 | 
						||
     it=scanner.string();
 | 
						||
     tok=scanner.pop();    
 | 
						||
     if(tok=="MESSAGE")
 | 
						||
     {         
 | 
						||
       mes=scanner.line();
 | 
						||
       mes.replace('|','^');
 | 
						||
       it.add(mes);
 | 
						||
       tok=scanner.pop();
 | 
						||
     }
 | 
						||
   }  
 | 
						||
   else tok=scanner.pop();
 | 
						||
   
 | 
						||
   if(it.ok() && !it.blank())  _item.add(it);
 | 
						||
   
 | 
						||
  return tok; 
 | 
						||
}
 | 
						||
 | 
						||
//Legge da file .uml il controllo
 | 
						||
void TEditMask_list::read_from(TScanner& scanner,bool intool) 
 | 
						||
{
 | 
						||
   TString tok;
 | 
						||
   
 | 
						||
   set_id(scanner.pop()); 
 | 
						||
   read_lngz(scanner);
 | 
						||
   tok=scanner.pop();  //tralascio BEGIN
 | 
						||
   while(tok!="END")
 | 
						||
   { 
 | 
						||
     tok=read_item(scanner,tok);
 | 
						||
     read_field(scanner,tok,intool);
 | 
						||
   }  
 | 
						||
   tok=prt();  read_off(tok);  tok.rtrim();  set_prompt(tok);
 | 
						||
   set_dim(dim_video()+prompt_len()+off(),1);
 | 
						||
}
 | 
						||
 | 
						||
///////////////////////////////////////////////////////////
 | 
						||
//   TeditMask_radio :controllo tipo RADIOBUTTON
 | 
						||
///////////////////////////////////////////////////////////
 | 
						||
 | 
						||
//Costruttore del controllo RADIOBUTTON
 | 
						||
TEditMask_radio::TEditMask_radio(TEditMask_window* parent)
 | 
						||
          :TEditMask_list(parent)
 | 
						||
{
 | 
						||
   _latox=20;      
 | 
						||
   _latoy=4;
 | 
						||
   set_id("F_RADIO");
 | 
						||
   set_prompt(PR("Pulsantiera"));
 | 
						||
   set_type("RADIOBUTTON  ");
 | 
						||
   set_dim(_latox,_latoy);
 | 
						||
}
 | 
						||
 | 
						||
//Costruttore copia del controllo
 | 
						||
TEditMask_radio::TEditMask_radio(const TEditMask_radio& ctl)
 | 
						||
          :TEditMask_list(ctl)
 | 
						||
{
 | 
						||
   _latox=ctl._latox;      
 | 
						||
   _latoy=ctl._latoy;
 | 
						||
   set_id(ctl.ident());
 | 
						||
   set_prompt(ctl.prt());
 | 
						||
   set_type(ctl.type());
 | 
						||
   set_dim(_latox,_latoy);
 | 
						||
}
 | 
						||
 | 
						||
//Fa l'update del controllo
 | 
						||
void TEditMask_radio::update() const
 | 
						||
{
 | 
						||
   
 | 
						||
   RCT r=rectangle();
 | 
						||
   
 | 
						||
   padre().hide_brush();
 | 
						||
 | 
						||
   padre().set_pen(MASK_LIGHT_COLOR);
 | 
						||
   line(r.left,r.top+ROWY,r.right,r.top+ROWY);
 | 
						||
   line(r.left,r.top+ROWY,r.left,r.bottom);
 | 
						||
   padre().set_pen(MASK_DARK_COLOR);
 | 
						||
   line(r.right,r.top+ROWY,r.right,r.bottom);
 | 
						||
   line(r.left,r.bottom,r.right,r.bottom);
 | 
						||
   padre().set_pen(COLOR_BLACK);    
 | 
						||
 | 
						||
   padre().set_pen(MASK_LIGHT_COLOR);
 | 
						||
   int i,k;
 | 
						||
   for (i = 0, k = ROWY; i < n_item(); i++, k+=ROWY)
 | 
						||
   {
 | 
						||
     line(r.left+(ROWY-10),r.top+ROWY+k,r.left+ROWY-2,r.top+(ROWY-8)+k);
 | 
						||
     line(r.left+(ROWY-2),r.top+(ROWY+8)+k,r.left+(ROWY-10),r.top+ROWY+k); 
 | 
						||
   }
 | 
						||
   i=0; k=ROWY;                                                         
 | 
						||
 | 
						||
   padre().set_pen(MASK_DARK_COLOR);
 | 
						||
   for (;i<n_item(); i++, k=k+ROWY)
 | 
						||
   {
 | 
						||
     line(r.left+(ROWY+6),r.top+ROWY+k,r.left+(ROWY-2),r.top+(ROWY+8)+k);
 | 
						||
     line(r.left+(ROWY-2),r.top+(ROWY-8)+k,r.left+(ROWY+6),r.top+ROWY+k);
 | 
						||
   } 
 | 
						||
   i=0; k=ROWY;
 | 
						||
 | 
						||
   for (;i<n_item(); i++, k=k+ROWY) 
 | 
						||
   {                                                     
 | 
						||
     TToken_string it=item().row(i);
 | 
						||
     padre().stringat(r.left+(ROWY+10),r.top+(ROWY-8)+k,it.get(1));
 | 
						||
   }
 | 
						||
 | 
						||
   frase(r.left+2,r.top);
 | 
						||
   padre().set_pen(COLOR_BLACK);
 | 
						||
 | 
						||
}
 | 
						||
 | 
						||
//Gestisce la maschera di supporto
 | 
						||
KEY TEditMask_radio::main_loop()
 | 
						||
{ 
 | 
						||
   TMask _mask("ba2600o");
 | 
						||
   TSheet_field& s=_mask.sfield(F_ITEM);
 | 
						||
 | 
						||
   set_field(_mask);
 | 
						||
   set_option(_mask);
 | 
						||
   _mask.set(F_LONGEFF,_latox);
 | 
						||
   set_item(s);
 | 
						||
 | 
						||
   KEY k= _mask.run();
 | 
						||
 
 | 
						||
   if(k==K_ENTER) {
 | 
						||
     get_field(_mask);
 | 
						||
     get_option(_mask);
 | 
						||
     get_item(s);
 | 
						||
     _latox=_mask.get_int(F_LONGEFF);
 | 
						||
     if(n_item()==0) set_dim(_latox,4);
 | 
						||
     else 
 | 
						||
     {
 | 
						||
       _latoy=16/CHARX;
 | 
						||
       _latoy+=n_item();         //per mantenere l'altezza
 | 
						||
       set_dim(_latox,_latoy);
 | 
						||
     }  
 | 
						||
   } 
 | 
						||
   else
 | 
						||
     if(k==K_ESC)  
 | 
						||
       set_dim(_latox,_latoy);
 | 
						||
 | 
						||
    return k;
 | 
						||
}             
 | 
						||
 | 
						||
//Stampa su file .uml il controllo
 | 
						||
void TEditMask_radio::print_on(ostream& out) const     
 | 
						||
{ 
 | 
						||
   out<<type() <<ident()<<" "<<_latox<<"\n";
 | 
						||
   TEditMask_control::print_on(out);
 | 
						||
   print_item(out);                             
 | 
						||
   out <<" END"<<"\n\n";
 | 
						||
}
 | 
						||
 | 
						||
//Legge da file .uml il controllo
 | 
						||
void TEditMask_radio::read_from(TScanner& scanner,bool intool)   
 | 
						||
{
 | 
						||
   TString tok;            
 | 
						||
   
 | 
						||
   set_id(scanner.pop()); 
 | 
						||
   _latox=scanner.integer();
 | 
						||
   tok=scanner.pop();
 | 
						||
   while(tok!="END")
 | 
						||
   {
 | 
						||
     tok=read_item(scanner,tok);
 | 
						||
     read_field(scanner,tok,intool);
 | 
						||
   }  
 | 
						||
   if(n_item()==0) _latoy=4;
 | 
						||
   else
 | 
						||
   {
 | 
						||
     _latoy=16/CHARX;
 | 
						||
     _latoy+=n_item();
 | 
						||
   }  
 | 
						||
   set_dim(_latox,_latoy);
 | 
						||
}
 | 
						||
 | 
						||
///////////////////////////////////////////////////////////
 | 
						||
//   TeditMask_memo :controllo tipo MEMO
 | 
						||
///////////////////////////////////////////////////////////
 | 
						||
 | 
						||
//Costruttore del controllo MEMO
 | 
						||
TEditMask_memo::TEditMask_memo(TEditMask_window* parent)
 | 
						||
             :TEditMask_control(parent)
 | 
						||
{
 | 
						||
   _latox=40;
 | 
						||
   _latoy=10;
 | 
						||
   set_prompt(PR("Memo"));
 | 
						||
   set_type("MEMO  ");
 | 
						||
   set_id("F_MEMO");
 | 
						||
   set_dim(_latox,_latoy);
 | 
						||
}
 | 
						||
 | 
						||
//Costruttore copia del controllo
 | 
						||
TEditMask_memo::TEditMask_memo(const TEditMask_memo& ctl)
 | 
						||
             :TEditMask_control(ctl)
 | 
						||
{
 | 
						||
   _latox=ctl._latox;
 | 
						||
   _latoy=ctl._latoy;
 | 
						||
   set_prompt(ctl.prt());
 | 
						||
   set_type(ctl.type());
 | 
						||
   set_id(ctl.ident());
 | 
						||
   set_dim(_latox,_latoy);
 | 
						||
}
 | 
						||
 | 
						||
//Fa l'update del controllo
 | 
						||
void TEditMask_memo::update()const
 | 
						||
{
 | 
						||
   RCT r=rectangle();
 | 
						||
   RCT ret={r.top+ROWY,r.left,r.bottom,r.right};
 | 
						||
 | 
						||
   padre().set_brush(NORMAL_BACK_COLOR);
 | 
						||
   padre().set_pen(COLOR_BLACK,2);
 | 
						||
   xvt_dwin_draw_rect(maschera(),&ret);
 | 
						||
   padre().hide_brush();          
 | 
						||
   padre().set_pen(COLOR_BLACK,1);
 | 
						||
   frase(r.left,r.top);
 | 
						||
}
 | 
						||
 | 
						||
//Gestisce la maschera di supporto
 | 
						||
KEY TEditMask_memo::main_loop()
 | 
						||
{ 
 | 
						||
   TMask _mask("ba2600m");  
 | 
						||
   TSheet_field& s=_mask.sfield(F_MESSAGE);
 | 
						||
  
 | 
						||
   set_field(_mask);
 | 
						||
   set_option(_mask);
 | 
						||
   set_message(s);
 | 
						||
   _mask.set(F_LONGEFF,_latox);
 | 
						||
   _mask.set(F_LARGE,_latoy);
 | 
						||
   KEY k= _mask.run();
 | 
						||
   if(k==K_ENTER) 
 | 
						||
   {
 | 
						||
     get_field(_mask);
 | 
						||
     get_option(_mask);
 | 
						||
     get_message(s);
 | 
						||
     _latox=_mask.get_int(F_LONGEFF);
 | 
						||
     _latoy=_mask.get_int(F_LARGE); 
 | 
						||
     set_dim(_latox,_latoy);
 | 
						||
   }
 | 
						||
    return k;
 | 
						||
}             
 | 
						||
 | 
						||
//Stampa su file .uml il controllo
 | 
						||
void TEditMask_memo::print_on(ostream& out)const
 | 
						||
{ 
 | 
						||
   
 | 
						||
   out<<type() <<ident()<<" "<<_latox<<" "<<_latoy<<"\n";
 | 
						||
   TEditMask_control::print_on(out);
 | 
						||
   out <<" END"<<"\n\n";
 | 
						||
 | 
						||
}
 | 
						||
 | 
						||
//Legge da file .uml il controllo
 | 
						||
void TEditMask_memo::read_from(TScanner& scanner,bool intool) 
 | 
						||
{
 | 
						||
   TString tok;
 | 
						||
   
 | 
						||
   set_id(scanner.pop()); 
 | 
						||
   _latox=scanner.integer();  _latoy=scanner.integer();
 | 
						||
   set_dim(_latox,_latoy); 
 | 
						||
   tok=scanner.pop();
 | 
						||
   while(tok!="END")
 | 
						||
   {
 | 
						||
     read_field(scanner,tok,intool);
 | 
						||
     tok=scanner.pop();
 | 
						||
   }  
 | 
						||
}
 | 
						||
 | 
						||
///////////////////////////////////////////////////////////
 | 
						||
//   TeditMask_spread :controllo tipo SPREADSHEET
 | 
						||
///////////////////////////////////////////////////////////
 | 
						||
 | 
						||
//Costruttore del controllo SPREADSHEET
 | 
						||
TEditMask_sheet::TEditMask_sheet(TEditMask_window* parent)
 | 
						||
                                   :TEditMask_control(parent),
 | 
						||
                                   _sheetmask(1,5,60,12,"Sheet",WSF_SIZE,W_DOC)
 | 
						||
{  
 | 
						||
   _latox=40;
 | 
						||
   _latoy=6;                         
 | 
						||
   set_dim(_latox,_latoy);
 | 
						||
   set_prompt(PR("Tabella"));
 | 
						||
   set_type("SPREADSHEET  ");
 | 
						||
   set_id("F_SPREAD");
 | 
						||
   _sheetmask.set_sheet(this);
 | 
						||
   _sheetmask.open();
 | 
						||
   if(padre().get_mod()) window_sheet(); //in read non deve creare bottoni in pi<70>
 | 
						||
}
 | 
						||
 | 
						||
//Costruttore copia del controllo
 | 
						||
TEditMask_sheet::TEditMask_sheet(const TEditMask_sheet& ctl)
 | 
						||
                                   :TEditMask_control(ctl),
 | 
						||
                                   _sheetmask(1,5,60,12,"Sheet",WSF_SIZE,W_DOC)
 | 
						||
{  
 | 
						||
   _latox=ctl._latox;
 | 
						||
   _latoy=ctl._latoy;                    
 | 
						||
   set_dim(_latox,_latoy);
 | 
						||
   set_prompt(ctl.prt());
 | 
						||
   set_type(ctl.type());
 | 
						||
   set_id(ctl.ident());
 | 
						||
   _sheetmask.set_sheet(this);
 | 
						||
   _sheetmask.open();
 | 
						||
   if(padre().get_mod()) window_sheet(); 
 | 
						||
}
 | 
						||
 | 
						||
//Crea sulla maschera (in fase di creazione) 3 bottoni standard
 | 
						||
void TEditMask_sheet::window_sheet()
 | 
						||
{  
 | 
						||
   DRAW_CTOOLS t;
 | 
						||
   
 | 
						||
   TEditMask_control* btn_ok=_sheetmask.addbutton();
 | 
						||
   btn_ok->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<69> 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 \""<<desc<<"\"\n";            
 | 
						||
       message=it.get(1);
 | 
						||
       if(!message.blank())
 | 
						||
         out<<"  MESSAGE "<< message<<"\n";  
 | 
						||
     }
 | 
						||
   }
 | 
						||
}     
 | 
						||
 | 
						||
//Stampa su file .uml solo il browse
 | 
						||
void TEditMask_sheet::print_browse(ostream& out)const
 | 
						||
{  
 | 
						||
   TString in;
 | 
						||
   
 | 
						||
   if(_browse.not_empty())
 | 
						||
   { 
 | 
						||
     for(int k=0;;k++)
 | 
						||
     {
 | 
						||
       int y;
 | 
						||
       for(y = 0;_browse[k]!='\n' && _browse[k]; k++, y++)
 | 
						||
         in[y]=_browse[k];
 | 
						||
       in[y]='\0';
 | 
						||
       out<<"  "<<in<<"\n";
 | 
						||
       if(!_browse[k]) break;
 | 
						||
     }       
 | 
						||
   } 
 | 
						||
}             
 | 
						||
 | 
						||
//Stampa su file .uml il controllo
 | 
						||
void TEditMask_sheet::print_on(ostream& out)const
 | 
						||
{  
 | 
						||
   out<<type() <<ident()<<" "<<_latox<<" "<<_latoy<<"\n";
 | 
						||
   TEditMask_control::print_on(out);
 | 
						||
   print_item(out);
 | 
						||
   print_browse(out);
 | 
						||
   out <<" END"<<"\n\n";
 | 
						||
}
 | 
						||
 | 
						||
//Legge da file .uml solo gli _item
 | 
						||
TString& TEditMask_sheet::read_item(TScanner& scanner,TString& tok) 
 | 
						||
{
 | 
						||
   TString sh;
 | 
						||
   
 | 
						||
   if(tok=="ITEM")        
 | 
						||
   {
 | 
						||
     sh=scanner.string();
 | 
						||
     if(sh.ok() && !sh.blank())  _item.add(sh);
 | 
						||
   }  
 | 
						||
   tok=scanner.pop();
 | 
						||
 | 
						||
  return tok; 
 | 
						||
}
 | 
						||
 | 
						||
//Legge da file .uml solo il browse
 | 
						||
void TEditMask_sheet::read_browse(TScanner& scanner,const TString& tok)
 | 
						||
{
 | 
						||
   if(tok=="USE" || tok=="JOIN" || tok=="INPUT" ||\
 | 
						||
      tok=="OUTPUT" || tok=="DISPLAY" || tok=="COPY")
 | 
						||
   {  
 | 
						||
     _browse <<(tok);
 | 
						||
     _browse <<(scanner.line());
 | 
						||
     _browse <<('\n');  
 | 
						||
   }  
 | 
						||
}
 | 
						||
 | 
						||
//Legge da file .uml il controllo
 | 
						||
void TEditMask_sheet::read_from(TScanner& scanner,bool intool)
 | 
						||
{
 | 
						||
   TString tok;
 | 
						||
   
 | 
						||
   set_id(scanner.pop()); 
 | 
						||
   _latox=scanner.integer();
 | 
						||
   _latoy=scanner.integer(); 
 | 
						||
   set_dim(_latox,_latoy);
 | 
						||
   tok=scanner.pop();
 | 
						||
   while(tok!="END")
 | 
						||
   {
 | 
						||
     tok=read_item(scanner,tok);
 | 
						||
     read_field(scanner,tok,intool);
 | 
						||
     read_browse(scanner,tok);
 | 
						||
   }  
 | 
						||
}
 | 
						||
 | 
						||
///////////////////////////////////////////////////////////
 | 
						||
//   TeditMask_zoom :controllo tipo ZOOM
 | 
						||
///////////////////////////////////////////////////////////
 | 
						||
 | 
						||
//Costruttore del controllo ZOOM
 | 
						||
TEditMask_zoom::TEditMask_zoom(TEditMask_window* parent)
 | 
						||
                                 :TEditMask_list(parent)
 | 
						||
{  
 | 
						||
   _latox=15;
 | 
						||
   _offset=1;
 | 
						||
   set_id("F_ZOOM");
 | 
						||
   set_prompt(PR("Zoom"));
 | 
						||
   set_type("ZOOM  ");
 | 
						||
   set_dim(_latox+prompt_len()+off(),1);
 | 
						||
}
 | 
						||
 | 
						||
//Costruttore copia del controllo
 | 
						||
TEditMask_zoom::TEditMask_zoom(const TEditMask_zoom& ctl)
 | 
						||
                                 :TEditMask_list(ctl)
 | 
						||
{  
 | 
						||
   _latox=ctl._latox;
 | 
						||
   _offset=ctl._offset;
 | 
						||
   set_id(ctl.ident());
 | 
						||
   set_prompt(ctl.prt());
 | 
						||
   set_type(ctl.type());
 | 
						||
   set_dim(_latox+prompt_len()+off(),1);
 | 
						||
}
 | 
						||
 | 
						||
//Gestisce la maschera di supporto
 | 
						||
KEY TEditMask_zoom::main_loop()
 | 
						||
{ 
 | 
						||
   TMask _mask("ba2600z");
 | 
						||
   TSheet_field& s=_mask.sfield(F_MESSAGE);
 | 
						||
 | 
						||
   set_field(_mask);
 | 
						||
   set_option(_mask);
 | 
						||
   set_message(s);
 | 
						||
   _mask.set(F_LONGEFF,_latox);
 | 
						||
   _mask.set(F_OFFSET,_offset);
 | 
						||
   KEY k= _mask.run();
 | 
						||
   if(k==K_ENTER) 
 | 
						||
   {
 | 
						||
     get_field(_mask);
 | 
						||
     get_option(_mask);           
 | 
						||
     get_message(s);
 | 
						||
     _latox=_mask.get_int(F_LONGEFF);
 | 
						||
     _offset=_mask.get_int(F_OFFSET);
 | 
						||
     set_offset(_offset);
 | 
						||
     set_dim(_latox+prompt_len()+off(),1);
 | 
						||
   }
 | 
						||
    return k; 
 | 
						||
}             
 | 
						||
 | 
						||
//Stampa su file .uml il controllo
 | 
						||
void TEditMask_zoom::print_on(ostream& out) const
 | 
						||
{ 
 | 
						||
   TString id=ident();
 | 
						||
   
 | 
						||
   out<<type() << ident() <<"  "<<_latox<<"\n";
 | 
						||
   TEditMask_control::print_on(out);
 | 
						||
   out <<" END"<<"\n\n";
 | 
						||
}
 | 
						||
 | 
						||
//Legge da file .uml il controllo
 | 
						||
void TEditMask_zoom::read_from(TScanner& scanner,bool intool)
 | 
						||
{
 | 
						||
   TString tok;
 | 
						||
   
 | 
						||
   set_id(scanner.pop()); 
 | 
						||
   _latox=scanner.integer(); 
 | 
						||
   tok=scanner.pop();
 | 
						||
   while(tok!="END")
 | 
						||
   {
 | 
						||
     read_field(scanner,tok,intool);
 | 
						||
     tok=scanner.pop();
 | 
						||
   }  
 | 
						||
   tok=prt();  read_off(tok);  tok.rtrim();  set_prompt(tok);
 | 
						||
   set_dim(_latox+prompt_len()+off(),1);
 | 
						||
}
 | 
						||
 | 
						||
//----------------------------------------
 | 
						||
 | 
						||
//Inizializza il rettangolo di selezione
 | 
						||
void TEditMask_window::inizialition()
 | 
						||
{
 | 
						||
   _rct_sel.left=_rct_sel.top=0;
 | 
						||
   _rct_sel.right=_rct_sel.bottom=0;
 | 
						||
}
 | 
						||
 | 
						||
//Intercetta un punto all'interno del controllo
 | 
						||
bool TEditMask_control::contains(const PNT pnt)
 | 
						||
{
 | 
						||
   bool dentro=xvt_rect_has_point(&_rct,pnt) != 0;
 | 
						||
    return dentro;
 | 
						||
}
 | 
						||
 | 
						||
//Ritorna il controllo avente il punto pnt
 | 
						||
TEditMask_control* TEditMask_window::search(const PNT& pnt)
 | 
						||
{
 | 
						||
  for(int i=_controls.items()-1; i >= 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<70> 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<69> 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<65> 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 <TApplication::create>
 | 
						||
bool TMaskEditor_application::create()
 | 
						||
{
 | 
						||
	dispatch_e_menu(MENU_ITEM_ID(11));
 | 
						||
  return true;
 | 
						||
}
 | 
						||
 | 
						||
//Richiama <TApplication::destroy>
 | 
						||
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<70> 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;
 | 
						||
}
 |