Aggiunti campi memo e zoom

git-svn-id: svn://10.65.10.50/trunk@2196 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
matteo 1995-11-22 13:51:52 +00:00
parent 588c70089f
commit 5508be2558
4 changed files with 224 additions and 74 deletions

View File

@ -935,6 +935,7 @@ bool TMask::on_dirty(TMask_field&)
TMask_field* TMask::parse_field(TScanner& scanner)
{
if (scanner.key() == "ST") return new TEdit_field(this);
if (scanner.key() == "ZO") return new TZoom_field(this);
if (scanner.key() == "NU") return new TReal_field(this);
if (scanner.key() == "DA") return new TDate_field(this);
if (scanner.key() == "BO") return new TBoolean_field(this);

View File

@ -95,7 +95,7 @@ protected:
// @cmember Ritorna la finestra della pagina corrente (Usare con attenzione)
WINDOW win() const
{ return _page < 0 ? _pagewin[0] : _pagewin[_page]; }
// @cmember Ritorna il numero di campi nella finestra
int find_field_win(WINDOW win) const;
@ -204,10 +204,6 @@ public:
virtual void close();
// @cmember Permette di attivare/disattivare tutta la pagina
virtual void activate(bool on = TRUE);
// @cmember Ritorna la finestra della toolbar
WINDOW toolwin() const
{ return _pagewin[MAX_PAGES]; }
// @cmember Converte un identificatore di campo nella sua posizione
int id2pos(short id) const;
@ -223,16 +219,15 @@ public:
TEdit_field& efield(short id) const;
// @cmember Setta il campo con una stringa
void set(short fld_id, const char* str, bool hit=FALSE);
// @cmember Setta il campo con un valore intero
void set(short fld_id, long num, bool hit=FALSE);
virtual void set(short fld_id, const char* str, bool hit=FALSE);
// @cmember Setta il campo con un reale
void set(short fld_id, const real& num, bool hit=FALSE);
// @cmember Setta il campo con una data
void set(short fld_id, const TDate& day, bool hit=FALSE);
// @cmember Setta il campo con un valore
void set(short fld_id, long num, bool hit=FALSE);
// @cmember Ritorna il contenuto del campo <p fld_id> sotto forma di stringa
const TString& get(short fld_id) const;
virtual const TString& get(short fld_id) const;
// @cmember Ritorna il contenuto del campo <p fld_id> sotto forma di long
long get_long(short fld_id) const;
// @cmember Ritorna il contenuto del campo <p fld_id> sotto forma di int
@ -250,10 +245,9 @@ public:
void move_focus_field(int num);
// @cmember Setta il focus al campo la cui finestra e' <p win>
void set_focus_win(WINDOW win, bool force);
// @cmember Ritorna il controllo che possiede il focus
TMask_field& focus_field() const
{ return fld(_focus);}
// @cmember Ritorna il numero del controllo che possiede il focus
TMask_field& focus_field() const
{ return fld(_focus); }
// @cmember Disabilita la lettura dei check della maschera
void disable_starting_check()
{ _should_check = FALSE;}
@ -267,7 +261,7 @@ public:
void on_firm_change();
// @cmember Abilita/disabilita un campo
void enable(short fld_id, bool on = TRUE);
virtual void enable(short fld_id, bool on = TRUE);
// @cmember Disabilita un campo (chiama <mf TMask::enable>)
void disable(short fld_id)
{ enable(fld_id, FALSE); }
@ -298,7 +292,7 @@ public:
bool key_valid(int key) const;
// @cmember Permette di mostrare/nascondere un campo
void show(short fld_id = -1, bool on = TRUE);
virtual void show(short fld_id = -1, bool on = TRUE);
// @cmember Permette di nascondere un campo (chiama <mf TMask::show>)
void hide(short fld_id = -1)
{ show(fld_id, FALSE); }
@ -318,7 +312,7 @@ public:
// @cmember Permette di mandare un tasto ad un campo
void send_key(KEY key, short id, TMask_field* from = NULL);
// @cmember Permette di mandare un handler ad un controllo
void set_handler(short fld_id, CONTROL_HANDLER handler);
virtual void set_handler(short fld_id, CONTROL_HANDLER handler);
// @cmember Permette di mandare un handler ad una maschera
void set_handler(MASK_HANDLER handler);
// @cmember Permette di settare il nome del file di salvataggio
@ -364,6 +358,11 @@ public:
// @cmember Viene eseguita se il campo viene modificato???
virtual bool on_dirty(TMask_field& c );
// @cmember Ritorna la finestra della toolbar
WINDOW toolwin() const
{ return _pagewin[MAX_PAGES]; }
};

View File

@ -3521,8 +3521,9 @@ void TGroup_field::set_field_data(const char* data)
// TMemo_field
///////////////////////////////////////////////////////////
TMemo_field::TMemo_field(TMask* mask) : TMask_field(mask), _te(BAD_TXEDIT)
{}
TMemo_field::TMemo_field(TMask* mask) : TMask_field(mask), _te(BAD_TXEDIT), _data( "", '\n' )
{
}
TMemo_field::~TMemo_field()
{
@ -3548,7 +3549,7 @@ void TMemo_field::create(WINDOW parent)
wd.text = NULL;
wd.units = U_PIXELS;
wd.v.tx.attrib = TX_NOMENU | TX_BORDER | TX_AUTOVSCROLL | TX_WRAP;
wd.v.tx.font_id = xvt_dwin_get_font(win());
wd.v.tx.font_id = xvt_dwin_get_font(TASK_WIN);
wd.v.tx.margin = wd.rct.right - wd.rct.left;
wd.v.tx.limit = 256;
wd.v.tx.tx_id = dlg();
@ -3558,10 +3559,6 @@ void TMemo_field::create(WINDOW parent)
enable_default(); // Setta colori default
}
void TMemo_field::set_back_color(COLOR) const
{
}
void TMemo_field::highlight() const
{
xvt_tx_set_active(_te);
@ -3574,13 +3571,13 @@ bool TMemo_field::on_key(KEY k)
void TMemo_field::enable(bool on)
{
TMask_field::enable(on);
TMask_field::enable( TRUE );
unsigned attr = xvt_tx_get_attr(_te);
if (on)
{
xvt_tx_set_colors(_te, NORMAL_COLOR, COLOR_BLACK, NORMAL_BACK_COLOR);
attr &= ~TX_READONLY;
attr &= ~TX_READONLY;
}
else
{
@ -3595,55 +3592,160 @@ void TMemo_field::show(bool on)
TMask_field::show(on);
}
bool TMemo_field::autoload(const TRelation* r)
/*
bool TMemo_field::autoload(const TRelation* r)
{
const TFieldref* f = field();
xvt_tx_clear(_te);
if (f != NULL)
{
TToken_string data( r->lfile( f->file( ) ).get( f->name( ) ), '\n' );
xvt_tx_suspend(_te);
for (T_LNUM i = 0; i < (T_LNUM)data.items( ); i++)
xvt_tx_add_par(_te, i, ( char * )data.get( i ) );
xvt_tx_resume(_te);
return i > 0;
}
return FALSE;
}
bool TMemo_field::autosave(TRelation* r) const
{
const TFieldref* f = field();
if (dirty() && f != NULL)
{
const T_PNUM num_par = xvt_tx_get_num_pars(_te);
TToken_string data( "", '\n' );
TString par(256);
TString256 line;
for (T_PNUM p = 0; p < num_par; p++)
{
par.cut(0);
const T_LNUM lines = xvt_tx_get_num_par_lines(_te, p);
for (T_LNUM l = 0; l < lines; l++)
{
unsigned len;
xvt_tx_get_line(_te, p, A_LOCK, l, &len);
const char* s = xvt_tx_get_line(_te, p, A_GET, l, &len);
CHECK(s, "Null memo line");
line.strncpy(s, len);
xvt_tx_get_line(_te, p, A_UNLOCK, l, &len);
if (par.not_empty()) par << ' ';
par << line;
}
data.add(par);
}
r->lfile(f->file()).put( f->name(), data );
return num_par > 0;
}
return FALSE;
}
*/
void TMemo_field::set_window_data(const char* data)
{
const TFieldref* f = field();
TToken_string realdata( data, '\n' );
xvt_tx_clear(_te);
if (f != NULL)
{
TTextfile txt;
r->lfile(f->file()).get_memo(f->name(), txt);
xvt_tx_suspend(_te);
for (T_LNUM i = 0; i < (T_LNUM)txt.lines(); i++)
xvt_tx_add_par(_te, i, (char*)txt.line(i));
xvt_tx_resume(_te);
return i > 0;
}
return FALSE;
xvt_tx_suspend(_te);
for (T_LNUM i = 0; i < (T_LNUM)realdata.items( ); i++)
xvt_tx_add_par(_te, i, ( char * )realdata.get( i ) );
xvt_tx_resume(_te);
}
bool TMemo_field::autosave(TRelation* r) const
const char* TMemo_field::get_window_data() const
{
const TFieldref* f = field();
if (dirty() && f != NULL)
{
const T_PNUM num_par = xvt_tx_get_num_pars(_te);
TTextfile txt;
TString par(256);
TString256 line;
const T_PNUM num_par = xvt_tx_get_num_pars(_te);
TToken_string data( "", '\n' );
TString par(256);
TString256 line;
for (T_PNUM p = 0; p < num_par; p++)
{
par.cut(0);
const T_LNUM lines = xvt_tx_get_num_par_lines(_te, p);
for (T_LNUM l = 0; l < lines; l++)
{
unsigned len;
xvt_tx_get_line(_te, p, A_LOCK, l, &len);
const char* s = xvt_tx_get_line(_te, p, A_GET, l, &len);
CHECK(s, "Null memo line");
line.strncpy(s, len);
xvt_tx_get_line(_te, p, A_UNLOCK, l, &len);
if (par.not_empty()) par << ' ';
par << line;
}
txt.append(par);
for (T_PNUM p = 0; p < num_par; p++)
{
par.cut(0);
const T_LNUM lines = xvt_tx_get_num_par_lines(_te, p);
for (T_LNUM l = 0; l < lines; l++)
{
unsigned len;
xvt_tx_get_line(_te, p, A_LOCK, l, &len);
const char* s = xvt_tx_get_line(_te, p, A_GET, l, &len);
CHECK(s, "Null memo line");
line.strncpy(s, len);
xvt_tx_get_line(_te, p, A_UNLOCK, l, &len);
if (par.not_empty()) par << ' ';
par << line;
}
r->lfile(f->file()).put(f->name(), txt);
return num_par > 0;
data.add(par);
}
return FALSE;
return data;
}
void TMemo_field::set_field_data(const char* data )
{
_data = data;
}
const char* TMemo_field::get_field_data() const
{
return _data;
}
void TZoom_field::set_window_data( const char* data )
{
TEdit_field::set_window_data( data );
set_first_line( data );
}
const char* TZoom_field::get_window_data( ) const
{
return TEdit_field::get_window_data( );
}
void TZoom_field::set_field_data( const char* data )
{
_memo = data;
}
const char* TZoom_field::get_field_data( ) const
{
return _memo;
}
bool TZoom_field::on_key( KEY key )
{
if ( key == K_F8 )
{
TMask m( "Zoom", 1, 72, 14 );
m.add_memo( 101, 1, _prompt, 2, 2 );
m.add_button( DLG_OK, 1, "", -12, -1 );
m.add_button( DLG_CANCEL, 1, "", -12, -1 );
m.set( 101, _memo );
if ( m.run( ) )
_memo = m.get( 101 );
}
return TEdit_field::on_key( key );
}
TZoom_field::TZoom_field( TMask* mask ) : TEdit_field( mask ), _memo( "", '\n' )
{
}
TZoom_field::~TZoom_field( )
{
}
const char *TZoom_field::get_first_line( )
{
return _memo.get( 0 );
}
void TZoom_field::set_first_line( const char * c )
{
_memo.add( c, 0 );
_memo.destroy( 1 );
}

View File

@ -993,6 +993,7 @@ class TMemo_field : public TMask_field
// @cmember Oggetto text che contiene il valore del campo memo
TXEDIT _te;
TToken_string _data;
// @access Protected Member
protected:
@ -1007,12 +1008,18 @@ protected:
// @cmember Legge un item del controllo dal file <p scanner>
virtual void parse_head(TScanner& scanner);
// @cmember Legge dalla relazione il valore del campo
virtual bool autoload(const TRelation* r = NULL);
// @cmember Scrive sulla relazione il valore del campo
virtual bool autosave(TRelation* r = NULL) const;
// @cmember Setta il focus sul campo
virtual void highlight() const;
// @cmember Scrive il valore del campo direttamente dalla finestra del controllo
virtual void set_window_data(const char* data);
// @cmember Legge il valore del campo direttamente dalla finestra del controllo
virtual const char* get_window_data() const;
// @cmember Scrive il valore del campo
virtual void set_field_data(const char* data = NULL);
// @cmember Legge il valore del campo
virtual const char* get_field_data() const;
// @cmember Permette di abilitare/disabilitare il campo (vedi <mf TMask_field::enable>)
virtual void enable(bool on);
@ -1020,8 +1027,6 @@ protected:
virtual void show(bool on);
// @cmember Gestisce la pressione del tasto (TRUE se la gestione ha avuto successo)
virtual bool on_key(KEY k);
// @cmember Setta il colore dello sfondo
virtual void set_back_color(COLOR c) const;
// @access Public Member
public:
@ -1031,6 +1036,49 @@ public:
virtual ~TMemo_field();
};
// @class TZoom_field | Come edit filed ma zooma per l'editing dei campi memo
//
// @base public | TEdit_field
class TZoom_field : public TEdit_field
{
// @access Private Member
TToken_string _memo;
// @access Protected Member
protected:
// @cmember Ritorna l'identificatore della classe
virtual word class_id() const
{ return CLASS_ZOOM_FIELD; };
// @cmember Ritorna il nome della classe
virtual const char* class_name() const
{ return "ZOOM"; }
// @cmember Scrive il valore del campo direttamente dalla finestra del controllo
virtual void set_window_data(const char* data);
// @cmember Legge il valore del campo direttamente dalla finestra del controllo
virtual const char* get_window_data() const;
// @cmember Scrive il valore del campo
virtual void set_field_data(const char* data);
// @cmember Legge il valore del campo
virtual const char* get_field_data() const;
const char * get_first_line( );
void set_first_line( const char * c );
// @access Public Member
public:
// @cmember Gestisce la pressione del tasto (TRUE se la gestione ha avuto successo)
virtual bool on_key(KEY key);
// @cmember Costruttore
TZoom_field(TMask* mask);
// @cmember Distruttore
virtual ~TZoom_field();
};
#endif // __MASKFLD_H