Files correlati : Ricompilazione Demo : [ ] Commento : Gestione dell'attributo Read-Only anche negli spreadsheet. Eliminato file regexp.* dal progetto delle librerie Corretta gestione filtri nelle ricerche per descrizione git-svn-id: svn://10.65.10.50/trunk@13410 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			285 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			285 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| #ifndef __MSKSHEET_H
 | ||
| #define __MSKSHEET_H
 | ||
| 
 | ||
| #ifndef __ISAM_H
 | ||
| class TLocalisamfile;
 | ||
| class TRectype;
 | ||
| #endif
 | ||
| 
 | ||
| #ifndef __MASK_H
 | ||
| #include <mask.h>
 | ||
| #endif
 | ||
| 
 | ||
| #ifndef __RECARRAY_H
 | ||
| class TRecord_array;
 | ||
| #endif
 | ||
| 
 | ||
| #ifndef __RELATION_H
 | ||
| class TRelation;
 | ||
| #endif
 | ||
| 
 | ||
| #define FIRST_FIELD     101
 | ||
| #define K_ROWEDIT       ( K_CTRL + 'I' )
 | ||
| 
 | ||
| 
 | ||
| class TSheet_field;
 | ||
| 
 | ||
| // @doc EXTERNAL
 | ||
| 
 | ||
| //typedef (*ROWS_COMPARE_FUNCTION)(const TToken_string&, const TToken_string&);
 | ||
| typedef int (*ROWS_COMPARE_FUNCTION)(TSheet_field & s, int r1, int r2);
 | ||
| 
 | ||
| // @type SPREADSHEET_NOTIFY | Prototipo funzione che gestisce l'ingresso, l'uscita e la modifica da una riga dello sheet
 | ||
| typedef bool (*SPREADSHEET_NOTIFY)(TSheet_field& s, int r, KEY k);
 | ||
| 
 | ||
| // @type SHEET_USERGETPUT| Prototipo funzione utente che gestisce il caricamento/salvataggio dei dati dello sheet
 | ||
| typedef void (*SHEET_USERGETPUT)(TSheet_field &fld_righe, int item);
 | ||
| 
 | ||
| // @doc EXTERNAL
 | ||
| 
 | ||
| // @class TSheet_field | Classe per la gestione dei campi di uno spreadsheet
 | ||
| //
 | ||
| // @base public | TMask_field
 | ||
| class TSheet_field : public TLoadable_field
 | ||
| {
 | ||
|   // @author:(INTERNAL) Guido
 | ||
| 
 | ||
|   // @cfriend TSpreadsheet
 | ||
|   friend class TSpreadsheet;
 | ||
| 
 | ||
|   // @access:(INTERNAL) Private Member
 | ||
| 
 | ||
|   // @cmember:(INTERNAL) Indica se aggiungere a fondo dello spreadsheet o nella riga in cui ti trovi
 | ||
|   bool  _append;
 | ||
| 
 | ||
|   // @cmember:(INTERNAL) Separatore delle TToken_string
 | ||
|   char _separator;
 | ||
| 
 | ||
|   // @cmember:(INTERNAL) Flag di autoload
 | ||
|   bool _enable_autoload;
 | ||
|   // @cmember:(INTERNAL) Campi di input sulla maschera (key field names)
 | ||
|   TToken_string _file_k_names;
 | ||
|   // @cmember:(INTERNAL) Campi di input sulla maschera (key field ids)
 | ||
|   TToken_string _file_k_ids;  
 | ||
|   // @cmember:(INTERNAL) file delle righe
 | ||
|   TLocalisamfile * _sheetfile;  
 | ||
|   // @cmember:(INTERNAL) record array delle righe
 | ||
|   TRecord_array* _linee_rec;
 | ||
|   // @cmember:(INTERNAL) indicatore di record array gestito esternamente
 | ||
|   bool _external_record;
 | ||
|   // @cmember:(INTERNAL) funzioni utente per get tra record (array) e array righe
 | ||
|   SHEET_USERGETPUT _userput;
 | ||
|   // @cmember:(INTERNAL) funzioni utente per put tra righe e record (array)
 | ||
|   SHEET_USERGETPUT _userget;
 | ||
| 
 | ||
|   // @access Protected Member
 | ||
| protected:
 | ||
|   // @cmember:(INTERNAL) Identificatore dell' ultima colonna dello sheet
 | ||
|   short  _last_column_id;
 | ||
| 
 | ||
|   // @cmember Ritorna l'identificatore della classe
 | ||
|   virtual word class_id() const;
 | ||
|   
 | ||
|   virtual bool is_kind_of(word cid) const;
 | ||
| 
 | ||
|   // @cmember Gestisce la chiamata all'handler del campo
 | ||
|   virtual bool on_hit();
 | ||
|   
 | ||
|   // @cmember Legge la testata dello spreadsheet da <p scanner>
 | ||
|   virtual void parse_head(TScanner& scanner);
 | ||
|   // @cmember Legge gli item dello spreadsheet da <p scanner>
 | ||
|   virtual bool parse_item(TScanner& scanner);
 | ||
|   // @cmember Legge gli input (campi chiave) dello spreadsheet da <p scanner>
 | ||
|   void parse_input(TScanner& scanner);
 | ||
|   // @cmember Crea lo spreadsheet
 | ||
|   virtual void create(WINDOW parent);
 | ||
| 
 | ||
|   // @cmember Setta il focus sul campo
 | ||
|   virtual void highlight() const;
 | ||
|   // @cmember Ricopia i campi della maschera nel record <p n>-esimo
 | ||
|   virtual void mask2row(int n, TToken_string & rec);
 | ||
|   // @cmember Ricopia i campi del record <p n>-esimo nella maschera
 | ||
|   virtual void row2mask(int n, TToken_string & rec, int mode = 0x3);
 | ||
| 
 | ||
|   // @access Public Member
 | ||
| public:
 | ||
|   // @cmember Permette di mettere il focus su una cella
 | ||
|   void set_focus_cell(int riga, int colonna);
 | ||
| 
 | ||
|   // @cmember Gestisce la pressione del tasto (true se la gestione ha avuto successo)
 | ||
|   virtual bool on_key(KEY k);
 | ||
| 
 | ||
|   // @cmember Si, sono uno spreadsheet
 | ||
|   virtual bool is_sheet() const { return true; }
 | ||
|   virtual bool empty() const { return items() == 0; }
 | ||
| 
 | ||
|   // @cmember Legge automaticamente la linea dal record array assegnato
 | ||
|   virtual bool autoload_line(int i,const TRectype & rec);
 | ||
|   // @cmember Salva automaticamente la linea nel record array assegnato
 | ||
|   virtual bool autosave_line(int i,TRectype & rec);
 | ||
| 
 | ||
|   // @cmember Legge automaticamente lo sheet dal record array assegnato
 | ||
|   virtual bool autoload(const TRelation& r);
 | ||
|   // @cmember Salva automaticamente lo sheet nel record array assegnato
 | ||
|   virtual bool autosave(TRelation& r) ;
 | ||
|   // @cmember setta la funzione utente che Legge i campi dello sheet
 | ||
|   void set_userget(SHEET_USERGETPUT handler);
 | ||
|   // @cmember setta la funzione utente che scrive i campi dello sheet
 | ||
|   void set_userput(SHEET_USERGETPUT handler);
 | ||
|   // @cmember carica le chiavi del record array dello sheet
 | ||
|   TRectype * putkey(const TRelation& r);
 | ||
|   // @cmember restituisce il record array assegnato allo sheet
 | ||
|   TRecord_array * record() const {return _linee_rec;}
 | ||
|   // @cmember Imposta un record array esterno che contiene le righe dello sheet
 | ||
|   void set_lines_record(TRecord_array &);
 | ||
|   // @cmember Ritorna se il record assegnato <20> gestito esternamente (read/write/remove)
 | ||
|   bool external_record() const {return _external_record;}
 | ||
|   // @cmember Gestisce i campi della chiave
 | ||
|   void restart_key();
 | ||
|   TMask_field *get_key(TString & dbfieldname);
 | ||
| 
 | ||
|   // @cmember Ritorna una riga dello spreadsheet
 | ||
|   TToken_string& row(int n);
 | ||
|   // @cmember Ritorna un array con tutte le righe dello spreadsheet
 | ||
|   TString_array& rows_array() const;
 | ||
|   // @cmember Ritorna l'elemento <p c>-esimo della riga <p r>
 | ||
|   const char* cell(int r, int c)
 | ||
|   { const char*v=row(r).get(c);  return v ? v: " "; }
 | ||
| 
 | ||
|   char separator() const { return _separator; }
 | ||
| 
 | ||
|   // @cmember Ritorna la prima riga vuota nello spreadsheet
 | ||
|   int first_empty() const;
 | ||
|   // @cmember Ritorna il numero di righe presenti nello spreadsheet
 | ||
|   int items() const;
 | ||
|   // @cmember Ritorna il numero della riga corrente
 | ||
|   int selected() const;
 | ||
|   // @cmember Seleziona la riga <p r> come quella corrente
 | ||
|   void select(int r, bool scrollto = false);
 | ||
|   // @cmember Seleziona la riga <p r> e la colonna <p c> come quella corrente
 | ||
|   void select(int r, int c, bool scrollto = false);
 | ||
|   // @cmember Prenota la selezione della riga <p r>
 | ||
|   void post_select(int r);
 | ||
| 
 | ||
|   // @cmember Vuota tutto lo spreadsheet
 | ||
|   virtual void reset();
 | ||
|   // @cmember Abilita/disabilita tutto lo spreadsheet (vedi <mf TMask_field::enable>)
 | ||
|   virtual void enable(bool on);
 | ||
|   // @cmember Ritorna lo stato di abilitazione dello spreadsheet (vedi <mf TMask_field::enabled>)
 | ||
|   virtual bool enabled() const;
 | ||
|   
 | ||
|   // @cmember Aggiorna le righe dello spreadsheet con i valori salvati una volta che non ci sono
 | ||
|   //              piu' processi attivi
 | ||
|   void on_idle();
 | ||
| 
 | ||
|   // @cmember Elimina una o tutte le righe
 | ||
|   void destroy(int r = -1, bool update_sheet = true);
 | ||
|   // @cmember Inserisce una riga
 | ||
|   int insert(int r = -1, bool update_sheet = true, bool call_notify = false);
 | ||
|   // @cmember Forza l'aggiornamento dei dati della riga sullo schermo
 | ||
|   void force_update(int r = -1);
 | ||
| 
 | ||
|   // @cmember Ritorna la maschera corrispondente ad una riga dello spreadsheet
 | ||
|   virtual TMask& sheet_mask() const;
 | ||
|   // @cmember esegue la maschera di edit dello speadsheet;
 | ||
|   virtual KEY run_editmask(int n);
 | ||
|   // @cmember Setta il membro <p _notify> della classe <c TSpreadsheet>
 | ||
|   void set_notify(SPREADSHEET_NOTIFY n);
 | ||
|   
 | ||
|   // @cmember Trasforma l'identificatore di un campo <p cid> in un numero di colonna logica
 | ||
|   int cid2index(short cid) const;
 | ||
|   // @cmember Abilita/disabilita una colonna dello spreadsheet (vedi <mf TSpreadsheet::enable_column>)
 | ||
|   void enable_column(int col, bool on = true);
 | ||
|   
 | ||
|   // @cmember Abilita/disabilita una cella dello spreadsheet (vedi <mf TSpreadsheet::enable_cell>)
 | ||
|   void enable_cell(int row, int column, bool on = true);
 | ||
|   // @cmember Disabilta una cella dello spreadsheet (chiama <mf TSheet_field::enable>)
 | ||
|   void disable_cell(int row, int column)
 | ||
|   { enable_cell(row, column, false); }
 | ||
|   // @cmember Controlla se una cella e' disabilitata (vedi <mf TSpreadsheet::cell_disabled>)
 | ||
|   bool cell_disabled(int row, int column) const;
 | ||
|   // @cmember Controlla se una cella e' disabilitata (vedi <mf TSpreadsheet::cell_disabled>)
 | ||
|   bool cell_enabled(int row, int column) const;
 | ||
| 
 | ||
|   // @cmember Controlla se una colonna e' abilitata (vedi <mf TSpreadsheet::column_enabled>)
 | ||
|   bool column_enabled(int column) const;
 | ||
|   // @cmember Controlla se una colonna e' disabilitata  (vedi <mf TSpreadsheet::column_disabled>)
 | ||
|   bool column_disabled(int column) const;
 | ||
|   // @cmember Permette di visualizzare una colonna dello spreadsheet 
 | ||
|   void show_column(int col, bool on) const;
 | ||
|   // @cmember Permette di eliminare una colonna dallo spreadsheet
 | ||
|   void delete_column( const int col ) const;
 | ||
|   bool exist_column(const int col) const;
 | ||
|   // @cmember Sposta la colonna dalla posizione <p fromindex> alla posizione
 | ||
|   //          <p toindex>
 | ||
|   void move_column( const int fromindex, const int toindex ) const;
 | ||
|   // @cmember Permette di invertire la posizione di due colonne
 | ||
|   void swap_columns(const int fromid, const int toid) const;
 | ||
| 
 | ||
|   // @cmember Abilita/disabilita una riga dello spreadsheet (vedi <mf TSpreadsheet::enable_cell>)
 | ||
|   void enable_row(int row, bool on = true);
 | ||
|   // @cmember Disabilta una riga dello spreadsheet (chiama <mf TSheet_field::enable>)
 | ||
|   void disable_row(int row)
 | ||
|   { enable_row(row, false); }
 | ||
|   // @cmember Controlla se una riga e' disabilitata (tutte le sue celle sono disabilitate)
 | ||
|   bool row_enabled(int row);
 | ||
|   // @cmember Permette di invertire la posizione di due righe   
 | ||
|   void swap_rows( const int fromindex, const int toindex ) ;
 | ||
| 
 | ||
|   // @cmember Permette di ordinare le righe dello sheet
 | ||
|   void sort(ROWS_COMPARE_FUNCTION  = NULL);
 | ||
| 
 | ||
|   // @cmember Controlla se l'utente ha salvato la disposizione delle colonne
 | ||
|   bool user_saved_columns_order() const;
 | ||
| 
 | ||
|   // @cmember Setta la larghezza della colonna col numero di riga
 | ||
|   static int set_line_number_width(int width = 3);
 | ||
|   // @cmember Setta la larghezza della colonna
 | ||
|   void set_column_width( const int col, const int width ) const;
 | ||
|   // @cmember Setta il titolo della colonna
 | ||
|   void set_column_header( const int col, const TString& header ) const;
 | ||
|   // @cmember Getta il titolo della colonna
 | ||
|   const char* get_column_header(const int col) const;
 | ||
|   // @cmember Setta l'allineamento della colonna
 | ||
|   void set_column_justify(int col, bool right);
 | ||
|     // @cmember Setta l'altezza della riga
 | ||
|   void set_row_height( const int row, const int height );
 | ||
|   // @cmember Setta il colore dello sfondo e del testo di una o tutte le righe
 | ||
|   void set_back_and_fore_color(COLOR back, COLOR fore, int row, int col = -1);
 | ||
|   // @cmember Memorizza la disposizione delle colonne
 | ||
|   void save_columns_order();                   
 | ||
|   // @cmember Imposta la disposizione delle colonne        
 | ||
|   void set_columns_order(TToken_string* order);
 | ||
|   // @cmember Dispone le colonne come all'atto del caricamento
 | ||
|   void reset_columns_order();
 | ||
|   // @cmember Setta il member <p _append> con il valore di <p on>
 | ||
|   void set_append(bool on = true)
 | ||
|   { _append =  on;}
 | ||
|   // @cmember Ritorna il valore del membro <p _append>
 | ||
|   bool append() const
 | ||
|   { return _append;}
 | ||
|   // @cmember Funzione eseguita dopo ogni insert
 | ||
|   virtual void post_insert(int) { }
 | ||
| 
 | ||
|   // @cmember Esegue tutti i check iniziali sulla riga <p n>
 | ||
|   void check_row(int n, int mode = 0x3);
 | ||
| 
 | ||
|   // @cmember Trasferisce i valori dalla maschera alla riga <p n>
 | ||
|   void update_row(int n) { mask2row(n, row(n)); }
 | ||
|   // @cmember Trasferisce i valori dalla riga alla maschera <p n>
 | ||
|   void update_mask(int n) { row2mask(n, row(n)); }
 | ||
| 
 | ||
|   // @cmember Costruttore
 | ||
|   TSheet_field(TMask* m);
 | ||
|   // @cmember Distruttore
 | ||
|   virtual ~TSheet_field();
 | ||
| };
 | ||
| 
 | ||
| #define FOR_EACH_SHEET_ROW(__sheet, __r, __riga)             \
 | ||
|   FOR_EACH_ARRAY_ROW(__sheet.rows_array(), __r, __riga)                           
 | ||
| 
 | ||
| #define FOR_EACH_SHEET_ROW_BACK(__sheet, __r, __riga)        \
 | ||
|   FOR_EACH_ARRAY_ROW_BACK(__sheet.rows_array(), __r, __riga)                           
 | ||
|        
 | ||
| #endif
 |