Modifiche sottosezioni con file collegato e menu ingresso
git-svn-id: svn://10.65.10.50/trunk@1454 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
e8a228d9f9
commit
4e664d14c0
208
include/form.cpp
208
include/form.cpp
@ -93,6 +93,24 @@ HIDDEN bool but_file_handler(TMask_field& f, KEY k)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HIDDEN bool but_file_handler_sub(TMask_field& f, KEY k)
|
||||||
|
{
|
||||||
|
if (k == K_SPACE)
|
||||||
|
{
|
||||||
|
TRelation_description& r = form().rel_desc();
|
||||||
|
|
||||||
|
TEdit_field& e = f.mask().efield(f.dlg()-2);
|
||||||
|
TFieldref ref; ref = e.get();
|
||||||
|
if (r.choose_file(ref.file()))
|
||||||
|
{
|
||||||
|
ref.set_file(r.file_num());
|
||||||
|
f.mask().set(F_FILE1,r.file_desc());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Handler of F_BUT_FIELD field on mask
|
// Handler of F_BUT_FIELD field on mask
|
||||||
HIDDEN bool but_field_handler(TMask_field& f, KEY k)
|
HIDDEN bool but_field_handler(TMask_field& f, KEY k)
|
||||||
{
|
{
|
||||||
@ -716,19 +734,18 @@ bool TForm_item::edit(TMask& m)
|
|||||||
|
|
||||||
class TForm_subsection : public TForm_item
|
class TForm_subsection : public TForm_item
|
||||||
{
|
{
|
||||||
TPrint_section _ssec;
|
TPrint_section _ssec;
|
||||||
TString _name;
|
TString _name;
|
||||||
|
|
||||||
|
int _file_id; // ID del file su cui iterare in stampa se previsto
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void print_on(ostream& out) const;
|
virtual void print_on(ostream& out) const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
virtual int width() const;
|
virtual bool parse(TScanner& s);
|
||||||
virtual int height() const;
|
virtual bool update();
|
||||||
|
|
||||||
virtual bool parse(TScanner& s) { name(s.pop()); return _ssec.parse(s); }
|
|
||||||
virtual bool update() { return _ssec.update(); }
|
|
||||||
virtual bool edit(TMask& m);
|
virtual bool edit(TMask& m);
|
||||||
|
|
||||||
virtual const char* class_name() const { return "SEZIONE"; }
|
virtual const char* class_name() const { return "SEZIONE"; }
|
||||||
@ -749,15 +766,69 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
TForm_subsection::TForm_subsection(TPrint_section* s, const char* nm) :
|
TForm_subsection::TForm_subsection(TPrint_section* s, const char* nm) :
|
||||||
TForm_item(s), _ssec(&(s->form()), s->page_type()), _name(nm)
|
TForm_item(s), _ssec(&(s->form()), s->page_type(), TRUE), _file_id(-1), _name(nm)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
bool TForm_subsection::parse(TScanner& s)
|
||||||
|
{
|
||||||
|
name(s.pop());
|
||||||
|
_width = s.integer();
|
||||||
|
_height = s.integer();
|
||||||
|
_x = s.integer();
|
||||||
|
_y = s.integer();
|
||||||
|
|
||||||
|
if (s.popkey() == "FI") // FILE su cui iterare con next_match
|
||||||
|
_file_id = s.integer(); // TBI controllo alias
|
||||||
|
else s.push();
|
||||||
|
|
||||||
|
return _ssec.parse(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool TForm_subsection::update()
|
||||||
|
{
|
||||||
|
bool ok = FALSE;
|
||||||
|
TRelation* rel = form().relation();
|
||||||
|
|
||||||
|
if (rel == NULL || _file_id == -1)
|
||||||
|
ok = _ssec.update();
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
if (rel->is_first_match(_file_id))
|
||||||
|
do {
|
||||||
|
if (!(ok = _ssec.update()))
|
||||||
|
break;
|
||||||
|
_ssec.set_repeat_count(++i);
|
||||||
|
}
|
||||||
|
while (rel->next_match(_file_id));
|
||||||
|
_ssec.set_repeat_count(0);
|
||||||
|
}
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool TForm_subsection::edit(TMask& m)
|
bool TForm_subsection::edit(TMask& m)
|
||||||
{
|
{
|
||||||
// mask con nome e bottone edit contents / annulla
|
// mask con nome e bottone edit contents / annulla
|
||||||
TMask mu("ba2100u");
|
TMask mu("ba2100u");
|
||||||
mu.set(F_CAPTION, _name);
|
mu.set(F_CAPTION, _name);
|
||||||
|
mu.set(F_WIDTH, _width);
|
||||||
|
mu.set(F_HEIGHT, _height);
|
||||||
|
mu.set(F_X, _x);
|
||||||
|
mu.set(F_Y, _y);
|
||||||
|
|
||||||
|
mu.set_handler(F_BUT_FILE1, but_file_handler_sub);
|
||||||
|
|
||||||
|
if (_file_id != -1)
|
||||||
|
{
|
||||||
|
// set file description
|
||||||
|
form().rel_desc().set_cur_file(_file_id);
|
||||||
|
TString80 desc; desc << form().rel_desc().file_desc();
|
||||||
|
mu.set(F_FILE1, desc);
|
||||||
|
}
|
||||||
|
|
||||||
KEY k;
|
KEY k;
|
||||||
|
|
||||||
@ -769,14 +840,35 @@ bool TForm_subsection::edit(TMask& m)
|
|||||||
if (mu.field(F_CAPTION).dirty())
|
if (mu.field(F_CAPTION).dirty())
|
||||||
_name = mu.get(F_CAPTION);
|
_name = mu.get(F_CAPTION);
|
||||||
|
|
||||||
|
if (mu.field(F_WIDTH).dirty())
|
||||||
|
_width = mu.get_int(F_WIDTH);
|
||||||
|
|
||||||
|
if (mu.field(F_HEIGHT).dirty())
|
||||||
|
_height = mu.get_int(F_HEIGHT);
|
||||||
|
|
||||||
|
if (mu.field(F_X).dirty())
|
||||||
|
_x = mu.get_int(F_X);
|
||||||
|
|
||||||
|
if (mu.field(F_Y).dirty())
|
||||||
|
_y = mu.get_int(F_Y);
|
||||||
|
|
||||||
|
if (mu.field(F_FILE1).dirty())
|
||||||
|
{
|
||||||
|
if (mu.get(F_FILE1).empty())
|
||||||
|
_file_id = -1;
|
||||||
|
else
|
||||||
|
_file_id = form().rel_desc().file_num();
|
||||||
|
}
|
||||||
|
|
||||||
if (k == K_INS)
|
if (k == K_INS)
|
||||||
_ssec.edit(_name); // TBI god mode only if...
|
_ssec.edit(_name);
|
||||||
else if (k == K_DEL)
|
else if (k == K_DEL)
|
||||||
{
|
{
|
||||||
// remove myself
|
// remove myself
|
||||||
}
|
|
||||||
else if (k == K_ENTER)
|
}
|
||||||
break;
|
else if (k == K_ENTER)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return k != K_ESC;
|
return k != K_ESC;
|
||||||
@ -785,30 +877,16 @@ bool TForm_subsection::edit(TMask& m)
|
|||||||
|
|
||||||
void TForm_subsection::print_on(ostream& out) const
|
void TForm_subsection::print_on(ostream& out) const
|
||||||
{
|
{
|
||||||
out << "SEZIONE " << _name << "\n";
|
out << "SEZIONE " << _name << ' ' << _width << ' ' << _height
|
||||||
|
<< ' ' << _x << ' ' << _y;
|
||||||
|
|
||||||
|
if (_file_id != -1)
|
||||||
|
out << " FILE " << _file_id;
|
||||||
|
out << "\n";
|
||||||
|
|
||||||
for (word i = 0; i < _ssec.fields(); i++)
|
for (word i = 0; i < _ssec.fields(); i++)
|
||||||
out << _ssec.field(i);
|
out << _ssec.field(i);
|
||||||
out << "END" << "\n";
|
out << "\nEND" << "\n";
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// ???
|
|
||||||
int TForm_subsection::width() const
|
|
||||||
{
|
|
||||||
int w = 0;
|
|
||||||
for (word i = 0; i < _ssec.fields(); i++)
|
|
||||||
if (_ssec.field(i).width() > w)
|
|
||||||
w = _ssec.field(i).width();
|
|
||||||
return w;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ???
|
|
||||||
int TForm_subsection::height() const
|
|
||||||
{
|
|
||||||
int h = 0;
|
|
||||||
for (word i = 0; i < _ssec.fields(); i++)
|
|
||||||
h += _ssec.field(i).height();
|
|
||||||
return h;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ???
|
// ???
|
||||||
@ -1342,8 +1420,9 @@ public:
|
|||||||
|
|
||||||
TMask* TPrint_section::_msk = NULL;
|
TMask* TPrint_section::_msk = NULL;
|
||||||
|
|
||||||
TPrint_section::TPrint_section(TForm* f, pagetype pt)
|
TPrint_section::TPrint_section(TForm* f, pagetype pt, bool sub)
|
||||||
: _height(0), _x(0), _y(0), _form(f), _page_type(pt), _dirty(FALSE)
|
: _height(0), _x(0), _y(0), _form(f), _page_type(pt), _dirty(FALSE),
|
||||||
|
_subsection(sub), _repeat_count(0)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
TPrint_section::~TPrint_section()
|
TPrint_section::~TPrint_section()
|
||||||
@ -1378,7 +1457,7 @@ TPrintrow& TPrint_section::row(int num)
|
|||||||
void TPrint_section::offset(int& x, int& y) const
|
void TPrint_section::offset(int& x, int& y) const
|
||||||
{
|
{
|
||||||
if (x >= 0) x += _x;
|
if (x >= 0) x += _x;
|
||||||
if (y >= 0) y += _y;
|
if (y >= 0) y += _y + (_height * _repeat_count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1490,23 +1569,26 @@ bool TPrint_section::edit(const char* title)
|
|||||||
{
|
{
|
||||||
_cur_form = _form;
|
_cur_form = _form;
|
||||||
|
|
||||||
TMask m("ba2100s");
|
if (!_subsection)
|
||||||
m.set_caption(title);
|
|
||||||
|
|
||||||
m.set(F_HEIGHT, _height);
|
|
||||||
m.set(F_X, _x);
|
|
||||||
m.set(F_Y, _y);
|
|
||||||
|
|
||||||
if (m.run() == K_ESC)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
bool dirty = m.dirty() != 0;
|
|
||||||
|
|
||||||
if (dirty)
|
|
||||||
{
|
{
|
||||||
_height = m.get_int(F_HEIGHT);
|
TMask m("ba2100s");
|
||||||
_x = m.get_int(F_X);
|
m.set_caption(title);
|
||||||
_y = m.get_int(F_Y);
|
|
||||||
|
m.set(F_HEIGHT, _height);
|
||||||
|
m.set(F_X, _x);
|
||||||
|
m.set(F_Y, _y);
|
||||||
|
|
||||||
|
if (m.run() == K_ESC)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
bool dirty = m.dirty() != 0;
|
||||||
|
|
||||||
|
if (dirty)
|
||||||
|
{
|
||||||
|
_height = m.get_int(F_HEIGHT);
|
||||||
|
_x = m.get_int(F_X);
|
||||||
|
_y = m.get_int(F_Y);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const word flags = 0x08 | (form().edit_level() > 1 ? 0x06 : 0x00);
|
const word flags = 0x08 | (form().edit_level() > 1 ? 0x06 : 0x00);
|
||||||
@ -1553,7 +1635,7 @@ bool TPrint_section::edit(const char* title)
|
|||||||
if (field(i).edit(*_msk))
|
if (field(i).edit(*_msk))
|
||||||
{
|
{
|
||||||
field(i).print_on(a.row(i));
|
field(i).print_on(a.row(i));
|
||||||
dirty = TRUE;
|
_dirty = TRUE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case K_CTRL + 'N':
|
case K_CTRL + 'N':
|
||||||
@ -1570,7 +1652,7 @@ bool TPrint_section::edit(const char* title)
|
|||||||
|
|
||||||
TToken_string s(128); item->print_on(s);
|
TToken_string s(128); item->print_on(s);
|
||||||
a.insert(s, i);
|
a.insert(s, i);
|
||||||
dirty = TRUE;
|
_dirty = TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -1579,7 +1661,7 @@ bool TPrint_section::edit(const char* title)
|
|||||||
{
|
{
|
||||||
_item.destroy(i, TRUE);
|
_item.destroy(i, TRUE);
|
||||||
a.destroy(i);
|
a.destroy(i);
|
||||||
dirty = TRUE;
|
_dirty = TRUE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -1587,8 +1669,8 @@ bool TPrint_section::edit(const char* title)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
set_dirty(dirty);
|
set_dirty(_dirty);
|
||||||
return dirty;
|
return _dirty;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TPrint_section::print_on(ostream& out) const
|
void TPrint_section::print_on(ostream& out) const
|
||||||
@ -2179,9 +2261,9 @@ bool TForm::write_profile()
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
TForm::TForm(const char* name, long code, int lev)
|
TForm::TForm(const char* name, long code, int lev, const char* desc)
|
||||||
: _name(name), _code(code), _relation(NULL), _cursor(NULL), _rel_desc(NULL),
|
: _name(name), _code(code), _relation(NULL), _cursor(NULL), _rel_desc(NULL),
|
||||||
_isnew(FALSE), _editlevel(lev)
|
_isnew(FALSE), _editlevel(lev), _desc(desc)
|
||||||
{
|
{
|
||||||
main_app().begin_wait();
|
main_app().begin_wait();
|
||||||
|
|
||||||
@ -2199,7 +2281,7 @@ TForm::TForm(const char* name, long code, int lev)
|
|||||||
// create new form
|
// create new form
|
||||||
forms.put("TIPOPROF", _name);
|
forms.put("TIPOPROF", _name);
|
||||||
forms.put("CODPROF", _code);
|
forms.put("CODPROF", _code);
|
||||||
forms.put("DESC", _name);
|
forms.put("DESC", _desc);
|
||||||
forms.write();
|
forms.write();
|
||||||
}
|
}
|
||||||
else _desc = forms.get("DESC");
|
else _desc = forms.get("DESC");
|
||||||
|
@ -44,8 +44,10 @@ class TPrint_section : public TArray
|
|||||||
|
|
||||||
TForm* _form; // Form cui appartiene alla sezione
|
TForm* _form; // Form cui appartiene alla sezione
|
||||||
pagetype _page_type; // Tipo della pagina
|
pagetype _page_type; // Tipo della pagina
|
||||||
|
bool _subsection; // e' una sottosezione
|
||||||
|
|
||||||
TArray _item; // Lista dei campi da stampare
|
TArray _item; // Lista dei campi da stampare
|
||||||
|
int _repeat_count; // n. ripetizioni eseguite
|
||||||
|
|
||||||
const TPrint_section& copy(const TPrint_section& ps);
|
const TPrint_section& copy(const TPrint_section& ps);
|
||||||
|
|
||||||
@ -66,6 +68,7 @@ public:
|
|||||||
int offset_x() const { return _x; }
|
int offset_x() const { return _x; }
|
||||||
int offset_y() const { return _y; }
|
int offset_y() const { return _y; }
|
||||||
void offset(int& x, int& y) const;
|
void offset(int& x, int& y) const;
|
||||||
|
void set_repeat_count(int x) { _repeat_count = x; }
|
||||||
|
|
||||||
virtual bool ok() const { return height() > 0 || fields() > 0; }
|
virtual bool ok() const { return height() > 0 || fields() > 0; }
|
||||||
|
|
||||||
@ -83,7 +86,7 @@ public:
|
|||||||
void set_dirty(bool d = TRUE) { _dirty = d; }
|
void set_dirty(bool d = TRUE) { _dirty = d; }
|
||||||
|
|
||||||
const TPrint_section& operator=(const TPrint_section& ps) { return copy(ps); }
|
const TPrint_section& operator=(const TPrint_section& ps) { return copy(ps); }
|
||||||
TPrint_section(TForm* parent, pagetype pt);
|
TPrint_section(TForm* parent, pagetype pt, bool subsection = FALSE);
|
||||||
TPrint_section(const TPrint_section& ps) { copy(ps); }
|
TPrint_section(const TPrint_section& ps) { copy(ps); }
|
||||||
virtual ~TPrint_section();
|
virtual ~TPrint_section();
|
||||||
};
|
};
|
||||||
@ -149,6 +152,7 @@ public:
|
|||||||
long code() const { return _code; }
|
long code() const { return _code; }
|
||||||
|
|
||||||
bool edit_level() const { return _editlevel; }
|
bool edit_level() const { return _editlevel; }
|
||||||
|
void set_description(const char* s) { _desc = s; }
|
||||||
|
|
||||||
TRelation* relation() const { return _relation; }
|
TRelation* relation() const { return _relation; }
|
||||||
TRelation_description& rel_desc() const;
|
TRelation_description& rel_desc() const;
|
||||||
@ -160,7 +164,8 @@ public:
|
|||||||
|
|
||||||
// if code == NULL it's a base form
|
// if code == NULL it's a base form
|
||||||
// otherwise it's integrated by a file definition
|
// otherwise it's integrated by a file definition
|
||||||
TForm(const char* form, long code = 0L, int editlevel = 0);
|
TForm(const char* form, long code = 0L, int editlevel = 0,
|
||||||
|
const char* desc = "");
|
||||||
virtual ~TForm();
|
virtual ~TForm();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user