Aggiunta documentazione in linea

git-svn-id: svn://10.65.10.50/trunk@1781 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
andrea 1995-09-05 10:45:24 +00:00
parent f40600a692
commit 3f2dcd785c
5 changed files with 709 additions and 229 deletions

View File

@ -23,6 +23,8 @@
HIDDEN TString256 fpark;
// @doc EXTERNAL
///////////////////////////////////////////////////////////
// Field Flags
///////////////////////////////////////////////////////////

View File

@ -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);
}

View File

@ -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();
};

View File

@ -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;

View File

@ -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