Files correlati : Ricompilazione Demo : [ ] Commento : Aggiunte utili per gestione dizionario assoc.cpp Aggiunta possibilita' di selezionare un elemento causale di un assoc controls.cpp Corretta gestione scrollbar dei listbox diction.cpp Migliorata selezione caratteri da trimmare dalle traduzioni isam.cpp Corretto azzeramento dei memo (non azzerava il TString_array corrispondente) msksheet.cpp Resa personalizzabile la larghezza della colonna col numero di riga netsock.cpp Migliorata gestione "a capo" in protocollo soap progind.cpp Corretto posizionamento progind sovrapposte relapp.cpp Cambiato un messaggio di richiesta annullamento git-svn-id: svn://10.65.10.50/trunk@11651 c028cbd2-c16b-5b4b-a496-9718f37d4682
282 lines
11 KiB
C++
Executable File
282 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 (*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; }
|
||
|
||
// @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 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 ) { 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 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 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
|