sc3100.cpp Aggiunta gestione della mailbox (copiata dalla relapp)

sc3100a.uml Specificati i campi chiave e field in modo da simulare relapp


git-svn-id: svn://10.65.10.50/trunk@4371 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 1997-05-22 08:53:34 +00:00
parent 07c3de37c9
commit 7ef9201c1c
2 changed files with 149 additions and 65 deletions

View File

@ -8,6 +8,8 @@
#include <printer.h>
#endif
#include <mailbox.h>
#include "sc3.h"
#include "sc3100a.h"
#include "sc3100b.h"
@ -31,6 +33,7 @@ class TForm_EC : public TForm
protected:
virtual void pre_edit_checks(TMask& m, TPrint_section* sec);
virtual bool post_edit_checks(TMask& m, TPrint_section* sec);
public:
virtual const char* section_mask() { return "sc3100s" ;}
virtual void change_number_format(int w, int dec, const char* p);
@ -79,8 +82,8 @@ bool TForm_EC::post_edit_checks(TMask& m, TPrint_section* sec)
void TForm_EC::change_number_format(int w, int dec, const char* p)
{
char secs[] = { "FB" };
char ptyp[] = { "LOEF" };
const char* const secs = "FB";
const char* const ptyp = "LOEF";
TPrint_section* ps;
for (int sc = 0; sc < 4; sc++)
@ -93,6 +96,7 @@ class TForm_EC_editor : public TForm_editor
{
s_data _prm;
TMask * _msk; // maschera di selezione sezione
protected:
static bool cpy_handler(TMask_field& f, KEY k);
static bool font_handler(TMask_field& f, KEY k);
@ -111,11 +115,16 @@ protected:
void hide_body_items(TPrint_section* b);
void show_body_items(TPrint_section* b);
void remove_form(TLocalisamfile& frm, TLocalisamfile& rfr,const TString& t,const TString& c);
virtual const char* selection_mask() const { return "sc3100a"; }
virtual bool ask_profile();
virtual bool edit(char s, pagetype p);
virtual void print();
bool check_mailbox(TMask& m);
public:
TForm_EC_editor() {_msk = NULL;}
virtual ~TForm_EC_editor() {}
};
@ -402,7 +411,7 @@ bool TForm_EC_editor::recalculate_positions(const char* name, int size)
xvt_print_start_thread (wprms, (long)&_prm);
xvt_print_close();
const char sechar[4] = { 'B', 'F', 'G', 'H' };
const char* const sechar = "BFGH";
for (int sn = 0; sn < 4 ; sn++)
{
const char sc = sechar[sn];
@ -830,20 +839,24 @@ void TForm_EC_editor::remove_form(TLocalisamfile& frm, TLocalisamfile& rfr,const
bool TForm_EC_editor::ask_profile()
{
KEY k;
mask().set_handler(DLG_COPY,cpy_handler);
mask().set_handler(F_CODE,code_handler);
mask().set_handler(F_CODEL,lng_handler);
mask().set(F_BASE,BASE_EC_PROFILE);
TMask& m = mask();
m.set_handler(DLG_COPY,cpy_handler);
m.set_handler(F_CODE,code_handler);
m.set_handler(F_CODEL,lng_handler);
m.set(F_BASE,BASE_EC_PROFILE);
disable_menu_item(M_FILE_PRINT);
while ((k = mask().run()) != K_QUIT)
check_mailbox(m);
while ((k = m.run()) != K_QUIT)
{
TLocalisamfile frm(LF_FORM);
TLocalisamfile rfr(LF_RFORM);
TString fform = mask().get(F_BASE);
TString fdesc = mask().get(F_DESC);
long fcode = mask().get_long(F_CODE);
char flng = mask().get(F_CODEL)[0];
TString fform = m.get(F_BASE);
TString fdesc = m.get(F_DESC);
long fcode = m.get_long(F_CODE);
char flng = m.get(F_CODEL)[0];
TString cod;
cod.format("%04ld%c",fcode,flng);
if (!extra() && fcode == 0 && flng=='\0')
@ -892,6 +905,68 @@ bool TForm_EC_editor::ask_profile()
return FALSE;
}
bool TForm_EC_editor::check_mailbox(TMask& m)
{
TMailbox mail;
TMessage* msg = mail.next_s(MSG_ED);
if (msg)
{
TToken_string body(msg->body());
const int key = body.get_int();
TAssoc_array field_values;
const char * s;
TString80 t;
while((s = body.get()) != NULL)
{
t = s;
const int u = t.find('=');
CHECKS(u > 0, "Invalid edit message ", (const char *) body);
if (u > 0)
{
const TString v(t.mid(u + 1));
t.cut(u);
field_values.add(t, v);
}
}
TString val;
for (TEditable_field* e = m.get_key_field(key, TRUE); e; e = m.get_key_field(key, FALSE))
{
const TFieldref* field = e->field();
if (field)
{
TString16 field_name(field->name());
const int from = field->from();
const int to = field->to();
if (to >= 0)
field_name << "[" << (from + 1);
const TString * v = (const TString *) field_values.objptr(field_name);
if (v == NULL && to >= 0)
{
v = (const TString *)field_values.objptr(field->name());
if (v)
val = v->sub(from, to);
}
else
if (v) val = *v;
if (v)
e->set(val);
}
}
m.send_key(K_AUTO_ENTER, 0);
}
return TRUE;
}
int sc3100(int argc, char** argv)
{
TForm_EC_editor a;

View File

@ -29,6 +29,9 @@ OUTPUT F_BASE TIPOPROF
OUTPUT F_CODE CODPROF[1,4]
OUTPUT F_CODEL CODPROF[5,5]
OUTPUT F_DESC DESC
// Simula relapp
KEY 1
FIELD CODPROF[1,4]
END
STRING F_CODEL 1
@ -42,6 +45,9 @@ DISPLAY "Codice lingua" CODTAB
DISPLAY "Decrizione@50" S0
OUTPUT F_CODEL CODTAB
CHECKTYPE NORMAL
// Simula relapp
KEY 1
FIELD CODPROF[5,5]
END
STRING F_DESC 50
@ -60,25 +66,28 @@ DISPLAY "Desc. Lingua@50" -200->S0
COPY OUTPUT F_CODE
VALIDATE NOT_EMPTY_FUNC
WARNING "La descrizione e' obbligatoria"
// Simula relapp
KEY 2
FIELD S0
END
BUTTON DLG_OK 9 2
BUTTON DLG_OK 10 2
BEGIN
PROMPT -14 -1 ""
END
BUTTON DLG_DELREC 9 2
BUTTON DLG_DELREC 10 2
BEGIN
PROMPT -24 -1 ""
MESSAGE EXIT,K_DEL
END
BUTTON DLG_COPY 9 2
BUTTON DLG_COPY 10 2
BEGIN
PROMPT -34 -1 "C~opia..."
END
BUTTON DLG_QUIT 9 2
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -44 -1 ""
END