Patch level : 10.0 ???

Files correlati     : ci0.exe
Ricompilazione Demo : [ ]
Commento            :
Corretta gestione calendari su piu' pagine


git-svn-id: svn://10.65.10.50/trunk@17759 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2008-12-01 16:51:03 +00:00
parent 6f66498571
commit 9691e7fc16
6 changed files with 421 additions and 541 deletions

View File

@ -24,18 +24,18 @@
void TImmissioneDocumenti_app::init_tabs()
{
TImmissioneDocumenti_mask & m = mask();
TImmissioneDocumenti_mask& m = mask();
m.filters().destroy();
m.ordered().reset();
TConfig configfile(CONFIG_DITTA, "ci");
int items = 0;
TToken_string pagenames;
configfile.write_protect(); // Evita che vengan scritti inutili default
int items = 0;
while (items == 0 || configfile.exist("Descr",items))
{
pagenames.add(configfile.get("Descr", NULL, items, "Fatture"));
const TString& title = configfile.get("Descr", NULL, items, "Fatture");
m.filters().add(configfile.get("Filter", NULL, items, "F01"));
m.insert().set(items, configfile.get_bool("InsertRemain", NULL, items));
m.modify().set(items, configfile.get_bool("ModifyRemain", NULL, items));
@ -46,12 +46,9 @@ void TImmissioneDocumenti_app::init_tabs()
m.var_coll().add(configfile.get("Var", NULL, items), items);
m.mod_coll().set(items, configfile.get_bool("ModColl", NULL, items));
m.del_closed().set(items, configfile.get_bool("DeleteClosed", NULL, items));
m.activate_almanac(F_AL01 + items, items, TDate(TODAY));
m.activate_almanac(F_AL01 + items, title);
items++;
}
m.disable_page(items);
m.set_caption(pagenames);
}
void TImmissioneDocumenti_app::init_flags()
@ -134,7 +131,7 @@ void TImmissioneDocumenti_app::change_year(int newyear, bool init_flg)
init_flags();
}
bool TImmissioneDocumenti_app::has_documents(int currpage, TDate& day)
bool TImmissioneDocumenti_app::has_documents(int currpage, const TDate& day)
{
const int year = day.year();
if (year != _year)
@ -157,14 +154,14 @@ void TImmissioneDocumenti_mask::next_page(int p)
enable(DLG_DELREC, del_closed()[k]);
}
void TImmissioneDocumenti_mask::open_day_mask(const TDate & date)
void TImmissioneDocumenti_mask::open_day_mask(const TDate & date_mask)
{
TDate d(date);
TDate d(date_mask);
if (!d.ok())
d = curr_almanac().selected_date();
d = almanac().selected_date();
const int currpage = curr_page();
const TString & codnum = filters().row(currpage);
TString filter;
@ -182,7 +179,7 @@ void TImmissioneDocumenti_mask::open_day_mask(const TDate & date)
"ANNO|CODNUM|TIPODOC|NUMDOCRIF|STATO|DATADOCRIF|NDOC|20->RAGSOC",
TR("Selezione documenti"),
HR("Anno|Num.|Tipo|Docum.Rif.|Stato|Data@10|Documento|Ragione Sociale@50"),
almanac().can_insert(date) ? 0x02|0x04 : 0x04, 3);
almanac().can_insert(d) ? 0x02|0x04 : 0x04, 3);
TList_field& fl = sheet.add_list(101, 0, "Tipo documento ", 1, 1, 60);
TToken_string codes;
TToken_string values;
@ -210,23 +207,23 @@ void TImmissioneDocumenti_mask::open_day_mask(const TDate & date)
switch(exitval)
{
case K_ENTER:
call_ve0(exitval, relation, date, codnum, EMPTY_STRING, currpage);
call_ve0(exitval, relation, d, codnum, EMPTY_STRING, currpage);
break;
case K_DEL:
call_ve0(exitval, relation, date, codnum);
call_ve0(exitval, relation, d, codnum);
break;
case K_INS:
{
const TString16 tipo(sheet.get(101));
call_ve0(exitval, relation, date, codnum, tipo, currpage);
call_ve0(exitval, relation, d, codnum, tipo, currpage);
}
break;
default:
break;
}
}
update_current_calendar(date.year());
update_current_calendar(d.year());
}
void TImmissioneDocumenti_mask::update_current_calendar(int year)

View File

@ -91,7 +91,7 @@ protected:
virtual bool destroy(void) ;
public:
bool has_documents(int currpage, TDate& day); // passata come funzione alla maschera
bool has_documents(int currpage, const TDate& day); // 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; }

View File

@ -4,197 +4,75 @@ TOOLBAR "topbar" 0 0 0 2
BUTTON DLG_SELECT 10 2
BEGIN
PROMPT -17 -11 "~Selezione"
PROMPT 1 1 "~Selezione"
MESSAGE EXIT,K_ENTER
PICTURE BMP_SELECT
END
BUTTON DLG_DELREC 10 2
BEGIN
PROMPT -67 -11 "~Elimina"
MESSAGE EXIT,K_DEL
PICTURE BMP_DELREC
PICTURE BMP_DELRECDN
PROMPT 2 1 "~Elimina"
END
BUTTON DLG_QUIT 10 2
BUTTON DLG_NULL 10 2
BEGIN
PROMPT -77 -11 "~Fine"
MESSAGE EXIT,K_QUIT
PICTURE BMP_QUIT
PICTURE BMP_QUITDN
PROMPT -1 -1 ""
END
ENDPAGE
TOOLBAR "Toolbar" 0 -2 0 2
BUTTON F_PREVYEAR 10 2
BEGIN
PROMPT 3 1 "Anno -"
PICTURE BMP_FIRSTREC
END
BUTTON F_PREVMONTH 10 2
BEGIN
PROMPT -26 -11 "~Precedente"
PROMPT 4 1 "Mese -"
PICTURE BMP_PREVREC
END
LIST F_CHANGEMONTH 10
BEGIN
PROMPT -36 -11 ""
FLAGS "M"
END
NUMBER F_CHANGEYEAR 10
BEGIN
PROMPT -46 -11 ""
FLAGS "A"
END
BUTTON F_NEXTMONTH 10 2
BEGIN
PROMPT -56 -11 "S~uccessivo"
PROMPT 5 1 "Mese +"
PICTURE BMP_NEXTREC
END
BUTTON F_NEXTYEAR 10 2
BEGIN
PROMPT 6 1 "Anno -"
PICTURE BMP_LASTREC
END
BUTTON DLG_NULL 10 2
BEGIN
PROMPT -1 -1 ""
END
BUTTON DLG_INFO 10 2
BEGIN
PROMPT 7 1 ""
END
BUTTON DLG_HELP 10 2
BEGIN
PROMPT 8 1 ""
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT 9 1 "~Fine"
MESSAGE EXIT,K_QUIT
END
ENDPAGE
PAGE "Pagina 1" 0 2 0 0
PAGE "Documenti" 0 2 0 0
ALMANAC F_AL01 70 16
ALMANAC F_AL01 70 -2
BEGIN
PROMPT -3 1 ""
END
ENDPAGE
PAGE "Pagina 2" -1 -1 80 20
ALMANAC F_AL02 70 16
BEGIN
PROMPT -3 1 ""
END
ENDPAGE
PAGE "Pagina 3" -1 -1 80 20
ALMANAC F_AL03 70 16
BEGIN
PROMPT -3 1 ""
END
ENDPAGE
PAGE "Pagina 4" -1 -1 80 20
ALMANAC F_AL04 70 16
BEGIN
PROMPT -3 1 ""
END
ENDPAGE
PAGE "Pagina 5" -1 -1 80 20
ALMANAC F_AL05 70 16
BEGIN
PROMPT -3 1 ""
END
ENDPAGE
PAGE "Pagina 6" -1 -1 80 20
ALMANAC F_AL06 70 16
BEGIN
PROMPT -3 1 ""
END
ENDPAGE
PAGE "Pagina 7" -1 -1 80 20
ALMANAC F_AL07 70 16
BEGIN
PROMPT -3 1 ""
END
ENDPAGE
PAGE "Pagina 8" -1 -1 80 20
ALMANAC F_AL08 70 16
BEGIN
PROMPT -3 1 ""
END
ENDPAGE
PAGE "Pagina 9" -1 -1 80 20
ALMANAC F_AL09 70 16
BEGIN
PROMPT -3 1 ""
END
ENDPAGE
PAGE "Pagina 10" -1 -1 80 20
ALMANAC F_AL10 70 16
BEGIN
PROMPT -3 1 ""
END
ENDPAGE
PAGE "Pagina 11" -1 -1 80 20
ALMANAC F_AL11 70 16
BEGIN
PROMPT -3 1 ""
END
ENDPAGE
PAGE "Pagina 12" -1 -1 80 20
ALMANAC F_AL12 70 16
BEGIN
PROMPT -3 1 ""
END
ENDPAGE
PAGE "Pagina 13" -1 -1 80 20
ALMANAC F_AL13 70 16
BEGIN
PROMPT -3 1 ""
END
ENDPAGE
PAGE "Pagina 14" -1 -1 80 20
ALMANAC F_AL14 70 16
BEGIN
PROMPT -3 1 ""
END
ENDPAGE
PAGE "Pagina 15" -1 -1 80 20
ALMANAC F_AL15 70 16
BEGIN
PROMPT -3 1 ""
END
ENDPAGE
PAGE "Pagina 16" -1 -1 80 20
ALMANAC F_AL16 70 16
BEGIN
PROMPT -3 1 ""
END
ENDPAGE
ENDMASK

View File

@ -1,228 +1,71 @@
#include <colors.h>
#include <config.h>
#include <automask.h>
#include <diction.h>
#include <image.h>
#include <tabutil.h>
#include <xvtility.h>
#include <defmask.h>
#include <utility.h> // file functions
#include <xvt.h>
#include "cilib.h"
#include "cimsk.h"
///////////////////////////////////////////////////////////
// TAlmanac_mask
///////////////////////////////////////////////////////////
TMask_field* TAlmanac_mask::parse_field(TScanner& scanner)
{
const TString& k = scanner.key();
if (k.starts_with("AL", true))
return new TAlmanac_field(this);
return TAutomask::parse_field(scanner);
}
bool TAlmanac_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case F_PREVMONTH:
if (e == fe_button)
{
TAlmanac_field & al = curr_almanac();
const int year = al.selected_year();
al.move_selected_month(-1);
set(F_CHANGEMONTH, al.selected_month());
if (year != al.selected_year())
{
set(F_CHANGEYEAR, al.selected_year());
set_year(al.selected_year());
}
}
break;
case F_CHANGEMONTH:
if (e == fe_modify)
{
TAlmanac_field & al = curr_almanac();
al.set_selected_month(get_int(F_CHANGEMONTH));
}
break;
case F_NEXTMONTH:
if (e == fe_button)
{
TAlmanac_field & al = curr_almanac();
const int year = al.selected_year();
al.move_selected_month(1);
set(F_CHANGEMONTH, al.selected_month());
if (year != al.selected_year())
{
set(F_CHANGEYEAR, al.selected_year());
set_year(al.selected_year());
}
}
break;
case F_CHANGEYEAR:
if (e == fe_modify)
set_year(get_int(F_CHANGEYEAR));
break;
default:
break;
}
return true;
}
void TAlmanac_mask::activate_almanac(const short id, int page, TDate& sdate)
{
_almanacs[page] = id2pos(id);
almanac(page).set_selected_date(sdate);
if (page > _lastpage)
_lastpage = page;
set(F_CHANGEMONTH, sdate.month());
}
TAlmanac_field & TAlmanac_mask::almanac(byte page) const
{
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);
change_year(newyear);
}
void TAlmanac_mask::change_year(int newyear)
{
return;
}
bool TAlmanac_mask::is_date_void(int currpage, TDate& cdate)
{
return TRUE;
}
TAlmanac_mask::TAlmanac_mask(const char * name)
: TAutomask(), _lastpage(0)
{
read_mask(name, 0, -1);
set_handlers();
}
///////////////////////////////////////////////////////////
// TAlmanac_field
///////////////////////////////////////////////////////////
TField_window* TAlmanac_field::create_window(int x, int y, int dx, int dy, WINDOW parent)
{
TAlmanac_window * obj = new TAlmanac_window(x, y, dx, dy, parent, this);
RCT rct; xvt_vobj_get_outer_rect(obj->win(), &rct);
const int pad = 6;
if (rct.left > pad * 4)
{
_image = new TImage_window(-1, y, -1, dy, parent, this);
RCT img_rect; xvt_vobj_get_outer_rect(_image->win(), &img_rect);
img_rect.right = rct.left - pad ;
img_rect.left = pad;
xvt_vobj_move(_image->win(), (RCT*)&img_rect);
}
return obj;
}
bool TAlmanac_field::is_date_void(int currpage, TDate& cdate)
{
return ((TAlmanac_mask &)mask()).is_date_void(currpage, cdate);
}
void TAlmanac_field::force_update(bool update_image)
{
win().force_update();
if (update_image && _image != NULL)
_image->force_update();
}
void TAlmanac_field::set_selected_day(int nday)
{
if(nday>=1 && nday<=TDate::last_day(_selecteddate.month(),_selecteddate.year()))
{
TAlmanac_mask& m = (TAlmanac_mask&)mask();
_selecteddate.set_day(nday);
force_update();
}
}
void TAlmanac_field::move_selected_day(int ddays)
{
const int old_month = _selecteddate.month();
_selecteddate+=ddays;
force_update(old_month != _selecteddate.month());
}
void TAlmanac_field::set_selected_month(int nmonth)
{
if(nmonth >= 1 && nmonth <= 12)
{
_selecteddate.set_month(nmonth);
force_update(true);
}
}
void TAlmanac_field::move_selected_month(int dmonths)
{
_selecteddate.addmonth(dmonths);
force_update(true);
}
void TAlmanac_field::set_selected_year(int nyear)
{
_selecteddate.set_year(nyear);
force_update(true);
}
///////////////////////////////////////////////////////////
// TAlmanac_window
///////////////////////////////////////////////////////////
// @doc EXTERNAL
// @class TAlmanac_window | Finestra associata ad un TAlmanac_field
//
// @base public | TField_window
class TAlmanac_window : public TField_window
{
// @author:(INTERNAL) Brugno
// @access Protected Member
protected:
// override da TField_window
virtual void update();
// override da TField_window
virtual void handler(WINDOW win, EVENT* ep);
// @access Public Member
public:
// override da TField_window
virtual bool on_key(KEY k);
// @access Public Member
public:
// @cmember Costruttore
TAlmanac_window(int x, int y, int dx, int dy, WINDOW parent, TWindowed_field *owner);
// @cmember Distruttore
virtual ~TAlmanac_window() {}
};
void TAlmanac_window::update()
{
COLOR col_f, col_b;
RCT rct; xvt_vobj_get_client_rect(win(), &rct);
RCT rcttd;
TString str;
int rct_w, rct_h;
int rct_t, rct_l;
int pad;
int row;
int fh;
int cpage;
TAlmanac_field & o = (TAlmanac_field&)owner();
TAlmanac_field& o = (TAlmanac_field&)owner();
TField_window::update();
TDate cdate = o.selected_date();
cdate.set_day(1);
cpage = o.mask().curr_page();
int cpage = o.mask().curr_page();
rct_w = ((rct.right - rct.left) / 9);
rct_h = ((rct.bottom - rct.top) / 9);
pad = o.padding();
row = 3;
int rct_l, rct_t;
int rct_w = (rct.right - rct.left) / 9;
int rct_h = (rct.bottom - rct.top) / 9;
int pad = o.padding();
int row = 3;
set_font("", XVT_FS_BOLD);
set_color(NORMAL_COLOR, NORMAL_BACK_COLOR);
fh = CHARY;
int fh = CHARY;
if (o.show_month_name())
{
@ -277,7 +120,6 @@ void TAlmanac_window::update()
xvt_dwin_draw_rect(win(), &rcttd);
}
if (o.is_selected(cdate.day()))
{
set_pen(FOCUS_COLOR,1);
@ -292,106 +134,108 @@ void TAlmanac_window::update()
bool TAlmanac_window::on_key(KEY key)
{
TAlmanac_field & o = (TAlmanac_field&)owner();
int smonth, syear;
TAlmanac_field& o = (TAlmanac_field&)owner();
TAlmanac_mask& m = (TAlmanac_mask&)o.mask();
smonth = o.selected_month();
syear = o.selected_year();
const int smonth = o.selected_month();
const int syear = o.selected_year();
switch (key)
{
case K_RIGHT:
o.move_selected_day(1);
break;
case K_LEFT:
o.move_selected_day(-1);
break;
case K_UP:
o.move_selected_day(-7);
break;
case K_DOWN:
o.move_selected_day(+7);
break;
case K_SPACE:
case K_ENTER:
((TAlmanac_mask&)o.mask()).open_day_mask();
break;
case K_PREV:
case K_NEXT:
case K_CTRL+K_F1:
case K_CTRL+K_F2:
case K_CTRL+K_F3:
case K_CTRL+K_F4:
case K_CTRL+K_F5:
case K_CTRL+K_F6:
case K_CTRL+K_F7:
case K_CTRL+K_F8:
case K_CTRL+K_F9:
case K_CTRL+K_F10:
case K_CTRL+K_F11:
case K_CTRL+K_F12:
o.mask().on_key(key);
break;
default:
return TField_window::on_key(key);
case K_RIGHT: o.move_selected_day(1); break;
case K_LEFT: o.move_selected_day(-1); break;
case K_UP: o.move_selected_day(-7); break;
case K_DOWN: o.move_selected_day(+7); break;
case K_SPACE:
case K_ENTER: m.open_day_mask(); break;
case K_PREV:
case K_NEXT:
case K_CTRL+K_F1:
case K_CTRL+K_F2:
case K_CTRL+K_F3:
case K_CTRL+K_F4:
case K_CTRL+K_F5:
case K_CTRL+K_F6:
case K_CTRL+K_F7:
case K_CTRL+K_F8:
case K_CTRL+K_F9:
case K_CTRL+K_F10:
case K_CTRL+K_F11:
case K_CTRL+K_F12:
m.on_key(key);
break;
default:
return TField_window::on_key(key);
}
if(smonth!=o.selected_month())
o.mask().set(F_CHANGEMONTH, o.selected_month(), true);
if(syear!=o.selected_year())
if(syear != o.selected_year())
{
o.mask().set(F_CHANGEYEAR, o.selected_year(), true);
((TAlmanac_mask&)o.mask()).set_year(o.selected_year());
m.set_year(o.selected_year());
}
return true;
}
void TAlmanac_window::handler(WINDOW win, EVENT* ep)
{
TDate cdate, fdate;
RCT rct; xvt_vobj_get_client_rect(win, &rct);
int rct_w, rct_h;
int pnt_r, pnt_c;
int delta;
TAlmanac_field & o = (TAlmanac_field&)owner();
switch(ep->type)
{
case E_MOUSE_DOWN:
case E_MOUSE_DBL:
case E_MOUSE_DOWN:
case E_MOUSE_DBL:
{
cdate = o.selected_date();
fdate = o.selected_date();
fdate.set_day(1);
TAlmanac_field & o = (TAlmanac_field&)owner();
TDate cdate = o.selected_date();
TDate fdate = cdate; fdate.set_day(1);
rct_w = ((rct.right - rct.left) / 9);
rct_h = ((rct.bottom - rct.top) / 9);
pnt_c = (ep->v.mouse.where.h) / rct_w;
pnt_r = (ep->v.mouse.where.v) / rct_h;
delta = 7*pnt_r + pnt_c - (7*(3+cdate.week()-fdate.week()) + cdate.wday());
RCT rct; xvt_vobj_get_client_rect(win, &rct);
int rct_w = ((rct.right - rct.left) / 9);
int rct_h = ((rct.bottom - rct.top) / 9);
int pnt_c = (ep->v.mouse.where.h) / rct_w;
int pnt_r = (ep->v.mouse.where.v) / rct_h;
int delta = 7*pnt_r + pnt_c - (7*(3+cdate.week()-fdate.week()) + cdate.wday());
o.move_selected_day(delta);
if (ep->type==E_MOUSE_DBL)
((TAlmanac_mask&)o.mask()).open_day_mask();
((TAlmanac_mask&)o.mask()).open_day_mask();
}
break;
default:
TField_window::handler(win, ep);
break;
break;
default:
TField_window::handler(win, ep);
break;
}
}
TAlmanac_window::TAlmanac_window(int x, int y, int dx, int dy, WINDOW parent, TWindowed_field *owner)
: TField_window(x, y, dx, dy, parent, owner)
: TField_window(x, y, dx, dy, parent, owner)
{
xvt_sbar_set_range(win(), HSCROLL, 0, 0);
xvt_sbar_set_range(win(), VSCROLL, 0, 0);
set_scroll_max(0, 0); // Get rid of that useless scrollbars
}
///////////////////////////////////////////////////////////
// TImage_window
///////////////////////////////////////////////////////////
// @doc EXTERNAL
// @class TAlmanac_window | Finestra associata ad un TAlmanac_field
//
// @base public | TField_window
class TImage_window : public TField_window
{
// @author:(INTERNAL) Brugno
int _curr_month;
// @access Protected Member
protected:
// override da TField_window
virtual void update();
// @access Public Member
public:
// @cmember Costruttore
TImage_window(int x, int y, int dx, int dy, WINDOW parent, TWindowed_field *owner);
// @cmember Distruttore
virtual ~TImage_window() {}
};
void TImage_window::update()
{
RCT rct; xvt_vobj_get_client_rect(win(), &rct);
@ -419,7 +263,6 @@ void TImage_window::update()
else
{
int w = int(bmp.width() * ratioy);
rct.left = (rct.right - w) / 2;
rct.right = rct.left + w;
}
@ -429,9 +272,239 @@ void TImage_window::update()
}
TImage_window::TImage_window(int x, int y, int dx, int dy, WINDOW parent, TWindowed_field *owner)
: TField_window(x, y, dx, dy, parent, owner), _curr_month(0)
: TField_window(x, y, dx, dy, parent, owner), _curr_month(0)
{
xvt_sbar_set_range(win(), HSCROLL, 0, 0);
xvt_sbar_set_range(win(), VSCROLL, 0, 0);
}
set_scroll_max(0, 0); // Get rid of that useless scrollbars
}
///////////////////////////////////////////////////////////
// TAlmanac_field
///////////////////////////////////////////////////////////
TField_window* TAlmanac_field::create_window(int x, int y, int dx, int dy, WINDOW parent)
{
TAlmanac_window* obj = new TAlmanac_window(x, y, dx, dy, parent, this);
RCT rct; xvt_vobj_get_outer_rect(obj->win(), &rct);
const int pad = 6;
if (rct.left > pad * 4)
{
_image = new TImage_window(-1, y, -1, dy, parent, this);
RCT img_rect; xvt_vobj_get_outer_rect(_image->win(), &img_rect);
img_rect.right = rct.left - pad;
img_rect.left = pad;
xvt_vobj_move(_image->win(), &img_rect);
}
return obj;
}
void TAlmanac_field::create(short id, const RCT& rect, WINDOW parent)
{
int x = rect.left/CHARX, y = rect.top/ROWY;
int h = (rect.bottom - rect.top)/ROWY, w = (rect.right - rect.left)/CHARX;
if (x+w > 80)
x = x + w - mask().columns() - 1;
TWindowed_field::create(id, x, y, w, h, parent);
}
bool TAlmanac_field::is_date_void(int currpage, const TDate& cdate)
{
return ((TAlmanac_mask &)mask()).is_date_void(currpage, cdate);
}
void TAlmanac_field::force_update(bool update_image)
{
win().force_update();
if (update_image && _image != NULL)
_image->force_update();
}
void TAlmanac_field::adjust_selected_day()
{
const int last = TDate::last_day(_selecteddate.month(), _selecteddate.year());
if (_selecteddate.day() > last)
_selecteddate.set_day(last);
}
void TAlmanac_field::set_selected_day(int nday)
{
if (nday>=1 && nday<=31 && nday != _selecteddate.day())
{
_selecteddate.set_day(nday);
adjust_selected_day();
force_update(false); // Dont'update the picture
}
}
void TAlmanac_field::move_selected_day(int ddays)
{
const int old_month = _selecteddate.month();
_selecteddate += ddays;
force_update(old_month != _selecteddate.month()); // Dont'update the picture if needed
}
void TAlmanac_field::set_selected_month(int nmonth)
{
if (nmonth >= 1 && nmonth <= 12 && nmonth != _selecteddate.month())
{
_selecteddate.set_month(nmonth);
adjust_selected_day();
force_update(true); // Update the picture too
}
}
void TAlmanac_field::move_selected_month(int dmonths)
{
_selecteddate.addmonth(dmonths);
force_update(true); // Update the picture too
}
void TAlmanac_field::set_selected_year(int nyear)
{
_selecteddate.set_year(nyear);
adjust_selected_day();
force_update(false); // Don't update the picture
}
///////////////////////////////////////////////////////////
// TAlmanac_mask
///////////////////////////////////////////////////////////
TMask_field* TAlmanac_mask::parse_field(TScanner& scanner)
{
const TString& k = scanner.key();
if (k.starts_with("AL", true))
{
TAlmanac_field* na = new TAlmanac_field(this);
_almanacs.add(na);
return na;
}
return TAutomask::parse_field(scanner);
}
bool TAlmanac_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case F_PREVMONTH:
case F_NEXTMONTH:
if (e == fe_button)
{
TAlmanac_field& al = almanac();
const int old_year = al.selected_year();
al.move_selected_month(o.dlg() == F_PREVMONTH ? -1 : +1);
const int new_year = al.selected_year();
if (old_year != new_year) // Se cambio anno
set_year(new_year);
}
break;
case F_PREVYEAR:
case F_NEXTYEAR:
if (e == fe_button)
{
TAlmanac_field& al = almanac();
const int year = al.selected_year();
set_year(year + (o.dlg() == F_PREVYEAR ? -1 : +1));
}
break;
default:
break;
}
return true;
}
void TAlmanac_mask::set_focus()
{
TAutomask::set_focus();
int i;
for (i = _almanacs.last(); i >= 0; i = _almanacs.pred(i))
{
if (almanac(i).parent() == curr_win())
break;
}
const bool nav = i >= 0;
enable(F_PREVYEAR, nav);
enable(F_PREVMONTH, nav);
enable(F_NEXTMONTH, nav);
enable(F_NEXTYEAR, nav);
}
int TAlmanac_mask::activate_almanac(const short id, const char* title)
{
int i = -1; // Calendario non trovato
const int pos = id2pos(id);
if (pos >= 0) // Calendario esistente
{
for (i = _almanacs.last(); i >= 0; i = _almanacs.pred(i))
if (almanac(i).dlg() == id)
break;
if (i < 0) // Calendario non ancora censito ...
i = _almanacs.add(fld(pos)); // ... non dovrebbe mai succedere
}
if (i < 0) // Devo creare al volo un calendario
{
WINDOW parent = create_page(TR("Calendario"), -1);
const TAlmanac_field& ca = almanac(0);
RCT rect; ca.get_rect(rect);
TAlmanac_field* na = new TAlmanac_field(this);
na->create(id, rect, parent);
add_field(na);
i = _almanacs.add(na);
}
TAlmanac_field& na = almanac(i);
if (title && *title)
{
const int page = find_parent_page(na);
xvt_notebk_set_tab_title(notebook(), page, title);
}
const TDate sdate(TODAY); // Inizilizzo con la data odierna
na.set_selected_date(sdate);
return i;
}
TAlmanac_field & TAlmanac_mask::almanac(byte page) const
{
if (page >= _almanacs.items()) // Calcolo dell'indice del calendario corrente
{
for (page = _almanacs.last(); page > 0; page = _almanacs.pred(page))
{
if (almanac(page).parent() == curr_win())
break;
}
}
return (TAlmanac_field&)_almanacs[page];
}
void TAlmanac_mask::set_year(int newyear)
{
for (int i = _almanacs.last(); i >= 0; i = _almanacs.pred(i))
almanac(i).set_selected_year(newyear);
change_year(newyear);
}
const TDate& TAlmanac_mask::selected_day() const
{ return almanac().selected_date(); }
void TAlmanac_mask::change_year(int newyear)
{
// Funzione virtuale da ridefinire!
}
bool TAlmanac_mask::is_date_void(int currpage, const TDate& cdate)
{
return true;
}
TAlmanac_mask::TAlmanac_mask(const char* name)
{
read_mask(name, 0, -1); // Deve funzionare la virtual parse_field
set_handlers();
}

View File

@ -5,37 +5,6 @@
#include <automask.h>
#endif
#ifndef __DBLIB_H
#include "../db/dblib.h"
#endif
///////////////////////////////////////////////////////////
// TImage_window
///////////////////////////////////////////////////////////
// @doc EXTERNAL
// @class TAlmanac_window | Finestra associata ad un TAlmanac_field
//
// @base public | TField_window
class TImage_window : public TField_window
{
// @author:(INTERNAL) Brugno
int _curr_month;
// @access Protected Member
protected:
// override da TField_window
virtual void update();
// @access Public Member
public:
// @cmember Costruttore
TImage_window(int x, int y, int dx, int dy, WINDOW parent, TWindowed_field *owner);
// @cmember Distruttore
virtual ~TImage_window() {}
};
///////////////////////////////////////////////////////////
// TAlmanac_field
///////////////////////////////////////////////////////////
@ -59,12 +28,13 @@ class TAlmanac_field : public TWindowed_field
// @cmember:(INTERNAL) Variabile interna: Data correntemente selezionato nel calendario
TDate _selecteddate;
TDate _dateinsert;
TImage_window * _image;
TField_window * _image;
// @access Protected Member
protected:
// override da TWindowed_field
virtual TField_window* create_window(int x, int y, int dx, int dy, WINDOW parent);
void adjust_selected_day();
// @access Public Member
public:
@ -89,13 +59,13 @@ public:
// @cmember Gestione del giorno correntemente selezionato: setta l'anno selezionato al valore specificato
void set_selected_year(int nyear);
// @cmember Gestione del giorno correntemente selezionato: setta il giorno selezionato
void set_selected_date(TDate& sdate) { _selecteddate = sdate; }
void set_selected_date(const TDate& sdate) { _selecteddate = sdate; }
void force_update(bool update_image = false);
// @access Public Member
public:
// @cmember Gestione dei parametri di visulizzazione: setta il flag di visulizzazione dei mesi
void set_show_month_name(bool on = TRUE) { _showmonthname = on; }
void set_show_month_name(bool on = true) { _showmonthname = on; }
// @cmember Gestione dei parametri di visulizzazione: setta lo spazio fra le celle del calendario
void set_padding(int p) { _padding = p; }
@ -106,11 +76,12 @@ public:
// @access Public Member
public:
bool is_date_void(int currpage, TDate& cdate);
bool is_date_void(int currpage, const TDate& cdate);
// @cmember Gestione selezione: Setta la prima data dell'anno con l'inserimento attivo
void set_insert_date(const TDate & d) { _dateinsert = d; }
bool can_insert(const TDate &d) const { return d >= _dateinsert; }
void create(short id, const RCT& rct, WINDOW parent); // Internal use only
// @access Public Member
public:
// @cmember Costruttore
@ -119,39 +90,6 @@ public:
virtual ~TAlmanac_field() { }
};
///////////////////////////////////////////////////////////
// TAlmanac_window
///////////////////////////////////////////////////////////
// @doc EXTERNAL
// @class TAlmanac_window | Finestra associata ad un TAlmanac_field
//
// @base public | TField_window
class TAlmanac_window : public TField_window
{
// @author:(INTERNAL) Brugno
// @access Protected Member
protected:
// override da TField_window
virtual void update();
// override da TField_window
virtual void handler(WINDOW win, EVENT* ep);
// @access Public Member
public:
// override da TField_window
virtual bool on_key(KEY k);
// @access Public Member
public:
// @cmember Costruttore
TAlmanac_window(int x, int y, int dx, int dy, WINDOW parent, TWindowed_field *owner);
// @cmember Distruttore
virtual ~TAlmanac_window() {}
};
///////////////////////////////////////////////////////////
// TAlmanac_mask
///////////////////////////////////////////////////////////
@ -165,34 +103,28 @@ class TAlmanac_mask : public TAutomask
{
// @author:(INTERNAL) Brugno
// @cmember:(INTERNAL) Puntatori ai campi calendario
short _almanacs[MAX_PAGES];
// @cmember:(INTERNAL) Numero di pagine attive
byte _lastpage;
TPointer_array _almanacs;
// @access Protected Member
protected:
// override da TAutomask
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
virtual void set_focus();
// @access Public Member
public:
// shortcut per l'accesso all'almanacco della pagina corrente
TAlmanac_field & almanac(byte page = -1) const ;
// shortcut per l'accesso all'almanacco della pagina corrente
TAlmanac_field & curr_almanac() const { return almanac();}
TAlmanac_field& almanac(byte page = -1) const ;
// override da TAutomask
virtual TMask_field* parse_field(TScanner& scanner);
// @cmember Gestione calendari: Attiva l'almanacco sulla pagina specificata per la data specificata
void activate_almanac(short id, int page, TDate& sdate);
// @cmember Gestione calendari: disanilta le pagine non attive
void disable_pages() { disable_page(_lastpage + 1); }
int activate_almanac(short id, const char* title);
// @cmember Gestione calendari: Cambia l'anno su tutti i calendari
void set_year(int newyear);
// @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;
// @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, const TDate& cdate);
// @cmember Gestione eventi calendario: Controlla la presenza di documenti nella data attiva
virtual void change_year(int newyear);
// @cmember Chiama la maschera o lo sheet legato al gioro selezionato
@ -201,7 +133,7 @@ public:
// @cmember Costruttore
TAlmanac_mask(const char * name);
// @cmember Distruttore
~TAlmanac_mask() { }
virtual ~TAlmanac_mask() { }
};
#endif

View File

@ -1,4 +1,4 @@
#define F_PREVMONTH 91
#define F_NEXTMONTH 92
#define F_CHANGEMONTH 93
#define F_CHANGEYEAR 94
#define F_PREVYEAR 91
#define F_PREVMONTH 92
#define F_NEXTMONTH 93
#define F_NEXTYEAR 94