campo-sirio/ci/cilib.cpp
alex 3f45b1d377 Patch level : 2.2 186
Files correlati     : ci0.exe
Ricompilazione Demo : [ ]
Commento            :

Bug   	 0000461

Aggiungere eliminazione documenti per le commesse chiuse. I piu' bisogna provare  la cancellazione di un documento in stato normale e bloccato. nel secondo caso non deve cancellare il magazzino, agenti statistice etc...


git-svn-id: svn://10.65.10.50/trunk@13397 c028cbd2-c16b-5b4b-a496-9718f37d4682
2005-10-07 13:41:20 +00:00

436 lines
9.8 KiB
C++
Executable File

#include <colors.h>
#include <config.h>
#include <automask.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
///////////////////////////////////////////////////////////
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();
TField_window::update();
TDate cdate = o.selected_date();
cdate.set_day(1);
cpage = o.mask().curr_page();
rct_w = ((rct.right - rct.left) / 9);
rct_h = ((rct.bottom - rct.top) / 9);
pad = o.padding();
row = 3;
set_font("", XVT_FS_BOLD);
set_color(NORMAL_COLOR, NORMAL_BACK_COLOR);
fh = CHARY;
if (o.show_month_name())
{
str.format("%s %d", itom(cdate.month()),cdate.year());
rct_l = rct.left + rct_w;
rct_t = rct.top + rct_h;
xvt_dwin_draw_text(win(), rct_l + pad + 2, fh + rct_t + pad + 2, str, -1);
}
for (int i=1;i<=7;i++)
{
str.format("%.3s", itow(i));
rct_l = rct.left + rct_w*i;
rct_t = rct.top + rct_h*2;
xvt_dwin_draw_text(win(), rct_l + pad + 2, fh + rct_t + pad + 2, str, -1);
}
--cdate;
do
{
if ((++cdate).wday()==1 && cdate.day() > 1) row++;
col_b = NORMAL_BACK_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_brush(col_b);
rct_l = rct.left + rct_w*cdate.wday();
rct_t = rct.top + rct_h*row;
str.format("%2d", cdate.day());
rcttd.top = rct_t + pad;
rcttd.left = rct_l + pad;
rcttd.bottom = rct_t + rct_h - pad;
rcttd.right = rct_l + rct_w - pad;
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()))
{
set_pen(FOCUS_COLOR,1);
rcttd.top++; rcttd.left++; rcttd.bottom--; rcttd.right--;
xvt_dwin_draw_rect(win(), &rcttd);
}
xvt_dwin_draw_text(win(), rct_l + pad + 2, fh + rct_t + pad, str, -1);
}
while (!cdate.is_end_month());
}
bool TAlmanac_window::on_key(KEY key)
{
TAlmanac_field & o = (TAlmanac_field&)owner();
int smonth, syear;
smonth = o.selected_month();
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_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);
}
if(smonth!=o.selected_month())
o.mask().set(F_CHANGEMONTH, o.selected_month(), true);
if(syear!=o.selected_year())
{
o.mask().set(F_CHANGEYEAR, o.selected_year(), true);
((TAlmanac_mask&)o.mask()).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:
{
cdate = o.selected_date();
fdate = o.selected_date();
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());
o.move_selected_day(delta);
if (ep->type==E_MOUSE_DBL)
((TAlmanac_mask&)o.mask()).open_day_mask();
}
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)
{
xvt_sbar_set_range(win(), HSCROLL, 0, 0);
xvt_sbar_set_range(win(), VSCROLL, 0, 0);
}
///////////////////////////////////////////////////////////
// TImage_window
///////////////////////////////////////////////////////////
void TImage_window::update()
{
RCT rct; xvt_vobj_get_client_rect(win(), &rct);
TAlmanac_field & f = (TAlmanac_field&) owner();
const int month = f.selected_date().month();
_curr_month = month;
clear(MASK_BACK_COLOR);
TFilename month_img; month_img.format("%2smn%02d.jpg", (const char *) f.mask().source_file().left(2), _curr_month);
if (month_img.custom_path())
{
TImage bmp(month_img);
const double ratiox = (double) (rct.right) / (double) bmp.width();
const double ratioy = (double) (rct.bottom) / (double) bmp.height();
if (ratiox < ratioy)
{
int h = int(bmp.height() * ratiox);
rct.top = (rct.bottom - h) / 2;
rct.bottom = rct.top + h;
}
else
{
int w = int(bmp.width() * ratioy);
rct.left = (rct.right - w) / 2;
rct.right = rct.left + w;
}
bmp.draw(win(), rct);
}
}
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)
{
xvt_sbar_set_range(win(), HSCROLL, 0, 0);
xvt_sbar_set_range(win(), VSCROLL, 0, 0);
}