Aggiunta documentazione in linea
git-svn-id: svn://10.65.10.50/trunk@1781 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
f40600a692
commit
3f2dcd785c
@ -23,6 +23,8 @@
|
||||
|
||||
HIDDEN TString256 fpark;
|
||||
|
||||
// @doc EXTERNAL
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// Field Flags
|
||||
///////////////////////////////////////////////////////////
|
||||
|
@ -14,104 +14,213 @@ const short FIRST_FIELD = 101;
|
||||
// TSpreadsheet
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
// @doc EXTERNAL
|
||||
|
||||
// @class TSpreadsheet | Classe per la creazione di uno spreadsheet all'interno
|
||||
// di una maschera
|
||||
//
|
||||
// @base public | TWindow
|
||||
class TSpreadsheet : public TWindow
|
||||
{
|
||||
// @author:(INTERNAL) Guido
|
||||
|
||||
// @cfriend TSheet_field
|
||||
friend class TSheet_field;
|
||||
|
||||
enum { ITF_CID = 0, LIST_CID = 1 };
|
||||
// @access Private Member
|
||||
|
||||
TString_array _str; // Array di TToken_strings
|
||||
enum {
|
||||
// @ccost ITF_CID | 0 | Identifica l'interfaccia dello spreadsheet
|
||||
ITF_CID = 0,
|
||||
// @ccost LIST_CID | 1 | Identifica il contenuto dello spreadsheet
|
||||
LIST_CID = 1 };
|
||||
|
||||
// @cmember Array di TToken_strings contenenti le righe
|
||||
TString_array _str;
|
||||
// @cmember Array delle colonne disattivate (solo visualizzazione)
|
||||
TBit_array _column_disabled;
|
||||
TArray _disabled; // Array di TBit_array
|
||||
// @cmember Array dell celle disattivate (solo visualizzazione)
|
||||
TArray _disabled;
|
||||
|
||||
// @cmember Maschera in cui e' contenuto lo spreadsheet
|
||||
TMask _mask;
|
||||
// @cmember Numero di colonne presenti nello spreadsheet
|
||||
int _columns;
|
||||
bool _firstfocus, _active;
|
||||
// @cmember Trucco per evitare che lo sheet prenda il focus tutte le volte che parte la maschera
|
||||
bool _firstfocus;
|
||||
// @cmember Indica se e' attivo lo spreadsheet
|
||||
bool _active;
|
||||
|
||||
XI_OBJ *_list, *_itf;
|
||||
// @cmember Puntatore al contenuto dello spreadsheet
|
||||
XI_OBJ *_list;
|
||||
// @cmember Puntatore all'interfaccia dello spreadsheet
|
||||
XI_OBJ *_itf;
|
||||
|
||||
|
||||
// @cmember Funzione per la gestione di una riga dello sheet (vedi <t SPREADSHEET_NOTIFY>)
|
||||
SPREADSHEET_NOTIFY _notify;
|
||||
// Matteo
|
||||
// @cmember Funzione per l'apertura della maschera di edit della riga
|
||||
// (vedi <t SPREADSHEET_GETMASK>)
|
||||
SPREADSHEET_GETMASK _getmask;
|
||||
|
||||
TSheet_field* _owner; // Owner
|
||||
// @cmember Campo che possiede lo spreadsheet
|
||||
TSheet_field* _owner;
|
||||
|
||||
TMask_field* _edit_field; // Current edit field
|
||||
int _cur_row, _cur_rec, _cur_col; // Current cell
|
||||
bool _row_dirty; // Current row changed
|
||||
bool _check_enabled; // Perform OFF_ROW and OFF_CELL checks
|
||||
// @cmember Campo corrente che si sta editando
|
||||
TMask_field* _edit_field;
|
||||
// @cmember Coordinata della riga della cella corrente
|
||||
int _cur_row;
|
||||
// @cmember Numero del record sul file al quale fa riferimento la cella corrente
|
||||
int _cur_rec;
|
||||
// @cmember Coordinata della colonna della cella corrente
|
||||
int _cur_col;
|
||||
// @cmember Indica se la riga corrente e' stat modificata
|
||||
bool _row_dirty;
|
||||
// @cmember Permette di gestire i check OFF_ROW e OFF_CELL
|
||||
bool _check_enabled;
|
||||
// @cmember Numero della riga che necessita aggiornamento (vengono aggiornate
|
||||
// nella <mf TSpreadsheet::on_idle>)
|
||||
int _needs_update;
|
||||
|
||||
// @cmember Inizializza lo spreadsheet
|
||||
void init();
|
||||
// @cmember Funzione che intercetta gli eventi dello spreadsheet
|
||||
friend void XVT_CALLCONV1 xiev_handler(XI_OBJ *itf, XI_EVENT *xiev);
|
||||
|
||||
// @access Protected Member
|
||||
protected:
|
||||
//@cmember Gestisce gli eventi delle celle (chiamata dal <mf TSpreadsheet::xiev_handler>)
|
||||
void list_handler(XI_EVENT *xiev);
|
||||
|
||||
// @cmember Ritorna il campo della maschera corrispondente alla cella dello
|
||||
// spreadsheet indicata da <p pos>
|
||||
TMask_field* col2field(int pos) const;
|
||||
// @cmember Ritorna il campo della maschera corrispondente alla cella dello
|
||||
// spreadsheet indicata da <p cell> (chiama <mf TMask::col2field>)
|
||||
TMask_field* cell2field(const XI_OBJ* cell) const;
|
||||
// @cmember Aggiorna il record sullo spreadsheet
|
||||
void update_rec(int rec);
|
||||
TMask_field* field(short id) const;
|
||||
|
||||
// @cmember Converte il numero del record nel corrispondente numero della riga
|
||||
int rec2row(int rec);
|
||||
// @cmember Converte il numero della riga riga nel corrispondente
|
||||
// numero della riga
|
||||
int row2rec(int& row);
|
||||
int set_pos(int row, int col) { _cur_col = col; _cur_row = row; return _cur_rec = row2rec(_cur_row); }
|
||||
// @cmember Setta la posizione (riga e colonna) del focus sullo spreadsheet.
|
||||
// Ritorna il numero del record corrente
|
||||
int set_pos(int row, int col)
|
||||
{ _cur_col = col; _cur_row = row; return _cur_rec = row2rec(_cur_row); }
|
||||
|
||||
// @cmember Chiama la funzione specificata con la <mf TSpreadsheet::set_notify>
|
||||
bool notify(int row, KEY k);
|
||||
// @cmember Chiama la funzione specificata con la <mf TSpreadsheet::set_notify>
|
||||
// ogni volta che c'e' una modifica nello spreadsheet
|
||||
void notify_change();
|
||||
// @cmember Permette di fare tutti gli aggiornamenti necessari (indicati in
|
||||
// <p _needs_update>)
|
||||
void on_idle();
|
||||
|
||||
// @access Public Member
|
||||
public:
|
||||
// @cmember Modifica a video la riga
|
||||
void update(int row);
|
||||
|
||||
TToken_string& row(int n) { return _str.row(n); }
|
||||
int add(const TToken_string& s) { return _str.add(s); }
|
||||
int add(TToken_string* s) { return _str.add(s); }
|
||||
// @cmember Ritorna il contenuto della riga <p n>-esima
|
||||
TToken_string& row(int n)
|
||||
{ return _str.row(n); }
|
||||
// @cmember Aggiunge una riga allo spreadsheet passata come putatore
|
||||
// (vedi <mf TArray::add>)
|
||||
int add(const TToken_string& s)
|
||||
{ return _str.add(s); }
|
||||
// @cmember Aggiunge una riga allo spreadsheet (vedi <mf TArray::add>)
|
||||
int add(TToken_string* s)
|
||||
{ return _str.add(s); }
|
||||
// @cmember Inserisce un record in una posizione stabilita
|
||||
int insert(int rec);
|
||||
// @cmember Elimina il record <p rec>
|
||||
bool destroy(int rec = -1);
|
||||
TString_array& rows_array() { return _str; }
|
||||
// @cmember Ritorna l'array di tutte le stringhe delle righe
|
||||
TString_array& rows_array()
|
||||
{ return _str; }
|
||||
|
||||
// @cmember Permette di mettere il focus su una cella
|
||||
void set_focus_cell(int riga, int colonna);
|
||||
// @cmember Abilita/disabilita tutto lo spreadsheet (vedi <mf TMask::activate>)
|
||||
void activate(bool on);
|
||||
// @cmember Permette di abilitare/disabiltare una colonna
|
||||
void enable_column(int col, bool on = TRUE);
|
||||
// Matteo
|
||||
void delete_column( const int col ) const;
|
||||
void move_column( const int fromindex, const int toindex ) 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 posiozne di due colonne
|
||||
void swap_columns(const int fromid, const int toid) const;
|
||||
void swap_rows( const int fromindex, const int toindex);
|
||||
// @cmember Permette di invertire la posiozne di due righe
|
||||
void swap_rows(const int fromindex, const int toindex);
|
||||
|
||||
void set_column_width( const int col, const int width ) const;
|
||||
void set_column_header( const int col, const TString& header ) const;
|
||||
// @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 Permette di abilitare/disabilitare una singola cella
|
||||
void enable_cell(int row, int column, bool on = TRUE);
|
||||
// @cmember Controlla se una cella e' disabilitata
|
||||
bool cell_disabled(int row, int column) const;
|
||||
|
||||
TMask& sheet_mask() { return _mask; }
|
||||
// @cmember Ritorna la maschera che appartiene allo spreadsheet
|
||||
TMask& sheet_mask()
|
||||
{ return _mask; }
|
||||
// @cmember Ritorna la maschera cui appartiene lo spreadsheet
|
||||
TMask& mask() const;
|
||||
|
||||
// @cmember Ricopia i campi della maschera nel record <p n>-esimo ed
|
||||
// aggiorna il display
|
||||
void mask2str(int n);
|
||||
// @cmember Ricopia i campi del record <p n>-esimo nella maschera ed
|
||||
// aggiorna il display
|
||||
void str2mask(int n);
|
||||
// @cmember Apre la maschera della riga <p n>-esima editando la riga
|
||||
KEY edit(int n);
|
||||
|
||||
int items() const { return _str.items(); }
|
||||
int selected() const { return _cur_rec; }
|
||||
// @cmember Ritorna il numero di righe dello sheet
|
||||
int items() const
|
||||
{ return _str.items(); }
|
||||
// @cmember Ritorna il record corrente
|
||||
int selected() const
|
||||
{ return _cur_rec; }
|
||||
// @cmember Seleziona una riga dandogli il focus
|
||||
void select(int r);
|
||||
int columns() const { return _columns; }
|
||||
// @cmember Ritorna il numero di colonne presenti enllo spreadsheet
|
||||
int columns() const
|
||||
{ return _columns; }
|
||||
|
||||
bool dirty() const { return _owner->dirty(); }
|
||||
void set_dirty(bool spork = TRUE) { _owner->set_dirty(spork); }
|
||||
// @cmember Controlla se e' stato modificato una cella dello spreadsheet
|
||||
bool dirty() const
|
||||
{ return _owner->dirty(); }
|
||||
// @cmember Permette di indicare se e' stata modificata una cella dello spreadsheet
|
||||
void set_dirty(bool spork = TRUE)
|
||||
{ _owner->set_dirty(spork); }
|
||||
|
||||
bool active() const { return _active; }
|
||||
// @cmember Ritorna il valore della variabile active
|
||||
bool active() const
|
||||
{ return _active; }
|
||||
// @cmember Ritorna se e' possibile lasciare il focus dallo spreadsheet (TRUE se e' possibile)
|
||||
bool test_focus_change();
|
||||
|
||||
// Matteo
|
||||
void set_getmask(SPREADSHEET_GETMASK n) { _getmask = n; }
|
||||
// @cmember Setta il membro <p _getmask> on il valore <p n>
|
||||
void set_getmask(SPREADSHEET_GETMASK n)
|
||||
{ _getmask = n; }
|
||||
|
||||
void set_notify(SPREADSHEET_NOTIFY n) { _notify = n; }
|
||||
// @cmember Setta il membro <p _notify> on il valore <p n>
|
||||
void set_notify(SPREADSHEET_NOTIFY n)
|
||||
{ _notify = n; }
|
||||
|
||||
TSpreadsheet(short x, short y, short dx, short dy, const char* maskname, int maskno,
|
||||
const char* head, WINDOW parent, TSheet_field* owner);
|
||||
// @cmember Costruttore
|
||||
TSpreadsheet(short x, short y, short dx, short dy, const char* maskname, int maskno, const char* head, WINDOW parent, TSheet_field* owner);
|
||||
// @cmember Distruttore
|
||||
virtual ~TSpreadsheet();
|
||||
};
|
||||
|
||||
@ -130,10 +239,17 @@ void TSpreadsheet::init()
|
||||
}
|
||||
|
||||
|
||||
TSpreadsheet::TSpreadsheet(short x, short y, short dx, short dy,
|
||||
const char* maskname, int maskno,
|
||||
const char* head, WINDOW parent,
|
||||
TSheet_field* o)
|
||||
// @mfunc Costruttore
|
||||
TSpreadsheet::TSpreadsheet(
|
||||
short x, // @parm Coordinata x (in caratteri) nel quale posizionare lo spreadsheet
|
||||
short y, // @parm Coordinata y (in caratteri) nel quale posizionare lo spreadsheet
|
||||
short dx, // @parm Larghezza (in caratteri) dello spreasheet
|
||||
short dy, // @parm Lunghezza (in caratteri) dello spreasheet
|
||||
const char* maskname, // @parm Nome del file della maschera
|
||||
int maskno, // @parm Numero identificativo della maschera nel file
|
||||
const char* head, // @parm Titolo della maschera
|
||||
WINDOW parent, // @parm Finestra alla quale appartiene lo spreadsheet
|
||||
TSheet_field* o) // @parm Indica il campo della maschera che contiene lo spreadsheet
|
||||
: _mask(maskname, maskno), _notify(NULL), _edit_field(NULL), _getmask( NULL ),
|
||||
_owner(o), _cur_row(0), _cur_col(0), _active(TRUE),
|
||||
_row_dirty(FALSE), _check_enabled(TRUE), _firstfocus(TRUE),
|
||||
@ -428,7 +544,15 @@ void TSpreadsheet::set_focus_cell(int riga, int colonna)
|
||||
}
|
||||
|
||||
|
||||
int TSpreadsheet::insert(int rec)
|
||||
// @mfunc Inserisce un record in una posizione stabilita
|
||||
//
|
||||
// @rdesc Ritorna la posizione nella quale e' stato inserito il record. Se non riesce ad inserirlo
|
||||
// ritorna -1.
|
||||
int TSpreadsheet::insert(
|
||||
int rec) // @parm Numero del record da inserire nello spreadsheet
|
||||
|
||||
// @comm Non e' possibile inserire un nuovo record nel caso nello spreadsheet vi siano
|
||||
// almeno 999 righe oppure se lo spreadsheet non e' attivo.
|
||||
{
|
||||
if (items() >= 999 || !_active)
|
||||
return -1;
|
||||
@ -453,7 +577,17 @@ int TSpreadsheet::insert(int rec)
|
||||
}
|
||||
|
||||
|
||||
bool TSpreadsheet::destroy(int rec)
|
||||
// @mfunc Elimina una riga
|
||||
//
|
||||
// @rdesc Ritorna il risultato dell'operazione:
|
||||
//
|
||||
// @flag TRUE | Se la riga esisteve e quindi e' stata eliminata
|
||||
// @flag FALSE | Se la riga non esisteve
|
||||
bool TSpreadsheet::destroy(
|
||||
int rec) // @parm Numero della riga da eliminare
|
||||
|
||||
// @comm Se il parametro <p rec> assume valore -1 vengono eliminate tutte le righe presenti
|
||||
// nello spreadsheet
|
||||
{
|
||||
bool ok = TRUE;
|
||||
|
||||
@ -477,7 +611,11 @@ bool TSpreadsheet::destroy(int rec)
|
||||
}
|
||||
|
||||
|
||||
void TSpreadsheet::update(int row)
|
||||
// @mfunc Modifica a video la riga
|
||||
void TSpreadsheet::update(
|
||||
int row) // @parm Numero della riga da modificare
|
||||
|
||||
// @comm Se il valore di <p row> e' minore di 0 viene aggiornato l'intero spreadsheet
|
||||
{
|
||||
if (row < 0)
|
||||
{
|
||||
@ -1109,7 +1247,14 @@ void TSpreadsheet::on_idle()
|
||||
}
|
||||
|
||||
// Certified 50%
|
||||
void TSpreadsheet::enable_cell(int row, int column, bool on)
|
||||
// @mfunc Permette di abilitare/disabilitare una singola cella
|
||||
void TSpreadsheet::enable_cell(
|
||||
int row, // @parm Riga della cella da abilitare/disabilitare
|
||||
int column, // @parm Colonna della cella da abilitare/disabilitare
|
||||
bool on) // @parm Indica l'operazione da effettuare sulla cella:
|
||||
//
|
||||
// @flag TRUE | La cella viene abilitata (default)
|
||||
// @flag FALSE| La cella viene disabilitata
|
||||
{
|
||||
TBit_array* ba = (TBit_array*)_disabled.objptr(row);
|
||||
if (ba == NULL)
|
||||
@ -1137,8 +1282,13 @@ void TSpreadsheet::enable_cell(int row, int column, bool on)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void TSpreadsheet::enable_column(int col, bool on)
|
||||
// @mfunc Permette di abilitare/disabiltare una colonna
|
||||
void TSpreadsheet::enable_column(
|
||||
int col, // @parm Numero della colonna da abilitare/disabilitare
|
||||
bool on) // @parm Indica l'operazione da effettuare sulla colonna:
|
||||
//
|
||||
// @flag TRUE | Abilita la colonna (default)
|
||||
// @flag FALSE| Disabilita la colonna
|
||||
{
|
||||
const bool change = _column_disabled[col] == on;
|
||||
_column_disabled.set(col, !on);
|
||||
@ -1262,6 +1412,12 @@ void TSpreadsheet::set_column_header(const int col, const TString& header) cons
|
||||
|
||||
|
||||
// Certified 99%
|
||||
// @mfunc Controlla se una cella e' disabilitata
|
||||
//
|
||||
// @rdesc Ritorna lo stato della cella indicate:
|
||||
//
|
||||
// @flag TRUE | Se la cella e' disabilitata
|
||||
// @flag FALSE| Se la cella e' abilitata
|
||||
bool TSpreadsheet::cell_disabled(int row, int column) const
|
||||
{
|
||||
TBit_array* ba = (TBit_array*)_disabled.objptr(row);
|
||||
@ -1493,7 +1649,15 @@ int TSheet_field::first_empty() const
|
||||
}
|
||||
|
||||
|
||||
TToken_string& TSheet_field::row(int n)
|
||||
// @mfunc Ritorna nuova riga dello spreadshhet
|
||||
//
|
||||
// @rdesc Ritorna la stringa letta
|
||||
TToken_string& TSheet_field::row(
|
||||
int n) // @parm Numero della riga da leggere/creare
|
||||
|
||||
// @comm Se il parametro <p n> e maggiore del numero massimo di righe presenti
|
||||
// o minore di 0 viene aggiunta una riga vuota in fondo allo spreadsheet
|
||||
// (viene chiamata la <mf TSpreadsheet::add>)
|
||||
{
|
||||
const int max = _sheet->items();
|
||||
if (n < 0 || n >= max)
|
||||
@ -1509,7 +1673,13 @@ TToken_string& TSheet_field::row(int n)
|
||||
}
|
||||
|
||||
|
||||
void TSheet_field::force_update(int r)
|
||||
// @mfunc Forza l'aggiornamento dei dati della riga sullo schermo
|
||||
void TSheet_field::force_update(
|
||||
int r) // @parm Numero della riga da aggiornare
|
||||
|
||||
// @comm Se il parametro <p r> assume valore -1 vengono aggiornate tutte le righe presenti
|
||||
// nello spreadsheet
|
||||
|
||||
{
|
||||
#if XVT_OS == XVT_OS_WIN
|
||||
_sheet->update(r);
|
||||
@ -1581,18 +1751,18 @@ void TSheet_field::delete_column( const int col ) const
|
||||
_sheet->delete_column( col );
|
||||
}
|
||||
|
||||
void TSheet_field::swap_columns(const int fromid, const int toid) const
|
||||
{
|
||||
_sheet->swap_columns(fromid, toid);
|
||||
}
|
||||
|
||||
void TSheet_field::move_column( const int fromindex, const int toindex ) const
|
||||
{
|
||||
_sheet->move_column(fromindex, toindex);
|
||||
}
|
||||
|
||||
void TSheet_field::swap_rows( const int fromindex, const int toindex)
|
||||
void TSheet_field::swap_columns(const int fromid, const int toid) const
|
||||
{
|
||||
_sheet->swap_columns(fromid, toid);
|
||||
}
|
||||
|
||||
void TSheet_field::swap_rows( const int fromindex, const int toindex)
|
||||
{
|
||||
_sheet->swap_rows(fromindex, toindex);
|
||||
}
|
||||
|
||||
|
@ -10,68 +10,127 @@
|
||||
class TSheet_field;
|
||||
class TSpreadsheet;
|
||||
|
||||
// @doc EXTERNAL
|
||||
|
||||
// @type SPREADSHEET_NOTIFY | 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 SPREADSHEET_GETMASK | Ritorna una maschera di edit diversa a seconda della riga
|
||||
typedef TMask* (*SPREADSHEET_GETMASK)( int numriga, TMask& fullmask, bool destroy );
|
||||
|
||||
|
||||
// @class TSheet_field | Classe per la gestione dei campi di uno spreadsheet
|
||||
//
|
||||
// @base public | TMask_field
|
||||
class TSheet_field : public TMask_field
|
||||
{
|
||||
TSpreadsheet* _sheet;
|
||||
TToken_string _head;
|
||||
bool _append;
|
||||
// @author:(INTERNAL) Guido
|
||||
|
||||
// @access Private Member
|
||||
|
||||
// @cmember Spreadsheet di apprtenenza dei campi
|
||||
TSpreadsheet* _sheet;
|
||||
// @cmember Intestazione di tutte le colonne
|
||||
TToken_string _head;
|
||||
// @cmember Indica se aggiungere a fondo dello spreadsheet o nella riga in cui ti trovi
|
||||
bool _append;
|
||||
|
||||
// @access Protected Member
|
||||
protected:
|
||||
// @cmember Ritorna l'identificatore della classe
|
||||
virtual word class_id() const;
|
||||
// @cmember Gestisce la chiamata all'handler del campo
|
||||
virtual bool on_hit();
|
||||
// @cmember Gestisce la pressione del tasto (TRUE se la gestione ha avuto successo)
|
||||
virtual bool on_key(KEY k);
|
||||
// @cmember Ritorna TRUE se il campo puo' lasciare il focus
|
||||
virtual bool test_focus_change();
|
||||
|
||||
// @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 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);
|
||||
|
||||
// @access Public Member
|
||||
public:
|
||||
TToken_string& row(int n); // Get/Create a new row
|
||||
TString_array& rows_array() const; // Get all rows
|
||||
const char* cell(int r, int c) { return row(r).get(c); } // Get item c of row r
|
||||
// @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 Ritrna l'elemento <p c>-esimo della riga <p r>
|
||||
const char* cell(int r, int c)
|
||||
{ return row(r).get(c); }
|
||||
|
||||
int first_empty() const; // First empty row
|
||||
int items() const; // Number of rows
|
||||
int selected() const; // Number of current row
|
||||
void select(int r); // Select row r as current
|
||||
// @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);
|
||||
|
||||
// @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 Aggiorna le righe dello spreadsheet con i valori salvati una volta che non ci sono
|
||||
// piu' processi attivi
|
||||
void on_idle();
|
||||
|
||||
void destroy(int r = -1); // Destroy row
|
||||
void force_update(int r = -1);// Update data/screen
|
||||
// @cmember Elimina una riga
|
||||
void destroy(int r = -1);
|
||||
// @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
|
||||
TMask& sheet_mask() const;
|
||||
// @cmember Setta il membro <p _notify> della classe <c TSpreadsheet>
|
||||
void set_notify(SPREADSHEET_NOTIFY n);
|
||||
// @cmember Setta il membro <p _set_getmask> della classe <c TSpreadsheet>
|
||||
void set_getmask(SPREADSHEET_GETMASK n);
|
||||
|
||||
// @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);
|
||||
void disable_cell(int row, int column) { enable_cell(row, column, FALSE); }
|
||||
// @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 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;
|
||||
void swap_rows( const int fromindex, const int toindex );
|
||||
// @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;
|
||||
void set_column_header( const int col, const TString& header ) const;
|
||||
void set_append(bool on = TRUE) { _append = on;}
|
||||
bool append() const { return _append;}
|
||||
// @cmember Setta il titolo della colonna
|
||||
void set_column_header( const int col, const TString& header ) const;
|
||||
// @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 mebro <p _append>
|
||||
bool append() const
|
||||
{ return _append;}
|
||||
|
||||
// @cmember Costruttore
|
||||
TSheet_field(TMask* m);
|
||||
// @cmember Distruttore
|
||||
virtual ~TSheet_field();
|
||||
};
|
||||
|
||||
|
@ -12,6 +12,8 @@
|
||||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
// @doc EXTERNAL
|
||||
|
||||
HIDDEN MENU_ITEM* find_menu_item(MENU_ITEM* menu, MENU_TAG id, bool ismbar)
|
||||
{
|
||||
MENU_ITEM* fnd = NULL;
|
||||
@ -72,38 +74,53 @@ HIDDEN void set_menu_item(MENU_ITEM& m, TToken_string& tt)
|
||||
///////////////////////////////////////////////////////////
|
||||
// TWindow_manager
|
||||
///////////////////////////////////////////////////////////
|
||||
// @C
|
||||
// Classe TWindow_manager
|
||||
//
|
||||
// @END
|
||||
|
||||
// @class TWindow_manager | Classe per la gestione di un array di finestre modali
|
||||
class TWindow_manager
|
||||
{
|
||||
// @DPRIV
|
||||
enum { MAX_WIN = 8 }; // Max number of modal windows
|
||||
// @author:(INTERNAL) Guido
|
||||
|
||||
TWindow* _window[MAX_WIN]; // Stack of active windows
|
||||
char _current; // Stack pointer
|
||||
void menu_enable(bool) const; // Abilita o disabilita il menu della task window
|
||||
// @access Private Member
|
||||
|
||||
// @ccost MAX_WIN | 8 | Numero massimo di finestre modali
|
||||
enum { MAX_WIN = 8 };
|
||||
|
||||
// @cmember Stack contenente la finestra attiva
|
||||
TWindow* _window[MAX_WIN];
|
||||
// @cmember Stack pointer
|
||||
char _current;
|
||||
// @cmember Permette di abilitare/disabilitare il menu' della task window (stesso
|
||||
// funzionamento della <mf TMask::enable>)
|
||||
void menu_enable(bool) const;
|
||||
|
||||
// @cmember Tiene sempre disponibile un file con un numero di handle inferiore a 20
|
||||
// (per sopperire ad una mancanza di XVT)
|
||||
FILE* _lowhandle;
|
||||
|
||||
public:
|
||||
// @FPUB
|
||||
TWindow_manager(); // Costruttore
|
||||
// @cmember Costruttore
|
||||
TWindow_manager();
|
||||
// @cmember Distruttore
|
||||
~TWindow_manager();
|
||||
|
||||
// @cmember Libera lo spazio per aprire il file (vedi <p _lowhandle>)
|
||||
void free_handle();
|
||||
// @cmember Occupa lo spazio per aprire il file (vedi <p _lowhandle>)
|
||||
void lock_handle();
|
||||
|
||||
// @cmember Registra la finestra <p m> corrente
|
||||
void reg(TWindow* m);
|
||||
// Registra la finestra corrente
|
||||
// @cmember De-registra la finestra corrente
|
||||
void unreg(const TWindow* m);
|
||||
// De-registra la finestra corrente
|
||||
|
||||
// @cmember Ritorna il puntatore alla finestra corrente
|
||||
TWindow* cur_win() const
|
||||
{ return (_current < 0) ? NULL : _window[_current]; }
|
||||
|
||||
TWindow* cur_win() const { return (_current < 0) ? NULL : _window[_current]; } // Ritorna il puntatore alla finestra corrente
|
||||
// @cmember Chiude tutte le finestre modali aperte
|
||||
void destroy();
|
||||
bool can_close() const;
|
||||
// @cmember Ritorna TRUE se la finestra corrente puo' essere chiusa
|
||||
bool can_close() const;
|
||||
} WinManager;
|
||||
|
||||
|
||||
@ -259,9 +276,14 @@ WINDOW cur_win()
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
// Setta l'immagine e le sue dimensioni (cancella immagine precedente)
|
||||
// Certified 99%
|
||||
XVT_IMAGE TImage::set(XVT_IMAGE i)
|
||||
// @mfunc Setta l'immagine e le sue dimensioni
|
||||
//
|
||||
// @rdesc Ritorna l'immagine stessa
|
||||
XVT_IMAGE TImage::set(
|
||||
XVT_IMAGE i) // @parm Immagine da settare
|
||||
|
||||
// @comm L'immagine precedente viene cancellata quando viene settata una nuova
|
||||
{
|
||||
if (_image)
|
||||
xvt_image_destroy(_image);
|
||||
@ -276,7 +298,9 @@ XVT_IMAGE TImage::set(XVT_IMAGE i)
|
||||
}
|
||||
|
||||
// Certified 100%
|
||||
XVT_IMAGE TImage::load(const char* n)
|
||||
// @mfunc Legge l'immagine dal file
|
||||
XVT_IMAGE TImage::load(
|
||||
const char* n) // @parm Nome del file contenente l'immagine
|
||||
{
|
||||
WinManager.free_handle();
|
||||
XVT_IMAGE i = xvt_image_read_bmp((char*)n);
|
||||
@ -332,7 +356,13 @@ TImage::~TImage()
|
||||
}
|
||||
|
||||
// Certified 100%
|
||||
void TImage::set_pos(int x, int y)
|
||||
// @mfunc Permette di settare la posizione della figura
|
||||
void TImage::set_pos(
|
||||
int x, // @parm Coordinata x dell'immagine da settare
|
||||
int y) // @parm Coordinata y dell'immagine da settare
|
||||
|
||||
// @comm Permette di aggiornare il mebro <p _dst> sommandogli i valori
|
||||
// passati con <p x> e <p y>
|
||||
{
|
||||
_dst = _src;
|
||||
xvt_rect_offset(&_dst, x, y);
|
||||
@ -345,7 +375,22 @@ void TImage::draw(WINDOW w) const
|
||||
}
|
||||
|
||||
// Certified 100%
|
||||
void TImage::draw(WINDOW w, int x, int y) const
|
||||
// @mfunc Permette di gestire il disegno dell'immagine sullo schermo
|
||||
void TImage::draw(
|
||||
WINDOW w, // @parm Immagine da disegnare
|
||||
int x, // @parm Coordinata x in cui disegnare l'immagine
|
||||
int y) const // @parm Coordinata y in cui disegnare l'immagine
|
||||
// @parm RCT& | _src | Rettangolo contenente l'immagine da disegnare
|
||||
// @parm RCT& | _dst | Rettangolo in cui disegnare l'immagine
|
||||
|
||||
// @syntax void draw(WINDOW w);
|
||||
// @syntax void draw(WINDOW w, int x, int y);
|
||||
// @syntax void draw(WINDOW w, const RCT& dst);
|
||||
// @syntax void draw(WINDOW w, const RCT& dst, const RCT& src);
|
||||
|
||||
// @comm Nel caso utilizzo l'ultima sintassi e' possibile disegnare solo una parte
|
||||
// dell'immagine, precisamente delle dimensioni <p _dst> se tale parametro e'
|
||||
// minore di <p _pst>
|
||||
{
|
||||
RCT dst = _src;
|
||||
xvt_rect_offset(&dst, x, y);
|
||||
@ -365,7 +410,9 @@ void TImage::draw(WINDOW w, const RCT& dst, const RCT& src) const
|
||||
}
|
||||
|
||||
// Certified 99%
|
||||
void TImage::set_palette(WINDOW w) const
|
||||
// @mfunc Fa corrispondere la palette della finestra a quella dell'immagine
|
||||
void TImage::set_palette(
|
||||
WINDOW w) const // @parm Finestra a cui settare la palette
|
||||
{
|
||||
XVT_PALETTE p = xvt_palet_create(XVT_PALETTE_USER, NULL);
|
||||
xvt_palet_add_colors_from_image(p, _image);
|
||||
@ -381,7 +428,11 @@ void TImage::set_clut(byte n, COLOR c)
|
||||
}
|
||||
|
||||
// Certified 99%
|
||||
// @mfunc Setta i colori dell'immagine in modo da renderlo trasparente
|
||||
void TImage::convert_to_default_colors()
|
||||
|
||||
// @comm Legge nell'immagine i colori CYAN e DARK_CYAN e li setta a seconda del colore
|
||||
// della finestra per fare in modo di rendere trasparenti tali colori.
|
||||
{
|
||||
if (MASK_BACK_COLOR != COLOR_DKCYAN && xvt_image_get_format(_image) == XVT_IMAGE_CL8)
|
||||
{
|
||||
@ -428,9 +479,19 @@ long XVT_CALLCONV1 TWindow::window_handler(WINDOW win, EVENT* ep)
|
||||
}
|
||||
|
||||
|
||||
WINDOW TWindow::create(short x, short y, short dx, short dy,
|
||||
const char* title, long flags, WIN_TYPE wt,
|
||||
WINDOW parent, int menu)
|
||||
// @mfunc Crea la finestra
|
||||
//
|
||||
// @rdesc Ritorna l'handle della finestra creata
|
||||
WINDOW TWindow::create(
|
||||
short x, // @parm Coordinata x della finestra
|
||||
short y, // @parm Coordinata y della finestra
|
||||
short dx, // @parm Larghezza della finestra
|
||||
short dy, // @parm Altezza della finestra
|
||||
const char* title, // @parm Titolo da assegnare alla finestra (default "")
|
||||
long flags, // @parm Flag della finestra (default WSF_NONE)
|
||||
WIN_TYPE wt, // @parm Tipo di finestra da creare (default W_DOC)
|
||||
WINDOW parent, // @parm Handler della finestra padre (default NULL_WIN)
|
||||
int menu) // @parm Menu' da assegnare alla finestra (default 0)
|
||||
{
|
||||
if (menu == 0) flags |= WSF_NO_MENUBAR;
|
||||
|
||||
@ -511,7 +572,12 @@ bool TWindow::can_be_closed() const
|
||||
return ok;
|
||||
}
|
||||
|
||||
// @mfunc Esegue la finestra
|
||||
//
|
||||
// @rdesc Ritorna l'ultimo tasto premuto nella finestra
|
||||
KEY TWindow::run()
|
||||
|
||||
// @comm Se la finestra non era aperta la apre in modo modale
|
||||
{
|
||||
const bool was_open = is_open();
|
||||
|
||||
@ -529,7 +595,10 @@ KEY TWindow::run()
|
||||
return last_key();
|
||||
}
|
||||
|
||||
void TWindow::handler(WINDOW win, EVENT* ep)
|
||||
// @mfunc Gestisce l'handler della finestra
|
||||
void TWindow::handler(
|
||||
WINDOW win, // @parm Finestra da gestire
|
||||
EVENT* ep) // @parm Evento da gestire nella finestra
|
||||
{
|
||||
switch(ep->type)
|
||||
{
|
||||
@ -599,7 +668,12 @@ void TWindow::maximize() const
|
||||
#endif
|
||||
}
|
||||
|
||||
void TWindow::activate(bool on)
|
||||
// @mfunc Attiva/disattiva la finestra
|
||||
void TWindow::activate(
|
||||
bool on) // @parm Indica l'operazione da svolgere sulla finestra:
|
||||
//
|
||||
// @flag TRUE | Abilita la finestra (default)
|
||||
// @flag FALSE | Disabilita la finestra
|
||||
{
|
||||
xvt_vobj_set_enabled(win(), _active = on);
|
||||
}
|
||||
@ -656,7 +730,12 @@ void TWindow::set_color(COLOR fore, COLOR back)
|
||||
}
|
||||
|
||||
|
||||
void TWindow::set_pen(COLOR color, int width, PAT_STYLE pat, PEN_STYLE style)
|
||||
// @mfunc Sceglie la penna da utilizzare nella finestra
|
||||
void TWindow::set_pen(
|
||||
COLOR color, // @parm Colore della penna
|
||||
int width, // @parm Larghezza del tratto (default 1)
|
||||
PAT_STYLE pat, // @parm Stile del pattern (default PAT_SOLID)
|
||||
PEN_STYLE style) // @parm Stile della penna (default P_SOLID)
|
||||
{
|
||||
CPEN pen;
|
||||
|
||||
@ -697,8 +776,16 @@ HIDDEN void swap(short& a, short& b)
|
||||
}
|
||||
|
||||
|
||||
void TWindow::frame(short left, short top, short right, short bottom,
|
||||
int flag)
|
||||
// @mfunc Disegna un rettangolo con la possibilita' di settare la penna e il draw_mode
|
||||
void TWindow::frame(
|
||||
short left, // @parm Lato sinistro del rettangolo
|
||||
short top, // @parm Lato superiore del rettangolo
|
||||
short right, // @parm Lato destro del rettangolo
|
||||
short bottom, // @parm Lato inferiore del rettangolo
|
||||
int flag) // @parm Flag da assegnare per il disegno del rettangolo
|
||||
|
||||
// @comm Se <p left> <gt> <p right> oppure <p top> <gt> <p bottom> i valori
|
||||
// vengono scambiati per permettere il disegno corretto del rettangolo
|
||||
{
|
||||
if (left > right) swap(left, right);
|
||||
if (top > bottom) swap(top, bottom);
|
||||
@ -750,15 +837,23 @@ void TWindow::invert_bar(short left, short top, short right, short bottom)
|
||||
frame(left, top, right, bottom, 5);
|
||||
}
|
||||
|
||||
void TWindow::set_opaque_text(bool o)
|
||||
// @mfunc Setta opaque_text
|
||||
void TWindow::set_opaque_text(
|
||||
bool o) // @parm Indica la modalita' di scrittura dell'opaque_text
|
||||
{
|
||||
// @comm Quando <p o> e' FALSE il testo viene scritto in modo trasparente
|
||||
DRAW_CTOOLS ct;
|
||||
xvt_dwin_get_draw_ctools(win(), &ct);
|
||||
ct.opaque_text = o;
|
||||
xvt_dwin_set_draw_ctools(win(), &ct);
|
||||
}
|
||||
|
||||
void TWindow::set_font(const char* family, int style, int dim)
|
||||
|
||||
// @mfunc Sceglie il font da utilizzare nella finestra
|
||||
void TWindow::set_font(
|
||||
const char* family, // @parm Famiglia di appartenenza del font (default XVT_FFN_FIXED)
|
||||
int style, // @parm Stile del font (default 0)
|
||||
int dim) // @parm Dimensione del font (default 0)
|
||||
{
|
||||
xvt_set_font(win(), family, style, dim);
|
||||
}
|
||||
@ -796,7 +891,12 @@ void TWindow::stringat(short x, short y, const char* str)
|
||||
xvt_dwin_draw_text(win(), pnt.h, pnt.v, (char *)str, -1);
|
||||
}
|
||||
|
||||
void TWindow::printat(short x, short y, const char* fmt, ...)
|
||||
// @mfunc Scrive il testo formattato nella finestra all posizione indicata
|
||||
void TWindow::printat(
|
||||
short x, // @parm Coordinata x della finestra in cui scrivere il testo
|
||||
short y, // @parm Coordinata y della finestra in cui scrivere il testo
|
||||
const char* fmt, // @parm Formato che deve essere dato al testo
|
||||
...) // @parmvar Uno o piu' parametri corrispondenti ai codici in <p fmt>
|
||||
{
|
||||
va_list argptr;
|
||||
va_start(argptr, fmt);
|
||||
@ -839,8 +939,18 @@ void TWindow::clear(COLOR color)
|
||||
void TWindow::set_mode(DRAW_MODE mode)
|
||||
{ xvt_dwin_set_draw_mode(win(), mode); }
|
||||
|
||||
|
||||
bool TWindow::add_menu(TString_array& menu, MENU_TAG id, bool force)
|
||||
// @mfunc Aggiunge voci di menu' durante l'esecuzione di una finestra
|
||||
//
|
||||
// @rdesc Ritorna se e' riuscito ad aggiungere la voce al menu':
|
||||
//
|
||||
// @flag TRUE | Se ha ggiunto la voce
|
||||
// @flag FALSE | Se non ha ggiunto la voce
|
||||
bool TWindow::add_menu(
|
||||
TString_array& menu, // @parm Array da aggiungere al menu'
|
||||
MENU_TAG id, // @parm Identificatore del menu' a cui aggiungere le voci
|
||||
bool force) // @parm Mai usato
|
||||
|
||||
// @comm Nel caso <p id> sia uguale a 0 la voce veine aggiunte nella barra dei menu'
|
||||
{
|
||||
CHECK(menu.items() > 0, "TWindow::add_menu: no menus to add");
|
||||
|
||||
@ -954,7 +1064,13 @@ void TScroll_window::set_scroll_max(long maxx, long maxy)
|
||||
}
|
||||
}
|
||||
|
||||
void TScroll_window::update_thumb(long x, long y)
|
||||
// @mfunc Aggiorna la scrollbar
|
||||
void TScroll_window::update_thumb(
|
||||
long x, // @parm Indica la posizione in x in cui spostare la finestra (default -1)
|
||||
long y) // @parm Indica la posizione in x in cui spostare la finestra (default -1)
|
||||
|
||||
// @comm Nel caso si voglia aggiornare solamente una coordinata l'altra dovra' essere
|
||||
// settata a -1
|
||||
{
|
||||
if (x >= 0 && x <= _max.x) _origin.x = x;
|
||||
if (y >= 0 && y <= _max.y) _origin.y = y;
|
||||
|
379
include/window.h
379
include/window.h
@ -15,254 +15,387 @@ void close_all_dialogs();
|
||||
bool can_close();
|
||||
WINDOW cur_win();
|
||||
|
||||
// @C
|
||||
// Classe TPoint
|
||||
// @END
|
||||
|
||||
// @N
|
||||
// Punto dello schermo
|
||||
// @END
|
||||
// doc EXTERNAL
|
||||
|
||||
//@class TPoint | Struttura per la definizione di un punto sullo schermo
|
||||
struct TPoint
|
||||
{
|
||||
// @DPUB
|
||||
long x, y;
|
||||
// Coordinate
|
||||
// @cmember Coordinata x del punto
|
||||
long x;
|
||||
// @cmember Coordinata y del punto
|
||||
long y;
|
||||
|
||||
// @FPUB
|
||||
TPoint(long sx = 0, long sy = 0) : x(sx), y(sy) {}
|
||||
// Costruttore
|
||||
TPoint(PNT pnt) : x(pnt.h/CHARX), y(pnt.v/CHARY) {}
|
||||
void set(long sx, long sy) { x = sx; y = sy; }
|
||||
void set(PNT pnt) { x = pnt.h/CHARX; y = pnt.v/CHARY; }
|
||||
TPoint& operator= (PNT pnt) { set(pnt); return *this; }
|
||||
TPoint& operator= (TPoint pnt) { set(pnt.x,pnt.y); return *this; }
|
||||
bool operator ==(const TPoint& p) { return p.x == x && p.y == y; }
|
||||
bool operator !=(const TPoint& p) { return p.x != x || p.y != y; }
|
||||
// @cmember Costruttore
|
||||
TPoint(long sx = 0, long sy = 0) : x(sx), y(sy)
|
||||
{}
|
||||
// @cmember Costruttore (occorre passare il punto)
|
||||
TPoint(PNT pnt) : x(pnt.h/CHARX), y(pnt.v/CHARY)
|
||||
{}
|
||||
// @cmember Setta le coordinate x e y del punto
|
||||
void set(long sx, long sy)
|
||||
{ x = sx; y = sy; }
|
||||
// @cmember Setta le coordinate x e y del punto
|
||||
void set(PNT pnt)
|
||||
{ x = pnt.h/CHARX; y = pnt.v/CHARY; }
|
||||
// @cmember Operatore di assegnamento tra punti
|
||||
TPoint& operator= (PNT pnt)
|
||||
{ set(pnt); return *this; }
|
||||
// @cmember Operatore di assegnamento tra punti
|
||||
TPoint& operator= (TPoint pnt)
|
||||
{ set(pnt.x,pnt.y); return *this; }
|
||||
// @cmember Confronta se due punti sono uguali (TRUE se uguali)
|
||||
bool operator ==(const TPoint& p)
|
||||
{ return p.x == x && p.y == y; }
|
||||
// @cmember Confronta se due punti sono diversi (TRUE se diversi)
|
||||
bool operator !=(const TPoint& p)
|
||||
{ return p.x != x || p.y != y; }
|
||||
};
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// TImage
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
// @class TImage | Classe per la gestione delle imagini a video
|
||||
//
|
||||
// @base public | TObject
|
||||
class TImage : public TObject
|
||||
{
|
||||
{
|
||||
// @access Private Member
|
||||
|
||||
// @cmember Immagine de gestire
|
||||
XVT_IMAGE _image;
|
||||
RCT _src, _dst;
|
||||
// @cmember Rettangolo originale (origine 0,0 e dimensioni originali) dell'immagine
|
||||
RCT _src;
|
||||
// @cmember Rettangolo di visualizzazione dell'immagine (dove mettere l'immagine)
|
||||
RCT _dst;
|
||||
|
||||
public:
|
||||
void set_palette(WINDOW w) const;
|
||||
// @access Public Member
|
||||
public:
|
||||
// @cmember Fa corrispondere la palette della finestra a quella dell'immagine
|
||||
void set_palette(WINDOW w) const;
|
||||
// @cmember Permette di settare la posizione della figura
|
||||
void set_pos(int x, int y);
|
||||
|
||||
void draw(WINDOW w) const ; // Draw at default position with default size
|
||||
void draw(WINDOW w, int x, int y) const; // Draw with default size at x,y
|
||||
void draw(WINDOW w, const RCT& dst) const; // Draw/resize
|
||||
// @cmember Disegna l'immagine nella poszione di default e nella dimensione
|
||||
// di defalut
|
||||
void draw(WINDOW w) const ;
|
||||
// @cmember Disegna l'immagine con dimensione default in un punto dello schermo
|
||||
void draw(WINDOW w, int x, int y) const;
|
||||
// @cmember Disegna/modifica l'immagine sullo schermo
|
||||
void draw(WINDOW w, const RCT& dst) const;
|
||||
// @cmember Disegna l'immagine sulla finestra
|
||||
void draw(WINDOW w, const RCT& dst, const RCT& src) const;
|
||||
|
||||
XVT_IMAGE set(XVT_IMAGE i);
|
||||
// @cmember Setta l'immagine e le sue dimensioni
|
||||
XVT_IMAGE set(XVT_IMAGE i);
|
||||
// @cmember Legge l'immagine dal file
|
||||
XVT_IMAGE load(const char* n);
|
||||
// @cmember Legge l'immagine dal file di risorse
|
||||
XVT_IMAGE load(short id);
|
||||
|
||||
virtual bool ok() const { return _image != NULL; }
|
||||
// @cmember Controlla che l'immagine sia un oggetto valido (diverso da NULL)
|
||||
virtual bool ok() const
|
||||
{ return _image != NULL; }
|
||||
|
||||
short width() const { return _src.right; }
|
||||
short height() const { return _src.bottom; }
|
||||
const RCT& rect() const { return _src; }
|
||||
// @cmember Ritorna la larghezza dell'immagine
|
||||
short width() const
|
||||
{ return _src.right; }
|
||||
// @cmember Ritorna l'altezza dell'immagine
|
||||
short height() const
|
||||
{ return _src.bottom; }
|
||||
// @cmember Ritorna il rettangolo dell'immagine originale
|
||||
const RCT& rect() const
|
||||
{ return _src; }
|
||||
|
||||
// @cmember Setta i colori dell'immagine in modo da renderlo trasparente
|
||||
void convert_to_default_colors();
|
||||
// @cmember Setta l'<p n>.esime entry della paletta al colore <p c>
|
||||
void set_clut(byte n, COLOR c);
|
||||
|
||||
TImage(const char* n);
|
||||
// @cmember Costruttore. Viene passato il nome del file
|
||||
TImage(const char* n);
|
||||
// @cmember Costruttore. Viene passato l'identificatore dell'immagine sul file di risorsa
|
||||
TImage(short id);
|
||||
// @cmember Costruttore. Viene passata l'immagine e le sue diemsioni
|
||||
TImage(const TImage& i, short width, short height);
|
||||
|
||||
// @cmember Distruttore
|
||||
virtual ~TImage();
|
||||
};
|
||||
|
||||
// @C
|
||||
// Classe TWindow
|
||||
//
|
||||
// @END
|
||||
|
||||
// @class TWindow | Classe per la definizione di una finestra generica
|
||||
class TWindow
|
||||
{
|
||||
// @author:(INTERNAL) Guido
|
||||
|
||||
// @cfriend TWindow_manager
|
||||
friend class TWindow_manager;
|
||||
|
||||
// @DPRIV
|
||||
static DRAW_CTOOLS _ct; // Set di drawing tools (xvttype.h)
|
||||
static bool _ctools_saved; // E' stata salvata _ct ?
|
||||
// @access PRovate Member
|
||||
|
||||
WINDOW _win; // Descrittore finestra
|
||||
KEY _lastkey; // Tasto di uscita
|
||||
// @cmember Set di drawing tools (definito in xvttype.h)
|
||||
static DRAW_CTOOLS _ct;
|
||||
// @cmember Indica se e' stato salvato il set di drawing tools
|
||||
static bool _ctools_saved;
|
||||
|
||||
// @FPRIV
|
||||
bool save_ctools(); // Compila la struct _ct con i valori correnti
|
||||
bool restore_ctools(); // Ripristina i valori DA _ct
|
||||
// @cmember Descrittore finestra
|
||||
WINDOW _win;
|
||||
// @cmember Codice del tasto di uscita
|
||||
KEY _lastkey;
|
||||
|
||||
// @cmember Compila la struttura <p _ct> con i valori correnti
|
||||
// (TRUE se la compilazione ha luogo)
|
||||
bool save_ctools();
|
||||
// @cmember Ripristina i valori dalla struttura <p _ct> (TRUE se i valori
|
||||
// vengono recuperati)
|
||||
bool restore_ctools();
|
||||
|
||||
// @access Protected Member
|
||||
protected:
|
||||
// @DPROT
|
||||
bool _open : 1; // Se la finestra e' aperta
|
||||
bool _modal : 1; // Se la finestra e' modale
|
||||
bool _active : 1; // Se la finestra e' abilitata
|
||||
bool _running : 1; // Se la finestra e' in esecuzione
|
||||
bool _pixmap : 1; // Se se le coordiante sono in pixel
|
||||
// @cmember Indica che la finestra e' aperta
|
||||
bool _open : 1;
|
||||
// @cmember Indica che la finestra e' modale
|
||||
bool _modal : 1;
|
||||
// @cmember Indica che la finestra e' abilitata
|
||||
bool _active : 1;
|
||||
// @cmember Indica che la finestra e' in esecuzione
|
||||
bool _running : 1;
|
||||
// @cmember Indica che le coordinate sono in pixel
|
||||
bool _pixmap : 1;
|
||||
|
||||
// @FPROT
|
||||
// @cmember Intercetta tutti i messaggi diretti alla finestra di XVT
|
||||
static long XVT_CALLCONV1 window_handler(WINDOW win, EVENT* ep);
|
||||
virtual WINDOW create(short x, short y, short dx, short dy,
|
||||
const char* title = "", long flags = WSF_NONE,
|
||||
WIN_TYPE rt = W_DOC, WINDOW parent = NULL_WIN, int menu = 0) ;
|
||||
// @cmember Crea la finestra
|
||||
virtual WINDOW create(short x, short y, short dx, short dy, const char* title = "", long flags = WSF_NONE, WIN_TYPE rt = W_DOC, WINDOW parent = NULL_WIN, int menu = 0) ;
|
||||
|
||||
void set_win(WINDOW w) { _win = w; } // Usare con cautela
|
||||
// @cmember Cambia l'handle della finestra di XVT (usare con cautela)
|
||||
void set_win(WINDOW w)
|
||||
{ _win = w; }
|
||||
|
||||
void set_modal(bool m) { _modal = m; } // Modifica il flag _modal
|
||||
// @cmember Permette di modificare il flag <p _modal>
|
||||
void set_modal(bool m)
|
||||
{ _modal = m; }
|
||||
|
||||
// @parm Ritorna l'handler della finestra padre
|
||||
WINDOW parent() const;
|
||||
|
||||
virtual void update() {} // E_UPDATE
|
||||
virtual bool on_key(KEY) { return TRUE; } // E_CHAR
|
||||
// @cmember Fa' l'update della finstra
|
||||
virtual void update()
|
||||
{}
|
||||
// @cmember Gestisce la pressione del tasto
|
||||
virtual bool on_key(KEY)
|
||||
{ return TRUE; }
|
||||
|
||||
// @cmember Converte le coordinate logiche (caratteri) in coordinate fisiche (pixel)
|
||||
virtual PNT log2dev(long x, long y) const;
|
||||
// @cmember Converte le coordinate fisiche (pixel) in coordinate logiche (caratteri)
|
||||
virtual TPoint dev2log(const PNT& p) const;
|
||||
|
||||
// @access Public Member
|
||||
public:
|
||||
// @FPUB
|
||||
TWindow(); // Costruttore
|
||||
// @cmember Costruttore
|
||||
TWindow();
|
||||
// @cemmerb Distruttore
|
||||
virtual ~TWindow();
|
||||
|
||||
virtual void handler(WINDOW win, EVENT* ep); // Handler finestra
|
||||
virtual void set_focus(); // Mette la finestra in primo piano
|
||||
virtual WINDOW win() const { return _win; } // Ritorna il descrittore della finestra
|
||||
// @cmember Gestisce l'handeler della finestra
|
||||
virtual void handler(WINDOW win, EVENT* ep);
|
||||
// @cmember Mette la finestra in primo piano
|
||||
virtual void set_focus();
|
||||
// @cmember Ritorna il descrittore della finestra
|
||||
virtual WINDOW win() const
|
||||
{ return _win; }
|
||||
|
||||
bool is_open() const { return _open; } // Ritorna _open
|
||||
bool is_modal() const { return _modal; } // Ritorna _modal
|
||||
bool is_running() const { return _running; } // Ritorna _running
|
||||
bool active() const { return _active; }
|
||||
// @cmember Ritorna TRUE se la finestra e' aperta
|
||||
bool is_open() const
|
||||
{ return _open; }
|
||||
// @cmember Ritorna TRUE se la finestra e' modale
|
||||
bool is_modal() const
|
||||
{ return _modal; }
|
||||
// @cmember Ritorna TRUE se la finestra e' in esecuzione
|
||||
bool is_running() const
|
||||
{ return _running; }
|
||||
// @cmember Ritorna TRUE se la finestra e' attiva
|
||||
bool active() const
|
||||
{ return _active; }
|
||||
|
||||
TPoint size() const; // Determina numero di righe e colonne nella finestra
|
||||
short rows() const { return (short)size().y; }// Ritorna numero di righe
|
||||
short columns() const { return (short)size().x; } // Ritorna numero di colonne
|
||||
// @cmember Determina numero di righe e colonne nella finestra
|
||||
TPoint size() const;
|
||||
// @cmember Ritorna il numero di righe della finestra
|
||||
short rows() const
|
||||
{ return (short)size().y; }
|
||||
// @cmember Ritorna il numero di colonnedella finestra
|
||||
short columns() const
|
||||
{ return (short)size().x; }
|
||||
|
||||
virtual void start_run() {}
|
||||
// @cmember Inizia l'esecuzione della finestra
|
||||
virtual void start_run()
|
||||
{}
|
||||
// @cmember Interrompe l'esecuzione della finestra
|
||||
virtual bool stop_run(KEY key);
|
||||
void force_update(); // Forza ridisegno della finestra
|
||||
// @cmember Forza ridisegno della finestra
|
||||
void force_update();
|
||||
|
||||
virtual void open(); // Mostra la finestra
|
||||
virtual void close(); // Nasconde la finestra
|
||||
virtual bool can_be_closed() const; // Puo' essere chiusa brutalmente?
|
||||
virtual void on_idle(); // Non c'e' piu' niente da fare!
|
||||
// @cmember Mostra la finestra
|
||||
virtual void open();
|
||||
// @cmember Nasconde la finestra
|
||||
virtual void close();
|
||||
// @cmember Indica se la finestra puo' essere chiusa brutalmente
|
||||
virtual bool can_be_closed() const;
|
||||
// @cmember Permette di fare tutti gli aggiornamenti necessari
|
||||
virtual void on_idle();
|
||||
|
||||
// @cmember Iconizza la finestra
|
||||
void iconize() const;
|
||||
// @cmember Massimizza la finestra
|
||||
void maximize() const;
|
||||
// @cmember Attiva/disattiva la finestra
|
||||
virtual void activate(bool = TRUE);
|
||||
void deactivate() { activate(FALSE); }
|
||||
// @cmember Disattiva la finestra (chiama <mf TWindow::activate>)
|
||||
void deactivate()
|
||||
{ activate(FALSE); }
|
||||
|
||||
void open_modal(); // Mostra la finestra modale
|
||||
void close_modal(); // Nasconde la finestra modale
|
||||
// @cmember Mostra la finestra modale
|
||||
void open_modal();
|
||||
// @cmember Nasconde la finestra modale
|
||||
void close_modal();
|
||||
|
||||
KEY run(); // Esegue la finestra
|
||||
KEY last_key() const { return _lastkey; } // Ritorna l'ultimo tasto
|
||||
// @cmember Esegue la finestra
|
||||
KEY run();
|
||||
// @cmember Ritorna l'ultimo tasto
|
||||
KEY last_key() const
|
||||
{ return _lastkey; }
|
||||
|
||||
// @cmember Permette di settare il titolo della finestra
|
||||
virtual void set_caption(const char* title);
|
||||
// @cmember Ritorna il titolo della finestra
|
||||
virtual const char* get_caption() const;
|
||||
|
||||
// Riempie la finestra con il colore in color
|
||||
// @cmember Riempie la finestra con il colore <p color>
|
||||
void clear(COLOR color);
|
||||
|
||||
// Setta il draw mode
|
||||
// @cmembr Setta il draw mode
|
||||
void set_mode(DRAW_MODE mode);
|
||||
|
||||
// Setta il colore
|
||||
// @cmember Setta il colore della finestra e dello sfondo
|
||||
void set_color(COLOR fore, COLOR back);
|
||||
|
||||
// Setta opaque_text. Quando e' FALSE il testo viene scritto in modo trasparente
|
||||
// @cmember Setta opaque_text
|
||||
void set_opaque_text(bool o);
|
||||
|
||||
// Sceglie penna con colore color eccetera
|
||||
// @cmember Sceglie la penna da utilizzare nella finestra
|
||||
void set_pen(COLOR color, int width = 1, PAT_STYLE pat = PAT_SOLID, PEN_STYLE st = P_SOLID);
|
||||
void hide_pen(); // Nasconde la penna
|
||||
void hide_brush(); // Nasconde il pennello
|
||||
void set_brush(COLOR color, PAT_STYLE = PAT_SOLID); // Sceglie pennello con colore color
|
||||
void set_font(const char* family = XVT_FFN_FIXED, int style = 0, int dim = 0); // Sceglie il font
|
||||
// @cmember Nasconde la penna
|
||||
void hide_pen();
|
||||
// @cmember Nasconde il pennello
|
||||
void hide_brush();
|
||||
// @cmember Sceglie il pennello da utilizzare nella finestra (vedi <mf TWindow::set_pen>)
|
||||
void set_brush(COLOR color, PAT_STYLE = PAT_SOLID);
|
||||
// @cmember Sceglie il font da utilizzare nella finestra
|
||||
void set_font(const char* family = XVT_FFN_FIXED, int style = 0, int dim = 0);
|
||||
|
||||
// Disegna un rettangolo con la possibilita' di settare la penna e il draw_mode
|
||||
// @cmember Disegna un rettangolo con la possibilita' di settare la penna e il draw_mode
|
||||
void frame(short left, short top, short right, short bottom, int flag);
|
||||
|
||||
// Queste funzioni chiamano tutte frame con diversi flag
|
||||
// @cmember Chiama <mf TWindow::frame> con il flag 2
|
||||
void rect(short left, short top, short right, short bottom);
|
||||
// @cmember Chiama <mf TWindow::frame> con il flag 1
|
||||
void bar(short left, short top, short right, short bottom);
|
||||
// @cmember Chiama <mf TWindow::frame> con il flag 5
|
||||
void invert_bar(short left, short top, short right, short bottom);
|
||||
|
||||
// @cmember Scrive una stringa nella finestra all posizione indicata
|
||||
void stringat(short x, short y, const char* str);
|
||||
void printat(short x, short y, const char* fmt, ...); // Scrive un testo nella finestra alla posizione indicata
|
||||
// @cmember Scrive il testo formattato nella finestra all posizione indicata
|
||||
void printat(short x, short y, const char* fmt, ...);
|
||||
|
||||
void line(short x0, short y0, short x1, short y1); // Disegna una linea nella finestra
|
||||
// @cmember Disegna una linea nella finestra
|
||||
void line(short x0, short y0, short x1, short y1);
|
||||
// @cmember Disegna una icona nella finestra
|
||||
void icon(short x0, short y0, int iconid = -1);
|
||||
|
||||
// menu runtime interface
|
||||
// @cmember Aggiunge voci di menu' durante l'esecuzione di una finestra
|
||||
bool add_menu(TString_array& menu, MENU_TAG id = 0, bool force = TRUE);
|
||||
// @cmember Rimuove il menu' runtime dalla finestra
|
||||
bool remove_menu(MENU_TAG id);
|
||||
};
|
||||
|
||||
// @class TTemp_window | Classe per la definizione di finestre temporanee
|
||||
//
|
||||
// @base public | TWindow
|
||||
class TTemp_window : public TWindow
|
||||
{
|
||||
// @author:(INTERNAL) Guido
|
||||
|
||||
// @access Public Member
|
||||
public:
|
||||
// @cmember Costruttore
|
||||
TTemp_window(WINDOW w);
|
||||
// @cmember Distruttore
|
||||
virtual ~TTemp_window();
|
||||
};
|
||||
|
||||
// @C
|
||||
// Classe TScroll_window : public TWindow
|
||||
//
|
||||
// Finestra con scrollbar
|
||||
//
|
||||
// @END
|
||||
|
||||
// @class TTemp_window | Classe per la definizione di finestre con scrollbar
|
||||
//
|
||||
// @public base | TWindow
|
||||
class TScroll_window : public TWindow
|
||||
{
|
||||
|
||||
// @DPRIV
|
||||
// @uthor:(INTERNAL) Guido
|
||||
|
||||
// @access Private Member
|
||||
|
||||
// @cmember Posizione attuale della scrollbar
|
||||
TPoint _origin;
|
||||
// @cmember Massima lunghezza della scrollbar
|
||||
TPoint _max;
|
||||
// @cmember Utilizzato per finestre molto grosse, per poter gestire l-intera finestra
|
||||
short _shift;
|
||||
|
||||
// @cmember Indica se sommare (TRUE) o no alle coordinate attuali le coordinate passate
|
||||
bool _autoscroll : 1;
|
||||
// @cmember Indica che la finestra ha la barra di scorrimento orizzontale
|
||||
bool _has_hscroll : 1;
|
||||
// @cmember Indica che la finestra ha la barra di scorrimento verticale
|
||||
bool _has_vscroll : 1;
|
||||
|
||||
// @access Protected Member
|
||||
protected:
|
||||
// @cmember Crea la finestra (vedi <mf TWindow::create>)
|
||||
virtual WINDOW create(short x, short y, short dx, short dy, const char* title = "", long flags = WSF_NONE, WIN_TYPE rt = W_DOC, WINDOW parent = NULL_WIN, int menu = 0) ;
|
||||
|
||||
// @FPROT
|
||||
virtual WINDOW create(short x, short y, short dx, short dy,
|
||||
const char* title = "", long flags = WSF_NONE,
|
||||
WIN_TYPE rt = W_DOC, WINDOW parent = NULL_WIN,
|
||||
int menu = 0) ; // Crea la finestra
|
||||
|
||||
// @cmember Converte le coordinate logiche (caratteri) in coordinate fisiche (pixel)
|
||||
virtual PNT log2dev(long x, long y) const;
|
||||
// @cmember Gestice la pressione del tasto
|
||||
virtual bool on_key(KEY key);
|
||||
|
||||
// @access Public Member
|
||||
public:
|
||||
// @FPUB
|
||||
|
||||
// @cmember Costruttore
|
||||
TScroll_window();
|
||||
// Costruttore
|
||||
|
||||
// @cmember Gestisce l'handler della finestra (vedi <mf TWindow::handler>)
|
||||
virtual void handler(WINDOW win, EVENT* ep);
|
||||
|
||||
// @cmember Setta punto di massimo scroll
|
||||
void set_scroll_max(long maxx, long maxy);
|
||||
// Setta punto di massimo scroll
|
||||
// @cmember Aggiorna la scrollbar
|
||||
void update_thumb(long x = -1, long y = -1);
|
||||
// Aggiorna la scrollbar
|
||||
|
||||
void autoscroll(bool on) { _autoscroll = on; }
|
||||
// Setta autoscroll
|
||||
// @cmember Setta il member <p _autoscroll>
|
||||
void autoscroll(bool on)
|
||||
{ _autoscroll = on; }
|
||||
|
||||
bool autoscrolling() const { return _autoscroll; }
|
||||
// @cmember Ritorna il membro <p _autoscroll>
|
||||
bool autoscrolling() const
|
||||
{ return _autoscroll; }
|
||||
|
||||
const TPoint& origin() const { return _origin; }
|
||||
// Ritorna punto origine
|
||||
const TPoint& range() const { return _max; }
|
||||
// Ritorna punto massimo
|
||||
// @cmember Ritorna il punto di origine
|
||||
const TPoint& origin() const
|
||||
{ return _origin; }
|
||||
// @cmember Ritorna il punto massimo
|
||||
const TPoint& range() const
|
||||
{ return _max; }
|
||||
};
|
||||
|
||||
#endif // __WINDOW_H
|
||||
|
Loading…
x
Reference in New Issue
Block a user