maskfld.* : aggiunta set_field_data ai reali e corretta gestione date
scanner.h : corretti commenti msksheet.cpp : corretta off_cell_handler git-svn-id: svn://10.65.10.50/trunk@2441 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
efe30ac51e
commit
c30f542d84
@ -2687,9 +2687,8 @@ TDate_field::TDate_field(TMask* m) : TEdit_field(m)
|
||||
|
||||
const char* TDate_field::get_window_data() const
|
||||
{
|
||||
bool dummy;
|
||||
TString16 str = TEdit_field::get_window_data();
|
||||
return format_data(str, &dummy);
|
||||
return format_data(str);
|
||||
}
|
||||
|
||||
void TDate_field::set_window_data(const char* data)
|
||||
@ -2723,11 +2722,6 @@ const char* TDate_field::format_data(
|
||||
{
|
||||
if (isdigit(fpark[0]))
|
||||
{
|
||||
if (fpark.len() == 6) // Fix century (for this millenium only)
|
||||
{
|
||||
fpark.insert("19", 4);
|
||||
changed = TRUE;
|
||||
}
|
||||
for (int meno = 2; meno <= 5; meno += 3)
|
||||
if (fpark[meno] != '-')
|
||||
{
|
||||
@ -2791,11 +2785,10 @@ bool TDate_field::on_key(KEY key)
|
||||
{
|
||||
bool changed = FALSE;
|
||||
|
||||
TFixed_string data(format_data(get_window_data(),&changed), 15);
|
||||
const char* data = format_data(get(), &changed);
|
||||
|
||||
if (data.not_empty())
|
||||
if (*data) // data not empty
|
||||
{
|
||||
// TDate d(data);
|
||||
if (!TDate::isdate(data))
|
||||
{
|
||||
error_box("Data errata o formato non valido");
|
||||
@ -2857,6 +2850,33 @@ void TReal_field::create(WINDOW w)
|
||||
}
|
||||
}
|
||||
|
||||
bool TReal_field::parse_item(TScanner& scanner)
|
||||
{
|
||||
if (scanner.key() == "PI") // PICTURE
|
||||
{
|
||||
_picture = scanner.string();
|
||||
if (_picture.not_empty() && _decimals == 0)
|
||||
{
|
||||
if (_picture[0] == '.')
|
||||
_decimals = atoi(&_picture[1]);
|
||||
else
|
||||
{
|
||||
const int comma = _picture.find(',');
|
||||
if (comma >= 0)
|
||||
_decimals = _picture.len() - comma - 1;
|
||||
}
|
||||
}
|
||||
#ifdef DBG
|
||||
if (_size > 9 && _size != 15)
|
||||
::warning_box("Guy propone una dimensione di 15 per il campo %d: %s\nMa probabilmente ha toppato ...",
|
||||
dlg(), (const char*)_prompt);
|
||||
#endif
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return TEdit_field::parse_item(scanner);
|
||||
}
|
||||
|
||||
bool TReal_field::autoload(const TRelation* r)
|
||||
{
|
||||
const bool ok = TMask_field::autoload(r);
|
||||
@ -2987,12 +3007,31 @@ const char* TReal_field::get_window_data() const
|
||||
return fpark;
|
||||
}
|
||||
|
||||
// Certified 100%
|
||||
void TReal_field::set_field_data(const char* n)
|
||||
{
|
||||
if (*n)
|
||||
{
|
||||
real num(n);
|
||||
if (num.is_zero())
|
||||
n = "";
|
||||
else
|
||||
{
|
||||
fpark = num.string(0, decimals());
|
||||
if (_flags.zerofilled)
|
||||
fpark.right_just(_size, '0');
|
||||
n = fpark;
|
||||
}
|
||||
}
|
||||
TEdit_field::set_field_data(n);
|
||||
}
|
||||
|
||||
const char* TReal_field::picture_data(const char* data, bool video) const
|
||||
{
|
||||
if (video)
|
||||
{
|
||||
fpark = real::ita2eng(data);
|
||||
if (_flags.zerofilled && fpark.not_empty())
|
||||
if (fpark.not_empty() && _flags.zerofilled)
|
||||
fpark.right_just(_size, '0');
|
||||
}
|
||||
else
|
||||
|
@ -140,9 +140,9 @@ protected:
|
||||
// @cmember Ritorna i flags nativi di default del campo
|
||||
long default_flags() const;
|
||||
|
||||
// @cmember Legge la testata del controllo dal file <p scanner>
|
||||
// @cmember Legge la testata del controllo dal file .msk <p scanner>
|
||||
virtual void parse_head(TScanner& scanner);
|
||||
// @cmember Legge un item del controllo dal file <p scanner>
|
||||
// @cmember Legge una riga di definizione del controllo dal file .msk <p scanner>
|
||||
virtual bool parse_item(TScanner& scanner);
|
||||
|
||||
// @cmember Crea il controllo (chiama <mf TMask_field::wincreate>)
|
||||
@ -697,6 +697,9 @@ protected:
|
||||
virtual const char* get_window_data() const;
|
||||
// @cmember Scrive il valore del campo direttamente dalla finestra del controllo
|
||||
virtual void set_window_data(const char* data);
|
||||
// @cmember Scrive il valore interno del campo
|
||||
virtual void set_field_data(const char* n);
|
||||
|
||||
// @cmember Setta il valore del cambio nel campo
|
||||
virtual void exchange(bool show_value, const real& n);
|
||||
|
||||
@ -704,8 +707,10 @@ protected:
|
||||
|
||||
// @cmember Crea il controllo
|
||||
virtual void create(WINDOW parent);
|
||||
// @cmember Legge un item del controllo dal file <p scanner>
|
||||
// @cmember Legge un item del controllo dal file .msk <p scanner>
|
||||
virtual void parse_head(TScanner& scanner);
|
||||
// @cmember Legge una riga di definizione del controllo dal file .msk <p scanner>
|
||||
virtual bool parse_item(TScanner& scanner);
|
||||
// @cmember Gestisce la pressione del tasto (TRUE se la gestione ha avuto successo)
|
||||
virtual bool on_key(KEY key);
|
||||
// @cmember Legge dalla relazione il valore del campo
|
||||
|
@ -727,7 +727,7 @@ void TSpreadsheet::update(
|
||||
|
||||
int num;
|
||||
const long* handles = xi_get_list_info(_list, &num);
|
||||
if (num == 0 || !_owner->mask().is_running())
|
||||
if (num == 0 || !_owner->mask().is_running() || _cur_rec >= items())
|
||||
xi_scroll(_list, XI_SCROLL_FIRST);
|
||||
else
|
||||
xi_scroll_rec(_list, *handles, NORMAL_COLOR, XI_ATR_ENABLED | XI_ATR_AUTOSELECT, 0);
|
||||
@ -766,16 +766,18 @@ HIDDEN void XVT_CALLCONV1 xiev_handler(XI_OBJ *itf, XI_EVENT *xiev)
|
||||
|
||||
const char* TSpreadsheet::copy_cell2field(XI_OBJ* cell)
|
||||
{
|
||||
const char* val;
|
||||
const char* txt;
|
||||
|
||||
if (cell == NULL)
|
||||
{
|
||||
XI_OBJ cella;
|
||||
XI_MAKE_CELL(&cella, _list, _cur_row, _cur_col);
|
||||
val = _edit_field->picture_data(xi_get_text(&cella, NULL, -1), TRUE);
|
||||
txt = xi_get_text(&cella, NULL, -1);
|
||||
}
|
||||
else
|
||||
val = _edit_field->picture_data(xi_get_text(cell, NULL, -1), TRUE);
|
||||
else
|
||||
txt = xi_get_text(cell, NULL, -1);
|
||||
|
||||
const char* val = _edit_field->picture_data(txt, TRUE);
|
||||
_edit_field->set(val);
|
||||
_edit_field->set_dirty(); // Get it dirty!
|
||||
|
||||
@ -789,7 +791,7 @@ bool TSpreadsheet::off_cell_handler(XI_OBJ *cell)
|
||||
{
|
||||
const char* nuo = copy_cell2field(cell);
|
||||
if (_edit_field->on_key(_edit_field->is_edit() ? K_TAB : K_SPACE) == FALSE) // Test it
|
||||
ok = *nuo != '\0';
|
||||
ok = *nuo == '\0'; // Se e' vuoto lascia stare
|
||||
else
|
||||
_cell_dirty = FALSE;
|
||||
mask2str(_cur_rec); // Update sheet row
|
||||
@ -897,7 +899,7 @@ void TSpreadsheet::list_handler(XI_EVENT *xiev)
|
||||
off_cell_handler();
|
||||
|
||||
const int oldrec = _cur_rec;
|
||||
set_pos(xiev->v.select.xi_obj->v.row, 1 /* xiev->v.select.column */);
|
||||
set_pos(xiev->v.select.xi_obj->v.row, 1);
|
||||
if (oldrec != _cur_rec)
|
||||
{
|
||||
_row_dirty = FALSE;
|
||||
|
@ -55,11 +55,11 @@ public:
|
||||
// @cmember Ritorna il contenuto della linea fino al segno di uguale (chiama <mf TScanner::line>)
|
||||
const TString& equal()
|
||||
{ return line('='); }
|
||||
// @cmember Legge le coordinate del campo dal file e ne setta le dimensioni
|
||||
// @cmember Legge le coordinate di un rettangolo
|
||||
void rectangle(RCT& rect);
|
||||
// @cmember Ritorna un intero letto dal file
|
||||
int integer();
|
||||
// @cmember Ritorna un float letto dal file
|
||||
// @cmember Ritorna un double letto dal file
|
||||
double number();
|
||||
// @cmember Ritorna un operando letto dal file
|
||||
const TString& operand();
|
||||
|
Loading…
x
Reference in New Issue
Block a user