#ifndef __MSKSHEET_H #define __MSKSHEET_H #ifndef __ISAM_H class TLocalisamfile; class TRectype; #endif #ifndef __MASK_H #include #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

virtual void parse_head(TScanner& scanner); // @cmember Legge gli item dello spreadsheet da

virtual bool parse_item(TScanner& scanner); // @cmember Legge gli input (campi chiave) dello spreadsheet da

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

-esimo virtual void mask2row(int n, TToken_string & rec); // @cmember Ricopia i campi del record

-esimo nella maschera virtual void row2mask(int n, TToken_string & rec, int mode = 0x3); // @cmember Permette di mettere il focus su una cella bool set_focus_cell(int riga, int colonna); //Copy Costructor per impedire la duplicazione accidentale degli sheet TSheet_field(const TSheet_field& s): TLoadable_field(&s.mask()){CHECK(false, "Can't duplicate TSheet_field");} // @access Public Member public: // @cmember Permette di mettere il focus su una cella bool set_focus_cell_id(long rec, short cid); // @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 è 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

-esimo della riga

const char* cell(int r, int c) const; 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

come quella corrente void select(int r, bool scrollto = false); // @cmember Seleziona la riga

e la colonna

come quella corrente void select(int r, int c, bool scrollto = false); // @cmember Prenota la selezione della riga

void post_select(int r); // @cmember Vuota tutto lo spreadsheet virtual void reset(); // @cmember Abilita/disabilita tutto lo spreadsheet (vedi ) virtual void enable(bool on); // @cmember Ritorna lo stato di abilitazione dello spreadsheet (vedi ) 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 alla riga corrente dello spreadsheet virtual TMask& sheet_mask() const; // @cmember Ritorna la maschera corrispondente ad una riga dello spreadsheet virtual TMask& sheet_row_mask(int row) const; // @cmember esegue la maschera di edit dello speadsheet; virtual KEY run_editmask(int n); // @cmember Setta il membro

della classe void set_notify(SPREADSHEET_NOTIFY n); // @cmember Trasforma l'identificatore di un campo

in un numero di colonna logica int cid2index(short cid) const; // @cmember Abilita/disabilita una colonna dello spreadsheet (vedi ) void enable_column(int col, bool on = true); // @cmember Abilita/disabilita una cella dello spreadsheet (vedi ) void enable_cell(int row, int column, bool on = true); // @cmember Disabilta una cella dello spreadsheet (chiama ) void disable_cell(int row, int column) { enable_cell(row, column, false); } // @cmember Controlla se una cella e' disabilitata (vedi ) bool cell_disabled(int row, int column) const; // @cmember Controlla se una cella e' disabilitata (vedi ) bool cell_enabled(int row, int column) const; // @cmember Controlla se una colonna e' abilitata (vedi ) bool column_enabled(int column) const; // @cmember Controlla se una colonna e' disabilitata (vedi ) 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

alla posizione //

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 ) void enable_row(int row, bool on = true); // @cmember Disabilta una riga dello spreadsheet (chiama ) 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 aggiorna la larghezza della colonna void update_column_width( const int col) 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(); // @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

con il valore di

void set_append(bool on = true) { _append = on;} // @cmember Permette di attivare/ disattivare l'auto append void set_auto_append(bool on = true); // @cmember Permette di attivare la navigazione tra due colonne con invio void set_nav_column(short firstcol, short lastcol); // @cmember Ritorna il valore del membro

bool append() const { return _append;} // @cmember Funzione eseguita dopo ogni insert virtual void post_insert(int) { } // @cmember Esegue tutti i check iniziali sulla riga

void check_row(int n, int mode = 0x3); // @cmember Trasferisce i valori dalla maschera alla riga

void update_row(int n) { mask2row(n, row(n)); } // @cmember Trasferisce i valori dalla riga alla maschera

void update_mask(int n) { row2mask(n, row(n)); } bool esporta() const; // @cmember Restituisce il numero della colonna corrente const int current_column() const; virtual bool error_box(const char* fmt, ...) const; // @cmember Costruttore TSheet_field(TMask* m); // @cmember Distruttore virtual ~TSheet_field(); }; #define FOR_EACH_SHEET_ROW(__sheet, __r, __riga) \ TString_array& sheetof##__riga = (__sheet).rows_array(); \ FOR_EACH_ARRAY_ROW(sheetof##__riga, __r, __riga) #define FOR_EACH_SHEET_ROW_BACK(__sheet, __r, __riga) \ TString_array& sheetof##__riga = (__sheet).rows_array(); \ FOR_EACH_ARRAY_ROW_BACK(sheetof##__riga, __r, __riga) #endif