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() void TImmissioneDocumenti_app::init_tabs()
{ {
TImmissioneDocumenti_mask & m = mask(); TImmissioneDocumenti_mask& m = mask();
m.filters().destroy(); m.filters().destroy();
m.ordered().reset(); m.ordered().reset();
TConfig configfile(CONFIG_DITTA, "ci"); TConfig configfile(CONFIG_DITTA, "ci");
int items = 0; configfile.write_protect(); // Evita che vengan scritti inutili default
TToken_string pagenames;
int items = 0;
while (items == 0 || configfile.exist("Descr",items)) 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.filters().add(configfile.get("Filter", NULL, items, "F01"));
m.insert().set(items, configfile.get_bool("InsertRemain", NULL, items)); m.insert().set(items, configfile.get_bool("InsertRemain", NULL, items));
m.modify().set(items, configfile.get_bool("ModifyRemain", 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.var_coll().add(configfile.get("Var", NULL, items), items);
m.mod_coll().set(items, configfile.get_bool("ModColl", NULL, items)); m.mod_coll().set(items, configfile.get_bool("ModColl", NULL, items));
m.del_closed().set(items, configfile.get_bool("DeleteClosed", 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++; items++;
} }
m.disable_page(items);
m.set_caption(pagenames);
} }
void TImmissioneDocumenti_app::init_flags() void TImmissioneDocumenti_app::init_flags()
@ -134,7 +131,7 @@ void TImmissioneDocumenti_app::change_year(int newyear, bool init_flg)
init_flags(); 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(); const int year = day.year();
if (year != _year) if (year != _year)
@ -157,14 +154,14 @@ void TImmissioneDocumenti_mask::next_page(int p)
enable(DLG_DELREC, del_closed()[k]); 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()) if (!d.ok())
d = curr_almanac().selected_date(); d = almanac().selected_date();
const int currpage = curr_page(); const int currpage = curr_page();
const TString & codnum = filters().row(currpage); const TString & codnum = filters().row(currpage);
TString filter; TString filter;
@ -182,7 +179,7 @@ void TImmissioneDocumenti_mask::open_day_mask(const TDate & date)
"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"),
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); TList_field& fl = sheet.add_list(101, 0, "Tipo documento ", 1, 1, 60);
TToken_string codes; TToken_string codes;
TToken_string values; TToken_string values;
@ -210,23 +207,23 @@ void TImmissioneDocumenti_mask::open_day_mask(const TDate & date)
switch(exitval) switch(exitval)
{ {
case K_ENTER: case K_ENTER:
call_ve0(exitval, relation, date, codnum, EMPTY_STRING, currpage); call_ve0(exitval, relation, d, codnum, EMPTY_STRING, currpage);
break; break;
case K_DEL: case K_DEL:
call_ve0(exitval, relation, date, codnum); call_ve0(exitval, relation, d, codnum);
break; break;
case K_INS: case K_INS:
{ {
const TString16 tipo(sheet.get(101)); const TString16 tipo(sheet.get(101));
call_ve0(exitval, relation, date, codnum, tipo, currpage); call_ve0(exitval, relation, d, codnum, tipo, currpage);
} }
break; break;
default: default:
break; break;
} }
} }
update_current_calendar(date.year()); update_current_calendar(d.year());
} }
void TImmissioneDocumenti_mask::update_current_calendar(int year) void TImmissioneDocumenti_mask::update_current_calendar(int year)

View File

@ -91,7 +91,7 @@ protected:
virtual bool destroy(void) ; virtual bool destroy(void) ;
public: 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 void change_year(int newyear, bool init_flg = true); // passata come funzione alla maschera
TImmissioneDocumenti_mask & mask() const {return *_mask; } TImmissioneDocumenti_mask & mask() const {return *_mask; }

View File

@ -4,197 +4,75 @@ TOOLBAR "topbar" 0 0 0 2
BUTTON DLG_SELECT 10 2 BUTTON DLG_SELECT 10 2
BEGIN BEGIN
PROMPT -17 -11 "~Selezione" PROMPT 1 1 "~Selezione"
MESSAGE EXIT,K_ENTER MESSAGE EXIT,K_ENTER
PICTURE BMP_SELECT PICTURE BMP_SELECT
END END
BUTTON DLG_DELREC 10 2 BUTTON DLG_DELREC 10 2
BEGIN BEGIN
PROMPT -67 -11 "~Elimina" PROMPT 2 1 "~Elimina"
MESSAGE EXIT,K_DEL
PICTURE BMP_DELREC
PICTURE BMP_DELRECDN
END END
BUTTON DLG_QUIT 10 2 BUTTON DLG_NULL 10 2
BEGIN BEGIN
PROMPT -77 -11 "~Fine" PROMPT -1 -1 ""
MESSAGE EXIT,K_QUIT
PICTURE BMP_QUIT
PICTURE BMP_QUITDN
END END
ENDPAGE BUTTON F_PREVYEAR 10 2
BEGIN
TOOLBAR "Toolbar" 0 -2 0 2 PROMPT 3 1 "Anno -"
PICTURE BMP_FIRSTREC
END
BUTTON F_PREVMONTH 10 2 BUTTON F_PREVMONTH 10 2
BEGIN BEGIN
PROMPT -26 -11 "~Precedente" PROMPT 4 1 "Mese -"
PICTURE BMP_PREVREC PICTURE BMP_PREVREC
END 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 BUTTON F_NEXTMONTH 10 2
BEGIN BEGIN
PROMPT -56 -11 "S~uccessivo" PROMPT 5 1 "Mese +"
PICTURE BMP_NEXTREC PICTURE BMP_NEXTREC
END 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 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 BEGIN
PROMPT -3 1 "" PROMPT -3 1 ""
END END
ENDPAGE ENDPAGE
PAGE "Pagina 2" -1 -1 80 20 ENDMASK
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

View File

@ -1,228 +1,71 @@
#include <colors.h> #include <colors.h>
#include <config.h> #include <config.h>
#include <automask.h> #include <automask.h>
#include <diction.h>
#include <image.h> #include <image.h>
#include <tabutil.h> #include <tabutil.h>
#include <xvtility.h>
#include <defmask.h> #include <defmask.h>
#include <utility.h> // file functions #include <utility.h> // file functions
#include <xvt.h>
#include "cilib.h" #include "cilib.h"
#include "cimsk.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 // 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() void TAlmanac_window::update()
{ {
COLOR col_f, col_b; COLOR col_f, col_b;
RCT rct; xvt_vobj_get_client_rect(win(), &rct); RCT rct; xvt_vobj_get_client_rect(win(), &rct);
RCT rcttd; RCT rcttd;
TString str; TString str;
int rct_w, rct_h; TAlmanac_field& o = (TAlmanac_field&)owner();
int rct_t, rct_l;
int pad;
int row;
int fh;
int cpage;
TAlmanac_field & o = (TAlmanac_field&)owner();
TField_window::update(); TField_window::update();
TDate cdate = o.selected_date(); TDate cdate = o.selected_date();
cdate.set_day(1); cdate.set_day(1);
cpage = o.mask().curr_page(); int cpage = o.mask().curr_page();
rct_w = ((rct.right - rct.left) / 9); int rct_l, rct_t;
rct_h = ((rct.bottom - rct.top) / 9); int rct_w = (rct.right - rct.left) / 9;
pad = o.padding(); int rct_h = (rct.bottom - rct.top) / 9;
row = 3; int pad = o.padding();
int row = 3;
set_font("", XVT_FS_BOLD); set_font("", XVT_FS_BOLD);
set_color(NORMAL_COLOR, NORMAL_BACK_COLOR); set_color(NORMAL_COLOR, NORMAL_BACK_COLOR);
fh = CHARY; int fh = CHARY;
if (o.show_month_name()) if (o.show_month_name())
{ {
@ -277,7 +120,6 @@ void TAlmanac_window::update()
xvt_dwin_draw_rect(win(), &rcttd); xvt_dwin_draw_rect(win(), &rcttd);
} }
if (o.is_selected(cdate.day())) if (o.is_selected(cdate.day()))
{ {
set_pen(FOCUS_COLOR,1); set_pen(FOCUS_COLOR,1);
@ -292,106 +134,108 @@ void TAlmanac_window::update()
bool TAlmanac_window::on_key(KEY key) bool TAlmanac_window::on_key(KEY key)
{ {
TAlmanac_field & o = (TAlmanac_field&)owner(); TAlmanac_field& o = (TAlmanac_field&)owner();
int smonth, syear; TAlmanac_mask& m = (TAlmanac_mask&)o.mask();
smonth = o.selected_month(); const int smonth = o.selected_month();
syear = o.selected_year(); const int syear = o.selected_year();
switch (key) switch (key)
{ {
case K_RIGHT: case K_RIGHT: o.move_selected_day(1); break;
o.move_selected_day(1); case K_LEFT: o.move_selected_day(-1); break;
break; case K_UP: o.move_selected_day(-7); break;
case K_LEFT: case K_DOWN: o.move_selected_day(+7); break;
o.move_selected_day(-1); case K_SPACE:
break; case K_ENTER: m.open_day_mask(); break;
case K_UP: case K_PREV:
o.move_selected_day(-7); case K_NEXT:
break; case K_CTRL+K_F1:
case K_DOWN: case K_CTRL+K_F2:
o.move_selected_day(+7); case K_CTRL+K_F3:
break; case K_CTRL+K_F4:
case K_SPACE: case K_CTRL+K_F5:
case K_ENTER: case K_CTRL+K_F6:
((TAlmanac_mask&)o.mask()).open_day_mask(); case K_CTRL+K_F7:
break; case K_CTRL+K_F8:
case K_PREV: case K_CTRL+K_F9:
case K_NEXT: case K_CTRL+K_F10:
case K_CTRL+K_F1: case K_CTRL+K_F11:
case K_CTRL+K_F2: case K_CTRL+K_F12:
case K_CTRL+K_F3: m.on_key(key);
case K_CTRL+K_F4: break;
case K_CTRL+K_F5: default:
case K_CTRL+K_F6: return TField_window::on_key(key);
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);
} }
if(smonth!=o.selected_month()) if(syear != o.selected_year())
o.mask().set(F_CHANGEMONTH, o.selected_month(), true);
if(syear!=o.selected_year())
{ {
o.mask().set(F_CHANGEYEAR, o.selected_year(), true); m.set_year(o.selected_year());
((TAlmanac_mask&)o.mask()).set_year(o.selected_year());
} }
return true; return true;
} }
void TAlmanac_window::handler(WINDOW win, EVENT* ep) 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) switch(ep->type)
{ {
case E_MOUSE_DOWN: case E_MOUSE_DOWN:
case E_MOUSE_DBL: case E_MOUSE_DBL:
{ {
cdate = o.selected_date(); TAlmanac_field & o = (TAlmanac_field&)owner();
fdate = o.selected_date(); TDate cdate = o.selected_date();
fdate.set_day(1); TDate fdate = cdate; fdate.set_day(1);
rct_w = ((rct.right - rct.left) / 9); RCT rct; xvt_vobj_get_client_rect(win, &rct);
rct_h = ((rct.bottom - rct.top) / 9); int rct_w = ((rct.right - rct.left) / 9);
pnt_c = (ep->v.mouse.where.h) / rct_w; int rct_h = ((rct.bottom - rct.top) / 9);
pnt_r = (ep->v.mouse.where.v) / rct_h; int pnt_c = (ep->v.mouse.where.h) / rct_w;
int pnt_r = (ep->v.mouse.where.v) / rct_h;
delta = 7*pnt_r + pnt_c - (7*(3+cdate.week()-fdate.week()) + cdate.wday()); int 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) if (ep->type==E_MOUSE_DBL)
((TAlmanac_mask&)o.mask()).open_day_mask(); ((TAlmanac_mask&)o.mask()).open_day_mask();
} }
break; break;
default: default:
TField_window::handler(win, ep); TField_window::handler(win, ep);
break; break;
} }
} }
TAlmanac_window::TAlmanac_window(int x, int y, int dx, int dy, WINDOW parent, TWindowed_field *owner) 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); set_scroll_max(0, 0); // Get rid of that useless scrollbars
xvt_sbar_set_range(win(), VSCROLL, 0, 0);
} }
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
// TImage_window // 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() void TImage_window::update()
{ {
RCT rct; xvt_vobj_get_client_rect(win(), &rct); RCT rct; xvt_vobj_get_client_rect(win(), &rct);
@ -419,7 +263,6 @@ void TImage_window::update()
else else
{ {
int w = int(bmp.width() * ratioy); int w = int(bmp.width() * ratioy);
rct.left = (rct.right - w) / 2; rct.left = (rct.right - w) / 2;
rct.right = rct.left + w; 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) 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); set_scroll_max(0, 0); // Get rid of that useless scrollbars
xvt_sbar_set_range(win(), VSCROLL, 0, 0); }
}
///////////////////////////////////////////////////////////
// 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> #include <automask.h>
#endif #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 // TAlmanac_field
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
@ -59,12 +28,13 @@ class TAlmanac_field : public TWindowed_field
// @cmember:(INTERNAL) Variabile interna: Data correntemente selezionato nel calendario // @cmember:(INTERNAL) Variabile interna: Data correntemente selezionato nel calendario
TDate _selecteddate; TDate _selecteddate;
TDate _dateinsert; TDate _dateinsert;
TImage_window * _image; TField_window * _image;
// @access Protected Member // @access Protected Member
protected: protected:
// override da TWindowed_field // override da TWindowed_field
virtual TField_window* create_window(int x, int y, int dx, int dy, WINDOW parent); virtual TField_window* create_window(int x, int y, int dx, int dy, WINDOW parent);
void adjust_selected_day();
// @access Public Member // @access Public Member
public: public:
@ -89,13 +59,13 @@ public:
// @cmember Gestione del giorno correntemente selezionato: setta l'anno selezionato al valore specificato // @cmember Gestione del giorno correntemente selezionato: setta l'anno selezionato al valore specificato
void set_selected_year(int nyear); void set_selected_year(int nyear);
// @cmember Gestione del giorno correntemente selezionato: setta il giorno selezionato // @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); void force_update(bool update_image = false);
// @access Public Member // @access Public Member
public: public:
// @cmember Gestione dei parametri di visulizzazione: setta il flag di visulizzazione dei mesi // @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 // @cmember Gestione dei parametri di visulizzazione: setta lo spazio fra le celle del calendario
void set_padding(int p) { _padding = p; } void set_padding(int p) { _padding = p; }
@ -106,11 +76,12 @@ public:
// @access Public Member // @access Public Member
public: 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 // @cmember Gestione selezione: Setta la prima data dell'anno con l'inserimento attivo
void set_insert_date(const TDate & d) { _dateinsert = d; } void set_insert_date(const TDate & d) { _dateinsert = d; }
bool can_insert(const TDate &d) const { return d >= _dateinsert; } 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 // @access Public Member
public: public:
// @cmember Costruttore // @cmember Costruttore
@ -119,39 +90,6 @@ public:
virtual ~TAlmanac_field() { } 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 // TAlmanac_mask
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
@ -165,34 +103,28 @@ class TAlmanac_mask : public TAutomask
{ {
// @author:(INTERNAL) Brugno // @author:(INTERNAL) Brugno
// @cmember:(INTERNAL) Puntatori ai campi calendario // @cmember:(INTERNAL) Puntatori ai campi calendario
short _almanacs[MAX_PAGES]; TPointer_array _almanacs;
// @cmember:(INTERNAL) Numero di pagine attive
byte _lastpage;
// @access Protected Member // @access Protected Member
protected: protected:
// override da TAutomask // override da TAutomask
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
virtual void set_focus();
// @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 = -1) const ; TAlmanac_field& almanac(byte page = -1) const ;
// shortcut per l'accesso all'almanacco della pagina corrente
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); int activate_almanac(short id, const char* title);
// @cmember Gestione calendari: disanilta le pagine non attive
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;
// @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, const 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 Chiama la maschera o lo sheet legato al gioro selezionato // @cmember Chiama la maschera o lo sheet legato al gioro selezionato
@ -201,7 +133,7 @@ public:
// @cmember Costruttore // @cmember Costruttore
TAlmanac_mask(const char * name); TAlmanac_mask(const char * name);
// @cmember Distruttore // @cmember Distruttore
~TAlmanac_mask() { } virtual ~TAlmanac_mask() { }
}; };
#endif #endif

View File

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