Patch level : 4.0 414
Files correlati : ve0 Ricompilazione Demo : [ ] Commento : Potenziata gestione campi driver: ora funzionano anche con drivers "virtuali" che non esistono al momemnto della creazione del campo driven git-svn-id: svn://10.65.10.50/trunk@13986 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
baef024a0a
commit
d089749aa5
@ -426,7 +426,14 @@ short TMask::dirty() const
|
||||
void TMask::load_checks() const
|
||||
{
|
||||
const int max = fields();
|
||||
for (int i = 0; i < max; i++)
|
||||
int i;
|
||||
for (i = 0; i < max; i++)
|
||||
{
|
||||
const TMask_field& f = fld(i);
|
||||
if (f.is_edit())
|
||||
((TEdit_field&)f).test_drivers();
|
||||
}
|
||||
for (i = 0; i < max; i++)
|
||||
{
|
||||
TMask_field& f = fld(i);
|
||||
if (f.has_check())
|
||||
@ -1855,7 +1862,7 @@ TCurrency_field& TMask::add_currency (
|
||||
int y, // @parm Coordinata y (in caratteri)
|
||||
int dim, // @parm Lunghezza del campo sulla maschera
|
||||
const char* flags, // @parm Flag di controllo del campo (default "")
|
||||
short driver) // @parm Numero di decimali (default 0)
|
||||
short driver) // @parm Campo con codice valuta
|
||||
|
||||
// @xref <mf TMask::add_static> <mf TMask::add_string> <mf TMask::add_date>
|
||||
// <mf TMask::add_button> <mf TMask::add_radio> <mf TMask::add_memo>
|
||||
|
@ -1256,45 +1256,69 @@ void TEditable_field::reset_driver(short id)
|
||||
}
|
||||
}
|
||||
|
||||
TOperable_field* TEditable_field::add_driver(short id)
|
||||
bool TEditable_field::add_driver(short id)
|
||||
{
|
||||
if (id != 0)
|
||||
{
|
||||
if (_drivers == NULL)
|
||||
_drivers = new TPointer_array;
|
||||
_drivers->add_long(id);
|
||||
}
|
||||
|
||||
return id != 0;
|
||||
}
|
||||
|
||||
TOperable_field* TEditable_field::get_driver(int n, bool test) const
|
||||
{
|
||||
TOperable_field* driver = NULL;
|
||||
if (id < 0)
|
||||
if (_drivers != NULL)
|
||||
{
|
||||
TSheet_field* sheet = mask().get_sheet();
|
||||
if (sheet)
|
||||
const short id = (short)_drivers->get_long(n);
|
||||
if (id != 0)
|
||||
{
|
||||
const int pos = sheet->mask().id2pos(-id);
|
||||
if (pos >= 0)
|
||||
if (id < 0)
|
||||
{
|
||||
driver = &(TOperable_field&)sheet->mask().fld(pos);
|
||||
CHECKD(driver->is_kind_of(CLASS_OPERABLE_FIELD), "Field not operable ", -id);
|
||||
TSheet_field* sheet = mask().get_sheet();
|
||||
if (sheet)
|
||||
{
|
||||
const int pos = sheet->mask().id2pos(-id);
|
||||
if (pos >= 0)
|
||||
driver = (TOperable_field*)&sheet->mask().fld(pos);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
const int pos = mask().id2pos(id);
|
||||
if (pos >= 0)
|
||||
{
|
||||
driver = (TOperable_field*)&mask().fld(pos);
|
||||
if (test)
|
||||
{
|
||||
TString16 msg; msg.format("CHECK,%d", dlg());
|
||||
TToken_string* tok = driver->message(0, false);
|
||||
if (tok == NULL || tok->get_pos(msg) < 0)
|
||||
driver->message(0, true)->add(msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
const int pos = mask().id2pos(id);
|
||||
if (pos >= 0)
|
||||
{
|
||||
driver = &(TOperable_field&)mask().fld(pos);
|
||||
CHECKD(driver->is_kind_of(CLASS_OPERABLE_FIELD), "Field not operable ", id);
|
||||
TString16 msg;
|
||||
msg.format("CHECK,%d", dlg());
|
||||
driver->message(0, TRUE)->add(msg);
|
||||
}
|
||||
}
|
||||
if (driver != NULL)
|
||||
{
|
||||
CHECKD(driver->is_kind_of(CLASS_OPERABLE_FIELD), "Field not operable ", id);
|
||||
if (_drivers == NULL)
|
||||
_drivers = new TPointer_array;
|
||||
_drivers->add(driver);
|
||||
}
|
||||
else
|
||||
NFCHECK("Non esiste il campo driver %d per il campo %d", id, dlg());
|
||||
return driver;
|
||||
}
|
||||
}
|
||||
|
||||
TOperable_field* TEditable_field::driver(int n) const
|
||||
{
|
||||
return get_driver(n, false);
|
||||
}
|
||||
|
||||
void TEditable_field::test_drivers() const
|
||||
{
|
||||
if (_drivers != NULL)
|
||||
{
|
||||
for (int i = 0; i < _drivers->items(); i++)
|
||||
get_driver(i, true);
|
||||
}
|
||||
}
|
||||
|
||||
// Ritorna il messaggio d'errore associato al campo
|
||||
const char* TEditable_field::get_warning() const
|
||||
|
@ -621,6 +621,7 @@ class TEditable_field : public TLoadable_field
|
||||
|
||||
protected: // TMask_field
|
||||
virtual bool parse_item(TScanner& scanner);
|
||||
TOperable_field* get_driver(int n, bool test) const;
|
||||
|
||||
protected:
|
||||
// @cmember Valore corrente del campo
|
||||
@ -693,12 +694,14 @@ public:
|
||||
virtual bool is_editable() const { return true; }
|
||||
|
||||
// @cmember Ritorna un eventuale campo driver
|
||||
TOperable_field* driver(int n) const
|
||||
{ return _drivers ? (TOperable_field*)_drivers->objptr(n) : NULL; }
|
||||
TOperable_field* driver(int n) const;
|
||||
|
||||
// @cmember Azzera i campi driver
|
||||
void reset_driver(short id = -1);
|
||||
// @cmember Aggiunge un campo driver
|
||||
TOperable_field* add_driver(short id);
|
||||
bool add_driver(short id);
|
||||
// Controlla l'associazione driver/driven
|
||||
void test_drivers() const;
|
||||
|
||||
TEditable_field(TMask* m);
|
||||
virtual ~TEditable_field();
|
||||
|
@ -1,5 +1,3 @@
|
||||
#include <limits.h>
|
||||
|
||||
#define XI_INTERNAL
|
||||
#include <xinclude.h>
|
||||
|
||||
@ -19,6 +17,8 @@ extern "C"
|
||||
#include <utility.h>
|
||||
#include <progind.h>
|
||||
|
||||
#include <limits.h>
|
||||
|
||||
class TCell_property : public TObject
|
||||
{
|
||||
COLOR _back, _fore;
|
||||
|
Loading…
x
Reference in New Issue
Block a user