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") TPiano_conti_anal_msk::TPiano_conti_anal_msk() : TSimple_anal_msk("ca0400a")
{ {
create_key_fields(); create_key_fields();
offset_fields();
} }
TPiano_conti_anal_msk::~TPiano_conti_anal_msk() TPiano_conti_anal_msk::~TPiano_conti_anal_msk()

View File

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

View File

@ -9,44 +9,48 @@ bool TAnal_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
return true; return true;
} }
void TAnal_msk::offset_fields() int TAnal_msk::compute_offset() const
{ {
const WINDOW tw = toolwin(); int delta = 0;
RCT rct; xvt_vobj_get_client_rect(TASK_WIN, &rct);
RCT rct; xvt_vobj_get_client_rect(win(), &rct); if (rct.right > 720)
const int width = rct.right; delta = (rct.right - 720) / 2 / CHARX;
int rightmost = 0; return delta;
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);
}
}
}
} }
TAnal_msk::TAnal_msk(const char* name) 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; 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) void TSimple_anal_msk::create_key_browse(TEdit_field& kfld, int level, TConfig& cfg)
{ {
TString16 key1, key2; TString16 key1, key2;
get_key_fields(key1, key2); get_key_fields(key1, key2);
const TString q(get_key_len(level, cfg), '?');
TFilename tmp; tmp.temp(); TFilename tmp; tmp.temp();
ofstream out(tmp); ofstream out(tmp);
out << "US " << get_logicnum() << endl; out << "US " << get_logicnum() << " SE " << key1 << "?=\"" << q << '"' << endl;
out << "KE 1" << endl; out << "KE 1" << endl;
int from = 1, to = 1; 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& picture = cfg.get(get_key_var(), NULL, i);
const TString& prompt = cfg.get(get_des_var(), NULL, i); const TString& prompt = cfg.get(get_des_var(), NULL, i);
to = from + picture.len()-1; to = from + picture.len()-1;
TString field; field.format("%s[%d,%d]", (const char*)key1, from, to); TString field; field.format("%s[%d,%d]", (const char*)key1, from, to);
out << "IN " << field << ' ' << get_key_id(i) << endl; out << "IN " << field << ' ' << get_key_id(i-1) << endl;
out << "DI \"" << prompt << '@' << (from-to+1) << "\" " << field << endl; out << "DI \"" << prompt << '@' << (to-from+1) << "\" " << field << endl;
out << "OU " << get_key_id(i) << ' ' << field << endl; out << "OU " << get_key_id(i-1) << ' ' << field << endl;
from = to+1; from = to+1;
} }
out << "DI \"Descrizione@50\" " << key2 << endl; 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); 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() int TSimple_anal_msk::create_key_fields()
{ {
TConfig cfg(CONFIG_DITTA, "ca"); TConfig cfg(CONFIG_DITTA, "ca");
@ -119,8 +175,8 @@ int TSimple_anal_msk::create_key_fields()
if (deslen > maxdeslen) maxdeslen = deslen; if (deslen > maxdeslen) maxdeslen = deslen;
} }
maxdeslen++; maxdeslen++;
const int tab0 = 2; const int tab0 = compute_offset()+2;
const int tab1 = tab0 + maxdeslen + maxkeylen + 3; const int tab1 = tab0 + maxdeslen + maxkeylen + 4;
for (int i = 1; i < level; i++) for (int i = 1; i < level; i++)
{ {
const short kid = get_key_id(i-1); 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); const short did = get_des_id(i-1);
if (did > kid) 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: protected:
virtual int create_key_fields() pure; virtual int create_key_fields() pure;
void offset_fields();
protected: 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);
int compute_offset() const;
TAnal_msk(const char* name); TAnal_msk(const char* name);
public: public:
@ -40,7 +40,10 @@ protected:
virtual short get_des_id(int n) const pure; virtual short get_des_id(int n) const pure;
void get_key_fields(TString& key1, TString& key2) const; 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_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(); virtual int create_key_fields();
protected: protected: