diff --git a/include/mask.cpp b/include/mask.cpp
index 9ce9fd36b..9a496f212 100755
--- a/include/mask.cpp
+++ b/include/mask.cpp
@@ -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);
diff --git a/include/mask.h b/include/mask.h
index d028bdedd..7cca9d25b 100755
--- a/include/mask.h
+++ b/include/mask.h
@@ -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
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
sotto forma di long
long get_long(short fld_id) const;
// @cmember Ritorna il contenuto del campo
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'
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 )
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 )
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]; }
+
};
diff --git a/include/maskfld.cpp b/include/maskfld.cpp
index 291cdf311..f88012f9e 100755
--- a/include/maskfld.cpp
+++ b/include/maskfld.cpp
@@ -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 );
+}
diff --git a/include/maskfld.h b/include/maskfld.h
index e5568cdd5..7ecedf3cb 100755
--- a/include/maskfld.h
+++ b/include/maskfld.h
@@ -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
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 )
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