Patch level : 2.2

Files correlati     : ca0
Ricompilazione Demo : [ ]
Commento            :


git-svn-id: svn://10.65.10.50/trunk@12527 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2004-12-01 10:56:41 +00:00
parent 6fce3dd611
commit a760476caa
4 changed files with 105 additions and 54 deletions

View File

@ -21,7 +21,6 @@ public:
TPiano_conti_anal_msk::TPiano_conti_anal_msk() : TSimple_anal_msk("ca0400a")
{
create_key_fields();
offset_fields();
}
TPiano_conti_anal_msk::~TPiano_conti_anal_msk()

View File

@ -1,20 +1,12 @@
#include "ca0400a.h"
TOOLBAR "" 0 20 0 2
TOOLBAR "" 0 -3 0 3
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -1 ""
END
#include <toolbar.h>
ENDPAGE
PAGE "Piano dei conti" -1 -1 78 10
PAGE "Piano dei conti" -1 -1 80 20
GROUPBOX DLG_NULL 78 6
BEGIN

View File

@ -9,44 +9,48 @@ bool TAnal_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
return true;
}
void TAnal_msk::offset_fields()
int TAnal_msk::compute_offset() const
{
const WINDOW tw = toolwin();
RCT rct; xvt_vobj_get_client_rect(win(), &rct);
const int width = rct.right;
int rightmost = 0;
for (int i = fields()-1; i > 0; i--)
{
TMask_field& f = fld(i);
if (f.dlg() < 1000 && f.parent() != tw)
{
f.get_rect(rct);
if (rct.right > rightmost)
rightmost = rct.right;
}
}
const int delta = width - rightmost;
if (delta > 0)
{
for (int i = fields()-1; i >= 0; i--)
{
TMask_field& f = fld(i);
if (f.dlg() < 1000 && f.parent() != tw)
{
f.get_rect(rct);
xvt_rect_offset(&rct, delta, 0);
f.set_rect(rct);
}
}
}
int delta = 0;
RCT rct; xvt_vobj_get_client_rect(TASK_WIN, &rct);
if (rct.right > 720)
delta = (rct.right - 720) / 2 / CHARX;
return delta;
}
TAnal_msk::TAnal_msk(const char* name)
{
read_mask(name, 0, 0);
const TFilename outname = "anal.msk";
TFilename inpname = name; inpname.ext("msk");
inpname.custom_path();
ofstream out(outname);
int delta = compute_offset();
TString line;
TScanner inp(inpname);
while (!inp.eof())
{
line = inp.line();
if (line.starts_with("PR "))
{
TToken_string l(line, ' ');
l.strip_d_spaces();
int x = l.get_int(1);
if (x >= 0)
{
x += delta;
l.add(x, 1);
line = l;
}
}
out << line << endl;
}
out.close();
read_mask(outname, 0, 0);
xvt_fsys_removefile(outname);
}
///////////////////////////////////////////////////////////
@ -64,26 +68,39 @@ void TSimple_anal_msk::get_key_fields(TString& key1, TString& key2) const
key2 = des.Fd[k2.FieldSeq[0] % MaxFields].Name;
}
int TSimple_anal_msk::get_key_len(int level, TConfig& cfg) const
{
int len = 0;
for (int i = 1; i <= level; i++)
{
const TString& picture = cfg.get(get_key_var(), NULL, i);
len += picture.len();
}
return len;
}
void TSimple_anal_msk::create_key_browse(TEdit_field& kfld, int level, TConfig& cfg)
{
TString16 key1, key2;
get_key_fields(key1, key2);
const TString q(get_key_len(level, cfg), '?');
TFilename tmp; tmp.temp();
ofstream out(tmp);
out << "US " << get_logicnum() << endl;
out << "US " << get_logicnum() << " SE " << key1 << "?=\"" << q << '"' << endl;
out << "KE 1" << endl;
int from = 1, to = 1;
for (int i = 0; i < level; i++)
for (int i = 1; i <= level; i++)
{
const TString& picture = cfg.get(get_key_var(), NULL, i);
const TString& prompt = cfg.get(get_des_var(), NULL, i);
to = from + picture.len()-1;
TString field; field.format("%s[%d,%d]", (const char*)key1, from, to);
out << "IN " << field << ' ' << get_key_id(i) << endl;
out << "DI \"" << prompt << '@' << (from-to+1) << "\" " << field << endl;
out << "OU " << get_key_id(i) << ' ' << field << endl;
out << "IN " << field << ' ' << get_key_id(i-1) << endl;
out << "DI \"" << prompt << '@' << (to-from+1) << "\" " << field << endl;
out << "OU " << get_key_id(i-1) << ' ' << field << endl;
from = to+1;
}
out << "DI \"Descrizione@50\" " << key2 << endl;
@ -99,6 +116,45 @@ void TSimple_anal_msk::create_key_browse(TEdit_field& kfld, int level, TConfig&
xvt_fsys_removefile(tmp);
}
void TSimple_anal_msk::create_des_browse(TEdit_field& kfld, int level, TConfig& cfg)
{
TString16 key1, key2;
get_key_fields(key1, key2);
const TString q(get_key_len(level, cfg), '?');
TFilename tmp; tmp.temp();
ofstream out(tmp);
out << "US " << get_logicnum() << " KE 2" << " SE " << key1 << "?=\"" << q << '"' << endl;
out << "KE 2" << endl;
out << "DI \"Descrizione@50\" " << key2 << endl;
out << "IN " << key2 << ' ' << kfld.dlg() << endl;
out << "OU " << kfld.dlg() << ' ' << key2 << endl;
int from = 1, to = 1;
for (int i = 1; i <= level; i++)
{
const TString& picture = cfg.get(get_key_var(), NULL, i);
const TString& prompt = cfg.get(get_des_var(), NULL, i);
to = from + picture.len()-1;
TString field; field.format("%s[%d,%d]", (const char*)key1, from, to);
out << "DI \"" << prompt << '@' << (to-from+1) << "\" " << field << endl;
out << "OU " << get_key_id(i-1) << ' ' << field << endl;
from = to+1;
}
out << "CH NO" << endl;
out << "EN" << endl;
out.close();
TScanner scan(tmp);
while (scan.pop() != "EN")
kfld.parse_item(scan);
xvt_fsys_removefile(tmp);
}
int TSimple_anal_msk::create_key_fields()
{
TConfig cfg(CONFIG_DITTA, "ca");
@ -119,8 +175,8 @@ int TSimple_anal_msk::create_key_fields()
if (deslen > maxdeslen) maxdeslen = deslen;
}
maxdeslen++;
const int tab0 = 2;
const int tab1 = tab0 + maxdeslen + maxkeylen + 3;
const int tab0 = compute_offset()+2;
const int tab1 = tab0 + maxdeslen + maxkeylen + 4;
for (int i = 1; i < level; i++)
{
const short kid = get_key_id(i-1);
@ -135,7 +191,8 @@ int TSimple_anal_msk::create_key_fields()
const short did = get_des_id(i-1);
if (did > kid)
{
add_string(did, 0, "", tab1, i, 50, "", 76-tab1);
TEdit_field& dfld = add_string(did, 0, "", tab1, i, 50, "B", 72+tab0-tab1);
create_des_browse(dfld, i, cfg);
}
}

View File

@ -17,10 +17,10 @@ class TAnal_msk : public TAutomask
{
protected:
virtual int create_key_fields() pure;
void offset_fields();
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
int compute_offset() const;
TAnal_msk(const char* name);
public:
@ -40,7 +40,10 @@ protected:
virtual short get_des_id(int n) const pure;
void get_key_fields(TString& key1, TString& key2) const;
int get_key_len(int level, TConfig& cfg) const;
void create_key_browse(TEdit_field& kfld, int level, TConfig& cfg);
void create_des_browse(TEdit_field& kfld, int level, TConfig& cfg);
virtual int create_key_fields();
protected: