Patch level : 2.1 48
Files correlati : ba8 Ricompilazione Demo : [ ] Commento : Aggiornamenti vari sui report git-svn-id: svn://10.65.10.50/trunk@12110 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
291e41385b
commit
7e9576ecef
@ -437,6 +437,9 @@ bool TColor_mask::on_field_event(TOperable_field& f, TField_event e, long jolly)
|
|||||||
const COLOR color = cid2color(bid);
|
const COLOR color = cid2color(bid);
|
||||||
set_color_entry(name, color);
|
set_color_entry(name, color);
|
||||||
}
|
}
|
||||||
|
TConfig font(CONFIG_GUI, "Font");
|
||||||
|
font.set("FontDesc", ""); // Azzera font e lo ricarica alla prossima
|
||||||
|
xvt_load_default_font();
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -446,7 +449,7 @@ bool TColor_mask::on_field_event(TOperable_field& f, TField_event e, long jolly)
|
|||||||
XVT_FNTID fontid = xvt_default_font();
|
XVT_FNTID fontid = xvt_default_font();
|
||||||
if (xvt_dm_post_font_sel(TASK_WIN, fontid, NULL, 0))
|
if (xvt_dm_post_font_sel(TASK_WIN, fontid, NULL, 0))
|
||||||
{
|
{
|
||||||
char font_ser_desc[512];
|
char font_ser_desc[256];
|
||||||
TConfig font(CONFIG_GUI, "Font");
|
TConfig font(CONFIG_GUI, "Font");
|
||||||
xvt_font_serialize(fontid, font_ser_desc, sizeof(font_ser_desc));
|
xvt_font_serialize(fontid, font_ser_desc, sizeof(font_ser_desc));
|
||||||
font.set("FontDesc", font_ser_desc);
|
font.set("FontDesc", font_ser_desc);
|
||||||
|
@ -9,6 +9,7 @@ int main(int argc, char** argv)
|
|||||||
case 1: ba8200(argc, argv); break; // Query Generator
|
case 1: ba8200(argc, argv); break; // Query Generator
|
||||||
case 2: ba8300(argc, argv); break; // Report Generator
|
case 2: ba8300(argc, argv); break; // Report Generator
|
||||||
case 3: ba8400(argc, argv); break; // Form Converter
|
case 3: ba8400(argc, argv); break; // Form Converter
|
||||||
|
case 4: ba8500(argc, argv); break; // Report Printer
|
||||||
default: ba8100(argc, argv); break; // Record Selector
|
default: ba8100(argc, argv); break; // Record Selector
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
1
ba/ba8.h
1
ba/ba8.h
@ -2,5 +2,6 @@ int ba8100(int argc, char* argv[]);
|
|||||||
int ba8200(int argc, char* argv[]);
|
int ba8200(int argc, char* argv[]);
|
||||||
int ba8300(int argc, char* argv[]);
|
int ba8300(int argc, char* argv[]);
|
||||||
int ba8400(int argc, char* argv[]);
|
int ba8400(int argc, char* argv[]);
|
||||||
|
int ba8500(int argc, char* argv[]);
|
||||||
|
|
||||||
|
|
||||||
|
@ -127,7 +127,6 @@ protected:
|
|||||||
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);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
int name2num(const TString& name) const;
|
|
||||||
int father_logicnum() const;
|
int father_logicnum() const;
|
||||||
const char* find_linked_field(int logicnum, const RecFieldDes& fd) const;
|
const char* find_linked_field(int logicnum, const RecFieldDes& fd) const;
|
||||||
|
|
||||||
@ -139,34 +138,14 @@ public:
|
|||||||
~TTable_mask();
|
~TTable_mask();
|
||||||
};
|
};
|
||||||
|
|
||||||
// Converte un nome di tabella nel suo numero logico
|
|
||||||
int TTable_mask::name2num(const TString& name) const
|
|
||||||
{
|
|
||||||
int num = 0;
|
|
||||||
if (name.not_empty())
|
|
||||||
{
|
|
||||||
TList_sheet& sht = *efield(F_SON).sheet();
|
|
||||||
TString_array& arr = sht.rows_array();
|
|
||||||
FOR_EACH_ARRAY_ROW(arr, i, row)
|
|
||||||
{
|
|
||||||
if (name == row->get(0))
|
|
||||||
{
|
|
||||||
num = row->get_int(1);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return num;
|
|
||||||
}
|
|
||||||
|
|
||||||
int TTable_mask::father_logicnum() const
|
int TTable_mask::father_logicnum() const
|
||||||
{
|
{
|
||||||
return name2num(get(F_FATHER));
|
return table2logic(get(F_FATHER));
|
||||||
}
|
}
|
||||||
|
|
||||||
int TTable_mask::son_logicnum() const
|
int TTable_mask::son_logicnum() const
|
||||||
{
|
{
|
||||||
return name2num(get(F_SON));
|
return table2logic(get(F_SON));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Dato il numero logico di una tabella ed un campo (di un'altra tabella)
|
// Dato il numero logico di una tabella ed un campo (di un'altra tabella)
|
||||||
@ -830,14 +809,22 @@ void TQuery_mask::save_as(TRecordsetExportFormat fmt)
|
|||||||
xvt_fsys_convert_dir_to_str(&fs.dir, path.get_buffer(), path.size());
|
xvt_fsys_convert_dir_to_str(&fs.dir, path.get_buffer(), path.size());
|
||||||
path.add(fs.name);
|
path.add(fs.name);
|
||||||
|
|
||||||
TSQL_recordset qry(get(F_SQL));
|
const TString& sql = get(F_SQL);
|
||||||
bool ok = qry.items() > 0;
|
TRecordset* rex = NULL;
|
||||||
|
if (sql.starts_with("SELECT "))
|
||||||
|
rex = new TSQL_recordset(sql);
|
||||||
|
else
|
||||||
|
rex = new TISAM_recordset(sql);
|
||||||
|
|
||||||
|
bool ok = rex->items() > 0;
|
||||||
if (ok)
|
if (ok)
|
||||||
{
|
{
|
||||||
ok = qry.save_as(path, fmt);
|
ok = rex->save_as(path, fmt);
|
||||||
if (ok)
|
if (ok)
|
||||||
xvt_sys_goto_url(path, "open");
|
xvt_sys_goto_url(path, "open");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
delete rex;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -963,7 +950,7 @@ bool TQuery_mask::save_query()
|
|||||||
|
|
||||||
bool TQuery_mask::save_if_needed()
|
bool TQuery_mask::save_if_needed()
|
||||||
{
|
{
|
||||||
if (!_is_dirty)
|
if (!_is_dirty || !field(DLG_SAVEREC).active())
|
||||||
return true;
|
return true;
|
||||||
if (!yesno_box(TR("Si desidera registrare la query?")))
|
if (!yesno_box(TR("Si desidera registrare la query?")))
|
||||||
return false;
|
return false;
|
||||||
@ -1125,7 +1112,7 @@ bool TQuery_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
|||||||
if (select_query())
|
if (select_query())
|
||||||
e = fe_modify;
|
e = fe_modify;
|
||||||
}
|
}
|
||||||
if (e == fe_modify)
|
if (e == fe_init || e == fe_modify)
|
||||||
{
|
{
|
||||||
save_if_needed();
|
save_if_needed();
|
||||||
load_query();
|
load_query();
|
||||||
@ -1341,12 +1328,20 @@ public:
|
|||||||
bool TSQL_recordset_app::create()
|
bool TSQL_recordset_app::create()
|
||||||
{
|
{
|
||||||
_msk = new TQuery_mask;
|
_msk = new TQuery_mask;
|
||||||
xvt_sys_sleep(500);
|
xvt_sys_sleep(500); // Lasciamo il tempo di leggere il titolo
|
||||||
return TSkeleton_application::create();
|
return TSkeleton_application::create();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TSQL_recordset_app::main_loop()
|
void TSQL_recordset_app::main_loop()
|
||||||
{
|
{
|
||||||
|
if (argc() > 2)
|
||||||
|
{
|
||||||
|
_msk->set(F_CODICE, argv(2)); // Carico la query da riga di comando
|
||||||
|
_msk->disable(DLG_SAVEREC); // Non permetto modifiche di alcun genere
|
||||||
|
_msk->disable(DLG_NEWREC);
|
||||||
|
_msk->disable(DLG_DELREC);
|
||||||
|
_msk->disable(DLG_FINDREC);
|
||||||
|
}
|
||||||
_msk->run();
|
_msk->run();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -172,7 +172,6 @@ TReport_base_mask::TReport_base_mask(const char* name, TReport& rep)
|
|||||||
|
|
||||||
class TReport_field_mask : public TReport_base_mask
|
class TReport_field_mask : public TReport_base_mask
|
||||||
{
|
{
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void vedo_non_vedo();
|
void vedo_non_vedo();
|
||||||
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);
|
||||||
@ -236,6 +235,8 @@ void TReport_field_mask::vedo_non_vedo()
|
|||||||
|
|
||||||
show(F_VALIGN, is_text);
|
show(F_VALIGN, is_text);
|
||||||
show(F_TEXT, is_text && !is_currency);
|
show(F_TEXT, is_text && !is_currency);
|
||||||
|
show(F_HIDE_DOTS, is_currency);
|
||||||
|
show(F_DYNAMIC_HEIGHT, type == 'S');
|
||||||
show(F_FGCOLOR, type != 'I');
|
show(F_FGCOLOR, type != 'I');
|
||||||
show(F_BGCOLOR, type != 'L');
|
show(F_BGCOLOR, type != 'L');
|
||||||
show(F_FONT_SELECT, is_text);
|
show(F_FONT_SELECT, is_text);
|
||||||
@ -350,6 +351,8 @@ void TReport_field_mask::set_field(const TReport_field& rf)
|
|||||||
set(F_HIDDEN, rf.hidden() ? "X" : "");
|
set(F_HIDDEN, rf.hidden() ? "X" : "");
|
||||||
set(F_DISABLED, rf.deactivated() ? "X" : "");
|
set(F_DISABLED, rf.deactivated() ? "X" : "");
|
||||||
set(F_HIDE_ZEROES, rf.zeroes_hidden() ? "X" : "");
|
set(F_HIDE_ZEROES, rf.zeroes_hidden() ? "X" : "");
|
||||||
|
set(F_HIDE_DOTS, rf.picture().find('.') < 0);
|
||||||
|
set(F_DYNAMIC_HEIGHT, rf.dynamic_height() ? "X" : "");
|
||||||
set(F_GROUPS, rf.groups());
|
set(F_GROUPS, rf.groups());
|
||||||
set(F_CODVAL, rf.codval());
|
set(F_CODVAL, rf.codval());
|
||||||
set(F_LINK, rf.link());
|
set(F_LINK, rf.link());
|
||||||
@ -385,6 +388,7 @@ void TReport_field_mask::get_field(TReport_field& rf) const
|
|||||||
rf.show(!get_bool(F_HIDDEN));
|
rf.show(!get_bool(F_HIDDEN));
|
||||||
rf.activate(!get_bool(F_DISABLED));
|
rf.activate(!get_bool(F_DISABLED));
|
||||||
rf.hide_zeroes(get_bool(F_HIDE_ZEROES));
|
rf.hide_zeroes(get_bool(F_HIDE_ZEROES));
|
||||||
|
rf.set_dynamic_height(get_bool(F_DYNAMIC_HEIGHT));
|
||||||
rf.set_groups(get(F_GROUPS));
|
rf.set_groups(get(F_GROUPS));
|
||||||
rf.set_codval(get(F_CODVAL));
|
rf.set_codval(get(F_CODVAL));
|
||||||
rf.set_link(get(F_LINK));
|
rf.set_link(get(F_LINK));
|
||||||
@ -393,6 +397,9 @@ void TReport_field_mask::get_field(TReport_field& rf) const
|
|||||||
rf.set_border(get_int(F_BORDER));
|
rf.set_border(get_int(F_BORDER));
|
||||||
rf.set_fore_color(_fgcolor);
|
rf.set_fore_color(_fgcolor);
|
||||||
rf.set_back_color(_bgcolor);
|
rf.set_back_color(_bgcolor);
|
||||||
|
if (strchr("VP", rf.type()) != NULL)
|
||||||
|
rf.set_picture(get_bool(F_HIDE_DOTS) ? "#########,@@" : "###.###.###,@@");
|
||||||
|
else
|
||||||
rf.set_picture(get(F_TEXT));
|
rf.set_picture(get(F_TEXT));
|
||||||
rf.set_field(get(F_SOURCE));
|
rf.set_field(get(F_SOURCE));
|
||||||
rf.set_alternate_field(get(F_SOURCE2));
|
rf.set_alternate_field(get(F_SOURCE2));
|
||||||
@ -882,6 +889,7 @@ void TReport_mask::add_field()
|
|||||||
{
|
{
|
||||||
TReport_section& rs = curr_section();
|
TReport_section& rs = curr_section();
|
||||||
TReport_field* rf = new TReport_field(&rs);
|
TReport_field* rf = new TReport_field(&rs);
|
||||||
|
rf->set_type('S');
|
||||||
rf->set_pos(0, rs.compute_size().y);
|
rf->set_pos(0, rs.compute_size().y);
|
||||||
TReport_field_mask m(*rf);
|
TReport_field_mask m(*rf);
|
||||||
m.disable(DLG_DELREC);
|
m.disable(DLG_DELREC);
|
||||||
|
@ -35,6 +35,8 @@
|
|||||||
#define F_INCLUDE 143
|
#define F_INCLUDE 143
|
||||||
#define F_PARAMS 144
|
#define F_PARAMS 144
|
||||||
#define F_SOURCE2 145
|
#define F_SOURCE2 145
|
||||||
|
#define F_HIDE_DOTS 146
|
||||||
|
#define F_DYNAMIC_HEIGHT 147
|
||||||
|
|
||||||
#define F_LEVEL 160
|
#define F_LEVEL 160
|
||||||
#define F_GROUP_BY 161
|
#define F_GROUP_BY 161
|
||||||
|
@ -63,12 +63,23 @@ BEGIN
|
|||||||
PROMPT 53 1 "Nascosto se zero"
|
PROMPT 53 1 "Nascosto se zero"
|
||||||
END
|
END
|
||||||
|
|
||||||
|
BOOLEAN F_HIDE_DOTS
|
||||||
|
BEGIN
|
||||||
|
PROMPT 53 2 "Nascondi . migliaia"
|
||||||
|
END
|
||||||
|
|
||||||
|
BOOLEAN F_DYNAMIC_HEIGHT
|
||||||
|
BEGIN
|
||||||
|
PROMPT 53 2 "Altezza automatica"
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
STRING F_GROUPS 50
|
STRING F_GROUPS 50
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 3 "Gruppi "
|
PROMPT 1 3 "Gruppi "
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_CODVAL 32 8
|
STRING F_CODVAL 32 16
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 4 "Divisa "
|
PROMPT 1 4 "Divisa "
|
||||||
FLAGS "U"
|
FLAGS "U"
|
||||||
@ -201,8 +212,9 @@ SPREADSHEET F_LIST -1 -3
|
|||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 1 ""
|
PROMPT 1 1 ""
|
||||||
ITEM "Codice"
|
ITEM "Codice"
|
||||||
ITEM "Decodifica@50"
|
ITEM "Decodifica@20"
|
||||||
FLAGS "H"
|
ITEM "Script@50"
|
||||||
|
FLAGS "H|"
|
||||||
END
|
END
|
||||||
|
|
||||||
BUTTON DLG_CANCEL 10 2
|
BUTTON DLG_CANCEL 10 2
|
||||||
@ -219,7 +231,7 @@ ENDPAGE
|
|||||||
|
|
||||||
ENDMASK
|
ENDMASK
|
||||||
|
|
||||||
PAGE "List" -1 -1 72 11
|
PAGE "List" -1 -1 66 7
|
||||||
|
|
||||||
STRING 101 3
|
STRING 101 3
|
||||||
BEGIN
|
BEGIN
|
||||||
@ -228,7 +240,12 @@ END
|
|||||||
|
|
||||||
STRING 102 50
|
STRING 102 50
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 13 0 "Decodifica "
|
PROMPT 14 0 ""
|
||||||
|
END
|
||||||
|
|
||||||
|
MEMO 103 64 4
|
||||||
|
BEGIN
|
||||||
|
PROMPT 1 1 "Script"
|
||||||
END
|
END
|
||||||
|
|
||||||
BUTTON DLG_CANCEL 10 2
|
BUTTON DLG_CANCEL 10 2
|
||||||
|
176
ba/ba8301.cpp
176
ba/ba8301.cpp
@ -321,6 +321,8 @@ protected:
|
|||||||
void draw_grid();
|
void draw_grid();
|
||||||
void snap_drag(PNT& pnt) const;
|
void snap_drag(PNT& pnt) const;
|
||||||
void draw_dragster();
|
void draw_dragster();
|
||||||
|
void draw_field(const TReport_field& rf);
|
||||||
|
void draw_broken_paper(const TReport_field& rf);
|
||||||
|
|
||||||
void popup_menu(EVENT* ep);
|
void popup_menu(EVENT* ep);
|
||||||
void popup_cut();
|
void popup_cut();
|
||||||
@ -392,7 +394,7 @@ bool TReport_window::get_selection_rect(TRectangle& rct) const
|
|||||||
const TReport_field& f = *(const TReport_field*)o;
|
const TReport_field& f = *(const TReport_field*)o;
|
||||||
if (f.selected())
|
if (f.selected())
|
||||||
{
|
{
|
||||||
const TRectangle fr = f.get_draw_rect();
|
const TRectangle& fr = f.get_rect();
|
||||||
if (!full)
|
if (!full)
|
||||||
{
|
{
|
||||||
rct = fr;
|
rct = fr;
|
||||||
@ -431,10 +433,9 @@ void TReport_window::select(const TRectangle& rct)
|
|||||||
|
|
||||||
void TReport_window::draw_dragster()
|
void TReport_window::draw_dragster()
|
||||||
{
|
{
|
||||||
set_mode(M_XOR);
|
set_mode(M_NOT_XOR);
|
||||||
set_pen(COLOR_CYAN);
|
set_pen(COLOR_BLACK);
|
||||||
set_brush(COLOR_WHITE, PAT_NONE);
|
xvt_dwin_draw_dotted_rect(win(), &_rct_drag);
|
||||||
xvt_dwin_draw_rect(win(), &_rct_drag);
|
|
||||||
set_mode(M_COPY);
|
set_mode(M_COPY);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -731,20 +732,177 @@ void TReport_window::draw_grid()
|
|||||||
{
|
{
|
||||||
clear(COLOR_WHITE);
|
clear(COLOR_WHITE);
|
||||||
|
|
||||||
const int max = 192;
|
const int max = 196;
|
||||||
const int k = 100;
|
const int k = 100;
|
||||||
for (int i = 1; i < max; i++)
|
for (int i = 1; i < max; i++)
|
||||||
{
|
{
|
||||||
set_pen(i%10 ? MAKE_COLOR(232,232,232) : COLOR_LTGRAY);
|
set_pen(i%10 ? MAKE_COLOR(232,232,255) : MAKE_COLOR(255,192,255));
|
||||||
line(0, i*k, max*k, i*k);
|
line(0, i*k, max*k, i*k);
|
||||||
line(i*k, 0, i*k, max*k);
|
line(i*k, 0, i*k, max*k);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TReport_window::draw_broken_paper(const TReport_field& rf)
|
||||||
|
{
|
||||||
|
set_pen(COLOR_LTGRAY);
|
||||||
|
const TRectangle& dr = rf.get_rect();
|
||||||
|
const int b = dr.bottom()-100;
|
||||||
|
line(short(dr.x), short(b), short(dr.x), short(dr.y));
|
||||||
|
line(short(dr.x), short(dr.y), short(dr.right()), short(dr.y));
|
||||||
|
line(short(dr.right()), short(dr.y), short(dr.right()), short(b));
|
||||||
|
for (int x = dr.left(); x < dr.right(); )
|
||||||
|
{
|
||||||
|
const int deltay = rand()%100;
|
||||||
|
int deltax = 200;
|
||||||
|
int ex = x + deltax;
|
||||||
|
if (ex > dr.right())
|
||||||
|
{
|
||||||
|
ex = dr.right();
|
||||||
|
deltax = ex-x;
|
||||||
|
}
|
||||||
|
line(short(x), short(b), short(x+deltax/2), short(b+deltay));
|
||||||
|
line(short(x+deltax/2), short(b+deltay), short(x+deltax), short(b));
|
||||||
|
x = ex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TReport_window::draw_field(const TReport_field& rf)
|
||||||
|
{
|
||||||
|
RCT r; TWindow::log2dev(rf.get_rect(), r);
|
||||||
|
|
||||||
|
PAT_STYLE back_pattern = PAT_HOLLOW;
|
||||||
|
const int k = (rf.hidden() ? 1 : 0) + (rf.deactivated() ? 2 : 0);
|
||||||
|
switch (k)
|
||||||
|
{
|
||||||
|
case 1: back_pattern = PAT_FDIAG; break;
|
||||||
|
case 2: back_pattern = PAT_BDIAG; break;
|
||||||
|
case 3: back_pattern = PAT_DIAGCROSS; break;
|
||||||
|
default: back_pattern = PAT_HOLLOW; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (rf.type())
|
||||||
|
{
|
||||||
|
case 'E':
|
||||||
|
if (advanced_set_draw_tools(*this, rf.border(), rf.fore_color(), rf.back_color()))
|
||||||
|
xvt_dwin_draw_oval(win(), &r);
|
||||||
|
back_pattern = PAT_HOLLOW;
|
||||||
|
break;
|
||||||
|
case 'I':
|
||||||
|
{
|
||||||
|
TVariant var;
|
||||||
|
_report->evaluate(rf.field(), var, _alfafld);
|
||||||
|
const TString& name = var.as_string();
|
||||||
|
const TImage* img = _report->image(name);
|
||||||
|
if (img != NULL && img->ok())
|
||||||
|
img->draw(win(), r);
|
||||||
|
advanced_draw_rect(*this, r, rf.border(), rf.fore_color(), COLOR_WHITE);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'L':
|
||||||
|
if (advanced_set_draw_tools(*this, rf.border(), rf.fore_color(), COLOR_WHITE))
|
||||||
|
{
|
||||||
|
const PNT f = { r.top, r.left };
|
||||||
|
xvt_dwin_draw_set_pos(win(), f);
|
||||||
|
const PNT t = { r.bottom, r.right };
|
||||||
|
xvt_dwin_draw_line(win(), t);
|
||||||
|
}
|
||||||
|
back_pattern = PAT_HOLLOW;
|
||||||
|
break;
|
||||||
|
case 'R':
|
||||||
|
advanced_draw_rect(*this, r, rf.border(), rf.fore_color(), rf.back_color());
|
||||||
|
break;
|
||||||
|
case 'T':
|
||||||
|
advanced_draw_rect(*this, r, rf.border(), rf.fore_color(), rf.back_color());
|
||||||
|
xvt_dwin_set_font(win(), rf.font().get_xvt_font(*this));
|
||||||
|
set_color(rf.fore_color(), rf.back_color());
|
||||||
|
advanced_draw_text(*this, rf.picture(), r, rf.horizontal_alignment(), rf.vertical_alignment());
|
||||||
|
break;
|
||||||
|
default :
|
||||||
|
if (rf.dynamic_height())
|
||||||
|
draw_broken_paper(rf);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (rf.border() <= 0) // Rendi piu' visibile il bordo dei campi che non ce l'hanno
|
||||||
|
advanced_draw_rect(*this, r, 1, COLOR_LTGRAY, COLOR_WHITE);
|
||||||
|
else
|
||||||
|
advanced_draw_rect(*this, r, rf.border(), rf.fore_color(), rf.back_color());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rf.link().not_empty())
|
||||||
|
{
|
||||||
|
XVT_FNTID lnkfont = xvt_font_create();
|
||||||
|
xvt_font_copy(lnkfont, rf.font().get_xvt_font(*this), XVT_FA_ALL);
|
||||||
|
xvt_font_set_style(lnkfont, XVT_FS_UNDERLINE);
|
||||||
|
xvt_dwin_set_font(win(), lnkfont);
|
||||||
|
xvt_font_destroy(lnkfont);
|
||||||
|
set_color(rf.link_color(), rf.back_color());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
xvt_dwin_set_font(win(), rf.font().get_xvt_font(*this));
|
||||||
|
set_color(rf.fore_color(), rf.back_color());
|
||||||
|
}
|
||||||
|
|
||||||
|
TString str;
|
||||||
|
if (rf.id() > 0)
|
||||||
|
str << rf.id();
|
||||||
|
else
|
||||||
|
str = rf.field();
|
||||||
|
advanced_draw_text(*this, str, r, rf.horizontal_alignment(), rf.vertical_alignment());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (back_pattern != PAT_HOLLOW)
|
||||||
|
{
|
||||||
|
set_pen(COLOR_LTGRAY);
|
||||||
|
set_brush(COLOR_LTGRAY, back_pattern);
|
||||||
|
xvt_dwin_draw_rect(win(), &r);
|
||||||
|
}
|
||||||
|
if (rf.selected())
|
||||||
|
{
|
||||||
|
advanced_set_draw_tools(*this, 0, COLOR_WHITE, COLOR_LTGRAY);
|
||||||
|
const int k = 5;
|
||||||
|
RCT s = r; s.right = s.left+k; s.bottom = s.top+k;
|
||||||
|
xvt_dwin_draw_rect(win(), &s);
|
||||||
|
s = r; s.left = s.right-k; s.bottom = s.top+k;
|
||||||
|
xvt_dwin_draw_rect(win(), &s);
|
||||||
|
s = r; s.right = s.left+k; s.top = s.bottom-k;
|
||||||
|
xvt_dwin_draw_rect(win(), &s);
|
||||||
|
s = r; s.left = s.right-k; s.top = s.bottom-k;
|
||||||
|
xvt_dwin_draw_rect(win(), &s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void TReport_window::update()
|
void TReport_window::update()
|
||||||
{
|
{
|
||||||
draw_grid();
|
draw_grid(); // Disegna griglia
|
||||||
curr_section().draw(*this, rdm_edit);
|
|
||||||
|
const TReport_section& rs = curr_section();
|
||||||
|
int y = rs.height();
|
||||||
|
const bool is_dynamic = y <= 0; // Sezione ad altezza variabile
|
||||||
|
|
||||||
|
for (int i = 0; i < rs.items(); i++)
|
||||||
|
{
|
||||||
|
const TReport_field& rf = rs.field(i);
|
||||||
|
draw_field(rf);
|
||||||
|
if (is_dynamic)
|
||||||
|
{
|
||||||
|
const int fy = rf.get_rect().bottom();
|
||||||
|
if (fy > y) y = fy;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (y > 0) // Disegna barra di fine sezione
|
||||||
|
{
|
||||||
|
if (is_dynamic)
|
||||||
|
{
|
||||||
|
const int mod = y % 100;
|
||||||
|
if (mod != 0) y += 100-mod;
|
||||||
|
}
|
||||||
|
hide_pen();
|
||||||
|
set_brush(COLOR_LTGRAY, PAT_DIAGCROSS);
|
||||||
|
bar(0, y, 19600, 6600);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int TReport_window::cpi() const
|
int TReport_window::cpi() const
|
||||||
|
129
ba/ba8400.cpp
129
ba/ba8400.cpp
@ -17,15 +17,17 @@
|
|||||||
class TFormer_mask : public TAutomask
|
class TFormer_mask : public TAutomask
|
||||||
{
|
{
|
||||||
bool _doc;
|
bool _doc;
|
||||||
|
int _qta_decimals;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void run_app(const char* app) const;
|
void run_app(const char* app) const;
|
||||||
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);
|
||||||
|
|
||||||
|
void add_array_message(const TString& msg, TReport_field& rf) const;
|
||||||
void parse_field_line(const TString& line, TReport_field& rf) const;
|
void parse_field_line(const TString& line, TReport_field& rf) const;
|
||||||
void import_section(TScanner& scan, TReport_section& rs) const;
|
void import_section(TScanner& scan, TReport_section& rs) const;
|
||||||
void import_general(TScanner& scan, TReport& rep) const;
|
void import_general(TScanner& scan, TReport& rep);
|
||||||
void import_sections(TScanner& scan, TReport& rep) const;
|
void import_sections(TScanner& scan, TReport& rep);
|
||||||
void import_use(TScanner& scan, TReport& rep) const;
|
void import_use(TScanner& scan, TReport& rep) const;
|
||||||
void import();
|
void import();
|
||||||
|
|
||||||
@ -62,12 +64,38 @@ void TFormer_mask::import_use(TScanner& scan, TReport& rep) const
|
|||||||
rep.set_recordset(use);
|
rep.set_recordset(use);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TFormer_mask::add_array_message(const TString& line, TReport_field& rf) const
|
||||||
|
{
|
||||||
|
TToken_string head(line, ' ');
|
||||||
|
|
||||||
|
TString_array list;
|
||||||
|
rf.get_list(list);
|
||||||
|
const int index = list.last();
|
||||||
|
TToken_string item = list.row(index);
|
||||||
|
|
||||||
|
head.add("MESSAGE", 0);
|
||||||
|
TString msg = item.get(2);
|
||||||
|
msg.trim();
|
||||||
|
if (!msg.empty())
|
||||||
|
item << '\n';
|
||||||
|
msg << head;
|
||||||
|
item.add(msg,2);
|
||||||
|
|
||||||
|
list.add(item, index);
|
||||||
|
rf.set_list(list);
|
||||||
|
}
|
||||||
|
|
||||||
void TFormer_mask::parse_field_line(const TString& line, TReport_field& rf) const
|
void TFormer_mask::parse_field_line(const TString& line, TReport_field& rf) const
|
||||||
{
|
{
|
||||||
TToken_string head(line, ' ');
|
TToken_string head(line, ' ');
|
||||||
head.trim();
|
head.trim();
|
||||||
head.strip_d_spaces();
|
head.strip_d_spaces();
|
||||||
|
|
||||||
|
if (head.starts_with("DR"))
|
||||||
|
{
|
||||||
|
if (rf.type() == 'V' || rf.type() == 'P')
|
||||||
|
rf.set_codval(head.get(1));
|
||||||
|
} else
|
||||||
if (head.starts_with("FI"))
|
if (head.starts_with("FI"))
|
||||||
{
|
{
|
||||||
TString fld = head.get(1);
|
TString fld = head.get(1);
|
||||||
@ -106,6 +134,51 @@ void TFormer_mask::parse_field_line(const TString& line, TReport_field& rf) cons
|
|||||||
for (int i = head.items()-1; i > 0; i--)
|
for (int i = head.items()-1; i > 0; i--)
|
||||||
g << ' ' << head.get(i);
|
g << ' ' << head.get(i);
|
||||||
rf.set_groups(g);
|
rf.set_groups(g);
|
||||||
|
if (_doc && rf.type() == 'N')
|
||||||
|
{
|
||||||
|
if (rf.in_group(29)) // PREZZO
|
||||||
|
{
|
||||||
|
rf.set_type('P');
|
||||||
|
rf.set_codval("33.CODVAL");
|
||||||
|
} else
|
||||||
|
if (rf.in_group(30)) // QTA
|
||||||
|
{
|
||||||
|
TString pic = rf.picture().before(",");
|
||||||
|
if (_qta_decimals > 0)
|
||||||
|
{
|
||||||
|
pic << ',';
|
||||||
|
for (int d = 0; d < _qta_decimals; d++)
|
||||||
|
pic << '@';
|
||||||
|
}
|
||||||
|
const int extra = pic.len() - rf.get_rect().width() / 100;
|
||||||
|
if (extra > 0)
|
||||||
|
pic = pic.mid(extra);
|
||||||
|
rf.set_picture(pic);
|
||||||
|
} else
|
||||||
|
if (rf.in_group(31)) // IMPORTO
|
||||||
|
{
|
||||||
|
rf.set_type('V');
|
||||||
|
rf.set_codval("33.CODVAL");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
if (head.starts_with("IT"))
|
||||||
|
{
|
||||||
|
const int apicia = head.find('"')+1;
|
||||||
|
if (apicia > 0 && rf.type() == 'A')
|
||||||
|
{
|
||||||
|
const int apicic = head.find('"', apicia);
|
||||||
|
TToken_string item(head.sub(apicia, apicic), SAFE_PIPE_CHR);
|
||||||
|
item.replace('|', SAFE_PIPE_CHR);
|
||||||
|
TString_array list;
|
||||||
|
rf.get_list(list);
|
||||||
|
list.add(item);
|
||||||
|
rf.set_list(list);
|
||||||
|
|
||||||
|
const int msg = head.find(" ME", apicic);
|
||||||
|
if (msg > 0)
|
||||||
|
add_array_message(head.mid(msg+1), rf);
|
||||||
|
}
|
||||||
} else
|
} else
|
||||||
if (head.starts_with("ME"))
|
if (head.starts_with("ME"))
|
||||||
{
|
{
|
||||||
@ -115,6 +188,10 @@ void TFormer_mask::parse_field_line(const TString& line, TReport_field& rf) cons
|
|||||||
rf.set_field(head.mid(pos));
|
rf.set_field(head.mid(pos));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
if (rf.type() == 'A')
|
||||||
|
add_array_message(head, rf);
|
||||||
|
else
|
||||||
{
|
{
|
||||||
head.add("MESSAGE", 0);
|
head.add("MESSAGE", 0);
|
||||||
TString me = rf.prescript();
|
TString me = rf.prescript();
|
||||||
@ -123,6 +200,7 @@ void TFormer_mask::parse_field_line(const TString& line, TReport_field& rf) cons
|
|||||||
me << head;
|
me << head;
|
||||||
rf.set_prescript(me);
|
rf.set_prescript(me);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} else
|
} else
|
||||||
if (head.starts_with("PI"))
|
if (head.starts_with("PI"))
|
||||||
{
|
{
|
||||||
@ -155,7 +233,7 @@ void TFormer_mask::parse_field_line(const TString& line, TReport_field& rf) cons
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TFormer_mask::import_general(TScanner& scan, TReport& rep) const
|
void TFormer_mask::import_general(TScanner& scan, TReport& rep)
|
||||||
{
|
{
|
||||||
TString expr;
|
TString expr;
|
||||||
while (scan.ok())
|
while (scan.ok())
|
||||||
@ -163,7 +241,9 @@ void TFormer_mask::import_general(TScanner& scan, TReport& rep) const
|
|||||||
TString& line = scan.line();
|
TString& line = scan.line();
|
||||||
if (line.empty() || line.starts_with("EN"))
|
if (line.empty() || line.starts_with("EN"))
|
||||||
break;
|
break;
|
||||||
if (_doc && line.starts_with("EXCLUDE"))
|
if (_doc)
|
||||||
|
{
|
||||||
|
if (line.starts_with("EXCLUDE"))
|
||||||
{
|
{
|
||||||
TToken_string exclude(50, ',');
|
TToken_string exclude(50, ',');
|
||||||
exclude = line.after('"');
|
exclude = line.after('"');
|
||||||
@ -180,6 +260,11 @@ void TFormer_mask::import_general(TScanner& scan, TReport& rep) const
|
|||||||
if (expr.not_empty())
|
if (expr.not_empty())
|
||||||
expr << "||";
|
expr << "||";
|
||||||
expr << cond;
|
expr << cond;
|
||||||
|
} else
|
||||||
|
if (line.starts_with("QTA_DECIMALS"))
|
||||||
|
{
|
||||||
|
_qta_decimals = atoi(line.mid(13));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -214,7 +299,9 @@ void TFormer_mask::import_section(TScanner& scan, TReport_section& rs) const
|
|||||||
const TString16 str_type = head.get(0);
|
const TString16 str_type = head.get(0);
|
||||||
char type = ' ';
|
char type = ' ';
|
||||||
if (str_type.starts_with("FI"))
|
if (str_type.starts_with("FI"))
|
||||||
type = 'I';
|
type = 'I'; else
|
||||||
|
if (str_type.starts_with("LI"))
|
||||||
|
type = 'A';
|
||||||
else
|
else
|
||||||
type = str_type[0];
|
type = str_type[0];
|
||||||
|
|
||||||
@ -222,8 +309,7 @@ void TFormer_mask::import_section(TScanner& scan, TReport_section& rs) const
|
|||||||
{
|
{
|
||||||
const int id = head.get_int(1);
|
const int id = head.get_int(1);
|
||||||
const int width = 100*head.get_int();
|
const int width = 100*head.get_int();
|
||||||
int height = 100*head.get_int();
|
const int height = 100*head.get_int();
|
||||||
if (height <= 0) height = 100;
|
|
||||||
|
|
||||||
cur_field = new TReport_field(&rs);
|
cur_field = new TReport_field(&rs);
|
||||||
cur_field->set_type(type);
|
cur_field->set_type(type);
|
||||||
@ -231,10 +317,12 @@ void TFormer_mask::import_section(TScanner& scan, TReport_section& rs) const
|
|||||||
cur_field->set_id(id);
|
cur_field->set_id(id);
|
||||||
if (width > 0)
|
if (width > 0)
|
||||||
cur_field->set_width(width);
|
cur_field->set_width(width);
|
||||||
if (_doc && type == 'S' && height >= 500 && rs.type() == 'B')
|
if (height > 0)
|
||||||
cur_field->set_height(0); // Altezaa descrizione automatica
|
{
|
||||||
else
|
|
||||||
cur_field->set_height(height);
|
cur_field->set_height(height);
|
||||||
|
if (_doc && type == 'S' && height >= 500 && rs.type() == 'B')
|
||||||
|
cur_field->set_dynamic_height(true); // Altezza descrizione automatica
|
||||||
|
}
|
||||||
if (strchr("NVP", type) != NULL)
|
if (strchr("NVP", type) != NULL)
|
||||||
{
|
{
|
||||||
cur_field->set_horizontal_alignment('R');
|
cur_field->set_horizontal_alignment('R');
|
||||||
@ -252,7 +340,8 @@ void TFormer_mask::import_section(TScanner& scan, TReport_section& rs) const
|
|||||||
if (cur_field != NULL)
|
if (cur_field != NULL)
|
||||||
{
|
{
|
||||||
// Trasforma in testi fissi i campi stringa senza sorgente
|
// Trasforma in testi fissi i campi stringa senza sorgente
|
||||||
if (cur_field->type() == 'S' && cur_field->field().blank() && cur_field->prescript().blank())
|
if (cur_field->type() == 'S' && !cur_field->picture().blank() &&
|
||||||
|
cur_field->field().blank() && cur_field->prescript().blank())
|
||||||
cur_field->set_type('T');
|
cur_field->set_type('T');
|
||||||
}
|
}
|
||||||
in_field--; // END of field
|
in_field--; // END of field
|
||||||
@ -270,7 +359,7 @@ void TFormer_mask::import_section(TScanner& scan, TReport_section& rs) const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TFormer_mask::import_sections(TScanner& scan, TReport& rep) const
|
void TFormer_mask::import_sections(TScanner& scan, TReport& rep)
|
||||||
{
|
{
|
||||||
while (scan.ok())
|
while (scan.ok())
|
||||||
{
|
{
|
||||||
@ -376,7 +465,7 @@ bool TFormer_mask::on_field_event(TOperable_field& o, TField_event e, long jolly
|
|||||||
switch (o.dlg())
|
switch (o.dlg())
|
||||||
{
|
{
|
||||||
case F_FORM:
|
case F_FORM:
|
||||||
if (e == fe_modify)
|
if (e == fe_modify || (e == fe_init && !o.empty()))
|
||||||
{
|
{
|
||||||
TFilename output = get(F_REPORT);
|
TFilename output = get(F_REPORT);
|
||||||
TFilename path = output.path();
|
TFilename path = output.path();
|
||||||
@ -390,16 +479,20 @@ bool TFormer_mask::on_field_event(TOperable_field& o, TField_event e, long jolly
|
|||||||
input.custom_path();
|
input.custom_path();
|
||||||
o.set(input);
|
o.set(input);
|
||||||
|
|
||||||
|
const TString name = input.name();
|
||||||
|
|
||||||
output = path;
|
output = path;
|
||||||
output.add(input.name());
|
output.add(name);
|
||||||
output.ext("rep");
|
output.ext("rep");
|
||||||
output.lower();
|
output.lower();
|
||||||
|
|
||||||
set(F_REPORT, output, true);
|
set(F_REPORT, output, true);
|
||||||
enable(DLG_ELABORA, input.exist());
|
enable(DLG_ELABORA, input.exist());
|
||||||
|
set(F_DOC, isdigit(name[2]) ? "" : "X");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case F_REPORT:
|
case F_REPORT:
|
||||||
if (e == fe_modify)
|
if (e == fe_modify || e == fe_init)
|
||||||
{
|
{
|
||||||
const TFilename output = get(F_REPORT);
|
const TFilename output = get(F_REPORT);
|
||||||
const bool yes = output.exist();
|
const bool yes = output.exist();
|
||||||
@ -439,8 +532,12 @@ bool TFormer_mask::on_field_event(TOperable_field& o, TField_event e, long jolly
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
TFormer_mask::TFormer_mask() : TAutomask("ba8400a")
|
TFormer_mask::TFormer_mask()
|
||||||
|
: TAutomask("ba8400a"), _qta_decimals(0)
|
||||||
{
|
{
|
||||||
|
#ifdef DBG
|
||||||
|
set(F_FORM, "d:/clienti/dipiu/custom/fatdipiu.frm");
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
|
209
ba/ba8500.cpp
Executable file
209
ba/ba8500.cpp
Executable file
@ -0,0 +1,209 @@
|
|||||||
|
#include <applicat.h>
|
||||||
|
#include <automask.h>
|
||||||
|
#include <defmask.h>
|
||||||
|
#include <execp.h>
|
||||||
|
#include <printer.h>
|
||||||
|
#include <reprint.h>
|
||||||
|
#include <utility.h>
|
||||||
|
|
||||||
|
#include "ba8400.h"
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// Utility
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
bool cod2app(const char* tok, TString& app)
|
||||||
|
{
|
||||||
|
if (isalpha(tok[0]) && isalpha(tok[1]) && atoi(tok+2) > 1000)
|
||||||
|
{
|
||||||
|
app.strncpy(tok, 3);
|
||||||
|
app << " -" << char(tok[3]-1);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool get_xml_attr(const TString& line, const char* attr, TString& value)
|
||||||
|
{
|
||||||
|
TString str; str << ' ' << attr << "=\"";
|
||||||
|
const int pos = line.find(str);
|
||||||
|
if (pos >= 0)
|
||||||
|
{
|
||||||
|
const int apicia = line.find('"', pos)+1;
|
||||||
|
const int apicic = line.find('"', apicia);
|
||||||
|
if (apicic > apicia)
|
||||||
|
{
|
||||||
|
value = line.sub(apicia, apicic);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool get_xml_child(const TString& line, const char* tag, TString& value)
|
||||||
|
{
|
||||||
|
TString str; str << '<' << tag << '>';
|
||||||
|
const int pos = line.find(str);
|
||||||
|
if (pos >= 0)
|
||||||
|
{
|
||||||
|
const int apicia = line.find('>', pos)+1;
|
||||||
|
const int apicic = line.find('<', apicia);
|
||||||
|
if (apicic > apicia)
|
||||||
|
{
|
||||||
|
value = line.sub(apicia, apicic);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool rep2app(const char* name, TString& app, TString& desc)
|
||||||
|
{
|
||||||
|
app = desc = "";
|
||||||
|
|
||||||
|
TFilename report_name(name);
|
||||||
|
report_name.ext("rep");
|
||||||
|
if (!report_name.custom_path())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
TToken_string libraries(50, ',');
|
||||||
|
|
||||||
|
TString stringona;
|
||||||
|
TScanner scan(report_name);
|
||||||
|
for (int i = 0; i < 3 && scan.good(); i++) // Leggo solo le prime righe
|
||||||
|
stringona << scan.line();
|
||||||
|
get_xml_attr(stringona, "libraries", libraries);
|
||||||
|
get_xml_child(stringona, "description", desc);
|
||||||
|
|
||||||
|
FOR_EACH_TOKEN(libraries, tok) if (strlen(tok) == 6)
|
||||||
|
{
|
||||||
|
if (cod2app(tok, app))
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
cod2app(report_name.name(), app);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// TKlarkKent_mask
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
class TKlarkKent_mask : public TAutomask
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||||||
|
|
||||||
|
public:
|
||||||
|
TKlarkKent_mask() : TAutomask("ba8500a") { }
|
||||||
|
};
|
||||||
|
|
||||||
|
bool TKlarkKent_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||||
|
{
|
||||||
|
switch (o.dlg())
|
||||||
|
{
|
||||||
|
case F_REPORT:
|
||||||
|
if (e == fe_button)
|
||||||
|
{
|
||||||
|
TArray_sheet a(-1, -1, 75, 20, "Report", "Nome@16|Progr.|Descrizione@50");
|
||||||
|
TString_array& arr = a.rows_array();
|
||||||
|
|
||||||
|
list_files("*.rep", arr);
|
||||||
|
TFilename dir = firm2dir(-1); dir.add("custom"); dir.add("*.rep");
|
||||||
|
list_files(dir, arr);
|
||||||
|
|
||||||
|
TString app, desc;
|
||||||
|
FOR_EACH_ARRAY_ROW(arr, i, row)
|
||||||
|
{
|
||||||
|
rep2app(*row, app, desc);
|
||||||
|
|
||||||
|
TFilename n = *row; n = n.name(); n.ext("");
|
||||||
|
*row = n;
|
||||||
|
row->add(app);
|
||||||
|
row->add(desc);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (a.run() == K_ENTER)
|
||||||
|
{
|
||||||
|
o.set(a.row(-1).get(0));
|
||||||
|
e = fe_modify;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (e == fe_init || e == fe_modify)
|
||||||
|
{
|
||||||
|
TFilename name = o.get();
|
||||||
|
TString app, desc;
|
||||||
|
const bool ok = rep2app(name, app, desc);
|
||||||
|
set(F_FORM, desc);
|
||||||
|
set(F_DOC, app);
|
||||||
|
enable(DLG_PRINT, ok);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case DLG_EDIT:
|
||||||
|
if (e == fe_button && !field(F_REPORT).empty())
|
||||||
|
{
|
||||||
|
TString str;
|
||||||
|
str << "ba8 -2 " << get(F_REPORT);
|
||||||
|
TExternal_app app(str);
|
||||||
|
app.run(true);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// TKlarkKent_app
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
class TKlarkKent_app : public TSkeleton_application
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
virtual void main_loop();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
void TKlarkKent_app::main_loop()
|
||||||
|
{
|
||||||
|
TFilename report_name;
|
||||||
|
if (argc() > 2)
|
||||||
|
report_name = argv(2);
|
||||||
|
|
||||||
|
if (report_name.empty() || !report_name.custom_path())
|
||||||
|
{
|
||||||
|
TKlarkKent_mask m;
|
||||||
|
m.set(F_REPORT, report_name);
|
||||||
|
if (m.run() == K_ENTER)
|
||||||
|
{
|
||||||
|
report_name = m.get(F_REPORT);
|
||||||
|
report_name.custom_path();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TString appname, desc;
|
||||||
|
rep2app(report_name, appname, desc);
|
||||||
|
if (appname.not_empty())
|
||||||
|
{
|
||||||
|
appname << ' ' << report_name;
|
||||||
|
TExternal_app app(appname);
|
||||||
|
app.run(true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TReport rep;
|
||||||
|
if (rep.load(report_name))
|
||||||
|
{
|
||||||
|
TReport_printer rp(rep);
|
||||||
|
rp.print(printer().printtype() == screenvis);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int ba8500(int argc, char* argv[])
|
||||||
|
{
|
||||||
|
TKlarkKent_app app;
|
||||||
|
app.run(argc, argv, TR("Stampa Report"));
|
||||||
|
return 0;
|
||||||
|
}
|
43
ba/ba8500a.uml
Executable file
43
ba/ba8500a.uml
Executable file
@ -0,0 +1,43 @@
|
|||||||
|
#include "ba8400.h"
|
||||||
|
|
||||||
|
PAGE "Stampa Report" -1 -1 62 5
|
||||||
|
|
||||||
|
STRING F_REPORT 256 50
|
||||||
|
BEGIN
|
||||||
|
PROMPT 1 1 "Report "
|
||||||
|
FLAGS "B"
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_FORM 256 45
|
||||||
|
BEGIN
|
||||||
|
PROMPT 1 2 "Descrizione "
|
||||||
|
FLAGS "D"
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_DOC 256 45
|
||||||
|
BEGIN
|
||||||
|
PROMPT 1 3 "Applicazione "
|
||||||
|
FLAGS "D"
|
||||||
|
END
|
||||||
|
|
||||||
|
BUTTON DLG_PRINT 10 2
|
||||||
|
BEGIN
|
||||||
|
PROMPT -13 -1 "~Stampa"
|
||||||
|
PICTURE BMP_PRINT
|
||||||
|
FLAGS "D"
|
||||||
|
END
|
||||||
|
|
||||||
|
BUTTON DLG_EDIT 10 2
|
||||||
|
BEGIN
|
||||||
|
PROMPT -23 -1 "~Edit"
|
||||||
|
PICTURE BMP_EDIT
|
||||||
|
END
|
||||||
|
|
||||||
|
BUTTON DLG_QUIT 10 2
|
||||||
|
BEGIN
|
||||||
|
PROMPT -33 -1 ""
|
||||||
|
END
|
||||||
|
|
||||||
|
ENDPAGE
|
||||||
|
|
||||||
|
ENDMASK
|
@ -72,7 +72,8 @@
|
|||||||
\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
||||||
|
|
||||||
: MESSAGE_ADD ( f1 -- )
|
: MESSAGE_ADD ( f1 -- )
|
||||||
#THIS @ SWAP +! \ Incrementa f1 col contenuto del campo corrente
|
#THIS @ \ Leggo il valore del campo corrente
|
||||||
|
SWAP +! \ Incrementa f1 col contenuto del campo corrente
|
||||||
;
|
;
|
||||||
|
|
||||||
: MESSAGE_ALIGN ( s1 f1 -- )
|
: MESSAGE_ALIGN ( s1 f1 -- )
|
||||||
@ -82,7 +83,11 @@
|
|||||||
;
|
;
|
||||||
|
|
||||||
: MESSAGE_APPEND ( f1 -- )
|
: MESSAGE_APPEND ( f1 -- )
|
||||||
MESSAGE_ADD \ Incrementa f1 col contenuto del campo corrente
|
" " \ Inserisco uno spazio
|
||||||
|
#THIS @ \ Leggo il valore del campo corrente
|
||||||
|
+ \ Sommo uno spazio all'inizio della stringa
|
||||||
|
SWAP \ Riporto in primo piano f1
|
||||||
|
+! \ Incrementa f1 col contenuto della stringa
|
||||||
;
|
;
|
||||||
|
|
||||||
: MESSAGE_COPY ( f1 ... fn -- )
|
: MESSAGE_COPY ( f1 ... fn -- )
|
||||||
@ -91,7 +96,6 @@
|
|||||||
WHILE
|
WHILE
|
||||||
#THIS @ SWAP ! \ Copia il campo corrente
|
#THIS @ SWAP ! \ Copia il campo corrente
|
||||||
REPEAT
|
REPEAT
|
||||||
DROP \ Butta via il NULL generato automaticamente
|
|
||||||
;
|
;
|
||||||
|
|
||||||
: MESSAGE_DEBUG ( NULL -- )
|
: MESSAGE_DEBUG ( NULL -- )
|
||||||
@ -135,7 +139,8 @@
|
|||||||
;
|
;
|
||||||
|
|
||||||
: MESSAGE_PAGENO ( -- ) \ Numero di pagina corrente
|
: MESSAGE_PAGENO ( -- ) \ Numero di pagina corrente
|
||||||
#REPORT.PAGE @ #THIS !
|
#REPORT.PAGE @ \ Leggo il numero di pagina
|
||||||
|
#THIS ! \ Setto il campo corrente col numero
|
||||||
;
|
;
|
||||||
|
|
||||||
: MESSAGE_RESET ( f1 ... fn -- )
|
: MESSAGE_RESET ( f1 ... fn -- )
|
||||||
@ -155,7 +160,9 @@
|
|||||||
;
|
;
|
||||||
|
|
||||||
: MESSAGE_SUB ( f1 -- )
|
: MESSAGE_SUB ( f1 -- )
|
||||||
#THIS @ -1 * SWAP +! \ Decrementa f1 col contenuto del campo corrente
|
#THIS @ \ Leggo il campo corrente
|
||||||
|
-1 * \ Lo cambio di segno
|
||||||
|
SWAP +! \ Decrementa f1 col contenuto del campo corrente
|
||||||
;
|
;
|
||||||
|
|
||||||
: MESSAGE_TABLEREAD ( s1 s2 s3 -- )
|
: MESSAGE_TABLEREAD ( s1 s2 s3 -- )
|
||||||
|
Loading…
x
Reference in New Issue
Block a user