array.cpp Corretti TPointer_array assoc.cpp Aggiuntta add() cfiles.c Corretto salvataggio pathpref.ini controls.cpp Aggiunto attributo di read_only default.url Aggiunto menu di edit ed help mask.cpp Gestione menu edit maskfld.cpp Gestione menu edit msksheet.cpp Gestione menu edit progind.cpp Aggiunto nuova scavatura 3D sheet.cpp viswin.cpp Aggiornati ID del menu edit window.cpp Corretta gestione voci di menu standard xvtility.cpp Aggiunto metodo per skippare gli errori di XVT git-svn-id: svn://10.65.10.50/trunk@5791 c028cbd2-c16b-5b4b-a496-9718f37d4682
242 lines
9.4 KiB
C++
Executable File
242 lines
9.4 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
|
||
|
||
// @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) 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 Permette di settare il valore del cambio del campo
|
||
virtual void exchange(bool show_value, const real& n);
|
||
// @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);
|
||
|
||
// @cmember Permette di mettere il focus su una cella
|
||
void set_focus_cell(int riga, int colonna);
|
||
|
||
// @access Public Member
|
||
public:
|
||
// @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; }
|
||
|
||
// @cmember Legge automaticamente la linea dal record array assegnato
|
||
virtual bool autoload_line(int i,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 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: " "; }
|
||
|
||
// @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 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 ) { return sheet_mask().run();}
|
||
// @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 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 eliminare una colonna dallo spreadsheet
|
||
void delete_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 Permette di invertire la posizione di due righe
|
||
void swap_rows( const int fromindex, const int toindex ) ;
|
||
|
||
// @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 Setta l'allineamento della colonna
|
||
void set_column_justify(int col, bool right);
|
||
// @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);
|
||
// @cmember Memorizza la disposizione delle colonne
|
||
void save_columns_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);
|
||
|
||
// @cmember Trasferisce i valori dalla maschera alla riga <p n>
|
||
void update_row(int n) { mask2row(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
|