Patch level : 12.0 1208

Files correlati     : bagn011.uml

Commento:
Aggiunta classe annesso ai file cartacei
This commit is contained in:
Alessandro Bonazzi 2022-10-23 22:47:14 +02:00
parent 46d3688505
commit 46dd112750
8 changed files with 205 additions and 19 deletions

View File

@ -8,3 +8,4 @@
#define S_ALIAS 102
#define S_LINK 103
#define S_ID 104
#define S_CLASSE 105

122
src/include/bagn011.uml Normal file
View File

@ -0,0 +1,122 @@
#include <bagn006.h>
//maschera dei collegamenti ad oggetti esterni da archiviare
TOOLBAR "" 0 0 0 2
BUTTON DLG_OK
BEGIN
PROMPT -15 -1 ""
END
BUTTON F_NEWREC
BEGIN
PROMPT -25 -1 "~Nuovo"
PICTURE TOOL_NEWREC
END
BUTTON F_LINK
BEGIN
PROMPT -35 -1 "~Edit"
PICTURE TOOL_EDIT
END
BUTTON F_PRINT
BEGIN
PROMPT -45 -1 "Stampa"
PICTURE TOOL_PRINT
END
BUTTON DLG_CANCEL
BEGIN
PROMPT -55 -1 ""
END
ENDPAGE
PAGE "Oggetti esterni" 0 2 0 0
SPREADSHEET F_SHEET
BEGIN
PROMPT 0 4 "Lista"
ITEM "File@60"
ITEM "Nome@32"
ITEM "Link"
ITEM "ID@16"
ITEM "Classe@10"
END
ENDPAGE
ENDMASK
PAGE "Oggetto esterno" -1 -1 60 4
STRING S_FILE 260 50
BEGIN
PROMPT 1 1 "File "
FLAGS "B"
END
STRING S_ALIAS 50
BEGIN
PROMPT 1 2 "Alias "
FLAGS "DG"
END
BOOLEAN S_LINK
BEGIN
PROMPT 1 3 "Collegamento esterno"
END
STRING S_ID 16
BEGIN
PROMPT 1 4 "ID "
FLAGS "U"
END
LISTBOX S_CLASSE 10 50
BEGIN
PROMPT 1 5 "Classe "
END
ENDPAGE
TOOLBAR "topbar" 0 0 0 2
BUTTON DLG_OK
BEGIN
PROMPT -16 -1 ""
END
BUTTON F_NEWREC
BEGIN
PROMPT -26 -1 "~Nuovo"
PICTURE TOOL_NEWREC
END
BUTTON F_LINK
BEGIN
PROMPT -36 -1 "~Edit"
PICTURE TOOL_EDIT
END
BUTTON DLG_DELREC
BEGIN
PROMPT -46 -1 ""
PICTURE TOOL_DELREC
END
BUTTON F_PRINT
BEGIN
PROMPT -56 -1 "Stampa"
PICTURE TOOL_PRINT
END
BUTTON DLG_CANCEL
BEGIN
PROMPT -66 -1 ""
END
ENDPAGE
ENDMASK

View File

@ -15,6 +15,8 @@
#include <urldefid.h>
#include <utility.h>
#include <bagn006.h>
#ifdef WIN32
#include <mapi.h>
#include <shellapi.h>
@ -77,6 +79,8 @@ bool print_url(const char* url)
class TGolem_mask : public TMask
{
bool _archive;
protected:
static bool file_handler(TMask_field& f, KEY k);
static bool link_handler(TMask_field& f, KEY k);
@ -85,7 +89,7 @@ protected:
static bool sheet_notify(TSheet_field& s, int r, KEY k);
public:
TGolem_mask();
TGolem_mask(bool archive = false, const char * catdoc = "");
};
bool TGolem_mask::file_handler(TMask_field& f, KEY k)
@ -206,6 +210,7 @@ bool TGolem_mask::sheet_notify(TSheet_field& s, int r, KEY k)
if (k == K_DEL)
{
TToken_string row = s.row(r);
if (row.get_char(2)<=' ')
xvt_fsys_remove_file(row.get(0));
}
@ -248,16 +253,18 @@ bool TGolem_mask::ole_handler(TMask_field& f, KEY k)
return true;
}
TGolem_mask::TGolem_mask()
: TMask("bagn006")
TGolem_mask::TGolem_mask(bool archive, const char * catdoc)
: TMask(archive ? "bagn011" : "bagn006"), _archive(archive)
{
TSheet_field& sheet = sfield(F_SHEET);
sheet.set_notify(sheet_notify);
set_handler(F_NEWREC, main_link_handler);
set_handler(F_LINK, main_link_handler);
set_handler(F_PRINT, main_link_handler);
TMask& sm = sheet.sheet_mask();
sm.set_handler(S_FILE, file_handler);
sm.set_handler(F_NEWREC, link_handler);
sm.set_handler(F_LINK, link_handler);
@ -297,6 +304,29 @@ TGolem_mask::TGolem_mask()
break;
}
}
if (archive && catdoc && *catdoc)
{
int idx = 0;
TList_field & l = sm.lfield(S_CLASSE);
TToken_string codes(" ");
TToken_string values("Cartaceo");
while (true)
{
TToken_string appo(ini_get_string(CONFIG_DITTA, "F9", "ANNCAT", "", idx++));
const TString cat = appo.get(0);
if (cat == catdoc)
{
codes.add(appo.get(1));
values.add(appo.get(2));
}
else
if (appo == "STOP" || appo.empty()) /* STOP: Riga terminatrice */
break;
}
l.replace_items(codes, values);
}
}
///////////////////////////////////////////////////////////
@ -338,7 +368,12 @@ void TGolem_field::set_window_data(const char* data)
}
bool TGolem_field::is_editable() const
{ return false; }
{ return false; }
short TGolem_field::dlg() const
{
return _dlg;
}
void TGolem_field::parse_head(TScanner& scanner)
{
@ -387,7 +422,7 @@ void TGolem_field::create(WINDOW parent)
if (_bmp == 0)
_bmp = BMP_OLE;
_ctl_data._bmp_up = _bmp;
_ctl = new TPushbutton_control(parent, _ctl_data._dlg,
_ctl = new TPushbutton_control(parent, _dlg = _ctl_data._dlg,
_ctl_data._x, _ctl_data._y,
_ctl_data._width+2, _ctl_data._height,
_ctl_data._flags, _ctl_data._prompt,
@ -410,6 +445,7 @@ bool TGolem_field::autosave(TRelation& r)
if (field() != NULL)
{
TToken_string new_value(get(), '\n');
if (new_value != _old_value)
{
TDir dir;
@ -491,7 +527,7 @@ bool TGolem_field::on_key(KEY key)
bool ok = true;
if (key == K_SPACE)
{
TMask* msk = new TGolem_mask;
TMask* msk = new TGolem_mask(_archive, _catdoc);
TSheet_field& sheet = msk->sfield(F_SHEET);
TToken_string tmp(get(), '\n');
@ -549,8 +585,9 @@ void TGolem_field::update_tool()
xvt_toolbar_toggle_control(toolbar(), _dlg, val.full());
};
TGolem_field::TGolem_field(TMask* m, bool tool)
: TEditable_field(m), _old_value(80, '\n'), _selected(0), _bmp(0), _tool(tool), _dlg(-1)
TGolem_field::TGolem_field(TMask* m, bool tool, bool archive)
: TEditable_field(m), _old_value(80, '\n'), _selected(0), _bmp(0), _tool(tool), _dlg(-1),
_archive(archive)
{ }
TGolem_field::~TGolem_field()

View File

@ -275,6 +275,7 @@ void TMask::add_field(TMask_field* f)
{
const long pos = _field.add(f)+1;
const short id = f->dlg();
if (id > 0 && id < 512)
{
if (f->is_sheet() && strncmp(_source_file.name(), "lv", 2) != 0)
@ -680,6 +681,7 @@ int TMask::id2pos(
TMask_field& TMask::field(short id) const
{
TMask_field* f = find_by_id(id);
if (f == nullptr)
{
if (_mask_num == 0)
@ -1675,8 +1677,6 @@ void TMask::set(
// @syntax set(short fld_id, long n, bool hit);
{
TMask_field& f = field(fld_id);
if (fld_id == 214)
int i = 0;
f.set(s);
if ((f.active() || f.ghost()))
@ -2020,6 +2020,7 @@ void TMask::autosave(TRelation& r) const
FOR_EACH_MASK_FIELD((*this), i, f) if (f->is_loadable())
{
bool save = f->shown();
if (!save && f->is_editable())
{
// tenta di effettuare il save dei campi Edit hidden:
@ -2541,13 +2542,14 @@ TGolem_field& TMask::add_golem(
int dx, // @parm Larghezza del campo (in caratteri, default 9)
int dy, // @parm Altezza del campo (in caratteri, default 1)
const char* flags, // @parm Flag di controllo del campo (default "")
bool archive,
short bmpup, // @parm Icona normale
short bmpdn) // @parm Icona premuta
// @xref <mf TMask::add_static> <mf TMask::add_string> <mf TMask::add_number>
// <mf TMask::add_date> <mf TMask::add_radio> <mf TMask::add_memo>
{
TGolem_field* g = new TGolem_field(this);
TGolem_field* g = new TGolem_field(this, false, archive);
g->construct(id, prompt, x, y, dy, page_win(page), flags, dx, bmpup, bmpdn);
add_field(g);
@ -2559,9 +2561,10 @@ TGolem_field& TMask::add_golem(
// @mfunc Aggiunge runtime un campo golem alla toolbar
// @rdesc Ritorna l'handle del campo creato
TGolem_field& TMask::add_golem_tool(short id, const char* prompt, const char* flags, short bmpup, short bmpdn)
TGolem_field& TMask::add_golem_tool(short id, const char* prompt, const char* flags, bool archive, short bmpup, short bmpdn)
{
TGolem_field * g = new TGolem_field(this, true);
TGolem_field * g = new TGolem_field(this, true, archive);
if (toolbar() == NULL_WIN) // Se non c'e' ancora la toolbar, me l'invento adesso
create_bar(1);

View File

@ -240,11 +240,11 @@ public:
// @cmember Aggiunge runtime un group box alla maschera
TGroup_field& add_groupbox (short id, int page, const char* prompt, int x, int y, int dx = 78, int dy = 3, const char* flags = "");
// @cmember Aggiunge runtime un campo golem alla maschera
TGolem_field& add_golem(short id, int page, const char* prompt, int x, int y, int dx = 9, int dy = 1, const char* flags = "", short bmpup = 0, short bmpdn = 0);
TGolem_field& add_golem(short id, int page, const char* prompt, int x, int y, int dx = 9, int dy = 1, const char* flags = "", bool archive = false, short bmpup = 0, short bmpdn = 0);
// @cmember Aggiunge runtime un bottone alla toolbar
TButton_tool& add_button_tool(short id, const char* prompt, short bmpup);
// @cmember Aggiunge runtime un campo golem alla toolbar
TGolem_field& add_golem_tool(short id, const char* prompt, const char* flags, short bmpup = 0, short bmpdn = 0);
TGolem_field& add_golem_tool(short id, const char* prompt, const char* flags, bool archive, short bmpup = 0, short bmpdn = 0);
// @cmember Ritorna il numero di campi della maschera
int fields() const

View File

@ -741,6 +741,16 @@ bool TMask_field::initial_check(KEY k) const
return k == K_TAB && !mask().is_running();
}
// @mfunc Verifica se il campo deve essere sottoposto a check iniziale
//
// @rdesc Ritorna il risultato:
//
// @flag true | Se il campo e' da sottoporre a check
// @flag false | Se il campo non e' da sottoporre checkbool initial_check(KEY k) const
bool TMask_field::list_initial_check(KEY k) const
{
return k == K_SPACE && !mask().is_running();
}
void TMask_field::send_key(KEY k, short to)
{
_mask->send_key(k, to, this);

View File

@ -344,6 +344,7 @@ public:
// @cmember Ritorna true se il campo e' di tipo sheet
virtual bool is_sheet() const { return false; }
// @cmember Controlla se il check inizialee del campo è da eseguire
bool initial_check(KEY k) const;
// @cmember Controlla se il check del campo è da eseguire durante l'esecuzione
@ -353,6 +354,12 @@ public:
// @cmember Controlla se il check del campo è da eseguire
bool to_check(KEY k, bool initial = false) const { return (initial && initial_check(k)) || running_check(k) || final_check(k); }
// @cmember Controlla se il check inizialee del campo è da eseguire
bool list_initial_check(KEY k) const;
// @cmember Controlla se il check del campo è da eseguire durante l'esecuzione
bool list_running_check(KEY k) const { return k == K_SPACE && focusdirty(); }
// @cmember Controlla se il check del campo è da eseguire
bool list_to_check(KEY k, bool initial = false) const { return (initial && list_initial_check(k)) || list_running_check(k) || final_check(k); }
// @cmember Gestisce la chiamata all'handler del campo
virtual bool on_hit();
@ -1355,10 +1362,14 @@ class TGolem_field : public TEditable_field
int _dlg;
bool _tool;
WINDOW _toolbar;
bool _archive;
TString _catdoc;
protected: // TEditable_field
WINDOW parent() const { return _tool ? _toolbar : TMask_field::parent(); }
bool is_kind_of(word cid) const { return cid == CLASS_GOLEM; }
virtual word class_id() const { return CLASS_GOLEM; }
virtual bool is_kind_of(word cid) const { return cid == CLASS_GOLEM || TEditable_field::is_kind_of(cid); }
virtual short dlg() const; // @cmember Ritorna l'identificatore del controllo
virtual TString& get_window_data();
virtual void set_window_data(const char* data);
const WINDOW toolbar() const { return _toolbar; }
@ -1378,8 +1389,10 @@ public:
virtual bool on_key(KEY k);
int selected() const { return _selected; }
void update_tool();
void set_catdoc(const char * catdoc) { _catdoc = catdoc; }
bool is_tool() const { return _tool; }
TGolem_field(TMask* m, bool tool = false);
TGolem_field(TMask* m, bool tool = false, bool archive = false);
virtual ~TGolem_field();
};

View File

@ -1027,13 +1027,13 @@ TMask * TRelation_application::setup_mask(int mode, TMask * mask)
{
if (rel->lfile().curr().exist("COLL_GOLEM") && mask->find_by_fieldname("COLL_GOLEM") == nullptr)
{
TGolem_field & o = mask->add_golem_tool(DLG_OGGETTI, "", "M");
TGolem_field & o = mask->add_golem_tool(DLG_OGGETTI, "", "M", false);
o.set_field("COLL_GOLEM");
}
if (rel->lfile().curr().exist("CARTACEI") && mask->find_by_fieldname("CARTACEI") == nullptr)
{
TGolem_field & c = mask->add_golem_tool(DLG_CARTACEI, "", "M", BMP_ARCHIVE);
TGolem_field & c = mask->add_golem_tool(DLG_CARTACEI, "", "M", true, BMP_ARCHIVE);
c.set_field("CARTACEI");
}