From a57f4d2b6906b49bc5ed9c8f6a7bf954d7262848 Mon Sep 17 00:00:00 2001 From: guy Date: Wed, 11 Oct 1995 11:42:19 +0000 Subject: [PATCH] maskfld.cpp MOdificata picture_data per correggere gli sheet maskfld.h Resa virtuale enabled e poi rimesssa come prima msksheet.cpp Corretta gestione di set_focus_cell e select real.cpp Cambiato il valore di ritorno delle fnc_min e fnc_max real.h Modificata dichiarazione di fnc_* di conseguenza git-svn-id: svn://10.65.10.50/trunk@1941 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- include/maskfld.cpp | 81 +++++++++++++++++++++++++------------------- include/maskfld.h | 2 ++ include/msksheet.cpp | 64 ++++++++++++++++++++-------------- include/real.cpp | 4 +-- include/real.h | 4 +-- 5 files changed, 92 insertions(+), 63 deletions(-) diff --git a/include/maskfld.cpp b/include/maskfld.cpp index 9446440cc..fbee5493c 100755 --- a/include/maskfld.cpp +++ b/include/maskfld.cpp @@ -479,13 +479,15 @@ const char* TMask_field::picture_data( // il contenuto delle celle con lo stesso formato deglia altri campi della maschera // dell stesso tipo. { - fpark = data; if (video) { + fpark = data; fpark.trim(); - if (_flags.uppercase) fpark.upper(); + if (_flags.uppercase) + fpark.upper(); + return fpark; } - return fpark; + return data; } @@ -2129,7 +2131,7 @@ const char* TEdit_field::format(const char* d) if (len > _size) { #ifdef DBG - yesnofatal_box("Campo %d troppo lungo: %d > %d", dlg(), fpark.len(), _size); + yesnofatal_box("Campo %d troppo lungo: %s > %d", dlg(), (const char*)fpark, _size); #endif fpark.cut(len = _size); } @@ -2159,20 +2161,9 @@ const char* TEdit_field::format(const char* d) const char* TEdit_field::picture_data(const char* data, bool video) - { - if (video) - { - data = format(data); - xvt_vobj_set_title(win(), (char*)data); - return get_window_data(); - } - - set_window_data(data); - TMask_field::get_window_data(); - - if (_flags.trim) fpark.trim(); - return fpark; + fpark = video ? data : format(data); + return fpark.trim(); } @@ -2770,18 +2761,7 @@ bool TDate_field::autosave(TRelation* r) const const char* TDate_field::picture_data(const char* data, bool video) { - if (video) - { - data = format_data(data); - xvt_vobj_set_title(win(), (char*)data); - return get_window_data(); - } - - set_window_data(data); - TMask_field::get_window_data(); - - if (_flags.trim) fpark.trim(); - return fpark; + return video ? format_data(data) : data; } @@ -2872,13 +2852,12 @@ void TReal_field::parse_head(TScanner& scanner) } void TReal_field::set_window_data(const char* data) -{ +{ if (data == NULL) data = ""; if (roman()) { data = itor(atoi(data)); - TMask_field::set_window_data(data); } else { @@ -2891,13 +2870,20 @@ void TReal_field::set_window_data(const char* data) n /= e; } if (_picture.empty()) - data = n.stringa(_size, _decimals); + { + const char pad = _flags.zerofilled ? '0' : ' '; + data = n.stringa(_size, _decimals, pad); + } else - data = n.string(_picture); + { + fpark = n.string(_picture); + fpark.right_just(_size); + data = fpark; + } } else data = ""; - TEdit_field::set_window_data(data); } + TMask_field::set_window_data(data); } const char* TReal_field::get_window_data() const @@ -2932,8 +2918,35 @@ const char* TReal_field::get_window_data() const } return fpark; +} + +const char* TReal_field::picture_data(const char* data, bool video) +{ + if (video) + { + fpark = real::ita2eng(data); + } + else + { + const real n(data); + if (!n.is_zero()) + { + if (_picture.empty()) + { + const char pad = _flags.zerofilled ? '0' : ' '; + fpark = n.stringa(_size, _decimals, pad); + } + else + fpark = n.string(_picture); + } + else + fpark.cut(0); + } + + return fpark.trim(); } + void TReal_field::set_decimals(int d) { _decimals = d; diff --git a/include/maskfld.h b/include/maskfld.h index e995cbe2e..9fd1576f8 100755 --- a/include/maskfld.h +++ b/include/maskfld.h @@ -680,6 +680,8 @@ protected: virtual void set_window_data(const char* data); // @cmember Setta il valore del cambio nel campo virtual void exchange(bool show_value, const real& n); + + virtual const char* picture_data(const char* data, bool video); // @cmember Crea il controllo virtual void create(WINDOW parent); diff --git a/include/msksheet.cpp b/include/msksheet.cpp index 2a9c37344..5c2594e4c 100755 --- a/include/msksheet.cpp +++ b/include/msksheet.cpp @@ -253,8 +253,8 @@ TSpreadsheet::TSpreadsheet( 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), +: _mask(maskname, maskno), _notify(NULL), _getmask( NULL ), _owner(o), + _cur_row(0), _cur_col(0), _cur_rec(0), _edit_field(NULL), _active(TRUE), _row_dirty(FALSE), _check_enabled(TRUE), _firstfocus(TRUE), _needs_update(-1) { @@ -304,7 +304,7 @@ TSpreadsheet::TSpreadsheet( v = m+(f->has_query() ? 1 : 0); } - if (f->is_edit() && m < f->size()) + if (f->is_edit()) m = f->size(); if (v > 69) v = 69; @@ -517,18 +517,25 @@ void TSpreadsheet::update_rec(int rec) { if (rec == selected()) xi_set_focus(_itf); + XI_OBJ row; XI_MAKE_ROW(&row, _list, riga); xi_cell_request(&row); // Update internal values + if (rec == selected()) - set_focus_cell(riga, _cur_col); + { + str2mask(_cur_rec); + set_focus_cell(riga, _cur_col); + } } } void TSpreadsheet::set_focus_cell(int riga, int colonna) -{ +{ xvt_scr_set_focus_vobj(win()); + mask().set_focus_win(win(), FALSE); + const int r = row2rec(riga); if (colonna <= 0) colonna = 1; @@ -543,17 +550,13 @@ void TSpreadsheet::set_focus_cell(int riga, int colonna) XI_MAKE_CELL(&cell, _list, riga, colonna); xi_set_focus(&cell); - if (_edit_field == NULL || r == _cur_rec) - { - if (_edit_field == NULL) - { - _cur_row = riga; - _cur_col = colonna; - _cur_rec = r; - _row_dirty = FALSE; - } - _edit_field = col2field(colonna); + _edit_field = col2field(_cur_col = colonna); + if (r != _cur_rec) + { + _cur_rec = r; + _cur_row = riga; str2mask(_cur_rec); + _row_dirty = FALSE; } } } @@ -856,8 +859,11 @@ void TSpreadsheet::list_handler(XI_EVENT *xiev) if (k == K_DEL) { _row_dirty = _cell_dirty = FALSE; - if (_cur_rec >= items()) - _cur_rec = items() - 1; + if (_cur_rec == items()-1) + { + _cur_rec--; + _cur_row--; + } } if (_cur_rec >= 0) @@ -1001,7 +1007,7 @@ void TSpreadsheet::list_handler(XI_EVENT *xiev) case K_F1: case K_SHIFT+K_F1: _check_enabled = FALSE; // Disable checks - _edit_field->on_key(K_F1); + _edit_field->on_key(k); set_focus_cell(_cur_row, _cur_col); _check_enabled = TRUE; // Enable checks break; @@ -1111,11 +1117,16 @@ void TSpreadsheet::activate(bool on) } } -void TSpreadsheet::select(int r) -{ - xi_scroll_rec(_list, r, NORMAL_COLOR, XI_ATR_ENABLED | XI_ATR_AUTOSELECT, 0); - _edit_field = NULL; - set_focus_cell(0, 1); +void TSpreadsheet::select(int rec) +{ + int row = rec2row(rec); + if (row < 0) + { + xi_scroll_rec(_list, rec, NORMAL_COLOR, XI_ATR_ENABLED | XI_ATR_AUTOSELECT, 0); + row = 0; + } + _cur_rec = -1; + set_focus_cell(row, 1); } #else @@ -1699,7 +1710,11 @@ void TSheet_field::create(WINDOW parent) _win = _sheet->win(); xvt_vobj_set_visible(_win, shown()); - if (!enabled()) disable(); + if (!_flags.enable_default) + { + _flags.enabled = TRUE; // Lo sheet e' sempre operabile anche se non editabile + disable(); + } } @@ -1739,7 +1754,6 @@ TToken_string& TSheet_field::row( if (n >= max) { n = _sheet->add(new TToken_string(80)); - // force_update(n); } } return _sheet->row(n); diff --git a/include/real.cpp b/include/real.cpp index b2cd2c419..d5ef4d097 100755 --- a/include/real.cpp +++ b/include/real.cpp @@ -839,7 +839,7 @@ void swap ( } // @func Ritorna il numero reale piu' piccolo tra

e

-real fnc_min ( +const real& fnc_min ( const real & a, // @parm Primo numero da confrontare const real & b) // @parm Secondo numero da confrontare @@ -850,7 +850,7 @@ real fnc_min ( // @func Ritorna il numero reale piu' grande tra

e

-real fnc_max ( +const real& fnc_max ( const real & a, // @parm Primo numero da confrontare const real & b) // @parm Secondo numero da confrontare diff --git a/include/real.h b/include/real.h index f185c13b9..b547b4095 100755 --- a/include/real.h +++ b/include/real.h @@ -160,8 +160,8 @@ inline bool operator !=(const real& a, double b) { return operator !=(b, a); } real operator %(const real& a, const long b) ; void swap(real& a, real& b) ; -real fnc_min(const real& a, const real& b) ; -real fnc_max(const real& a, const real& b) ; +const real& fnc_min(const real& a, const real& b) ; +const real& fnc_max(const real& a, const real& b) ; real sqrt(const real& a) ; real sqr(const real& a) ; real exp10(const real& a) ;