campo-sirio/ci/cilib.cpp
alex 867e22899c Patch level : 2.2
Files correlati     :
Ricompilazione Demo : [ ]
Commento            :

Modlo contabilità industriale


git-svn-id: svn://10.65.10.50/trunk@12989 c028cbd2-c16b-5b4b-a496-9718f37d4682
2005-04-22 05:54:42 +00:00

295 lines
6.2 KiB
C++
Executable File

#include <config.h>
#include <automask.h>
#include <tabutil.h>
#include <xvtility.h>
#include <defmask.h>
#include <utility.h> // file functions
#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)
{
byte page = curr_page();
if (page >=0 && page < 16)
{
TAlmanac_field & al = curr_almanac();
switch (o.dlg())
{
case F_PREVMONTH:
{
const int year = al.selected_year();
al.move_selected_month(-1);
this->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:
al.set_selected_month(get_int(F_CHANGEMONTH));
break;
case F_NEXTMONTH:
{
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:
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);
set(F_CHANGEMONTH, sdate.month());
if (page>_activepages)
_activepages = page;
}
void TAlmanac_mask::set_year(int newyear)
{
for(byte p = 0; p < _activepages; p++)
almanac(p).set_selected_year(newyear);
change_year(newyear);
}
void TAlmanac_mask::change_year(int newyear)
{
return;
}
bool TAlmanac_mask::is_date_void(TDate& cdate)
{
return TRUE;
}
TAlmanac_mask::TAlmanac_mask(const char * name)
: TAutomask(), _activepages(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)
{
return new TAlmanac_window(x, y, dx, dy, parent, this);
}
bool TAlmanac_field::is_date_void(TDate& cdate)
{
return ((TAlmanac_mask &)mask()).is_date_void(cdate);
}
void TAlmanac_field::set_selected_day(int nday)
{
if(nday>=1 && nday<=TDate::last_day(_selecteddate.month(),_selecteddate.year()))
{
_selecteddate.set_day(nday);
win().force_update();
}
}
void TAlmanac_field::move_selected_day(int ddays)
{
_selecteddate+=ddays;
win().force_update();
}
void TAlmanac_field::set_selected_month(int nmonth)
{
if(nmonth >= 1 && nmonth <= 12)
{
_selecteddate.set_month(nmonth);
win().force_update();
}
}
void TAlmanac_field::move_selected_month(int dmonths)
{
_selecteddate.addmonth(dmonths);
win().force_update();
}
void TAlmanac_field::set_selected_year(int nyear)
{
_selecteddate.set_year(nyear);
win().force_update();
}
///////////////////////////////////////////////////////////
// TAlmanac_window
///////////////////////////////////////////////////////////
void TAlmanac_window::update()
{
TDate cdate;
COLOR col_f, col_b;
RCT rct; xvt_vobj_get_client_rect(win(), &rct);
TString str;
int rct_w, rct_h;
int rct_t, rct_l;
int pad;
int row;
TAlmanac_field & o = (TAlmanac_field&)owner();
TField_window::update();
cdate = o.selected_date();
cdate.set_day(1);
rct_w = ((rct.right - rct.left) / 9);
rct_h = ((rct.bottom - rct.top) / 9);
pad = - o.padding();
row = 3;
if (o.show_month_name())
{
str.format("%s", itom(cdate.month()));
rct_l = rct.left + rct_w;
rct_t = rct.top + rct_h;
stringat(rct_l + pad + 2, rct_t + pad + 2, str);
}
for (int i=1;i<7;i++)
{
str.format("%c", itow(i)[0]);
rct_l = rct.left + rct_w*i;
rct_t = rct.top + rct_h*2;
stringat(rct_l + pad + 2, rct_t + pad + 2, str);
}
set_color(COLOR_GRAY, COLOR_LTGRAY);
while (!cdate.is_end_month())
{
if (o.is_date_void(cdate))
col_b=COLOR_LTGRAY;
else
col_b=COLOR_YELLOW;
if (o.is_selected(cdate.day()))
col_f=COLOR_RED;
else
col_f=COLOR_GRAY;
set_color(col_f,col_b);
set_font(XVT_FFN_HELVETICA, XVT_FS_BOLD);
rct_l = rct.left + rct_w*cdate.wday();
rct_t = rct.top + rct_h*row;
str.format("%2d", cdate.day());
rect(rct_l + pad, rct_t + pad, rct_l + rct_w - pad, rct_t + rct_h - pad);
stringat(rct_l + pad + 2, rct_t + pad + 2, str);
if ((++cdate).wday()==1) row++;
}
}
bool TAlmanac_window::on_key(KEY key)
{
TAlmanac_field & o = (TAlmanac_field&)owner();
switch (key)
{
case K_RIGHT:
o.move_selected_day(1);
return true;
case K_LEFT:
o.move_selected_day(-1);
return true;
case K_UP:
o.move_selected_day(-7);
return true;
case K_DOWN:
o.move_selected_day(+7);
return true;
default:
break;
}
return TField_window::on_key(key);
}
void TAlmanac_window::handler(WINDOW win, EVENT* ep)
{
TDate cdate;
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_DBL:
case E_MOUSE_DOWN:
{
cdate = o.selected_date();
cdate.set_day(1);
rct_w = ((rct.right - rct.left) / 9);
rct_h = ((rct.bottom - rct.top) / 9);
pnt_c = (ep->v.mouse.where.v) % rct_w;
pnt_r = (ep->v.mouse.where.h) % rct_h;
delta = pnt_c*pnt_r - (27+cdate.wday());
if (delta>=1&&delta<=TDate::last_day(o.selected_date().month(), o.selected_date().year()))
{
o.set_selected_day(delta);
o.on_key(K_SPACE);
}
}
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)
{
}