Files correlati : pe0.exe Ricompilazione Demo : [ ] Commento : Preventivi/incarichi (Dinamica) git-svn-id: svn://10.65.10.50/trunk@18736 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			1791 lines
		
	
	
		
			45 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			1791 lines
		
	
	
		
			45 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 | 
						||
 | 
						||
   "Compilatore di profili" per la gestione vendite.
 | 
						||
   Considerando:
 | 
						||
   - Profilo documento
 | 
						||
   - Configurazione vendite per la ditta
 | 
						||
   - Condizioni atmosferiche
 | 
						||
   genera le maschere appropriate.
 | 
						||
   Accetta sulla riga di comando il nome del profilo documento per cui deve generare
 | 
						||
   la maschera. Il nome del file .MSK viene dedotto dal profilo documento stesso.
 | 
						||
 | 
						||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
 | 
						||
 | 
						||
#include <applicat.h>
 | 
						||
#include <progind.h>
 | 
						||
#include <urldefid.h>
 | 
						||
#include <utility.h>
 | 
						||
 | 
						||
#include "veuml.h"
 | 
						||
#include "veuml1.h"
 | 
						||
 | 
						||
#include "veini.h"
 | 
						||
#include "ve0100.h"
 | 
						||
 | 
						||
// Significato delle colonne nella tabella _tab0300b
 | 
						||
#define B_NOME                                                                    0
 | 
						||
#define B_MSKTYPE                                                                 1
 | 
						||
#define B_MSKSIZE                                                                 2
 | 
						||
#define B_DESCR                                                                   3
 | 
						||
#define B_WIDTH                                                                   4
 | 
						||
 | 
						||
// Significato dei campi nel profilo del documento
 | 
						||
#define P_STATO                                                                   0
 | 
						||
#define P_PROMPT                                                                  1
 | 
						||
#define P_HELP                                                                    2
 | 
						||
#define P_WARNING                                                                 3
 | 
						||
 | 
						||
 | 
						||
// Numero massimo di linee per pagina
 | 
						||
#define MAX_LINES_PER_PAGE                                23
 | 
						||
#define MASK_FIRST_LINE                                    6
 | 
						||
 | 
						||
#define GROUPKEY(x)   format( "%5d", x )
 | 
						||
 | 
						||
#define Usage "Sintassi: VE0 -3 <Nome file di profilo> [-f<stdfile>]" 
 | 
						||
 | 
						||
#define B0_POSITION   47
 | 
						||
#define B1_POSITION   48
 | 
						||
#define S0_POSITION   2
 | 
						||
#define I0_POSITION   14
 | 
						||
 | 
						||
class TMaschera : public TObject
 | 
						||
{
 | 
						||
private:
 | 
						||
 | 
						||
  // Linea corrente
 | 
						||
  int _curline;
 | 
						||
 | 
						||
  // Pagina corrente
 | 
						||
  int _curpage;
 | 
						||
 | 
						||
public:
 | 
						||
 | 
						||
  void advance_line( ){ _curline ++; };
 | 
						||
 | 
						||
  // Genera una serie di righe uguali per funzione ( DISPLAY, ecc. )
 | 
						||
  void outline( const TString& s = "", const TString& prefix = "", const char sep = '~' );
 | 
						||
 | 
						||
  // Crea un controllo del tipo specificato
 | 
						||
  void control( const int type, const int id = DLG_NULL, const int size = -1 );
 | 
						||
 | 
						||
  // CHECKTYPE
 | 
						||
  void check( const int i );
 | 
						||
 | 
						||
  // PAGE
 | 
						||
  void pagina( const int page, const TString& title = EMPTY_STRING );
 | 
						||
 | 
						||
  // PROMPT
 | 
						||
  void prompt( const int x, const int y, const TString& s = "" ){ _out << "PR " << x << " " << y << " \"" << s << "\"\n"; };
 | 
						||
 | 
						||
  // BEGIN
 | 
						||
  void begin( void ) { outline ( "BE" ); };
 | 
						||
 | 
						||
  // END
 | 
						||
  void end( void ) { outline ( "EN" ); };
 | 
						||
 | 
						||
  // ENDMASK
 | 
						||
  void endmask( void ) { outline ( "ENDMASK" ); };
 | 
						||
 | 
						||
  // FLAGS
 | 
						||
  void flag( const char* s ) { _out << "FL \"" << s << "\"\n"; };
 | 
						||
 | 
						||
  // HELP
 | 
						||
  void help( const TString& s ) { _out << "HE \"" << s << "\"\n"; };
 | 
						||
 | 
						||
  // WARNING
 | 
						||
  void warning( const TString& s ) { _out << "WA \"" << s << "\"\n"; };
 | 
						||
 | 
						||
  // GROUP
 | 
						||
  void group( const int g ) { _out << "GR " << g << "\n"; };
 | 
						||
 | 
						||
  // PICTURE
 | 
						||
  void picture( const int p) { _out << "PI " << p << "\n"; };
 | 
						||
//  void picture( const TString & s) { _out << "PI " << '\"' << s << "\"\n"; };
 | 
						||
  void picture( const char* s) { _out << "PI " << '\"' << s << "\"\n"; }
 | 
						||
 | 
						||
  // FIELD
 | 
						||
  void field( const TString& s ) { outline( s, "FI "); };
 | 
						||
 | 
						||
  // ITEM
 | 
						||
  void item( const TString& s );
 | 
						||
 | 
						||
  // MESSAGE
 | 
						||
  void message( const TString& s ) { outline( s, "ME "); };
 | 
						||
 | 
						||
  // USE
 | 
						||
//  void use( const TString& s ){ outline( s, "US " ); };
 | 
						||
  void use( const TString& s );
 | 
						||
  void use( const int file, const int key ){ _out << "US " << file << " KEY " << key << "\n"; };
 | 
						||
  void use( const TString& tab, const int key ){ _out << "US " << tab << " KEY " << key << "\n"; };
 | 
						||
 | 
						||
  // DISPLAY
 | 
						||
  void display( const TString& s ){ outline( s, "DI " ); };
 | 
						||
 | 
						||
  // INPUT
 | 
						||
  void input( const TString& s ){ outline( s, "IN " ); };
 | 
						||
 | 
						||
  // OUTPUT
 | 
						||
  void output( const TString& s ){ outline( s, "OU " ); };
 | 
						||
 | 
						||
  // copy
 | 
						||
  void copy( const TString& s ){ outline( s, "CO " ); };
 | 
						||
 | 
						||
  // Funzioni per la lettura/scrittura di CURPAGE
 | 
						||
  int page( ) { return _curpage; };
 | 
						||
  void page( const int i ){ _curpage = i; };
 | 
						||
 | 
						||
  void output_row( const TString& row){ _out << row << "\n"; };
 | 
						||
  
 | 
						||
  // Funzioni per la lettura/scrittura di CURLINE
 | 
						||
  int line( ) { return _curline; };
 | 
						||
  void line( const int i ){ _curline = i; };
 | 
						||
 | 
						||
  // Costruttore, vuole il nome del file .INI
 | 
						||
  TMaschera( const TFilename outfile );
 | 
						||
 | 
						||
  // Vero se ho gia' generato lo sheet
 | 
						||
  bool _sheet_generated;
 | 
						||
 | 
						||
  // File .MSK di output
 | 
						||
  ofstream _out;
 | 
						||
 | 
						||
};
 | 
						||
 | 
						||
void TMaschera::pagina(const int page, const TString& title)
 | 
						||
{
 | 
						||
	_out << "PA \"" << (title.blank() ? TString("Pag.") << " " << page : title)  << "\" 11 60 14\n";
 | 
						||
}
 | 
						||
 | 
						||
// Classe per memorizzare gli elementi di FRD
 | 
						||
class _TableItem : public TObject
 | 
						||
{
 | 
						||
  bool _b0, _b1;
 | 
						||
  TString _s0;
 | 
						||
  int _i0;
 | 
						||
 | 
						||
public:
 | 
						||
  virtual TObject* dup() const { return new _TableItem(*this); }
 | 
						||
  const bool b0()     { return _b0;}
 | 
						||
  const bool b1()     { return _b1;}
 | 
						||
  const TString& s0() { return _s0;}
 | 
						||
  int i0() { return _i0;}
 | 
						||
  void set_b0(const bool b) { _b0 = b;}
 | 
						||
  void set_b1(const bool b) { _b1 = b;}
 | 
						||
  void set_s0(const TString& s) { _s0 = s;}
 | 
						||
  void set_i0(int i) { _i0 = i;}
 | 
						||
  _TableItem() {_b0 = FALSE;}
 | 
						||
  virtual ~_TableItem() {}
 | 
						||
};
 | 
						||
 | 
						||
class TMask_generator
 | 
						||
{
 | 
						||
  // Identificatore corrente per lo sheet
 | 
						||
  int _curid;
 | 
						||
 | 
						||
  // vero se il gruppo h aperto
 | 
						||
  bool _groupopen;
 | 
						||
 | 
						||
  // nome del file di .INI di input
 | 
						||
  TFilename _proname;
 | 
						||
 | 
						||
  // File .INI di riferimento per i campi
 | 
						||
  TConfig _fieldsini;
 | 
						||
 | 
						||
  // File .INI di riferimento per i gruppi
 | 
						||
  TConfig _groupsini;
 | 
						||
 | 
						||
  // File .INI di input
 | 
						||
  TConfig* _pro;
 | 
						||
 | 
						||
  //TConfig _ditta;
 | 
						||
 | 
						||
  // Tabelle per la generazione
 | 
						||
 | 
						||
  // Campi dei documenti
 | 
						||
  TString_array _fields;
 | 
						||
 | 
						||
  // Campi dello sheet
 | 
						||
  TString_array _tab0300b;
 | 
						||
 | 
						||
  TAssoc_array _gruppi;
 | 
						||
  
 | 
						||
  // Tabella caricata dal file testo
 | 
						||
  TAssoc_array _frdtable;
 | 
						||
  TString      _tablefile;
 | 
						||
 | 
						||
  TMaschera *_m;
 | 
						||
 | 
						||
protected:
 | 
						||
 | 
						||
  // Carica un file di tabella in un TString array
 | 
						||
  void carica_tabella( const TFilename& fn, TString_array& tabella );
 | 
						||
 | 
						||
  // Scrive sul file di output una serie di righe uguali per funzione ( DISPLAY, ecc. )
 | 
						||
  void outline( const TString& s = "", const TString& prefix = "", const char sep = '~' );
 | 
						||
 | 
						||
 | 
						||
  // Crea un controllo del tipo specificato
 | 
						||
  void control( const int type, const int id = DLG_NULL, const int size = -1 );
 | 
						||
 | 
						||
  // Ritorna vero se una componente della maschera h presente
 | 
						||
  int present( const int i, TToken_string line ){ const TString s = line.get( i ); return !(s.blank( )); };
 | 
						||
 | 
						||
  // Carica dati dei campi
 | 
						||
  void carica_dati_campi( const TFilename& fn, TAssoc_array& a );
 | 
						||
 | 
						||
  // Funzioni di accesso alle variabili private
 | 
						||
  // ------------------------------------------
 | 
						||
 | 
						||
  // Funzioni per la lettura/scrittura di ID. Si incrementa da solo.
 | 
						||
  int id ( ) { return( _curid++ ); };
 | 
						||
  void id( const int i ){ _curid = i; };
 | 
						||
 | 
						||
 | 
						||
  // Funzioni di generazione ad alto livello
 | 
						||
  // ---------------------------------------
 | 
						||
 | 
						||
  // Genera un campo a partire da una linea del file VE0300A.DAT
 | 
						||
  void genera_campo( TToken_string _line );
 | 
						||
 | 
						||
  // Genera la colonna dello sheet a partire da una linea del file VE0300B.DAT
 | 
						||
  void genera_item_sheet( TToken_string _line );
 | 
						||
 | 
						||
public:
 | 
						||
 | 
						||
 | 
						||
  TMaschera& maschera( ){ return *_m; }
 | 
						||
 | 
						||
	void genera_sheet(int line = 5, bool show_list = true, bool genera_disp = true);
 | 
						||
  // Attiva la generazione della maschera
 | 
						||
  void genera( const TString& profilo);
 | 
						||
 | 
						||
  void genera_testata_1();
 | 
						||
  // Genera l'intestazione di una pagina ( non la prima )
 | 
						||
  void intestazione_pagina( const char* def_title = TR("Parametri"));
 | 
						||
  
 | 
						||
  // Carica la tabella FRD da file testo
 | 
						||
  void load_table();
 | 
						||
  
 | 
						||
  TConfig& profilo( ){ return *_pro; }
 | 
						||
  TConfig& groupsini( ){ return _groupsini; }
 | 
						||
  TConfig& fieldsini( ){ return _fieldsini; }
 | 
						||
 | 
						||
  // Costruttore, vuole il nome del file .INI
 | 
						||
  TMask_generator(const TString& tablefile);
 | 
						||
 | 
						||
  // Distruttore
 | 
						||
  virtual ~TMask_generator( ) {}
 | 
						||
 | 
						||
};
 | 
						||
 | 
						||
TMaschera::TMaschera( const TFilename outfile ) : _out( outfile )
 | 
						||
{
 | 
						||
  _curline = 1;
 | 
						||
  _curpage = 1;
 | 
						||
	_sheet_generated = false;
 | 
						||
}
 | 
						||
 | 
						||
void TMaschera::outline( const TString& s, const TString& prefix, const char sep )
 | 
						||
{
 | 
						||
  if ( s.left( 1 ) == "@" )
 | 
						||
    _out << "CO " << prefix << s.mid( 1 ) << "\n";
 | 
						||
  else
 | 
						||
  {
 | 
						||
    TToken_string u( s, sep );
 | 
						||
    for ( int i = 0; i < u.items( ); i ++ )
 | 
						||
      _out << prefix << u.get( i ) << "\n";
 | 
						||
  }
 | 
						||
}
 | 
						||
 | 
						||
void TMaschera::check( const int i )
 | 
						||
{
 | 
						||
  switch( i )
 | 
						||
  {
 | 
						||
  case S_OBBLIGATORIO:
 | 
						||
    outline ( "CH REQUIRED" );
 | 
						||
    break;
 | 
						||
  case S_NORMALE:
 | 
						||
    outline ( "CH NORMAL" );
 | 
						||
    break;
 | 
						||
  default:
 | 
						||
    break;
 | 
						||
  }
 | 
						||
}
 | 
						||
 | 
						||
void TMaschera::control( const int type, const int id, const int size )
 | 
						||
{
 | 
						||
  switch ( type )
 | 
						||
  {
 | 
						||
  case T_DATA:
 | 
						||
    _out << "DA";
 | 
						||
    break;
 | 
						||
  case T_STRINGA:
 | 
						||
    _out << "ST";
 | 
						||
    break;
 | 
						||
  case T_CHECKBOX:
 | 
						||
    _out << "BO";
 | 
						||
    break;
 | 
						||
  case T_NUMERO:
 | 
						||
    _out << "NU";
 | 
						||
    break;
 | 
						||
  case T_LISTA:
 | 
						||
    _out << "LI";
 | 
						||
    break;
 | 
						||
  case T_MEMO:
 | 
						||
    _out << "ME";
 | 
						||
    break;
 | 
						||
  case T_ZOOM:
 | 
						||
    _out << "ZO";
 | 
						||
    break;
 | 
						||
  case T_GOLEM:
 | 
						||
    _out << "GO";
 | 
						||
    break;
 | 
						||
  case T_CURRENCY:
 | 
						||
    _out << "CU";
 | 
						||
    break;
 | 
						||
  case T_CORNICE:
 | 
						||
    _out << "GR";
 | 
						||
    break;
 | 
						||
  case T_BOTTONE:
 | 
						||
    _out << "BU";
 | 
						||
    break;
 | 
						||
  }
 | 
						||
  _out << " " << id;
 | 
						||
  if ( size > 0 )
 | 
						||
  {
 | 
						||
    if ( size > 100 )
 | 
						||
      _out << " " << ( int )( size / 100 ) << " " << ( size % 100 );
 | 
						||
    else
 | 
						||
      _out << " " << size;
 | 
						||
  }
 | 
						||
  _out << "\n";
 | 
						||
}
 | 
						||
 | 
						||
void TMaschera::item( const TString& str )
 | 
						||
{
 | 
						||
  int i, j;
 | 
						||
  TToken_string u( str, '@' );
 | 
						||
  TToken_string s("", '~');
 | 
						||
 | 
						||
  for( i = 0; i < u.items( ); i ++ )
 | 
						||
  {
 | 
						||
    s = u.get();
 | 
						||
 | 
						||
    _out << "IT \"" << s.get(0) << "\"\n";
 | 
						||
    for( j = 1; j < s.items( ); j ++ )
 | 
						||
      _out << "ME " << s.get() << "\n";
 | 
						||
  }
 | 
						||
}
 | 
						||
 | 
						||
void TMaschera::use(const TString& s)
 | 
						||
{
 | 
						||
  if ( s.left( 1 ) == "@" )
 | 
						||
    _out << "CO US " << s.mid( 1 ) << "\n";
 | 
						||
  else
 | 
						||
  {
 | 
						||
    TToken_string u( s, '~');
 | 
						||
    _out << "US " << u.get(0) << "\n";
 | 
						||
    for ( int i = 1; i < u.items( ); i ++ )
 | 
						||
      _out << u.get( i ) << "\n";
 | 
						||
  }
 | 
						||
}
 | 
						||
 | 
						||
class TField;
 | 
						||
 | 
						||
class TGruppo : public TObject
 | 
						||
{
 | 
						||
protected:
 | 
						||
 | 
						||
  int _id;
 | 
						||
  int _height;
 | 
						||
  bool _present;
 | 
						||
  TArray _fields;
 | 
						||
  TMask_generator * _mg;
 | 
						||
 | 
						||
public:
 | 
						||
 | 
						||
  TMaschera& maschera( ){ return generatore( ).maschera( ); }
 | 
						||
  TMask_generator& generatore( ) const { CHECK( _mg, "Generatore nullo!" ); return *_mg; }
 | 
						||
  void generatore( TMask_generator& mg ) { _mg = &mg; }
 | 
						||
  void id( int id ) { _id = id; }
 | 
						||
  int id( ) const { return _id; }
 | 
						||
  void height( int h ) { _height = h; }
 | 
						||
  int height( ) const { return _height; }
 | 
						||
  void present( bool p ) { _present = p; }
 | 
						||
  bool present( ) const { return _present; }
 | 
						||
  TArray& campi( ) { return _fields; }
 | 
						||
  const bool is_testata() const;
 | 
						||
  virtual TObject* dup() const;
 | 
						||
 | 
						||
  TGruppo ( int i );
 | 
						||
  TGruppo ( int i, int height );
 | 
						||
  void genera( );
 | 
						||
  void add( TField * field );
 | 
						||
 | 
						||
};
 | 
						||
 | 
						||
class TField : public TObject
 | 
						||
{
 | 
						||
  TString _nome;
 | 
						||
  // Gruppo di appartenenza
 | 
						||
  TGruppo * _grp;
 | 
						||
 | 
						||
  int _gruppo;
 | 
						||
  int _id;
 | 
						||
  int _type;
 | 
						||
  int _size;
 | 
						||
  int _stato;
 | 
						||
  int _x, _y;
 | 
						||
  TString _prompt, _flag, _help, _warning, _fieldname;
 | 
						||
  TToken_string _use, _input, _display, _output, _special, _items, _configs;
 | 
						||
  TToken_string _copy;
 | 
						||
 | 
						||
public:
 | 
						||
 | 
						||
  TField( TString& campo, TConfig& pro );
 | 
						||
  TField( );
 | 
						||
  virtual TObject* dup() const;
 | 
						||
 | 
						||
  void genera( );
 | 
						||
  void configura( TConfig& pro );
 | 
						||
 | 
						||
  void x( int x ){ _x = x; }
 | 
						||
  void y( int y ){ _y = y; }
 | 
						||
  void gruppo(int gruppo) { _gruppo = gruppo; }
 | 
						||
  void grp(TGruppo * grp) { _grp = grp; }
 | 
						||
  void id( int id ){ _id = id; }
 | 
						||
  void type( int type ) { _type = type; }
 | 
						||
  void size( int size ) { _size = size; }
 | 
						||
  void stato( int stato ) { _stato = stato; }
 | 
						||
  int x( ) const { return _x; }
 | 
						||
  int y( ) const { return _y; }
 | 
						||
  int gruppo( ) const{ return _gruppo; }
 | 
						||
  TGruppo& grp( ) const { CHECK(_grp, "NULL group in field"); return *_grp; }
 | 
						||
  int id( ) const { return _id; }
 | 
						||
  int type( ){ return _type; }
 | 
						||
  int size( ){ return _size; }
 | 
						||
  int stato( ){ return _stato; }
 | 
						||
  int stato_reale( );
 | 
						||
 | 
						||
  void nome( const TString& nome ){ _nome = nome; }
 | 
						||
  void prompt( const TString& prompt ){ _prompt = prompt; }
 | 
						||
  void flag( const TString& flag ){ _flag = flag; }
 | 
						||
  void help( const TString& help ){ _help = help; }
 | 
						||
  void warning( const TString& warning ){ _warning = warning; }
 | 
						||
  void fieldname( const TString& fieldname ){ _fieldname = fieldname; }
 | 
						||
  TString& nome( ){ return _nome; }
 | 
						||
  TString& prompt( ){ return _prompt; }
 | 
						||
  TString& flag( ){ return _flag; }
 | 
						||
  TString& help( ){ return _help; }
 | 
						||
  TString& warning( ){ return _warning; }
 | 
						||
  TString& fieldname( ){ return _fieldname; }
 | 
						||
 | 
						||
  void use( TToken_string& use ){ _use = use; }
 | 
						||
  void input( TToken_string& input ){ _input = input; }
 | 
						||
  void display( TToken_string& display ){ _display = display; }
 | 
						||
  void output( TToken_string& output ){ _output = output; }
 | 
						||
  void copy( TToken_string& copy ){ _copy = copy; }
 | 
						||
  void special( TToken_string& special ){ _special = special; }
 | 
						||
  void items( TToken_string& items ){ _items = items; }
 | 
						||
  void configs( TToken_string& configs ){ _configs = configs; }
 | 
						||
  TToken_string& use( ){ return _use; }
 | 
						||
  TToken_string& input( ){ return _input; }
 | 
						||
  TToken_string& display( ){ return _display; }
 | 
						||
  TToken_string& output( ){ return _output; }
 | 
						||
  TToken_string& copy( ){ return _copy; }
 | 
						||
  TToken_string& special( ){ return _special; }
 | 
						||
  TToken_string& items( ){ return _items; }
 | 
						||
  TToken_string& configs( ){ return _configs; }
 | 
						||
 | 
						||
  TConfig& profilo( ) { CHECK(_grp, "NULL group in field"); return grp().generatore().profilo(); }
 | 
						||
  //TConfig& ditta( ) { CHECK(_grp, "NULL group in field"); return grp().generatore().ditta(); }
 | 
						||
  TConfig& groupsini( ) { CHECK(_grp, "NULL group in field"); return grp().generatore().groupsini(); }
 | 
						||
  TConfig& fieldsini( ) { CHECK(_grp, "NULL group in field"); return grp().generatore().fieldsini(); }
 | 
						||
 | 
						||
};
 | 
						||
 | 
						||
void TGruppo::add( TField * field )
 | 
						||
{
 | 
						||
  _fields.add(field);
 | 
						||
  field->grp(this);
 | 
						||
}
 | 
						||
 | 
						||
const bool TGruppo::is_testata() const
 | 
						||
{
 | 
						||
  FOR_EACH_ARRAY_ITEM(_fields, i, o)
 | 
						||
  {
 | 
						||
    TField* campo = (TField*) o;
 | 
						||
    if(campo->id() == F_STATO)
 | 
						||
      return true;
 | 
						||
  }
 | 
						||
  return false;
 | 
						||
}
 | 
						||
 | 
						||
TGruppo::TGruppo( int i )
 | 
						||
{
 | 
						||
  _id = i;
 | 
						||
  _height = 0;
 | 
						||
}
 | 
						||
 | 
						||
TGruppo::TGruppo( int i, int height )
 | 
						||
{
 | 
						||
  _id = i;
 | 
						||
  _height = height;
 | 
						||
}
 | 
						||
 | 
						||
static void genera_campo( const TObject& campo )
 | 
						||
{
 | 
						||
  // Per evitare 3000 casts ...
 | 
						||
  TField& cmp = (TField&) campo;
 | 
						||
 | 
						||
  cmp.configura(cmp.grp().generatore().profilo());
 | 
						||
  cmp.genera();
 | 
						||
}
 | 
						||
 | 
						||
static void verifica_campo( const TObject& campo )
 | 
						||
{
 | 
						||
  // Per evitare 3000 casts ...
 | 
						||
  TField & cmp = (TField&) campo;
 | 
						||
  TGruppo & gruppo = cmp.grp();
 | 
						||
 | 
						||
  cmp.stato(cmp.stato_reale());
 | 
						||
  if (cmp.stato() != S_NASCOSTO && cmp.stato() != S_NON_VISIBILE)
 | 
						||
  {
 | 
						||
    int h = cmp.y() + 1;
 | 
						||
    if (cmp.type() == T_CORNICE || cmp.type() == T_MEMO  || cmp.type() == T_GOLEM )
 | 
						||
      h += cmp.size()%100 - 1;
 | 
						||
    if (gruppo.height() < h)
 | 
						||
      gruppo.height(h);
 | 
						||
    if (!gruppo.present())
 | 
						||
      gruppo.present(TRUE);
 | 
						||
  }
 | 
						||
}
 | 
						||
 | 
						||
HIDDEN TProgind* _bar = NULL;
 | 
						||
 | 
						||
static void genera_gruppo( const TObject& gruppo )
 | 
						||
{
 | 
						||
  // Per evitare 3000 casts 
 | 
						||
  static TMask_generator * _mask_generator = NULL;
 | 
						||
  if (gruppo.class_id() == CLASS_STRING)
 | 
						||
  {
 | 
						||
		TFilename fname((TString &) gruppo);
 | 
						||
    TMask_generator & g = *_mask_generator;
 | 
						||
    TMaschera & m = g.maschera();
 | 
						||
    int row = m.line( ) - 1;
 | 
						||
 | 
						||
    if (fname.starts_with("SHEET"))
 | 
						||
		{
 | 
						||
			g.genera_sheet(row, fname.find("LIST") > 0, fname.find("GIAC") > 0);
 | 
						||
			g.intestazione_pagina(TR("Righe"));
 | 
						||
		}
 | 
						||
		else
 | 
						||
		{
 | 
						||
			if (fname.ext()[0] == '\0')
 | 
						||
				fname.ext("msk");
 | 
						||
			if (fexist(fname))
 | 
						||
			{
 | 
						||
				TScanner scanner(fname);
 | 
						||
				TString line(128);  
 | 
						||
 | 
						||
				line = scanner.line();
 | 
						||
	      
 | 
						||
				while (scanner.ok())
 | 
						||
				{
 | 
						||
					int row_pos = line.find("%R");
 | 
						||
					const bool new_line = (row_pos > 0);
 | 
						||
					if (!new_line)
 | 
						||
						row_pos = line.find("%S");
 | 
						||
					const bool field = line.left(2) == "%F";
 | 
						||
	        
 | 
						||
	        
 | 
						||
					if (field && row > MAX_LINES_PER_PAGE)
 | 
						||
					{
 | 
						||
						// Passa alla pagina successiva
 | 
						||
						m.end( );
 | 
						||
						g.intestazione_pagina();
 | 
						||
					}       
 | 
						||
					if (row_pos > 0)
 | 
						||
					{
 | 
						||
						if (new_line)
 | 
						||
								row++;     
 | 
						||
	  
 | 
						||
						TString4 wrk; wrk.format("%02d", row);          
 | 
						||
						line[row_pos++] = wrk[0];
 | 
						||
						line[row_pos] = wrk[1];
 | 
						||
					}             
 | 
						||
					if (field)
 | 
						||
						m.output_row("");
 | 
						||
					else
 | 
						||
						m.output_row(line); 
 | 
						||
					line = scanner.line(); 
 | 
						||
				}
 | 
						||
				m.line(row + 1);
 | 
						||
			}
 | 
						||
		}
 | 
						||
  }
 | 
						||
  else
 | 
						||
  {
 | 
						||
    TGruppo & grp = (TGruppo &) gruppo;
 | 
						||
  
 | 
						||
    grp.present(FALSE); 
 | 
						||
    if (_mask_generator == NULL)
 | 
						||
      _mask_generator = &(grp.generatore());
 | 
						||
 | 
						||
    grp.campi().for_each(verifica_campo);
 | 
						||
    do_events();
 | 
						||
    if (grp.present())
 | 
						||
      grp.genera();                   
 | 
						||
    if (_bar)
 | 
						||
      _bar->addstatus(1);
 | 
						||
  }
 | 
						||
 | 
						||
}
 | 
						||
 | 
						||
TObject* TGruppo::dup() const
 | 
						||
 | 
						||
{
 | 
						||
  TGruppo* g = new TGruppo(id(), height());
 | 
						||
 | 
						||
  g->generatore(generatore());
 | 
						||
  g->present(present());
 | 
						||
  g->_fields = _fields;
 | 
						||
  TArray & fields = g->campi();
 | 
						||
  const int items = fields.items();
 | 
						||
 | 
						||
  for (int i = 0; i < items; i++)
 | 
						||
    ((TField &)fields[i]).grp(g);
 | 
						||
  return g;
 | 
						||
}
 | 
						||
 | 
						||
void TGruppo::genera( )
 | 
						||
{
 | 
						||
  // Se il gruppo non sta sulla pagina ...
 | 
						||
  int oldlinea = maschera( ).line( );
 | 
						||
  if (  oldlinea + _height > MAX_LINES_PER_PAGE )
 | 
						||
  {
 | 
						||
    // Passa alla pagina successiva
 | 
						||
    maschera( ).end( );
 | 
						||
    generatore( ).intestazione_pagina( );
 | 
						||
    maschera( ).line( MASK_FIRST_LINE );
 | 
						||
    oldlinea = MASK_FIRST_LINE;
 | 
						||
  }
 | 
						||
  _fields.for_each( genera_campo );
 | 
						||
  maschera( ).line( oldlinea + _height );
 | 
						||
}
 | 
						||
 | 
						||
TField::TField( TString& campo, TConfig& pro ) : _nome( campo )
 | 
						||
{
 | 
						||
  _nome.trim( );
 | 
						||
  _fieldname =  pro.get( "FIELDNAME", campo );
 | 
						||
  _x = _gruppo = pro.get_int( "X", campo );
 | 
						||
  _y = _gruppo = pro.get_int( "Y", campo );
 | 
						||
  _gruppo = pro.get_int( "GROUP", campo );
 | 
						||
  CHECK( _gruppo != 0, "Gruppo uguale a 0" );
 | 
						||
  _id = pro.get_int( "MSKID", campo );
 | 
						||
  CHECK( _id != 0, "Campo con MSKID uguale a 0" );
 | 
						||
  _type = pro.get_int( "TYPE", campo );
 | 
						||
  _size = pro.get_int( "SIZE", campo );
 | 
						||
  _prompt = pro.get( "PROMPT", campo );
 | 
						||
  if( _prompt[ 0 ] == '\"' )
 | 
						||
  {
 | 
						||
    _prompt.ltrim( 1 );
 | 
						||
    _prompt.rtrim( 1 );
 | 
						||
  };
 | 
						||
  _flag = pro.get( "FLAG", campo );
 | 
						||
  _help = pro.get( "FLAG", campo );
 | 
						||
  _warning = pro.get( "FLAG", campo );
 | 
						||
  _use = pro.get( "USE", campo );
 | 
						||
  _use.separator( '~' );
 | 
						||
  _input = pro.get( "INPUT", campo );
 | 
						||
  _input.separator( '~' );
 | 
						||
  _display = pro.get( "DISPLAY", campo );
 | 
						||
  _display.separator( '~' );
 | 
						||
  _output = pro.get( "OUTPUT", campo );
 | 
						||
  _output.separator( '~' );
 | 
						||
  _copy = pro.get( "COPY", campo );
 | 
						||
  _copy.separator( '~' );
 | 
						||
  _special = pro.get( "SPECIAL", campo );
 | 
						||
  _special.separator( '~' );
 | 
						||
  _configs = pro.get( "CONFIGS", campo );
 | 
						||
  _configs.separator( '~' );
 | 
						||
  _items = "";
 | 
						||
  int last = pro.get_int( "NITEMS", campo );
 | 
						||
  for( int i = 1; i <= last; i ++ )
 | 
						||
    _items.add( pro.get( "ITEM", campo, i ) );
 | 
						||
};
 | 
						||
 | 
						||
TField::TField( )
 | 
						||
{
 | 
						||
  _nome = "";
 | 
						||
  _fieldname = "";
 | 
						||
  _x = 0;
 | 
						||
  _y = 0;
 | 
						||
  _gruppo = 0;
 | 
						||
  _stato = 0;
 | 
						||
  _grp = NULL;
 | 
						||
  _id = 0;
 | 
						||
  _type = 0;
 | 
						||
  _size = 0;
 | 
						||
  _prompt = "";
 | 
						||
  _flag = "";
 | 
						||
  _help = "";
 | 
						||
  _warning = "";
 | 
						||
  _use = "";
 | 
						||
  _use.separator( '~' );
 | 
						||
  _input = "";
 | 
						||
  _input.separator( '~' );
 | 
						||
  _display = "";
 | 
						||
  _display.separator( '~' );
 | 
						||
  _output = "";
 | 
						||
  _output.separator( '~' );
 | 
						||
  _copy = "";
 | 
						||
  _copy.separator( '~' );
 | 
						||
  _special = "";
 | 
						||
  _special.separator( '~' );
 | 
						||
  _configs = "";
 | 
						||
  _configs.separator( '~' );
 | 
						||
  _items = "";
 | 
						||
  _items.separator( '@' );
 | 
						||
}
 | 
						||
 | 
						||
TObject* TField::dup() const
 | 
						||
{
 | 
						||
  TField * f = new TField;
 | 
						||
 | 
						||
  f->_nome = _nome;
 | 
						||
  f->_fieldname = _fieldname;
 | 
						||
  f->_x = _x;
 | 
						||
  f->_y = _y;
 | 
						||
  f->_gruppo = _gruppo;
 | 
						||
  f->_stato = _stato;
 | 
						||
  f->_type = _type;
 | 
						||
  f->_size = _size;
 | 
						||
  f->_prompt = _prompt;
 | 
						||
  f->_flag = _flag;
 | 
						||
  f->_help = _help;
 | 
						||
  f->_warning = _warning;
 | 
						||
  f->_use = _use;
 | 
						||
  f->_id = _id;
 | 
						||
  f->_input = _input;
 | 
						||
  f->_display = _display;
 | 
						||
  f->_output = _output;
 | 
						||
  f->_copy = _copy;
 | 
						||
  f->_special = _special;
 | 
						||
  f->_items = _items;
 | 
						||
  f->_configs = _configs;
 | 
						||
  return f;
 | 
						||
}
 | 
						||
 | 
						||
int TField::stato_reale()
 | 
						||
{
 | 
						||
  // Strategia al 28/08/95
 | 
						||
  // Se il campo, nel file .INI di definizione dei campi, h legato a qualche voce in
 | 
						||
  // configurazione, legge il suo stato, altrimenti assume il massimo.
 | 
						||
  // Va poi a verificare nel .INI da compilare, e verifica li' la impostazione.
 | 
						||
  // Controlla poi la impostazione per il gruppo, come impostato nel file .INI
 | 
						||
  // e nella sezione CONFIGS nel .INI di definizione dei gruppi.
 | 
						||
  // Utilizza poi la minore delle due.
 | 
						||
  int stato = S_OBBLIGATORIO;
 | 
						||
 | 
						||
  TToken_string riga_profilo(grp().generatore().profilo().get(_nome, "PROFILO"));
 | 
						||
  const int stato_profilo = riga_profilo.get_int(P_STATO);
 | 
						||
 | 
						||
  if (stato > stato_profilo )
 | 
						||
    stato = stato_profilo;
 | 
						||
 | 
						||
  if (stato > S_NON_VISIBILE)
 | 
						||
  {
 | 
						||
    const TString80 gruppo(fieldsini().get("GROUP", _nome));
 | 
						||
    int stato_gruppo = S_OBBLIGATORIO;
 | 
						||
    if (stato > stato_gruppo)
 | 
						||
      stato = stato_gruppo;
 | 
						||
 | 
						||
    const int stato_gruppo_profilo = grp().generatore().profilo().get_int(gruppo, "PROFILOGRUPPO");
 | 
						||
 | 
						||
    if (stato > stato_gruppo_profilo)
 | 
						||
      stato = stato_gruppo_profilo;
 | 
						||
  }
 | 
						||
  return stato;
 | 
						||
}                         
 | 
						||
 | 
						||
void TField::configura( TConfig& pro )
 | 
						||
{
 | 
						||
  TToken_string riga_profilo( pro.get( _nome, "PROFILO" ) );
 | 
						||
  TString newprompt( riga_profilo.get( P_PROMPT ) ) ;
 | 
						||
  TString newhelp( riga_profilo.get( P_HELP ) ) ;
 | 
						||
  TString newwarning( riga_profilo.get( P_WARNING ) ) ;
 | 
						||
  if ( ! newprompt.blank( ) )
 | 
						||
    _prompt = newprompt;
 | 
						||
  if ( ! newhelp.blank( ) )
 | 
						||
    _help = newhelp;
 | 
						||
  if ( ! newwarning.blank( ) )
 | 
						||
    _warning = newwarning;
 | 
						||
}
 | 
						||
 | 
						||
void TField::genera( )
 | 
						||
{
 | 
						||
  TMaschera& m = grp().maschera();
 | 
						||
  TString s;
 | 
						||
 | 
						||
  if ( _stato == S_NASCOSTO )
 | 
						||
    return;
 | 
						||
  if ( _size != 0 )
 | 
						||
    m.control( _type, _id, _size );
 | 
						||
  else
 | 
						||
    m.control( _type, _id );
 | 
						||
  m.begin( );
 | 
						||
  switch( _stato )
 | 
						||
  {
 | 
						||
  case S_NON_VISIBILE :
 | 
						||
    m.prompt( 50, 50, _prompt );
 | 
						||
    s = "D";
 | 
						||
    s << _flag;
 | 
						||
    m.flag( s ) ;
 | 
						||
    break;
 | 
						||
  case S_DISABILITATO :
 | 
						||
    m.prompt( _x, _y + m.line( ), _prompt );
 | 
						||
    s = "D";
 | 
						||
    s << _flag;
 | 
						||
    m.flag( s ) ;
 | 
						||
    break;
 | 
						||
  case S_NORMALE :
 | 
						||
  case S_OBBLIGATORIO :
 | 
						||
  case S_NOCHECK :
 | 
						||
    m.prompt( _x, _y + m.line( ), _prompt );
 | 
						||
    m.flag( _flag );
 | 
						||
    break;
 | 
						||
    default:
 | 
						||
    break;
 | 
						||
  }
 | 
						||
  if ((_type == T_DATA || _type == T_STRINGA || 
 | 
						||
      _type == T_NUMERO || _type == T_MEMO || _type == T_ZOOM ||
 | 
						||
      _type == T_GOLEM || _type == T_CURRENCY) &&
 | 
						||
      (_stato == S_OBBLIGATORIO || (!_use.blank())))
 | 
						||
    m.check( _stato );
 | 
						||
  if ( !_fieldname.blank( ) ) m.field( _fieldname );
 | 
						||
  if ( !_items.blank( ) ) m.item( _items );
 | 
						||
  if ( !_use.blank( ) ) m.use( _use );
 | 
						||
  if ( !_input.blank( ) ) m.input( _input );
 | 
						||
  if ( !_display.blank( ) ) m.display( _display );
 | 
						||
  if ( !_output.blank( ) ) m.output( _output );
 | 
						||
  if ( !_copy.blank( ) ) m.copy( _copy );
 | 
						||
  if ( !_help.blank( ) ) m.help( _help );
 | 
						||
  if ( !_warning.blank( ) ) m.warning( _warning );
 | 
						||
  if ( !_special.blank( ) ) m.outline( _special );
 | 
						||
  m.end( );
 | 
						||
  if ( ( m.line( ) > MAX_LINES_PER_PAGE ))
 | 
						||
    m.end( );
 | 
						||
}
 | 
						||
 | 
						||
// Definizione dei metodi di_generator
 | 
						||
// -----------------------------------------
 | 
						||
 | 
						||
TMask_generator::TMask_generator(const TString& tablefile ) : _fieldsini( "ve0300a.ini" ), _groupsini( "ve0300c.ini" )
 | 
						||
{
 | 
						||
  CHECK( fexist( "ve0300a.ini" ), "Il file ve0300a.ini non esiste!" );
 | 
						||
  _fieldsini.list_paragraphs( _fields );
 | 
						||
  CHECK( fexist( "ve0300b.dat" ), "Il file ve0300b.dat non esiste!" );
 | 
						||
  carica_tabella( "ve0300b.dat", _tab0300b );
 | 
						||
  carica_dati_campi( "ve0300a.ini", _gruppi );
 | 
						||
  _tablefile = tablefile;
 | 
						||
}
 | 
						||
 | 
						||
void TMask_generator::carica_dati_campi( const TFilename& fn, TAssoc_array& a )
 | 
						||
{
 | 
						||
  TScanner infile( fn );
 | 
						||
  TString line;
 | 
						||
  TField *campo = NULL;
 | 
						||
  TGruppo *gruppo = NULL;
 | 
						||
  TString16 curgruppo( "" );
 | 
						||
 | 
						||
  while ( infile.ok( ) )
 | 
						||
  {
 | 
						||
    line = infile.line( );
 | 
						||
    line.trim( );
 | 
						||
    while ( ( line.empty( ) || line[ 0 ] == '#' || line.left( 2 ) == "//" ) && infile.ok( ) )
 | 
						||
    {
 | 
						||
      line = infile.line( );
 | 
						||
      line.trim( );
 | 
						||
    }
 | 
						||
    if( infile.ok( ) )
 | 
						||
    {
 | 
						||
      if ( line[ 0 ] == '[' ) // Carica un un campo
 | 
						||
      {
 | 
						||
        line.strip( "[]" );
 | 
						||
        if ( campo )
 | 
						||
        {
 | 
						||
          TString16 fieldkey = GROUPKEY( campo->gruppo( ) );
 | 
						||
          if ( fieldkey != curgruppo )
 | 
						||
          {
 | 
						||
            if ( gruppo )
 | 
						||
            {
 | 
						||
              a.add( curgruppo, gruppo );
 | 
						||
            }
 | 
						||
            TString16 taggruppo;
 | 
						||
            taggruppo.format( "%d", campo->gruppo( ) );
 | 
						||
            gruppo = new TGruppo( campo->gruppo( ));
 | 
						||
            gruppo->generatore( *this );
 | 
						||
          }
 | 
						||
          gruppo->add( campo );
 | 
						||
          curgruppo = GROUPKEY( campo->gruppo( ) );
 | 
						||
        }
 | 
						||
        campo = new TField( );
 | 
						||
        campo->nome( line );
 | 
						||
      }
 | 
						||
      else
 | 
						||
      {
 | 
						||
        int pos;
 | 
						||
        if( ( pos = line.find( '=' ) ) == 0 )
 | 
						||
          yesnofatal_box( "Linea errata nel file.INI: %s", (const char *) line );
 | 
						||
        else
 | 
						||
        {
 | 
						||
          TString key = line.sub( 0, pos );
 | 
						||
          key.trim( );
 | 
						||
          TString value = line.mid( pos + 1 );
 | 
						||
          value.trim( );
 | 
						||
          if( key == "X" )
 | 
						||
            campo->x( atoi( value ) );
 | 
						||
          else if( key == "Y" )
 | 
						||
            campo->y( atoi( value ) );
 | 
						||
          else if( key == "GROUP" )
 | 
						||
            campo->gruppo( atoi( value ) );
 | 
						||
          else if( key == "FIELDNAME" )
 | 
						||
            campo->fieldname( value );
 | 
						||
          else if( key == "MSKID" )
 | 
						||
            campo->id( atoi( value ) );
 | 
						||
          else if( key == "TYPE" )
 | 
						||
            campo->type( atoi( value ) );
 | 
						||
          else if( key == "SIZE" )
 | 
						||
            campo->size( atoi( value ) );
 | 
						||
          else if( key == "PROMPT" )
 | 
						||
          {
 | 
						||
            if( value[ 0 ] == '"' )
 | 
						||
            {
 | 
						||
              value.rtrim( 1 );
 | 
						||
              value.ltrim( 1 );
 | 
						||
            };
 | 
						||
            campo->prompt( value );
 | 
						||
          }
 | 
						||
          else if( key == "FLAG" )
 | 
						||
            campo->flag( value );
 | 
						||
          else if( key == "USE" )
 | 
						||
            campo->use( (TToken_string & ) value );
 | 
						||
          else if( key == "INPUT" )
 | 
						||
            campo->input( (TToken_string & )value );
 | 
						||
          else if( key == "DISPLAY" )
 | 
						||
            campo->display( (TToken_string & )value );
 | 
						||
          else if( key == "OUTPUT" )
 | 
						||
            campo->output( (TToken_string & )value );
 | 
						||
          else if( key == "COPY" )
 | 
						||
            campo->copy( (TToken_string & )value );
 | 
						||
          else if( key == "WARNING" )
 | 
						||
            campo->warning( value );
 | 
						||
          else if( key == "HELP" )
 | 
						||
            campo->help( value );
 | 
						||
          else if( key == "SPECIAL" )
 | 
						||
            campo->special( (TToken_string & )value );
 | 
						||
          else if( key == "ITEMS" )
 | 
						||
            campo->items( (TToken_string & )value );
 | 
						||
          else if( key == "CONFIGS" )
 | 
						||
            campo->configs( (TToken_string & )value );
 | 
						||
          else yesnofatal_box( "Chiave non trovata(%s)", (const char *) key );
 | 
						||
        }
 | 
						||
      }
 | 
						||
    }
 | 
						||
  }
 | 
						||
  if ( campo )
 | 
						||
  {
 | 
						||
    if( format( "%5d", campo->gruppo( ) ) != curgruppo )
 | 
						||
    {
 | 
						||
      if( gruppo )
 | 
						||
      {
 | 
						||
        a.add( curgruppo, gruppo );
 | 
						||
      }
 | 
						||
      TString16 taggruppo;
 | 
						||
      taggruppo.format("%d", campo->gruppo());
 | 
						||
      gruppo = new TGruppo(campo->gruppo());
 | 
						||
      gruppo->generatore( *this );
 | 
						||
    }
 | 
						||
    gruppo->add( campo );
 | 
						||
    curgruppo = GROUPKEY( campo->gruppo( ) );
 | 
						||
    a.add( curgruppo, gruppo );
 | 
						||
  }
 | 
						||
}
 | 
						||
 | 
						||
void TMask_generator::carica_tabella( const TFilename& fn, TString_array& tabella )
 | 
						||
{
 | 
						||
  TScanner in( fn  );
 | 
						||
  TToken_string line(in.line());
 | 
						||
  while( line.not_empty( ) )
 | 
						||
  { // Attacca tutte le righe che finiscono con <20>
 | 
						||
    while ( line.right( 1 ) == "<EFBFBD>" )
 | 
						||
    { line.rtrim( 1 );
 | 
						||
      line << in.line( );
 | 
						||
    };
 | 
						||
    tabella.add( line );
 | 
						||
    line = in.line( );
 | 
						||
  }
 | 
						||
}
 | 
						||
 | 
						||
void TMask_generator::genera_item_sheet( TToken_string _line )
 | 
						||
{
 | 
						||
  _m->_out << "IT \"" << _line.get( B_DESCR );
 | 
						||
  _m->_out << "@" << _line.get_int( B_WIDTH ) << "\"\n";
 | 
						||
}
 | 
						||
 | 
						||
void TMask_generator::intestazione_pagina( const char* def_title)
 | 
						||
{                       
 | 
						||
  _m->line( MASK_FIRST_LINE );
 | 
						||
  _m->page( _m->page( ) + 1 );
 | 
						||
 | 
						||
	const TString80 title(profilo().get("Title", "MAIN", _m->page(), def_title));
 | 
						||
 | 
						||
	_m->pagina( _m->page(), title);
 | 
						||
 | 
						||
  _m->control( T_CORNICE, DLG_NULL, 7806 );
 | 
						||
  _m->begin( );
 | 
						||
  _m->prompt( 1, 0, "" );
 | 
						||
  _m->end( );
 | 
						||
 | 
						||
  _m->control( T_STRINGA, DLG_NULL, 4 );
 | 
						||
  _m->begin( );
 | 
						||
  _m->prompt( 2, 1, "Cod. num.  " );
 | 
						||
  _m->flag( "D" );
 | 
						||
  _m->group( 2 );
 | 
						||
  _m->end( );
 | 
						||
 | 
						||
  _m->control( T_STRINGA, DLG_NULL, 50 );
 | 
						||
  _m->begin( );
 | 
						||
  _m->prompt( 24, 1 );
 | 
						||
  _m->flag( "D" );
 | 
						||
  _m->group( 3 );
 | 
						||
  _m->end( );
 | 
						||
 | 
						||
  _m->control( T_STRINGA,  DLG_NULL, 4 );
 | 
						||
  _m->begin( );
 | 
						||
  _m->prompt( 2, 2, "Tipo doc.  " );
 | 
						||
  _m->flag( "D" );
 | 
						||
  _m->group( 4 );
 | 
						||
  _m->end( );
 | 
						||
 | 
						||
  _m->control( T_STRINGA,  DLG_NULL, 50 );
 | 
						||
  _m->begin( );
 | 
						||
  _m->prompt( 24, 2 );
 | 
						||
  _m->flag( "D" );
 | 
						||
  _m->group( 5 );
 | 
						||
  _m->end( );
 | 
						||
 | 
						||
  _m->control( T_STRINGA, DLG_NULL, 4 );
 | 
						||
  _m->begin( );
 | 
						||
  _m->prompt( 2, 3, "Esercizio  " );
 | 
						||
  _m->group( 9 );
 | 
						||
  _m->flag( "D" );
 | 
						||
  _m->end( );
 | 
						||
 | 
						||
  _m->control( T_NUMERO,  DLG_NULL, 6 );
 | 
						||
  _m->begin( );
 | 
						||
  _m->prompt( 24, 3, "Numero doc. " );
 | 
						||
  _m->group( 6 );
 | 
						||
  _m->flag( "D" );
 | 
						||
  _m->end( );
 | 
						||
 | 
						||
  _m->control( T_DATA, DLG_NULL );
 | 
						||
  _m->begin( );
 | 
						||
  _m->prompt( 46, 3, "Data " );
 | 
						||
  _m->group( 7 );
 | 
						||
  _m->flag( "D" );
 | 
						||
  _m->end( );
 | 
						||
 | 
						||
	_m->control( T_STRINGA, DLG_NULL, 1 );
 | 
						||
  _m->begin( );
 | 
						||
  _m->prompt( 67, 3, "Stato " );
 | 
						||
  _m->group( 8 );
 | 
						||
  _m->flag( "D" );
 | 
						||
  _m->end( );
 | 
						||
 | 
						||
  _m->control( T_STRINGA, DLG_NULL, 6 );
 | 
						||
  _m->begin( );
 | 
						||
  if ( _pro->get( "TIPOCF", "MAIN" ) == "C" )
 | 
						||
    _m->prompt( 2, 4, "Cliente    " );
 | 
						||
  else
 | 
						||
    _m->prompt( 2, 4, "Fornitore  " );
 | 
						||
  _m->group( 10 );
 | 
						||
  _m->flag( "D" );
 | 
						||
  _m->end( );
 | 
						||
 | 
						||
  _m->control( T_STRINGA,  DLG_NULL, 50 );
 | 
						||
  _m->begin( );
 | 
						||
  _m->prompt( 24, 4, "" );
 | 
						||
  _m->group( 11 );
 | 
						||
  _m->flag( "D" );
 | 
						||
  _m->end( );
 | 
						||
 | 
						||
}
 | 
						||
 | 
						||
void TMask_generator::load_table()
 | 
						||
{
 | 
						||
  _frdtable.destroy();
 | 
						||
  if (!fexist(_tablefile))
 | 
						||
    fatal_box("Il file %s per il caricamento formule documento non esiste.", (const char*) _tablefile);
 | 
						||
 | 
						||
  TScanner f(_tablefile);
 | 
						||
  TToken_string s(1024);
 | 
						||
  TString token;
 | 
						||
  int b0pos = B0_POSITION, s0pos = S0_POSITION, i0pos = I0_POSITION, b1pos = B1_POSITION;
 | 
						||
  if (f.paragraph("Header"))
 | 
						||
  { 
 | 
						||
    s = f.line();
 | 
						||
    if (s.find("Version") > -1)
 | 
						||
      s = f.line();
 | 
						||
    if (s.find("File") > -1)
 | 
						||
      s = f.line();
 | 
						||
    int totitem = 0;
 | 
						||
    while (s.find("Fields") > -1)
 | 
						||
    {
 | 
						||
      const int items = s.items();
 | 
						||
      for (int i = 0; i < items; i++)
 | 
						||
      {
 | 
						||
        int pos = totitem + i;
 | 
						||
        if (strstr(s.get(i),"S0,") != NULL)
 | 
						||
          s0pos = pos;
 | 
						||
        if (strstr(s.get(i),"I0,") != NULL)
 | 
						||
          i0pos = pos;
 | 
						||
        if (strstr(s.get(i),"B0,") != NULL)
 | 
						||
          b0pos = pos;
 | 
						||
        if (strstr(s.get(i),"B1,") != NULL)
 | 
						||
          b1pos = pos;
 | 
						||
      }
 | 
						||
      totitem += items;
 | 
						||
      s = f.line();
 | 
						||
    }
 | 
						||
  }
 | 
						||
 | 
						||
  if (!f.paragraph("Data"))
 | 
						||
    fatal_box("Manca il paragrafo [Data] nel file %s.", (const char*) _tablefile);
 | 
						||
  s = f.line();
 | 
						||
  while (s.not_empty())
 | 
						||
  {
 | 
						||
    s.restart();
 | 
						||
    token = s.get(0);
 | 
						||
    if (token == "FRD")
 | 
						||
    {
 | 
						||
      token = s.get(1);
 | 
						||
      if (_frdtable.objptr(token) == NULL)
 | 
						||
      {
 | 
						||
        _TableItem* t = new _TableItem;
 | 
						||
        t->set_b0(s.get_char(b0pos) == 'X');
 | 
						||
        t->set_b1(s.get_char(b1pos) == 'X');
 | 
						||
        t->set_s0(s.get(s0pos));
 | 
						||
        t->set_i0(s.get_int(i0pos));
 | 
						||
        _frdtable.add(token, t);
 | 
						||
      }
 | 
						||
    }
 | 
						||
    s = f.line();
 | 
						||
  }
 | 
						||
}
 | 
						||
 | 
						||
void TMask_generator::genera_sheet(int line, bool show_list, bool genera_disp)
 | 
						||
{
 | 
						||
		line++;
 | 
						||
		if (genera_disp)
 | 
						||
		{
 | 
						||
			// Generazione del campo con la giacenza della riga corrente
 | 
						||
			_m->control ( T_NUMERO, F_CURGIAC, 15 );
 | 
						||
			_m->begin( );
 | 
						||
			_m->prompt( 2, line, "Riga corrente: Giacenza ");
 | 
						||
			_m->flag("D");
 | 
						||
			_m->picture(".5");
 | 
						||
			_m->end( );
 | 
						||
	    
 | 
						||
			// Generazione del campo con la disponibilita' della riga corrente
 | 
						||
			_m->control ( T_NUMERO, F_CURDISP, 15 );
 | 
						||
			_m->begin( );
 | 
						||
			_m->prompt( 44, line++, "Disponibilita' ");
 | 
						||
			_m->flag("D");
 | 
						||
			_m->picture(".5");
 | 
						||
			_m->end( );
 | 
						||
		}
 | 
						||
  
 | 
						||
		// Generazione del listbox per i tipi di riga da aggiungere nello sheet
 | 
						||
		_m->control ( T_LISTA, F_LBTIPORIGA, 30 );
 | 
						||
		_m->begin( );
 | 
						||
		_m->prompt( 2, show_list ? line : -1, "Tipo riga da aggiungere " );
 | 
						||
		if (show_list)
 | 
						||
			line++;
 | 
						||
		else
 | 
						||
			_m->flag("H");
 | 
						||
		_m->end( );
 | 
						||
  
 | 
						||
    // Generazione dello sheet : vedi il profilo
 | 
						||
		const int sh_y = profilo().get_int("SHEET_LINE");
 | 
						||
		if (sh_y > 0)
 | 
						||
			line = sh_y;
 | 
						||
    TScanner sheet_in( "ve0300b.dat" );
 | 
						||
    _m->_out << "SPREADSHEET " << F_SHEET << "\n";
 | 
						||
    _m->begin( );
 | 
						||
    _m->prompt( 2, line );
 | 
						||
    do_events();
 | 
						||
    for(int i = 0; i < _tab0300b.items( ); i ++ )
 | 
						||
      genera_item_sheet( _tab0300b.row( i ) );
 | 
						||
    _m->end( );
 | 
						||
    _m->end( );
 | 
						||
		_m->_sheet_generated = true;
 | 
						||
}
 | 
						||
 | 
						||
void TMask_generator::genera_testata_1()
 | 
						||
{
 | 
						||
  TString temp_s;
 | 
						||
  const char tipo_cf = _pro->get_char("TIPOCF", "MAIN");
 | 
						||
 | 
						||
  _m->control( T_CORNICE, DLG_NULL, 7806);
 | 
						||
  _m->begin( );
 | 
						||
  _m->prompt( 1, 0, "" );
 | 
						||
  _m->end( );
 | 
						||
 
 | 
						||
  _m->control( T_STRINGA, F_CODNUM, 4 );
 | 
						||
  _m->begin( );
 | 
						||
  _m->prompt( 2, 1, "Cod. num.  " );
 | 
						||
  _m->field(DOC_CODNUM);
 | 
						||
  _m->use("%NUM", 1);
 | 
						||
  temp_s.format("CODTAB %d", F_CODNUM);
 | 
						||
  _m->input(temp_s);
 | 
						||
  _m->display("\"Codice\" CODTAB~\"Descrizione@50\" S0");
 | 
						||
  temp_s.format("%d S0", F_DESNUM);
 | 
						||
  _m->output(temp_s);
 | 
						||
  _m->check(S_NORMALE);
 | 
						||
  _m->flag( "GDU" );
 | 
						||
  _m->message( "CO,2@" );
 | 
						||
  _m->end( );
 | 
						||
 | 
						||
  _m->control( T_STRINGA, F_DESNUM, 50 );
 | 
						||
  _m->begin( );
 | 
						||
  _m->prompt( 24, 1 );
 | 
						||
  _m->flag( "GD" );
 | 
						||
  _m->message( "CO,3@" );
 | 
						||
  _m->end( );
 | 
						||
  
 | 
						||
  _m->control( T_STRINGA, F_TIPODOC, 4 );
 | 
						||
  _m->begin( );
 | 
						||
  _m->field( DOC_TIPODOC );
 | 
						||
  _m->prompt( 2, 2, "Tipo doc.  " );
 | 
						||
  _m->use("%TIP" , 1);
 | 
						||
  temp_s.format("CODTAB %d", F_TIPODOC);
 | 
						||
  _m->input(temp_s);
 | 
						||
  _m->display("\"Codice\" CODTAB~\"Descrizione@50\" S0");
 | 
						||
  temp_s.format("%d S0", F_DESTIPODOC);
 | 
						||
  _m->output(temp_s);
 | 
						||
  _m->check(S_NORMALE);
 | 
						||
  _m->flag( "GDU" );
 | 
						||
  _m->message( "CO,4@" );
 | 
						||
  _m->end( );
 | 
						||
  
 | 
						||
  _m->control( T_LISTA, F_TIPOCF, 9 );
 | 
						||
  _m->begin( );
 | 
						||
  _m->prompt( 100, 100, "" );
 | 
						||
  _m->field( DOC_TIPOCF );
 | 
						||
  _m->item(tipo_cf == 'C' ? "C|Cliente" : "F|Fornitore");
 | 
						||
  _m->flag( "D" );
 | 
						||
  _m->end( );
 | 
						||
  
 | 
						||
  _m->control( T_STRINGA, F_PROVV, 1 );
 | 
						||
  _m->begin( );
 | 
						||
  _m->prompt( 100, 100, "<D><P>  " );
 | 
						||
  _m->field( DOC_PROVV );
 | 
						||
  _m->flag( "D" );
 | 
						||
  _m->end( );
 | 
						||
 | 
						||
  _m->control( T_STRINGA, F_DESTIPODOC, 50 );
 | 
						||
  _m->begin( );
 | 
						||
  _m->prompt( 24, 2 );
 | 
						||
  _m->flag( "GD" );
 | 
						||
  _m->message( "CO,5@" );
 | 
						||
  _m->end( );
 | 
						||
  
 | 
						||
  _m->control( T_STRINGA, F_ANNO, 4 );
 | 
						||
  _m->begin( );
 | 
						||
  _m->prompt( 2, 3, "Esercizio  " );
 | 
						||
  _m->field( DOC_ANNO );
 | 
						||
  _m->flag( "GD" );
 | 
						||
  _m->message( "CO,9@" );
 | 
						||
  _m->end( );
 | 
						||
  
 | 
						||
  _m->control( T_NUMERO, F_NDOC, 6 );
 | 
						||
  _m->begin( );
 | 
						||
  _m->prompt( 24, 3, "Numero doc. " );
 | 
						||
  _m->field( DOC_NDOC );
 | 
						||
  _m->message( "CO,6@" );
 | 
						||
  _m->flag( "GDR" );
 | 
						||
  _m->end( );
 | 
						||
  
 | 
						||
  _m->control( T_DATA, F_DATADOC );
 | 
						||
  _m->begin( );
 | 
						||
  _m->prompt( 46, 3, "Data " );
 | 
						||
  _m->field( DOC_DATADOC );
 | 
						||
  TString m("CO,7@"); 
 | 
						||
  _m->message(m); 
 | 
						||
  _m->end( );
 | 
						||
 
 | 
						||
  _m->control( T_STRINGA, F_STATO, 1 );
 | 
						||
  _m->begin( );
 | 
						||
  _m->prompt( 67, 3, "Stato " );
 | 
						||
  _m->field( DOC_STATO );
 | 
						||
  _m->use("%STD", 1);
 | 
						||
  _m->input("CODTAB 105");
 | 
						||
  _m->display("\"Codice\" CODTAB");
 | 
						||
	_m->display("\"Descrizione@50\" S0");
 | 
						||
	_m->output("105 CODTAB");
 | 
						||
  _m->message( "CO,8@" );
 | 
						||
	_m->check(S_NORMALE);
 | 
						||
  _m->flag( "DG" );
 | 
						||
  _m->end( );     
 | 
						||
 | 
						||
  _m->control( T_STRINGA, F_CODCF, 6 );
 | 
						||
  _m->begin( );
 | 
						||
  if ( tipo_cf == 'C' )
 | 
						||
  {
 | 
						||
    _m->prompt( 2, 4, "Cliente    " );
 | 
						||
    _m->warning( "Cliente assente" );
 | 
						||
    _m->help( "Codice del cliente del documento" );
 | 
						||
  }
 | 
						||
  else
 | 
						||
  {
 | 
						||
    _m->prompt( 2, 4, "Fornitore  " );
 | 
						||
    _m->warning( "Fornitore assente" );
 | 
						||
    _m->help( "Codice del fornitore del documento" );
 | 
						||
  }
 | 
						||
  _m->flag( "R" );
 | 
						||
  _m->field( DOC_CODCF );
 | 
						||
  _m->group( 1 );
 | 
						||
  _m->use( LF_CLIFO, 1 );
 | 
						||
  temp_s.format( "TIPOCF \"%c\"~CODCF %d", tipo_cf, F_CODCF);
 | 
						||
  _m->input( temp_s );
 | 
						||
  _m->display( "\"Codice\" CODCF~\"Ragione Sociale@50\" RAGSOC~\"Partita IVA@12\" PAIV~\"Sospeso\" SOSPESO" );
 | 
						||
  temp_s.format( "%d CODCF~%d RAGSOC", F_CODCF, F_RAGSOC );
 | 
						||
  _m->output( temp_s );
 | 
						||
  _m->check( S_OBBLIGATORIO );
 | 
						||
  temp_s.format( "ADD RU cg0 -1 %c", tipo_cf);
 | 
						||
  _m->outline( temp_s );
 | 
						||
  _m->message( "CO,10@" );
 | 
						||
  _m->end( );
 | 
						||
  
 | 
						||
  _m->control( T_STRINGA, F_RAGSOC, 50 );
 | 
						||
  _m->begin( );
 | 
						||
  if ( tipo_cf == 'C' )
 | 
						||
  {
 | 
						||
    _m->warning( "Cliente assente" );
 | 
						||
    _m->help( "Ragione sociale del cliente del documento" );
 | 
						||
  }
 | 
						||
  else
 | 
						||
  {
 | 
						||
    _m->warning( "Fornitore assente" );
 | 
						||
    _m->help( "Ragione sociale del fornitore del documento" );
 | 
						||
  }
 | 
						||
  _m->prompt( 24, 4, "" );
 | 
						||
  _m->group( 1 );
 | 
						||
  _m->use( LF_CLIFO, 2 );
 | 
						||
  temp_s.format( "TIPOCF \"%c\"~RAGSOC %d", tipo_cf, F_RAGSOC );
 | 
						||
  _m->input( temp_s );
 | 
						||
  _m->display( "\"Ragione Sociale@50\" RAGSOC~\"Partita IVA@12\" PAIV~\"Codice\" CODCF" );
 | 
						||
  temp_s.format( "%d CODCF~%d RAGSOC", F_CODCF, F_RAGSOC );
 | 
						||
  _m->output( temp_s );
 | 
						||
  _m->check( S_OBBLIGATORIO );
 | 
						||
  temp_s.format( "ADD RU cg0 -1 %c", tipo_cf);
 | 
						||
  _m->outline( temp_s );
 | 
						||
  _m->message( "CO,11@" );
 | 
						||
  _m->end( );
 | 
						||
  _m->line( MASK_FIRST_LINE );
 | 
						||
}
 | 
						||
 | 
						||
void TMask_generator::genera( const TString& profilo )
 | 
						||
{
 | 
						||
  if( profilo == "-all" || profilo[0] == '*')
 | 
						||
  {
 | 
						||
    TString_array profiles;
 | 
						||
 | 
						||
    {
 | 
						||
      TAssoc_array profiles_array;
 | 
						||
      TRelation rel("%TIP");
 | 
						||
      TCursor t( &rel );
 | 
						||
      long count = t.items();
 | 
						||
 | 
						||
      for( t = 0; t.pos( ) < count; ++t )
 | 
						||
      {
 | 
						||
        const TString profile_name(t.curr().get("S4"));
 | 
						||
        TFilename profile(profile_name);
 | 
						||
 | 
						||
        profile.ext("ini");
 | 
						||
        if (fexist(profile) && !profiles_array.is_key(profile_name))
 | 
						||
          profiles_array.add(profile_name);
 | 
						||
      }
 | 
						||
      profiles_array.get_keys(profiles);
 | 
						||
    }
 | 
						||
 | 
						||
    TProgind bar( profiles.items(), "Generazione automatica profili", FALSE, TRUE);
 | 
						||
    const int items = profiles.items();
 | 
						||
 | 
						||
    for (int i = 0; i < items; i++)
 | 
						||
    {
 | 
						||
      const TString &profile = profiles.row(i);
 | 
						||
 | 
						||
      genera(profile);
 | 
						||
      bar.addstatus(1);
 | 
						||
    }
 | 
						||
  }
 | 
						||
  else
 | 
						||
  {
 | 
						||
    int i, last;
 | 
						||
    TString temp_s;
 | 
						||
    TFilename proname( profilo );
 | 
						||
  
 | 
						||
    // All'inizio il gruppo h 'chiuso'
 | 
						||
    _groupopen = FALSE;
 | 
						||
  
 | 
						||
    // Forza l'estensione al profilo
 | 
						||
    proname.ext( "ini" );
 | 
						||
 | 
						||
    // Se il file di profilo non esiste, esci con un errore fatale
 | 
						||
    if (!fexist( proname))
 | 
						||
    {
 | 
						||
      error_box( "Il profilo %s non esiste!", ( const  char * )profilo);
 | 
						||
      return;
 | 
						||
    }
 | 
						||
  
 | 
						||
    _pro = new TConfig( proname );
 | 
						||
  
 | 
						||
    const char tipo_cf = _pro->get_char("TIPOCF", "MAIN");    
 | 
						||
 | 
						||
    TFilename _mskname(profilo);
 | 
						||
    _mskname.ext( "msk" );
 | 
						||
  
 | 
						||
    do_events();
 | 
						||
    // Mi serve per ordinare i gruppi a seconda del documento
 | 
						||
    TAssoc_array grouporder;
 | 
						||
  
 | 
						||
    _m = new TMaschera( _mskname );
 | 
						||
  
 | 
						||
    // Definizione della toolbar
 | 
						||
  
 | 
						||
    _m->outline( "TOOLBAR \"\" 0 0 0 2" );
 | 
						||
  
 | 
						||
    _m->control( T_BOTTONE, DLG_NEWREC, 202 );
 | 
						||
    _m->begin( );
 | 
						||
    _m->prompt( 1, 1,  "~Nuovo" );
 | 
						||
    _m->message( "EXIT,312" );
 | 
						||
    _m->picture(TOOL_NEWREC);
 | 
						||
    _m->end( );
 | 
						||
 | 
						||
		_m->control( T_BOTTONE, DLG_SAVEREC, 202 );
 | 
						||
    _m->begin( );
 | 
						||
    _m->prompt( 2, 1,  "~Registra" );
 | 
						||
    _m->message( "EXIT,20082" );
 | 
						||
    _m->picture(TOOL_SAVEREC);
 | 
						||
    _m->end( );
 | 
						||
  
 | 
						||
    _m->control( T_BOTTONE, DLG_DELREC, 202 );
 | 
						||
    _m->begin( );
 | 
						||
    _m->prompt( 3, 1, "~Elimina" );
 | 
						||
    _m->message( "EXIT,127" );
 | 
						||
    _m->end( );
 | 
						||
  
 | 
						||
    _m->control( T_BOTTONE, DLG_NULL, 202 );
 | 
						||
    _m->begin( );
 | 
						||
    _m->end( );
 | 
						||
 | 
						||
    _m->control( T_BOTTONE, DLG_ELABORA, 202 );
 | 
						||
    _m->begin( );
 | 
						||
    _m->prompt( 4, 1, "E~labora" );
 | 
						||
    _m->picture(TOOL_ELABORA);
 | 
						||
    _m->end( );
 | 
						||
  
 | 
						||
    _m->control( T_BOTTONE, DLG_PREVIEW, 202 );
 | 
						||
    _m->begin( );
 | 
						||
    _m->prompt( 5, 1, "Anteprima" );
 | 
						||
    _m->picture(TOOL_PREVIEW);
 | 
						||
    _m->end( );
 | 
						||
 | 
						||
    _m->control( T_BOTTONE, DLG_PRINT, 202 );
 | 
						||
    _m->begin( );
 | 
						||
    _m->prompt( 5, 1 );
 | 
						||
    _m->message( "EXIT,20082" );
 | 
						||
    _m->end( );
 | 
						||
 | 
						||
    _m->control( T_BOTTONE, DLG_CONFERMA, 202 );
 | 
						||
    _m->begin( );
 | 
						||
    _m->prompt( 6, 1, "~Conferma");
 | 
						||
		_m->picture(TOOL_OK);
 | 
						||
		_m->flag("D");
 | 
						||
    _m->end( );
 | 
						||
 | 
						||
    _m->control( T_BOTTONE, DLG_NULL, 202 );
 | 
						||
    _m->begin( );
 | 
						||
    _m->end( );
 | 
						||
 | 
						||
		_m->control( T_BOTTONE, DLG_FIRSTREC, 202 );
 | 
						||
    _m->begin( );
 | 
						||
    _m->prompt( 7, 1, "Primo");
 | 
						||
    _m->message( "EXIT,309" );
 | 
						||
		_m->picture(TOOL_FIRSTREC);
 | 
						||
    _m->end( );
 | 
						||
 | 
						||
		_m->control( T_BOTTONE, DLG_PREVREC, 202 );
 | 
						||
    _m->begin( );
 | 
						||
    _m->prompt( 8, 1, "Indietro");
 | 
						||
    _m->message( "EXIT,305" );
 | 
						||
		_m->picture(TOOL_PREVREC);
 | 
						||
    _m->end( );
 | 
						||
 | 
						||
		_m->control( T_BOTTONE, DLG_FINDREC, 202 );
 | 
						||
    _m->begin( );
 | 
						||
    _m->prompt( 9, 1, "Ri~cerca");
 | 
						||
    _m->message( "EXIT,339" );
 | 
						||
		_m->picture(TOOL_FINDREC);
 | 
						||
    _m->end( );
 | 
						||
 | 
						||
		_m->control( T_BOTTONE, DLG_NEXTREC, 202 );
 | 
						||
    _m->begin( );
 | 
						||
    _m->prompt( 10, 1, "Avanti");
 | 
						||
    _m->message( "EXIT,306" );
 | 
						||
		_m->picture(TOOL_NEXTREC);
 | 
						||
    _m->end( );
 | 
						||
 | 
						||
		_m->control( T_BOTTONE, DLG_LASTREC, 202 );
 | 
						||
    _m->begin( );
 | 
						||
    _m->prompt( 11, 1 , "Ultimo");
 | 
						||
    _m->message( "EXIT,310" );
 | 
						||
		_m->picture(TOOL_LASTREC);
 | 
						||
    _m->end( );
 | 
						||
 | 
						||
    _m->control( T_BOTTONE, DLG_NULL, 202 );
 | 
						||
    _m->begin( );
 | 
						||
    _m->end( );
 | 
						||
 | 
						||
    /* Occupa spazio prezioso
 | 
						||
    _m->control( T_BOTTONE, DLG_INFO, 202 );
 | 
						||
    _m->begin( );
 | 
						||
    _m->prompt(	12, 1, "Info");
 | 
						||
    _m->message( "EXIT,332" );
 | 
						||
		_m->picture(TOOL_INFO);
 | 
						||
    _m->end( );
 | 
						||
    */
 | 
						||
 | 
						||
    _m->control( T_BOTTONE, DLG_CANCEL, 202 );
 | 
						||
    _m->begin( );
 | 
						||
    _m->prompt( 13, 1, PR("Indietro") );
 | 
						||
    _m->message( "EXIT,27" );
 | 
						||
    _m->end( );
 | 
						||
 | 
						||
    /* Occupa spazio prezioso
 | 
						||
		_m->control( T_BOTTONE, DLG_QUIT, 202 );
 | 
						||
    _m->begin( );
 | 
						||
    _m->prompt( 14, 1 );
 | 
						||
    _m->message( "EXIT,20334" );
 | 
						||
    _m->end( );
 | 
						||
    */
 | 
						||
  
 | 
						||
    // End della toolbar
 | 
						||
    _m->end( );
 | 
						||
  
 | 
						||
 | 
						||
    do_events();
 | 
						||
 | 
						||
    // Header della prima pagina
 | 
						||
		const TString80 title(_pro->get("Title", "MAIN", _m->page(), TR("Testata")));
 | 
						||
 | 
						||
    _m->pagina( _m->page( ), title);
 | 
						||
 | 
						||
    TArray sortedgroups;
 | 
						||
    TString16 chiave, chiavegruppo;
 | 
						||
    last = _pro->get_int( "NGROUPS", "ORDINEGRUPPI" );
 | 
						||
    for( i = 1; i <= last; i ++ )
 | 
						||
    {      
 | 
						||
      chiave.format( "%d", i ); 
 | 
						||
      const TString key(_pro->get( chiave, "ORDINEGRUPPI" ));
 | 
						||
          
 | 
						||
      if (key.not_empty())
 | 
						||
      {
 | 
						||
        if (isdigit(key[0]))
 | 
						||
        {
 | 
						||
          chiavegruppo.GROUPKEY(atoi(key));
 | 
						||
          if( _gruppi.is_key( chiavegruppo ) )
 | 
						||
            sortedgroups.add( _gruppi[ (chiavegruppo) ] );
 | 
						||
        }
 | 
						||
        else 
 | 
						||
          sortedgroups.add(key);
 | 
						||
       }
 | 
						||
    }
 | 
						||
 | 
						||
    // Generazione  
 | 
						||
    // Scorro l'array dei gruppi, e ne creo una copia ordinata
 | 
						||
    // con solo i gruppi visibili
 | 
						||
 | 
						||
    TString80 message;
 | 
						||
  
 | 
						||
		_m->_sheet_generated = false;
 | 
						||
    message.format("Generazione profilo : %s", (const char *)profilo);
 | 
						||
    _bar = new TProgind(sortedgroups.items(), message, FALSE, TRUE);
 | 
						||
 | 
						||
    TGruppo* gruppo1 = (TGruppo*)sortedgroups.objptr(0);
 | 
						||
 | 
						||
    if (gruppo1->is_testata())
 | 
						||
      _m->line(0);
 | 
						||
    else
 | 
						||
      genera_testata_1();   
 | 
						||
 | 
						||
    sortedgroups.for_each( genera_gruppo );
 | 
						||
    delete _bar; _bar = NULL;
 | 
						||
    _m->end( );
 | 
						||
		if (!_m->_sheet_generated)
 | 
						||
		{
 | 
						||
      intestazione_pagina(TR("Righe"));
 | 
						||
			genera_sheet();
 | 
						||
		}
 | 
						||
 | 
						||
    // Generazione pagina dei piedi
 | 
						||
    {
 | 
						||
      TToken_string s(_pro->get("CAMPICALC", "MAIN"));
 | 
						||
      const bool usefiles = _tablefile.empty();
 | 
						||
  
 | 
						||
      if (s.not_empty())
 | 
						||
      {
 | 
						||
        intestazione_pagina(TR("Totali"));
 | 
						||
        TTable* frd = NULL;
 | 
						||
        
 | 
						||
        if (usefiles)
 | 
						||
          frd = new TTable( "%FRD" );
 | 
						||
        else
 | 
						||
          load_table();
 | 
						||
          
 | 
						||
        int nr = 1;
 | 
						||
        int id = 0;
 | 
						||
        for (const char * cp = s.get(0); cp && *cp; cp = s.get())
 | 
						||
        {
 | 
						||
          const TString16 codpiede(cp);
 | 
						||
          do_events();
 | 
						||
          if (usefiles)
 | 
						||
          {
 | 
						||
            frd->zero( );
 | 
						||
            frd->put( "CODTAB", codpiede );
 | 
						||
          }
 | 
						||
          _TableItem* t = (_TableItem*) _frdtable.objptr(codpiede);
 | 
						||
          if ( (usefiles && frd->read( ) == NOERR) || t != NULL )
 | 
						||
          {
 | 
						||
            int len  = usefiles ? frd->get_int( "I0") : t->i0();
 | 
						||
 | 
						||
            if (len <= 0 || len > 18)
 | 
						||
              len = 18;
 | 
						||
            id++;
 | 
						||
 | 
						||
            if( nr + MASK_FIRST_LINE > MAX_LINES_PER_PAGE )
 | 
						||
            {
 | 
						||
              _m->end( );
 | 
						||
              intestazione_pagina(TR("Totali"));
 | 
						||
              nr = 1;
 | 
						||
            }
 | 
						||
            
 | 
						||
            const bool currency = usefiles ? frd->get_bool("B0") : t->b0();
 | 
						||
            _m->control( currency ? T_CURRENCY : T_STRINGA, BASE_PIEDE + id, len);
 | 
						||
            _m->begin( );
 | 
						||
  
 | 
						||
            TString80 header(usefiles ? frd->get("S0") : t->s0()); 
 | 
						||
            header.left_just(58 - len);
 | 
						||
  
 | 
						||
            _m->prompt( 2, 7 + nr, header );
 | 
						||
            _m->field(codpiede);
 | 
						||
  
 | 
						||
            const bool importo = usefiles ? frd->get_bool("B1") : t->b1();
 | 
						||
            
 | 
						||
            TString16 flags("D");
 | 
						||
            if (!importo)
 | 
						||
              flags << "U";
 | 
						||
            _m->flag( flags );
 | 
						||
            TString16 driven; driven.format("DRIVENBY %d", F_CODVAL);
 | 
						||
            
 | 
						||
            _m->outline(driven);
 | 
						||
            _m->end( );
 | 
						||
            nr++;
 | 
						||
          }
 | 
						||
        }
 | 
						||
        _m->end( );
 | 
						||
        
 | 
						||
        if (frd != NULL)
 | 
						||
          delete frd;
 | 
						||
      }
 | 
						||
    }
 | 
						||
    _m->endmask( );
 | 
						||
  
 | 
						||
    // Stategia al 30/06/95
 | 
						||
    // Creo una maschera con tutte le colonne, poi, a RUNTIME,
 | 
						||
    // dal motore, nascondo e adatto le colonne.
 | 
						||
  
 | 
						||
    // Generazione maschera dello sheet
 | 
						||
    delete _m;
 | 
						||
    fcopy("verig00.msk", _mskname, TRUE);
 | 
						||
    delete _pro;
 | 
						||
  }
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
// Applicazione guscio
 | 
						||
 | 
						||
class TGenMask_application : public TSkeleton_application
 | 
						||
{
 | 
						||
  bool    _use_files;
 | 
						||
  TString _tablefile;
 | 
						||
  
 | 
						||
protected:
 | 
						||
  virtual bool use_files() const { return _use_files; }
 | 
						||
 | 
						||
public:
 | 
						||
  virtual void main_loop();
 | 
						||
  // @cmember Disabilita la verifica del modulo : essendo una anagrafica, va sempre abilitata
 | 
						||
  virtual bool check_autorization() const  {return FALSE;}
 | 
						||
  void set_files(const bool b = TRUE)      {_use_files = b;}
 | 
						||
  void set_tablefile(const TString& t)     {_tablefile = t;}
 | 
						||
};
 | 
						||
 | 
						||
 | 
						||
void TGenMask_application::main_loop( )
 | 
						||
{
 | 
						||
  TString profilo = argv(2);
 | 
						||
  profilo.lower();
 | 
						||
  if (profilo.find("ve0300a") >= 0)
 | 
						||
  {
 | 
						||
    return; //se trova ve0300a DEVE compilare SOLO il .ini, quindi DEVE uscire qui!!!! errore rilevato il 15/02/2009..
 | 
						||
            //..ovvero la prima volta che sono stati introdotti i title delle pagine dei profili standard 
 | 
						||
  }
 | 
						||
 | 
						||
  TMask_generator gen(_tablefile);
 | 
						||
  gen.genera(profilo);
 | 
						||
}
 | 
						||
 | 
						||
int ve0300( int argc, char* argv[])
 | 
						||
{
 | 
						||
  TGenMask_application a;
 | 
						||
 | 
						||
  a.set_files(TRUE);
 | 
						||
  TString tablefile;
 | 
						||
 | 
						||
  if (argc < 3)
 | 
						||
    fatal_box( Usage );
 | 
						||
 | 
						||
  if ( argc > 3)
 | 
						||
  {
 | 
						||
    if (strncmp(argv[3],"-f",2) == 0)
 | 
						||
    {
 | 
						||
      a.set_files(FALSE);
 | 
						||
      if (argv[3][2] > ' ')
 | 
						||
      {
 | 
						||
        tablefile  = argv[3];
 | 
						||
        tablefile.ltrim(2);
 | 
						||
      }
 | 
						||
      else
 | 
						||
        tablefile  = "vetabcom.txt";
 | 
						||
    }
 | 
						||
  }
 | 
						||
  a.set_tablefile(tablefile);
 | 
						||
  a.run ( argc, argv, "Generazione in corso ..." );
 | 
						||
  return 0;
 | 
						||
}
 |