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) TMask_field* TMask::parse_field(TScanner& scanner)
{ {
if (scanner.key() == "ST") return new TEdit_field(this); 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() == "NU") return new TReal_field(this);
if (scanner.key() == "DA") return new TDate_field(this); if (scanner.key() == "DA") return new TDate_field(this);
if (scanner.key() == "BO") return new TBoolean_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) // @cmember Ritorna la finestra della pagina corrente (Usare con attenzione)
WINDOW win() const WINDOW win() const
{ return _page < 0 ? _pagewin[0] : _pagewin[_page]; } { return _page < 0 ? _pagewin[0] : _pagewin[_page]; }
// @cmember Ritorna il numero di campi nella finestra // @cmember Ritorna il numero di campi nella finestra
int find_field_win(WINDOW win) const; int find_field_win(WINDOW win) const;
@ -204,10 +204,6 @@ public:
virtual void close(); virtual void close();
// @cmember Permette di attivare/disattivare tutta la pagina // @cmember Permette di attivare/disattivare tutta la pagina
virtual void activate(bool on = TRUE); 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 // @cmember Converte un identificatore di campo nella sua posizione
int id2pos(short id) const; int id2pos(short id) const;
@ -223,16 +219,15 @@ public:
TEdit_field& efield(short id) const; TEdit_field& efield(short id) const;
// @cmember Setta il campo con una stringa // @cmember Setta il campo con una stringa
void set(short fld_id, const char* str, bool hit=FALSE); virtual 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);
// @cmember Setta il campo con un reale // @cmember Setta il campo con un reale
void set(short fld_id, const real& num, bool hit=FALSE); void set(short fld_id, const real& num, bool hit=FALSE);
// @cmember Setta il campo con una data // @cmember Setta il campo con una data
void set(short fld_id, const TDate& day, bool hit=FALSE); 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 // @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 // @cmember Ritorna il contenuto del campo <p fld_id> sotto forma di long
long get_long(short fld_id) const; long get_long(short fld_id) const;
// @cmember Ritorna il contenuto del campo <p fld_id> sotto forma di int // @cmember Ritorna il contenuto del campo <p fld_id> sotto forma di int
@ -250,10 +245,9 @@ public:
void move_focus_field(int num); void move_focus_field(int num);
// @cmember Setta il focus al campo la cui finestra e' <p win> // @cmember Setta il focus al campo la cui finestra e' <p win>
void set_focus_win(WINDOW win, bool force); void set_focus_win(WINDOW win, bool force);
// @cmember Ritorna il controllo che possiede il focus // @cmember Ritorna il numero del controllo che possiede il focus
TMask_field& focus_field() const TMask_field& focus_field() const
{ return fld(_focus);} { return fld(_focus); }
// @cmember Disabilita la lettura dei check della maschera // @cmember Disabilita la lettura dei check della maschera
void disable_starting_check() void disable_starting_check()
{ _should_check = FALSE;} { _should_check = FALSE;}
@ -267,7 +261,7 @@ public:
void on_firm_change(); void on_firm_change();
// @cmember Abilita/disabilita un campo // @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>) // @cmember Disabilita un campo (chiama <mf TMask::enable>)
void disable(short fld_id) void disable(short fld_id)
{ enable(fld_id, FALSE); } { enable(fld_id, FALSE); }
@ -298,7 +292,7 @@ public:
bool key_valid(int key) const; bool key_valid(int key) const;
// @cmember Permette di mostrare/nascondere un campo // @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>) // @cmember Permette di nascondere un campo (chiama <mf TMask::show>)
void hide(short fld_id = -1) void hide(short fld_id = -1)
{ show(fld_id, FALSE); } { show(fld_id, FALSE); }
@ -318,7 +312,7 @@ public:
// @cmember Permette di mandare un tasto ad un campo // @cmember Permette di mandare un tasto ad un campo
void send_key(KEY key, short id, TMask_field* from = NULL); void send_key(KEY key, short id, TMask_field* from = NULL);
// @cmember Permette di mandare un handler ad un controllo // @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 // @cmember Permette di mandare un handler ad una maschera
void set_handler(MASK_HANDLER handler); void set_handler(MASK_HANDLER handler);
// @cmember Permette di settare il nome del file di salvataggio // @cmember Permette di settare il nome del file di salvataggio
@ -364,6 +358,11 @@ public:
// @cmember Viene eseguita se il campo viene modificato??? // @cmember Viene eseguita se il campo viene modificato???
virtual bool on_dirty(TMask_field& c ); 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::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() TMemo_field::~TMemo_field()
{ {
@ -3548,7 +3549,7 @@ void TMemo_field::create(WINDOW parent)
wd.text = NULL; wd.text = NULL;
wd.units = U_PIXELS; wd.units = U_PIXELS;
wd.v.tx.attrib = TX_NOMENU | TX_BORDER | TX_AUTOVSCROLL | TX_WRAP; 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.margin = wd.rct.right - wd.rct.left;
wd.v.tx.limit = 256; wd.v.tx.limit = 256;
wd.v.tx.tx_id = dlg(); wd.v.tx.tx_id = dlg();
@ -3558,10 +3559,6 @@ void TMemo_field::create(WINDOW parent)
enable_default(); // Setta colori default enable_default(); // Setta colori default
} }
void TMemo_field::set_back_color(COLOR) const
{
}
void TMemo_field::highlight() const void TMemo_field::highlight() const
{ {
xvt_tx_set_active(_te); xvt_tx_set_active(_te);
@ -3574,13 +3571,13 @@ bool TMemo_field::on_key(KEY k)
void TMemo_field::enable(bool on) void TMemo_field::enable(bool on)
{ {
TMask_field::enable(on); TMask_field::enable( TRUE );
unsigned attr = xvt_tx_get_attr(_te); unsigned attr = xvt_tx_get_attr(_te);
if (on) if (on)
{ {
xvt_tx_set_colors(_te, NORMAL_COLOR, COLOR_BLACK, NORMAL_BACK_COLOR); xvt_tx_set_colors(_te, NORMAL_COLOR, COLOR_BLACK, NORMAL_BACK_COLOR);
attr &= ~TX_READONLY; attr &= ~TX_READONLY;
} }
else else
{ {
@ -3595,55 +3592,160 @@ void TMemo_field::show(bool on)
TMask_field::show(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); xvt_tx_clear(_te);
if (f != NULL) xvt_tx_suspend(_te);
{ for (T_LNUM i = 0; i < (T_LNUM)realdata.items( ); i++)
TTextfile txt; xvt_tx_add_par(_te, i, ( char * )realdata.get( i ) );
r->lfile(f->file()).get_memo(f->name(), txt); xvt_tx_resume(_te);
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;
} }
bool TMemo_field::autosave(TRelation* r) const const char* TMemo_field::get_window_data() const
{ {
const TFieldref* f = field(); const T_PNUM num_par = xvt_tx_get_num_pars(_te);
if (dirty() && f != NULL) TToken_string data( "", '\n' );
{ TString par(256);
const T_PNUM num_par = xvt_tx_get_num_pars(_te); TString256 line;
TTextfile txt;
TString par(256);
TString256 line;
for (T_PNUM p = 0; p < num_par; p++) for (T_PNUM p = 0; p < num_par; p++)
{ {
par.cut(0); par.cut(0);
const T_LNUM lines = xvt_tx_get_num_par_lines(_te, p); const T_LNUM lines = xvt_tx_get_num_par_lines(_te, p);
for (T_LNUM l = 0; l < lines; l++) for (T_LNUM l = 0; l < lines; l++)
{ {
unsigned len; unsigned len;
xvt_tx_get_line(_te, p, A_LOCK, l, &len); xvt_tx_get_line(_te, p, A_LOCK, l, &len);
const char* s = xvt_tx_get_line(_te, p, A_GET, l, &len); const char* s = xvt_tx_get_line(_te, p, A_GET, l, &len);
CHECK(s, "Null memo line"); CHECK(s, "Null memo line");
line.strncpy(s, len); line.strncpy(s, len);
xvt_tx_get_line(_te, p, A_UNLOCK, l, &len); xvt_tx_get_line(_te, p, A_UNLOCK, l, &len);
if (par.not_empty()) par << ' ';
if (par.not_empty()) par << ' '; par << line;
par << line;
}
txt.append(par);
} }
r->lfile(f->file()).put(f->name(), txt); data.add(par);
return num_par > 0;
} }
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 // @cmember Oggetto text che contiene il valore del campo memo
TXEDIT _te; TXEDIT _te;
TToken_string _data;
// @access Protected Member // @access Protected Member
protected: protected:
@ -1007,12 +1008,18 @@ protected:
// @cmember Legge un item del controllo dal file <p scanner> // @cmember Legge un item del controllo dal file <p scanner>
virtual void parse_head(TScanner& 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 // @cmember Setta il focus sul campo
virtual void highlight() const; 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>) // @cmember Permette di abilitare/disabilitare il campo (vedi <mf TMask_field::enable>)
virtual void enable(bool on); virtual void enable(bool on);
@ -1020,8 +1027,6 @@ protected:
virtual void show(bool on); virtual void show(bool on);
// @cmember Gestisce la pressione del tasto (TRUE se la gestione ha avuto successo) // @cmember Gestisce la pressione del tasto (TRUE se la gestione ha avuto successo)
virtual bool on_key(KEY k); virtual bool on_key(KEY k);
// @cmember Setta il colore dello sfondo
virtual void set_back_color(COLOR c) const;
// @access Public Member // @access Public Member
public: public:
@ -1031,6 +1036,49 @@ public:
virtual ~TMemo_field(); 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 #endif // __MASKFLD_H