Patch level : 2.2 84

Files correlati     :  ci0.exe
Ricompilazione Demo : [ ]
Commento            :

Modulo contabilità industriale : finiti ritocchi al disegno etc

Si dia inizio alle danze


git-svn-id: svn://10.65.10.50/trunk@13008 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 2005-04-26 18:43:47 +00:00
parent dfd332e024
commit d87aed9b33
4 changed files with 169 additions and 142 deletions

View File

@ -22,71 +22,70 @@
void TImmissioneDocumenti_app::init_tabs() void TImmissioneDocumenti_app::init_tabs()
{ {
TImmissioneDocumenti_mask & m = mask();
TToken_string pagenames; TToken_string pagenames;
const short id = F_AL01; const short id = F_AL01;
int item = 0; int items = 0;
_filters.destroy(); m.filters().destroy();
m.ordered().reset();
pagenames = ""; pagenames = "";
TConfig configfile("ci0400.ini"); TConfig configfile("ci0400.ini");
configfile.set_paragraph("Main"); configfile.set_paragraph("Main");
while (configfile.exist("Descr",item)) while (configfile.exist("Descr",items))
{ {
pagenames.add(configfile.get("Descr","Main",item)); pagenames.add(configfile.get("Descr","Main",items));
_filters.add(configfile.get("Filter","Main",item)); m.filters().add(configfile.get("Filter","Main",items));
_mask->activate_almanac(id + item, item, TDate(TODAY)); m.activate_almanac(id + items, items, TDate(TODAY));
_mask->almanac(item).set_padding(0); items++;
item++;
} }
if (item>0) if (items > 0)
{ {
_mask->set_caption(pagenames); m.set_caption(pagenames);
_mask->disable_page(item); m.disable_page(items);
} }
} }
void TImmissioneDocumenti_app::init_flags() void TImmissioneDocumenti_app::init_flags()
{ {
int filters; TImmissioneDocumenti_mask & m = mask();
int items; const int items = m.filters().items();
TDate currdate; TDate currdate;
TDate currstart; TDate currstart;
m.ordered().reset();
for(int i = 0; i < items; i++)
{
TString filter; TString filter;
filters = _filters.items(); filter << "(ANNO==\"" << _year << "\")" << "&&" << "(CODNUM==\"" << m.filters().row(i) << "\")";
_ordered.reset();
for(int i=0;i<filters;i++)
{
filter = "";
filter << "(ANNO==\"" << _year << "\")";
filter << "&&";
filter << "(CODNUM==\"" << _filters.row(i) << "\")";
TCodice_numerazione c(_filters.row(i));
if (!c.dont_test_datadoc())
_ordered.set(i);
TRelation relation(LF_DOC); TRelation relation(LF_DOC);
TSorted_cursor cursor(&relation, "DATADOC", filter); TSorted_cursor cursor(&relation, "DATADOC", filter);
items = cursor.items(); TCodice_numerazione c(m.filters().row(i));
if (_flags.items()>i) if (!c.dont_test_datadoc())
((TBit_array&)_flags[i]).reset(); m.ordered().set(i);
const int items = cursor.items();
if (m.flags().items()>i)
((TBit_array&) m.flags()[i]).reset();
else else
_flags.add(new TBit_array(366),i); m.flags().add(new TBit_array(366),i);
for (cursor=0;cursor.pos()<items;++cursor) TBit_array & fl = (TBit_array&) m.flags()[i];
{ TDate caput_anni(1, 1, _year);
currdate = relation.lfile().get_date(DOC_DATADOC); for (cursor = 0; cursor.pos() < items; ++cursor)
((TBit_array&)_flags[i]).set(currdate-_newyearsday, 1); fl.set(relation.lfile().get_date(DOC_DATADOC) - caput_anni, 1);
} caput_anni += fl.last_one();
m.almanac(i).set_insert_date(m.ordered()[i] ? caput_anni : botime);
} }
} }
@ -111,17 +110,7 @@ bool TImmissioneDocumenti_app::destroy()
void TImmissioneDocumenti_app::main_loop() void TImmissioneDocumenti_app::main_loop()
{ {
while (_mask->run() == K_ENTER) while (_mask->run() != K_QUIT);
{
TDate selday = _mask->last_selected_day();
int currpage = _mask->last_selected_page();
TDate last_datadoc(1, 1, selday.year());
last_datadoc += ((TBit_array&)_flags[currpage]).last_one();
const bool can_insert = (selday >= last_datadoc) || !ordered(currpage);
_mask->open_inner_sheet(selday,_filters.row(currpage), can_insert);
}
} }
// Chiamate dalla maschera // Chiamate dalla maschera
@ -129,16 +118,14 @@ void TImmissioneDocumenti_app::main_loop()
void TImmissioneDocumenti_app::change_year(int newyear, bool init_flg) void TImmissioneDocumenti_app::change_year(int newyear, bool init_flg)
{ {
_year = newyear; _year = newyear;
_newyearsday.set_day(1); if (init_flg)
_newyearsday.set_month(1); init_flags();
_newyearsday.set_year(_year);
if (init_flg) init_flags();
} }
bool TImmissioneDocumenti_app::has_documents(int currpage, TDate& day) bool TImmissioneDocumenti_app::has_documents(int currpage, TDate& day)
{ {
return (((TBit_array&)_flags[currpage])[day-_newyearsday]); const TDate caput_anni(1, 1, _year);
return (((TBit_array&) _mask->flags()[currpage])[day - caput_anni]);
} }
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
@ -147,14 +134,15 @@ bool TImmissioneDocumenti_app::has_documents(int currpage, TDate& day)
// Routines Proprietarie // Routines Proprietarie
void TImmissioneDocumenti_mask::open_inner_sheet(TDate date, TString doctype, bool can_insert) void TImmissioneDocumenti_mask::open_day_mask(TDate date)
{ {
int exitval; if (!date.ok())
date = curr_almanac().selected_date();
const int currpage = curr_page();
const TString & doctype = filters().row(currpage);
TString filter; TString filter;
filter << "(ANSI(DATADOC)==\"" << date.string(ANSI) << "\")"; filter << "(ANSI(DATADOC)==\"" << date.string(ANSI) << "\")" << "&&" << "(CODNUM==\"" << doctype << "\")";
filter << "&&";
filter << "(CODNUM==\"" << doctype << "\")";
TRelation relation(LF_DOC); TRelation relation(LF_DOC);
relation.add(LF_CLIFO, "TIPOCF==TIPOCF|CODCF==CODCF"); relation.add(LF_CLIFO, "TIPOCF==TIPOCF|CODCF==CODCF");
@ -165,9 +153,9 @@ void TImmissioneDocumenti_mask::open_inner_sheet(TDate date, TString doctype, bo
"ANNO|CODNUM|TIPODOC|NUMDOCRIF|STATO|DATADOCRIF|NDOC|20->RAGSOC", "ANNO|CODNUM|TIPODOC|NUMDOCRIF|STATO|DATADOCRIF|NDOC|20->RAGSOC",
TR("Selezione documenti"), TR("Selezione documenti"),
HR("Anno|Num.|Tipo|Docum.Rif.|Stato|Data@10|Documento|Ragione Sociale@50"), HR("Anno|Num.|Tipo|Docum.Rif.|Stato|Data@10|Documento|Ragione Sociale@50"),
can_insert ? 0x02|0x04 : 0x04); almanac().can_insert(date) ? 0x02|0x04 : 0x04);
exitval = sheet.run(); KEY exitval = sheet.run();
switch(exitval) switch(exitval)
{ {
@ -185,9 +173,26 @@ void TImmissioneDocumenti_mask::open_inner_sheet(TDate date, TString doctype, bo
default: default:
break; break;
} }
if (ordered()[currpage])
{
TDate caput_anni(1, 1, date.year());
TBit_array & fl = (TBit_array&) flags()[currpage];
filter.cut(0);
filter << "(ANNO==\"" << date.year() << "\")" << "&&" << "(CODNUM==\"" << filters().row(currpage) << "\")";
cursor.setfilter(filter);
const int items = cursor.items();
for (cursor = 0; cursor.pos() < items; ++cursor)
fl.set(relation.lfile().get_date(DOC_DATADOC) - caput_anni, 1);
caput_anni += fl.last_one();
almanac(currpage).set_insert_date(caput_anni);
}
} }
void TImmissioneDocumenti_mask::call_ve0(int exitval, TRelation& relation, TDate& date, TString& doctype) void TImmissioneDocumenti_mask::call_ve0(int exitval, TRelation& relation, TDate& date, const TString& doctype)
{ {
TFilename tempfile; TFilename tempfile;
tempfile.tempdir(); tempfile.tempdir();
@ -215,7 +220,7 @@ void TImmissioneDocumenti_mask::call_ve0(int exitval, TRelation& relation, TDate
} }
configfile.set("PROVV", "D", "33"); configfile.set("PROVV", "D", "33");
configfile.set("ANNO", last_selected_day().year(), "33"); configfile.set("ANNO", date.year(), "33");
configfile.set("CODNUM", doctype, "33"); configfile.set("CODNUM", doctype, "33");
} }

View File

@ -7,20 +7,30 @@
class TImmissioneDocumenti_mask : public TAlmanac_mask class TImmissioneDocumenti_mask : public TAlmanac_mask
{ {
TString_array _filters; // filtri tipodoc per ogni tab
TArray _flags; // array di TBit_array. Ognuno di essi è lungo 366 e rappresenta i flag di presenza documenti per ogni giorno dell'anno. Ogni page della maschera ha bisogno di un bitarray diverso
TBit_array _ordered;
protected: protected:
public: public:
// ereditato da TAlmanac_mask // ereditato da TAlmanac_mask
virtual bool is_date_void(int currpage, TDate& cdate); virtual bool is_date_void(int currpage, TDate& cdate);
virtual void change_year(int newyear); virtual void change_year(int newyear);
const TString_array & filters() const { return _filters;}
const TArray & flags() const { return _flags;}
const TBit_array & ordered() const { return _ordered;}
TString_array & filters() { return _filters;}
TArray & flags() { return _flags;}
TBit_array & ordered() { return _ordered;}
public: public:
// apertura del foglio interno di gestione dei documenti // apertura del foglio interno di gestione dei documenti
void open_inner_sheet(TDate date, TString doctype, bool can_insert); virtual void open_day_mask(TDate date);
private: private:
// chiamata del programma ve0 // chiamata del programma ve0
void call_ve0(int exitval, TRelation& relation, TDate& date, TString& doctype); void call_ve0(int exitval, TRelation& relation, TDate& date, const TString& doctype);
public: public:
// Costruttore // Costruttore
@ -35,14 +45,8 @@ public:
class TImmissioneDocumenti_app: public TSkeleton_application class TImmissioneDocumenti_app: public TSkeleton_application
{ {
private:
TImmissioneDocumenti_mask* _mask; TImmissioneDocumenti_mask* _mask;
TString_array _filters; // filtri tipodoc per ogni tab
TArray _flags; // array di TBit_array. Ognuno di essi è lungo 366 e rappresenta i flag di presenza documenti per ogni giorno dell'anno. Ogni page della maschera ha bisogno di un bitarray diverso
TBit_array _ordered;
TDate _newyearsday; // capodanno dell'anno corrente, per uso interno
int _year; // anno corrente int _year; // anno corrente
private: private:
@ -57,9 +61,9 @@ protected:
public: public:
bool has_documents(int currpage, TDate& day); // passata come funzione alla maschera bool has_documents(int currpage, TDate& day); // passata come funzione alla maschera
void change_year(int newyear, bool init_flg = true); // passata come funzione alla maschera void change_year(int newyear, bool init_flg = true); // passata come funzione alla maschera
TImmissioneDocumenti_mask & mask() const {return *_mask; }
public: public:
bool ordered(byte p) { return _ordered[p]; }
TImmissioneDocumenti_app() { change_year(TDate(TODAY).year(), false); } TImmissioneDocumenti_app() { change_year(TDate(TODAY).year(), false); }
virtual ~TImmissioneDocumenti_app() {} virtual ~TImmissioneDocumenti_app() {}
}; };

View File

@ -25,18 +25,16 @@ TMask_field* TAlmanac_mask::parse_field(TScanner& scanner)
bool TAlmanac_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) bool TAlmanac_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{ {
byte page = curr_page();
if (page >=0 && page < 16)
{
TAlmanac_field & al = curr_almanac();
switch (o.dlg()) switch (o.dlg())
{ {
case F_PREVMONTH: case F_PREVMONTH:
if (e == fe_button)
{ {
TAlmanac_field & al = curr_almanac();
const int year = al.selected_year(); const int year = al.selected_year();
al.move_selected_month(-1); al.move_selected_month(-1);
this->set(F_CHANGEMONTH, al.selected_month()); set(F_CHANGEMONTH, al.selected_month());
if (year != al.selected_year()) if (year != al.selected_year())
{ {
set(F_CHANGEYEAR, al.selected_year()); set(F_CHANGEYEAR, al.selected_year());
@ -45,10 +43,17 @@ bool TAlmanac_mask::on_field_event(TOperable_field& o, TField_event e, long joll
} }
break; break;
case F_CHANGEMONTH: case F_CHANGEMONTH:
if (e == fe_modify)
{
TAlmanac_field & al = curr_almanac();
al.set_selected_month(get_int(F_CHANGEMONTH)); al.set_selected_month(get_int(F_CHANGEMONTH));
}
break; break;
case F_NEXTMONTH: case F_NEXTMONTH:
if (e == fe_button)
{ {
TAlmanac_field & al = curr_almanac();
const int year = al.selected_year(); const int year = al.selected_year();
al.move_selected_month(1); al.move_selected_month(1);
@ -61,12 +66,12 @@ bool TAlmanac_mask::on_field_event(TOperable_field& o, TField_event e, long joll
} }
break; break;
case F_CHANGEYEAR: case F_CHANGEYEAR:
if (e == fe_modify)
set_year(get_int(F_CHANGEYEAR)); set_year(get_int(F_CHANGEYEAR));
break; break;
default: default:
break; break;
} }
}
return true; return true;
} }
@ -75,14 +80,23 @@ void TAlmanac_mask::activate_almanac(const short id, int page, TDate& sdate)
{ {
_almanacs[page] = id2pos(id); _almanacs[page] = id2pos(id);
almanac(page).set_selected_date(sdate); almanac(page).set_selected_date(sdate);
if (page > _lastpage)
_lastpage = page;
set(F_CHANGEMONTH, sdate.month()); set(F_CHANGEMONTH, sdate.month());
if (page>_activepages)
_activepages = page;
} }
void TAlmanac_mask::set_year(int newyear) TAlmanac_field & TAlmanac_mask::almanac(byte page) const
{ {
for(byte p = 0; p < _activepages; p++) if (page > _lastpage)
page = curr_page();
if (page > _lastpage)
page = 0;
return (TAlmanac_field &) fld(_almanacs[page]);
}
void TAlmanac_mask::set_year(int newyear)
{
for(byte p = 0; p <= _lastpage; p++)
almanac(p).set_selected_year(newyear); almanac(p).set_selected_year(newyear);
change_year(newyear); change_year(newyear);
} }
@ -98,7 +112,7 @@ void TAlmanac_mask::activate_almanac(const short id, int page, TDate& sdate)
} }
TAlmanac_mask::TAlmanac_mask(const char * name) TAlmanac_mask::TAlmanac_mask(const char * name)
: TAutomask(), _activepages(0), _lastselectedday(TODAY), _lastselectedpage(1) : TAutomask(), _lastpage(0)
{ {
read_mask(name, 0, -1); read_mask(name, 0, -1);
set_handlers(); set_handlers();
@ -157,7 +171,6 @@ void TAlmanac_field::set_selected_year(int nyear)
win().force_update(); win().force_update();
} }
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
// TAlmanac_window // TAlmanac_window
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
@ -187,9 +200,9 @@ void TAlmanac_window::update()
pad = o.padding(); pad = o.padding();
row = 3; row = 3;
set_font("Verdana", XVT_FS_BOLD); set_font("", XVT_FS_BOLD);
set_color(NORMAL_COLOR, NORMAL_BACK_COLOR); set_color(NORMAL_COLOR, NORMAL_BACK_COLOR);
fh = 2 + xvt_dwin_get_font_size_mapped(win()); fh = CHARY;
if (o.show_month_name()) if (o.show_month_name())
{ {
@ -213,13 +226,17 @@ void TAlmanac_window::update()
{ {
if ((++cdate).wday()==1) row++; if ((++cdate).wday()==1) row++;
if (o.is_date_void(cpage, cdate)) col_b = NORMAL_BACK_COLOR;
col_b=NORMAL_BACK_COLOR;
else
col_b=REQUIRED_BACK_COLOR;
col_f=NORMAL_COLOR; col_f=NORMAL_COLOR;
if (o.is_date_void(cpage, cdate))
{
if (!o.can_insert(cdate))
col_b = DISABLED_BACK_COLOR;
}
else
col_b = FOCUS_BACK_COLOR;
set_pen(col_f); set_pen(col_f);
set_brush(col_b); set_brush(col_b);
@ -234,6 +251,12 @@ void TAlmanac_window::update()
rcttd.right = rct_l + rct_w - pad; rcttd.right = rct_l + rct_w - pad;
xvt_dwin_draw_rect(win(), &rcttd); xvt_dwin_draw_rect(win(), &rcttd);
if (cdate.is_holiday())
{
set_brush(o.can_insert(cdate) ? DISABLED_BACK_COLOR : NORMAL_COLOR, PAT_FDIAG);
xvt_dwin_draw_rect(win(), &rcttd);
}
if (o.is_selected(cdate.day())) if (o.is_selected(cdate.day()))
{ {
@ -242,7 +265,7 @@ void TAlmanac_window::update()
xvt_dwin_draw_rect(win(), &rcttd); xvt_dwin_draw_rect(win(), &rcttd);
} }
xvt_dwin_draw_text(win(), rct_l + pad + 2, fh + rct_t + pad + 2, str, -1); xvt_dwin_draw_text(win(), rct_l + pad + 2, fh + rct_t + pad, str, -1);
} }
while (!cdate.is_end_month()); while (!cdate.is_end_month());
} }
@ -270,7 +293,7 @@ bool TAlmanac_window::on_key(KEY key)
o.move_selected_day(+7); o.move_selected_day(+7);
break; break;
case K_ENTER: case K_ENTER:
((TAlmanac_mask&)o.mask()).exit_mask(); ((TAlmanac_mask&)o.mask()).open_day_mask();
break; break;
default: default:
return TField_window::on_key(key); return TField_window::on_key(key);
@ -311,7 +334,8 @@ void TAlmanac_window::handler(WINDOW win, EVENT* ep)
delta = 7*pnt_r + pnt_c - (7*(3+cdate.week()-fdate.week()) + cdate.wday()); delta = 7*pnt_r + pnt_c - (7*(3+cdate.week()-fdate.week()) + cdate.wday());
o.move_selected_day(delta); o.move_selected_day(delta);
if (ep->type==E_MOUSE_DBL) ((TAlmanac_mask&)o.mask()).exit_mask(); if (ep->type==E_MOUSE_DBL)
((TAlmanac_mask&)o.mask()).open_day_mask();
} }
break; break;
default: default:

View File

@ -23,16 +23,15 @@ class TAlmanac_field : public TWindowed_field
// @author:(INTERNAL) Brugno // @author:(INTERNAL) Brugno
// @access Protected Member // @access Protected Member
protected:
// @cmember:(INTERNAL) Parametro di visualizzazione: Separazione tra le celle del calenbdario // @cmember:(INTERNAL) Parametro di visualizzazione: Separazione tra le celle del calenbdario
int _padding; int _padding;
// @cmember:(INTERNAL) Parametro di visualizzazione: flag di visulizzazione del nome del mese // @cmember:(INTERNAL) Parametro di visualizzazione: flag di visulizzazione del nome del mese
bool _showmonthname; bool _showmonthname;
// @access Protected Member // @access Protected Member
protected:
// @cmember:(INTERNAL) Variabile interna: Data correntemente selezionato nel calendario // @cmember:(INTERNAL) Variabile interna: Data correntemente selezionato nel calendario
TDate _selecteddate; TDate _selecteddate;
TDate _dateinsert;
// @access Protected Member // @access Protected Member
protected: protected:
@ -79,11 +78,14 @@ public:
// @access Public Member // @access Public Member
public: public:
bool is_date_void(int currpage, TDate& cdate); bool is_date_void(int currpage, TDate& cdate);
// @cmember Gestione selezione: Setta la prima data dell'anno con l'inserimento attivo
void set_insert_date(TDate & d) { _dateinsert = d; }
bool can_insert(TDate &d) const { return d >= _dateinsert; }
// @access Public Member // @access Public Member
public: public:
// @cmember Costruttore // @cmember Costruttore
TAlmanac_field(TMask* m) : TWindowed_field(m),_showmonthname(true), _selecteddate(TODAY), _padding(2) { } TAlmanac_field(TMask* m) : TWindowed_field(m),_showmonthname(true), _selecteddate(TODAY), _dateinsert(botime), _padding(2) { }
// @cmember Distruttore // @cmember Distruttore
virtual ~TAlmanac_field() { } virtual ~TAlmanac_field() { }
}; };
@ -136,11 +138,7 @@ class TAlmanac_mask : public TAutomask
// @cmember:(INTERNAL) Puntatori ai campi calendario // @cmember:(INTERNAL) Puntatori ai campi calendario
short _almanacs[MAX_PAGES]; short _almanacs[MAX_PAGES];
// @cmember:(INTERNAL) Numero di pagine attive // @cmember:(INTERNAL) Numero di pagine attive
int _activepages; byte _lastpage;
// @cmember:(INTERNAL) Giorno selezionato prima dell'uscita della maschera
TDate _lastselectedday;
// @cmember:(INTERNAL) Pagina selezionata prima dell'uscita della maschera
int _lastselectedpage;
// @access Protected Member // @access Protected Member
@ -151,29 +149,25 @@ protected:
// @access Public Member // @access Public Member
public: public:
// shortcut per l'accesso all'almanacco della pagina corrente // shortcut per l'accesso all'almanacco della pagina corrente
TAlmanac_field & almanac(byte page) const { return (TAlmanac_field &) fld(_almanacs[page]);} TAlmanac_field & almanac(byte page = -1) const ;
// shortcut per l'accesso all'almanacco della pagina corrente // shortcut per l'accesso all'almanacco della pagina corrente
TAlmanac_field & curr_almanac() const { return almanac(curr_page());} TAlmanac_field & curr_almanac() const { return almanac();}
// override da TAutomask // override da TAutomask
virtual TMask_field* parse_field(TScanner& scanner); virtual TMask_field* parse_field(TScanner& scanner);
// @cmember Gestione calendari: Attiva l'almanacco sulla pagina specificata per la data specificata // @cmember Gestione calendari: Attiva l'almanacco sulla pagina specificata per la data specificata
void activate_almanac(short id, int page, TDate& sdate); void activate_almanac(short id, int page, TDate& sdate);
// @cmember Gestione calendari: disanilta le pagine non attive // @cmember Gestione calendari: disanilta le pagine non attive
void disable_pages() { disable_page(_activepages + 1); } void disable_pages() { disable_page(_lastpage + 1); }
// @cmember Gestione calendari: Cambia l'anno su tutti i calendari // @cmember Gestione calendari: Cambia l'anno su tutti i calendari
void set_year(int newyear); void set_year(int newyear);
// @cmember Gestione calendari: Ritorna il giorno selezionato nella pagina corrente // @cmember Gestione calendari: Ritorna il giorno selezionato nella pagina corrente
const TDate& selected_day() const { return curr_almanac().selected_date(); } const TDate& selected_day() const { return curr_almanac().selected_date(); }
// @cmember Gestione calendari: Ritorna l'ultimo giorno selezionato
const TDate& last_selected_day() const { return _lastselectedday; }
// @cmember Gestione calendari: Ritorna l'ultima pagina selezionato
const int last_selected_page() const { return _lastselectedpage; }
// @cmember Gestione eventi calendario: Controlla la presenza di documenti nella data attiva // @cmember Gestione eventi calendario: Controlla la presenza di documenti nella data attiva
virtual bool is_date_void(int currpage, TDate& cdate); virtual bool is_date_void(int currpage, TDate& cdate);
// @cmember Gestione eventi calendario: Controlla la presenza di documenti nella data attiva // @cmember Gestione eventi calendario: Controlla la presenza di documenti nella data attiva
virtual void change_year(int newyear); virtual void change_year(int newyear);
// @cmember Gestione selezione: Setta l'ultima selezione ed esce dalla maschera // @cmember Chiama la maschera o lo sheet legato al gioro selezionato
void exit_mask() { _lastselectedday = selected_day(); _lastselectedpage = curr_page(); stop_run(K_ENTER); } virtual void open_day_mask(TDate date = botime) { }
// @cmember Costruttore // @cmember Costruttore
TAlmanac_mask(const char * name); TAlmanac_mask(const char * name);