campo-sirio/include/msksheet.h
guy 6bac6177c4 Patch level : 2.0 nopatch
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
2003-12-03 09:41:16 +00:00

282 lines
11 KiB
C++
Executable File
Raw Blame History

#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