Aggiunta gestione oggetti esterni (GOLEM)
Corretto errore per cui la stampante non si ricordava il suo tipo. git-svn-id: svn://10.65.10.50/trunk@1362 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
ef90c9e7dd
commit
e694e08d1a
39
include/bagn006.uml
Executable file
39
include/bagn006.uml
Executable file
@ -0,0 +1,39 @@
|
|||||||
|
#include <bagn006.h>
|
||||||
|
|
||||||
|
PAGE "Caratteristiche oggetto" -1, -1, 66, 6
|
||||||
|
|
||||||
|
STRING F_CLASSE 8
|
||||||
|
BEGIN
|
||||||
|
PROMPT 1 1 "Classe "
|
||||||
|
FLAGS "DU"
|
||||||
|
FIELD CLASSE
|
||||||
|
END
|
||||||
|
|
||||||
|
NUMBER F_CODICE 8
|
||||||
|
BEGIN
|
||||||
|
PROMPT 48 1 "Codice "
|
||||||
|
FLAGS "D"
|
||||||
|
FIELD CHIAVE
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_DESC 50
|
||||||
|
BEGIN
|
||||||
|
PROMPT 1 3 "Descrizione "
|
||||||
|
CHECKTYPE REQUIRED
|
||||||
|
WARNING "E' necessaria una breve descrizione"
|
||||||
|
FIELD DESC
|
||||||
|
END
|
||||||
|
|
||||||
|
BUTTON DLG_OK 10 2
|
||||||
|
BEGIN
|
||||||
|
PROMPT -12 -1 ""
|
||||||
|
END
|
||||||
|
|
||||||
|
BUTTON DLG_CANCEL 10 2
|
||||||
|
BEGIN
|
||||||
|
PROMPT -22 -1 ""
|
||||||
|
END
|
||||||
|
|
||||||
|
ENDPAGE
|
||||||
|
|
||||||
|
ENDMASK
|
@ -36,5 +36,8 @@
|
|||||||
#define CLASS_SHEET_FIELD 28
|
#define CLASS_SHEET_FIELD 28
|
||||||
#define CLASS_BROWSEFILE_FIELD 29
|
#define CLASS_BROWSEFILE_FIELD 29
|
||||||
|
|
||||||
|
#define CLASS_GOLEM 200
|
||||||
|
|
||||||
|
|
||||||
// @END
|
// @END
|
||||||
#endif // __CLASSES_H
|
#endif // __CLASSES_H
|
||||||
|
@ -109,7 +109,7 @@ void TConfig::_write_file()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void TConfig::_check_paragraph(const char* section)
|
void TConfig::set_paragraph(const char* section)
|
||||||
{
|
{
|
||||||
if (section != NULL && section != _paragraph)
|
if (section != NULL && section != _paragraph)
|
||||||
{
|
{
|
||||||
@ -145,7 +145,7 @@ TString& TConfig::get(const char* var, const char* section, int index, const cha
|
|||||||
v = s;
|
v = s;
|
||||||
}
|
}
|
||||||
|
|
||||||
_check_paragraph(section);
|
set_paragraph(section);
|
||||||
|
|
||||||
if (_data.is_key(v))
|
if (_data.is_key(v))
|
||||||
s = (TString&)_data[v];
|
s = (TString&)_data[v];
|
||||||
@ -217,7 +217,7 @@ bool TConfig::set(const char* var, const char* value, const char* section,
|
|||||||
// se force == TRUE crea la variabile se non esiste; altrimenti
|
// se force == TRUE crea la variabile se non esiste; altrimenti
|
||||||
// da' errore; ritorna TRUE se la variabile c'era, FALSE diversamente
|
// da' errore; ritorna TRUE se la variabile c'era, FALSE diversamente
|
||||||
|
|
||||||
_check_paragraph(section);
|
set_paragraph(section);
|
||||||
TString vvar(var); if (index != -1) vvar << '(' << index << ')';
|
TString vvar(var); if (index != -1) vvar << '(' << index << ')';
|
||||||
|
|
||||||
bool itwas = _data.is_key(vvar);
|
bool itwas = _data.is_key(vvar);
|
||||||
@ -241,7 +241,7 @@ bool TConfig::set(const char* var, long value, const char* section,
|
|||||||
|
|
||||||
word TConfig::items(const char* var, const char* section)
|
word TConfig::items(const char* var, const char* section)
|
||||||
{
|
{
|
||||||
_check_paragraph(section);
|
set_paragraph(section);
|
||||||
TString vvar(16);
|
TString vvar(16);
|
||||||
for (int cnt = 0; /* uncazzo */ ;cnt++)
|
for (int cnt = 0; /* uncazzo */ ;cnt++)
|
||||||
{
|
{
|
||||||
@ -297,11 +297,21 @@ TConfig::TConfig(int which_config, const char* paragraph)
|
|||||||
_file << "config";
|
_file << "config";
|
||||||
if (!fexist(_file))
|
if (!fexist(_file))
|
||||||
make_dir(_file);
|
make_dir(_file);
|
||||||
_file << '/' << (which_config == CONFIG_USER ? user() : "print") << ".ini";
|
|
||||||
|
switch (which_config)
|
||||||
|
{
|
||||||
|
case CONFIG_STAMPE:
|
||||||
|
_file.add("print.ini"); break;
|
||||||
|
default:
|
||||||
|
_file << '/' << user() << ".ini"; break;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case CONFIG_FCONV:
|
case CONFIG_FCONV:
|
||||||
_file = "fconv.ini";
|
_file = "fconv.ini";
|
||||||
break;
|
break;
|
||||||
|
case CONFIG_GOLEM:
|
||||||
|
_file.add("golem.ini");
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
_file = "prassi.ini";
|
_file = "prassi.ini";
|
||||||
break;
|
break;
|
||||||
|
@ -23,6 +23,8 @@ class ofstream;
|
|||||||
#define CONFIG_USER 4
|
#define CONFIG_USER 4
|
||||||
// file parametri stampe
|
// file parametri stampe
|
||||||
#define CONFIG_STAMPE 5
|
#define CONFIG_STAMPE 5
|
||||||
|
// file parametri golem
|
||||||
|
#define CONFIG_GOLEM 6
|
||||||
|
|
||||||
class TConfig : public TObject
|
class TConfig : public TObject
|
||||||
{
|
{
|
||||||
@ -31,10 +33,10 @@ class TConfig : public TObject
|
|||||||
bool _dirty, _ispresent;
|
bool _dirty, _ispresent;
|
||||||
TString _paragraph;
|
TString _paragraph;
|
||||||
|
|
||||||
|
protected:
|
||||||
bool _read_paragraph();
|
bool _read_paragraph();
|
||||||
void _write_paragraph(ofstream&);
|
void _write_paragraph(ofstream&);
|
||||||
void _write_file();
|
void _write_file();
|
||||||
void _check_paragraph(const char*);
|
|
||||||
void init(const char *fn, const char* pa);
|
void init(const char *fn, const char* pa);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -74,6 +76,10 @@ public:
|
|||||||
// non si risponde di eventuali "buchi" causati da set() errate
|
// non si risponde di eventuali "buchi" causati da set() errate
|
||||||
word items(const char* var, const char* section);
|
word items(const char* var, const char* section);
|
||||||
|
|
||||||
|
|
||||||
|
// Setta il paragrafo corrente
|
||||||
|
void set_paragraph(const char* par);
|
||||||
|
|
||||||
// il paragrafo iniziale e' il modulo corrente salvo diversa indicazione
|
// il paragrafo iniziale e' il modulo corrente salvo diversa indicazione
|
||||||
TConfig(int which_config = CONFIG_GENERAL, const char* paragraph = NULL);
|
TConfig(int which_config = CONFIG_GENERAL, const char* paragraph = NULL);
|
||||||
TConfig(const char* file, const char* paragraph = NULL);
|
TConfig(const char* file, const char* paragraph = NULL);
|
||||||
|
@ -563,9 +563,11 @@ TPush_button::TPush_button(short left, short top, short right, short bottom,
|
|||||||
capt = format("#%d", BMP_FINDREC);
|
capt = format("#%d", BMP_FINDREC);
|
||||||
break;
|
break;
|
||||||
case DLG_F9:
|
case DLG_F9:
|
||||||
|
if (*capt != '#')
|
||||||
capt = format("#%d", BMP_SEARCH);
|
capt = format("#%d", BMP_SEARCH);
|
||||||
break;
|
break;
|
||||||
case DLG_LINK:
|
case DLG_LINK:
|
||||||
|
if (strcmp("~Collega", caption()) == 0)
|
||||||
capt = format("#%d", BMP_LINK);
|
capt = format("#%d", BMP_LINK);
|
||||||
break;
|
break;
|
||||||
case DLG_EDIT:
|
case DLG_EDIT:
|
||||||
|
@ -90,6 +90,10 @@ image BMP_LINK "f:/p.due/bmp/link.bmp"
|
|||||||
image BMP_PRINT "f:/p.due/bmp/print.bmp"
|
image BMP_PRINT "f:/p.due/bmp/print.bmp"
|
||||||
image BMP_SETPRINT "f:/p.due/bmp/setprint.bmp"
|
image BMP_SETPRINT "f:/p.due/bmp/setprint.bmp"
|
||||||
image BMP_RECALC "f:/p.due/bmp/recalc.bmp"
|
image BMP_RECALC "f:/p.due/bmp/recalc.bmp"
|
||||||
|
image BMP_BMP "f:/p.due/bmp/bmp.bmp"
|
||||||
|
image BMP_XLS "f:/p.due/bmp/xls.bmp"
|
||||||
|
image BMP_WAV "f:/p.due/bmp/wav.bmp"
|
||||||
|
image BMP_DOC "f:/p.due/bmp/doc.bmp"
|
||||||
|
|
||||||
#scan <xil.h>
|
#scan <xil.h>
|
||||||
#transparent $$$
|
#transparent $$$
|
||||||
|
@ -61,7 +61,7 @@ int TExternal_app::run(bool async, bool utente)
|
|||||||
if (!async)
|
if (!async)
|
||||||
{
|
{
|
||||||
TTemp_window tw(TASK_WIN);
|
TTemp_window tw(TASK_WIN);
|
||||||
tw.iconize();
|
if (utente) tw.iconize();
|
||||||
|
|
||||||
HTASK child = NULL;
|
HTASK child = NULL;
|
||||||
TASKENTRY te; te.dwSize = sizeof(TASKENTRY);
|
TASKENTRY te; te.dwSize = sizeof(TASKENTRY);
|
||||||
@ -82,7 +82,7 @@ int TExternal_app::run(bool async, bool utente)
|
|||||||
xvt_app_process_pending_events();
|
xvt_app_process_pending_events();
|
||||||
}
|
}
|
||||||
|
|
||||||
tw.maximize();
|
if (utente) tw.maximize();
|
||||||
}
|
}
|
||||||
xvt_statbar_refresh();
|
xvt_statbar_refresh();
|
||||||
}
|
}
|
||||||
|
@ -139,7 +139,6 @@ protected:
|
|||||||
|
|
||||||
void string_at(int x, int y, const char* s);
|
void string_at(int x, int y, const char* s);
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
// permissions
|
// permissions
|
||||||
@ -555,7 +554,6 @@ class TForm_subsection : public TForm_item
|
|||||||
TString _name;
|
TString _name;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
virtual void print_on(ostream& out) const;
|
virtual void print_on(ostream& out) const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
205
include/golem.cpp
Executable file
205
include/golem.cpp
Executable file
@ -0,0 +1,205 @@
|
|||||||
|
#include <config.h>
|
||||||
|
#include <execp.h>
|
||||||
|
#include <golem.h>
|
||||||
|
#include <mask.h>
|
||||||
|
#include <prefix.h>
|
||||||
|
#include <relation.h>
|
||||||
|
#include <urldefid.h>
|
||||||
|
#include <utility.h>
|
||||||
|
|
||||||
|
#include <bagn006.h>
|
||||||
|
|
||||||
|
long TGolem::_count = 0;
|
||||||
|
TFilename* TGolem::_path = NULL;
|
||||||
|
TConfig* TGolem::_config = NULL;
|
||||||
|
TRelation* TGolem::_golem = NULL;
|
||||||
|
|
||||||
|
TGolem::TGolem(const char* cls, long id)
|
||||||
|
: _class(cls), _id(id)
|
||||||
|
{
|
||||||
|
CHECK(_class.not_empty() && id >= 0, "Invalid Golem creation");
|
||||||
|
_class.upper();
|
||||||
|
|
||||||
|
if (_count == 0)
|
||||||
|
{
|
||||||
|
CHECK(_path == NULL, "Golem construction count error");
|
||||||
|
_path = new TFilename;
|
||||||
|
_config = new TConfig(CONFIG_GOLEM, _class);
|
||||||
|
_golem = new TRelation(LF_GOLEM);
|
||||||
|
}
|
||||||
|
_count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
TGolem::~TGolem()
|
||||||
|
{
|
||||||
|
_count--;
|
||||||
|
if (_count == 0)
|
||||||
|
{
|
||||||
|
CHECK(_path != NULL, "Golem destruction count error");
|
||||||
|
delete _golem; _golem = NULL;
|
||||||
|
delete _config; _config = NULL;
|
||||||
|
delete _path; _path = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TConfig& TGolem::config() const
|
||||||
|
{
|
||||||
|
_config->set_paragraph(_class);
|
||||||
|
return *_config;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool TGolem::ok() const
|
||||||
|
{
|
||||||
|
return _id > 0 && fexist(path());
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* TGolem::class_name() const
|
||||||
|
{
|
||||||
|
*_path = "GOLEM_";
|
||||||
|
*_path << _class << "_CLASS";
|
||||||
|
return *_path;
|
||||||
|
}
|
||||||
|
|
||||||
|
word TGolem::class_id() const
|
||||||
|
{
|
||||||
|
return CLASS_GOLEM;
|
||||||
|
}
|
||||||
|
|
||||||
|
short TGolem::icon() const
|
||||||
|
{
|
||||||
|
const short id = config().get_int("Icon", NULL, -1, DLG_F9);
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const char* TGolem::ext() const
|
||||||
|
{
|
||||||
|
return config().get("Extension", NULL, -1, _class.left(3));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const TFilename& TGolem::path(bool test) const
|
||||||
|
{
|
||||||
|
const char* e = ext();
|
||||||
|
*_path = firm2dir(-1); // C:\PRASSI\DATI
|
||||||
|
_path->add("golem"); // C:\PRASSI\DATI\GOLEM
|
||||||
|
if (test && !fexist(*_path))
|
||||||
|
make_dir(*_path);
|
||||||
|
|
||||||
|
_path->add(_class); // C:\PRASSI\DATI\GOLEM\BITMAP
|
||||||
|
if (test && !fexist(*_path))
|
||||||
|
make_dir(*_path);
|
||||||
|
|
||||||
|
if (_id > 0)
|
||||||
|
{
|
||||||
|
_path->add(format("%ld", _id));// C:\PRASSI\DATI\GOLEM\BMP\883
|
||||||
|
_path->ext(e); // C:\PRASSI\DATI\GOLEM\BMP\883.BMP
|
||||||
|
}
|
||||||
|
return *_path;
|
||||||
|
}
|
||||||
|
|
||||||
|
int TGolem::compare(const TSortable& s) const
|
||||||
|
{
|
||||||
|
if (s.class_id() != class_id())
|
||||||
|
return UNDEFINED;
|
||||||
|
const TGolem& g = (const TGolem&)s;
|
||||||
|
return int(_id - g._id);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TGolem::edit()
|
||||||
|
{
|
||||||
|
const TFilename& p = path();
|
||||||
|
bool ok = fexist(p);
|
||||||
|
if (ok)
|
||||||
|
{
|
||||||
|
TFilename e(config().get("Editor"));
|
||||||
|
e << ' ' << p;
|
||||||
|
|
||||||
|
TExternal_app app(e);
|
||||||
|
ok = app.run(FALSE, FALSE) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
long TGolem::new_id() const
|
||||||
|
{
|
||||||
|
long id = 0;
|
||||||
|
|
||||||
|
TLocalisamfile& gol = _golem->lfile();
|
||||||
|
gol.zero();
|
||||||
|
gol.put("CLASSE", _class);
|
||||||
|
gol.put("CHIAVE", "99999999");
|
||||||
|
|
||||||
|
const int err = gol.read(_isgteq);
|
||||||
|
switch (err)
|
||||||
|
{
|
||||||
|
case NOERR:
|
||||||
|
id = 0; break;
|
||||||
|
case _isemptyfile:
|
||||||
|
id = 1; break;
|
||||||
|
default:
|
||||||
|
if (gol.get("CLASSE") != _class)
|
||||||
|
gol.prev();
|
||||||
|
if (gol.get("CLASSE") == _class)
|
||||||
|
id = gol.get_long("CHIAVE")+1;
|
||||||
|
else
|
||||||
|
id = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TGolem::import()
|
||||||
|
{
|
||||||
|
FILE_SPEC fs;
|
||||||
|
const char* const e = ext();
|
||||||
|
xvt_fsys_convert_str_to_dir(".", &fs.dir);
|
||||||
|
strcpy(fs.type, e);
|
||||||
|
sprintf(fs.name, "*.%s", e);
|
||||||
|
strcpy(fs.creator, "GOLEM");
|
||||||
|
|
||||||
|
xvt_fsys_save_dir();
|
||||||
|
FL_STATUS ok = xvt_dm_post_file_open(&fs, "Selezionare il file ...");
|
||||||
|
xvt_fsys_restore_dir();
|
||||||
|
if (ok == FL_OK)
|
||||||
|
{
|
||||||
|
TFilename from;
|
||||||
|
xvt_fsys_convert_dir_to_str(&fs.dir, (char*)(const char*)from, 80);
|
||||||
|
from.add(fs.name); from.ext(e);
|
||||||
|
|
||||||
|
TMask msk("bagn006");
|
||||||
|
msk.set(F_CLASSE, _class);
|
||||||
|
msk.set(F_CODICE, new_id());
|
||||||
|
|
||||||
|
bool correct = msk.run() == K_ENTER;
|
||||||
|
if (correct)
|
||||||
|
{
|
||||||
|
_id = msk.get_long(F_CODICE);
|
||||||
|
correct = fcopy(from, path(TRUE));
|
||||||
|
if (correct)
|
||||||
|
{
|
||||||
|
msk.autosave(_golem);
|
||||||
|
int err = _golem->write();
|
||||||
|
if (err == _isreinsert)
|
||||||
|
err = _golem->rewrite();
|
||||||
|
if (err != NOERR)
|
||||||
|
{
|
||||||
|
error_box("Errore nell'aggiornamento del file degli oggetti");
|
||||||
|
ok = FL_BAD;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
error_box("Spazio su disco insufficiente per l'oggetto");
|
||||||
|
ok = FL_BAD;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else ok = FL_CANCEL;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return ok == FL_OK;
|
||||||
|
}
|
53
include/golem.h
Executable file
53
include/golem.h
Executable file
@ -0,0 +1,53 @@
|
|||||||
|
#ifndef __GOLEM_H
|
||||||
|
#define __GOLEM_H
|
||||||
|
|
||||||
|
#ifndef __STRINGS_H
|
||||||
|
#include <strings.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __CONFIG_H
|
||||||
|
class TConfig;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __RELATION_H
|
||||||
|
class TRelation;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Generic Object Linking & Embedding Mechanism
|
||||||
|
|
||||||
|
class TGolem : public TSortable
|
||||||
|
{
|
||||||
|
static long _count;
|
||||||
|
static TConfig* _config;
|
||||||
|
static TFilename* _path;
|
||||||
|
static TRelation* _golem;
|
||||||
|
|
||||||
|
TString16 _class;
|
||||||
|
long _id;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
const TFilename& path(bool test = FALSE) const;
|
||||||
|
const char* ext() const;
|
||||||
|
TConfig& config() const;
|
||||||
|
long new_id() const;
|
||||||
|
|
||||||
|
protected:// TSortable
|
||||||
|
virtual int compare(const TSortable& o) const;
|
||||||
|
|
||||||
|
public: // TObject
|
||||||
|
virtual const char* class_name() const;
|
||||||
|
virtual word class_id() const;
|
||||||
|
virtual bool ok() const;
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual short icon() const;
|
||||||
|
virtual bool edit();
|
||||||
|
virtual bool import();
|
||||||
|
|
||||||
|
long id() const { return _id; }
|
||||||
|
|
||||||
|
TGolem(const char* cls, long id);
|
||||||
|
virtual ~TGolem();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
@ -50,7 +50,11 @@
|
|||||||
#define LF_DIPEND 45
|
#define LF_DIPEND 45
|
||||||
#define LF_DETH 46
|
#define LF_DETH 46
|
||||||
#define LF_PROF 50
|
#define LF_PROF 50
|
||||||
|
#define LF_DESLIN 51
|
||||||
|
#define LF_CONTR 52
|
||||||
|
#define LF_RCONT 53
|
||||||
#define LF_FORMS 54
|
#define LF_FORMS 54
|
||||||
|
#define LF_GOLEM 55
|
||||||
|
|
||||||
#define CNF_GENERAL 10000
|
#define CNF_GENERAL 10000
|
||||||
#define CNF_STUDIO CNF_GENERAL + 1
|
#define CNF_STUDIO CNF_GENERAL + 1
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
#include <applicat.h>
|
#include <applicat.h>
|
||||||
#include <defmask.h>
|
#include <defmask.h>
|
||||||
#include <execp.h>
|
#include <execp.h>
|
||||||
|
#include <golem.h>
|
||||||
#include <mailbox.h>
|
#include <mailbox.h>
|
||||||
#include <mask.h>
|
#include <mask.h>
|
||||||
#include <prefix.h>
|
#include <prefix.h>
|
||||||
@ -817,6 +818,7 @@ bool TMask_field::on_key(KEY key)
|
|||||||
|
|
||||||
HWND hwnd = (HWND)xvt_vobj_get_attr(TASK_WIN, ATTR_NATIVE_WINDOW);
|
HWND hwnd = (HWND)xvt_vobj_get_attr(TASK_WIN, ATTR_NATIVE_WINDOW);
|
||||||
WinHelp(hwnd, hlp, HELP_MULTIKEY, (DWORD)&mk);
|
WinHelp(hwnd, hlp, HELP_MULTIKEY, (DWORD)&mk);
|
||||||
|
set_focus();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -1122,7 +1124,15 @@ void TBrowse::parse_input(TScanner& scanner)
|
|||||||
if (*s == '"') // Constant string
|
if (*s == '"') // Constant string
|
||||||
{
|
{
|
||||||
scanner.push();
|
scanner.push();
|
||||||
_inp_id.add(scanner.line());
|
TString& str = scanner.line();
|
||||||
|
_inp_id.add(str);
|
||||||
|
|
||||||
|
if (_cursor->file().num() == LF_GOLEM) // GOLEM 2 detected!
|
||||||
|
{
|
||||||
|
str.strip("\"");
|
||||||
|
_insert = "G";
|
||||||
|
_insert << str;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else // Field on the mask
|
else // Field on the mask
|
||||||
{
|
{
|
||||||
@ -1239,26 +1249,15 @@ void TBrowse::parse_join(TScanner& scanner)
|
|||||||
|
|
||||||
void TBrowse::parse_insert(TScanner& scanner)
|
void TBrowse::parse_insert(TScanner& scanner)
|
||||||
{
|
{
|
||||||
const TString16 key(scanner.popkey());
|
const TString& key = scanner.popkey();
|
||||||
|
_insert.cut(0);
|
||||||
if (key == "NO") _insert = "";
|
if (key != "NO")
|
||||||
else
|
|
||||||
{
|
{
|
||||||
if (key == "RU")
|
_insert << key[0] << scanner.line();
|
||||||
{
|
|
||||||
_insert = "R";
|
|
||||||
_insert << scanner.line();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_insert = "M";
|
|
||||||
_insert << scanner.line();
|
|
||||||
}
|
|
||||||
_insert.trim();
|
_insert.trim();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Certified 100%
|
// Certified 100%
|
||||||
TMask_field& TBrowse::field(short n) const
|
TMask_field& TBrowse::field(short n) const
|
||||||
{ return _fld->mask().field(n); }
|
{ return _fld->mask().field(n); }
|
||||||
@ -1406,7 +1405,6 @@ void TBrowse::do_clear()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool TBrowse::do_insert()
|
bool TBrowse::do_insert()
|
||||||
{
|
{
|
||||||
bool ok = FALSE;
|
bool ok = FALSE;
|
||||||
@ -1422,16 +1420,17 @@ bool TBrowse::do_insert()
|
|||||||
app = format("ba3 -3 %s %d", (const char*)nm, _cursor->file().num());
|
app = format("ba3 -3 %s %d", (const char*)nm, _cursor->file().num());
|
||||||
// Obbligatorio usare la format globale
|
// Obbligatorio usare la format globale
|
||||||
}
|
}
|
||||||
|
else if (_insert[0] == 'G')
|
||||||
|
{
|
||||||
|
TGolem golem(&_insert[1], atol(field().get()));
|
||||||
|
const bool ok = golem.edit();
|
||||||
|
return ok ? TRUE : error_box("Impossibile modificare l'oggetto");
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
app = _insert.mid(1);
|
app = &_insert[1];
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
#if XVT_OS == XVT_OS_WIN
|
|
||||||
if (strnicmp(app, main_app().name(), 3) == 0)
|
|
||||||
app.insert("a", 3);
|
|
||||||
#endif
|
|
||||||
*/
|
|
||||||
TMailbox mail;
|
TMailbox mail;
|
||||||
TMessage msg(app, MSG_AI, "");
|
TMessage msg(app, MSG_AI, "");
|
||||||
mail.send(msg);
|
mail.send(msg);
|
||||||
@ -1536,6 +1535,12 @@ KEY TBrowse::run()
|
|||||||
{
|
{
|
||||||
buttons = 1; // Mette il bottone di gestione, a meno che ...
|
buttons = 1; // Mette il bottone di gestione, a meno che ...
|
||||||
|
|
||||||
|
if (_insert[0] == 'G')
|
||||||
|
{
|
||||||
|
buttons |= 2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
const TString& maskname = _fld->mask().source_file();
|
const TString& maskname = _fld->mask().source_file();
|
||||||
if (maskname.compare("batb", 4, TRUE) == 0 && _fld->in_key(0))
|
if (maskname.compare("batb", 4, TRUE) == 0 && _fld->in_key(0))
|
||||||
{
|
{
|
||||||
@ -1544,6 +1549,7 @@ KEY TBrowse::run()
|
|||||||
buttons = 0;
|
buttons = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
TBrowse_sheet s(_cursor, _items, caption, _head, buttons, _fld, sib);
|
TBrowse_sheet s(_cursor, _items, caption, _head, buttons, _fld, sib);
|
||||||
k = s.run();
|
k = s.run();
|
||||||
@ -1553,15 +1559,25 @@ KEY TBrowse::run()
|
|||||||
switch (k)
|
switch (k)
|
||||||
{
|
{
|
||||||
case K_INS:
|
case K_INS:
|
||||||
|
if (_insert[0] == 'G')
|
||||||
|
field().set(format("%ld", selected+1));
|
||||||
k = do_insert() ? K_ENTER : K_ESC;
|
k = do_insert() ? K_ENTER : K_ESC;
|
||||||
break;
|
break;
|
||||||
|
case K_CTRL+'N':
|
||||||
|
{
|
||||||
|
TGolem gol(&_insert[1], 0);
|
||||||
|
if (gol.import())
|
||||||
|
field().set(format("%ld", gol.id()));
|
||||||
|
}
|
||||||
|
k = K_ENTER;
|
||||||
|
break;
|
||||||
case K_ENTER:
|
case K_ENTER:
|
||||||
*_cursor = selected;
|
*_cursor = selected;
|
||||||
do_output();
|
do_output();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (k >= K_CTRL)
|
if (k >= K_CTRL)
|
||||||
{
|
{
|
||||||
const TMask& m = _fld->mask();
|
const TMask& m = _fld->mask();
|
||||||
const short id = siblings.get_int((k - K_CTRL) << 1);
|
const short id = siblings.get_int((k - K_CTRL) << 1);
|
||||||
TEdit_field& ef = m.efield(id);
|
TEdit_field& ef = m.efield(id);
|
||||||
@ -1569,8 +1585,8 @@ default:
|
|||||||
k = K_F9;
|
k = K_F9;
|
||||||
if (m.is_running())
|
if (m.is_running())
|
||||||
ef.send_key(k, 0);
|
ef.send_key(k, 0);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return k;
|
return k;
|
||||||
@ -1935,8 +1951,16 @@ void TEdit_field::create(WINDOW parent)
|
|||||||
flags &= ~CTL_FLAG_DISABLED;
|
flags &= ~CTL_FLAG_DISABLED;
|
||||||
flags |= CTL_FLAG_INVISIBLE;
|
flags |= CTL_FLAG_INVISIBLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TString16 ico("*");
|
||||||
|
if (_browse && _browse->get_insert()[0] == 'G')
|
||||||
|
{
|
||||||
|
const char* g = _browse->get_insert();
|
||||||
|
TGolem golem(g+1, 0);
|
||||||
|
ico.format("#%d", golem.icon());
|
||||||
|
}
|
||||||
_buttonwin = xvt_create_control(WC_PUSHBUTTON, _x+_width+delta, _y,
|
_buttonwin = xvt_create_control(WC_PUSHBUTTON, _x+_width+delta, _y,
|
||||||
2, 1, "*", parent, flags, PTR_LONG(this), DLG_F9);
|
2, 1, ico, parent, flags, PTR_LONG(this), DLG_F9);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -983,10 +983,14 @@ void TPrinter::read_configuration(const char* parag)
|
|||||||
case 1: // file
|
case 1: // file
|
||||||
_printertype = fileprinter;
|
_printertype = fileprinter;
|
||||||
break;
|
break;
|
||||||
case 2: // video
|
case 4: // video
|
||||||
_printertype = screenvis;
|
_printertype = screenvis;
|
||||||
_curcode = 0;
|
_curcode = 0;
|
||||||
break;
|
break;
|
||||||
|
case 6: // export
|
||||||
|
_printertype = export;
|
||||||
|
_curcode = 0;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -79,13 +79,13 @@ TSheet::TSheet(short x, short y, short dx, short dy,
|
|||||||
{
|
{
|
||||||
_visible_rows = rows()- head_on() - 3;
|
_visible_rows = rows()- head_on() - 3;
|
||||||
|
|
||||||
add_button(DLG_SELECT, "Selezione" );
|
add_button(DLG_SELECT, "Selezione", K_ENTER);
|
||||||
if (_checkable) add_button(DLG_USER, "Tutti");
|
if (_checkable) add_button(DLG_USER, "Tutti");
|
||||||
if (buttons & 0x1) add_button(DLG_NEWREC, "Gestione");
|
if (buttons & 0x1) add_button(DLG_LINK, "Gestione", K_INS);
|
||||||
if (buttons & 0x2) add_button(DLG_NEWREC, "Nuovo");
|
if (buttons & 0x2) add_button(DLG_NEWREC, "~Nuovo", K_CTRL+'N');
|
||||||
if (buttons & 0x4) add_button(DLG_DELREC, "Elimina");
|
if (buttons & 0x4) add_button(DLG_DELREC, "Elimina", K_DEL);
|
||||||
if (buttons & 0x8) add_button(DLG_QUIT, "Fine");
|
if (buttons & 0x8) add_button(DLG_QUIT, "Fine", K_ESC);
|
||||||
else add_button(DLG_CANCEL, "Annulla");
|
else add_button(DLG_CANCEL, "Annulla", K_ESC);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -222,6 +222,7 @@ void TSheet::handler(WINDOW win, EVENT* ep)
|
|||||||
case E_CONTROL:
|
case E_CONTROL:
|
||||||
switch(ep->v.ctl.id)
|
switch(ep->v.ctl.id)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
case DLG_OK :
|
case DLG_OK :
|
||||||
case DLG_SELECT:
|
case DLG_SELECT:
|
||||||
dispatch_e_char(win, K_ENTER); break;
|
dispatch_e_char(win, K_ENTER); break;
|
||||||
@ -229,9 +230,12 @@ void TSheet::handler(WINDOW win, EVENT* ep)
|
|||||||
case DLG_QUIT :
|
case DLG_QUIT :
|
||||||
dispatch_e_char(win, K_ESC); break;
|
dispatch_e_char(win, K_ESC); break;
|
||||||
case DLG_NEWREC:
|
case DLG_NEWREC:
|
||||||
|
dispatch_e_char(win, K_CTRL+'N'); break;
|
||||||
|
case DLG_LINK:
|
||||||
dispatch_e_char(win, K_INS); break;
|
dispatch_e_char(win, K_INS); break;
|
||||||
case DLG_DELREC:
|
case DLG_DELREC:
|
||||||
dispatch_e_char(win, K_DEL); break;
|
dispatch_e_char(win, K_DEL); break;
|
||||||
|
*/
|
||||||
case DLG_USER:
|
case DLG_USER:
|
||||||
dispatch_e_char(win, one_checked() ? K_F2 : K_F3); break;
|
dispatch_e_char(win, one_checked() ? K_F2 : K_F3); break;
|
||||||
default:
|
default:
|
||||||
@ -288,8 +292,12 @@ bool TSheet::on_key(KEY key)
|
|||||||
stop_run(key);
|
stop_run(key);
|
||||||
break;
|
break;
|
||||||
case K_INS:
|
case K_INS:
|
||||||
if (_buttonmask & 0x3)
|
if (_buttonmask & 0x1)
|
||||||
stop_run(K_INS);
|
stop_run(key);
|
||||||
|
break;
|
||||||
|
case K_CTRL+'N':
|
||||||
|
if (_buttonmask & 0x2)
|
||||||
|
stop_run(key);
|
||||||
break;
|
break;
|
||||||
case K_LHOME:
|
case K_LHOME:
|
||||||
select(0);
|
select(0);
|
||||||
@ -885,7 +893,7 @@ KEY TBrowse_sheet::run()
|
|||||||
|
|
||||||
const KEY key = TCursor_sheet::run();
|
const KEY key = TCursor_sheet::run();
|
||||||
|
|
||||||
if (key == K_ESC || key == K_INS || key >= K_CTRL)
|
if (key != K_ENTER)
|
||||||
{
|
{
|
||||||
field().set(old); // Restore field status
|
field().set(old); // Restore field status
|
||||||
field().set_dirty(spork);
|
field().set_dirty(spork);
|
||||||
|
@ -851,7 +851,8 @@ const char* TFilename::path() const
|
|||||||
|
|
||||||
TFilename& TFilename::add(const char* n)
|
TFilename& TFilename::add(const char* n)
|
||||||
{
|
{
|
||||||
if (not_empty()) *this << SLASH;
|
if (not_empty() && is_not_slash(_str[len()-1]))
|
||||||
|
*this << SLASH;
|
||||||
*this << n;
|
*this << n;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
@ -56,6 +56,10 @@
|
|||||||
#define BMP_BOOK2 132
|
#define BMP_BOOK2 132
|
||||||
#define BMP_BOOK3 133
|
#define BMP_BOOK3 133
|
||||||
#define BMP_MODULE 134
|
#define BMP_MODULE 134
|
||||||
|
#define BMP_BMP 135
|
||||||
|
#define BMP_WAV 136
|
||||||
|
#define BMP_XLS 137
|
||||||
|
#define BMP_DOC 138
|
||||||
#define BMP_SAVERECDN 153
|
#define BMP_SAVERECDN 153
|
||||||
#define BMP_DELRECDN 154
|
#define BMP_DELRECDN 154
|
||||||
#define BMP_NEWRECDN 155
|
#define BMP_NEWRECDN 155
|
||||||
|
@ -809,6 +809,7 @@ WINDOW xvt_create_control(WIN_TYPE wt,
|
|||||||
|
|
||||||
if (win == NULL_WIN)
|
if (win == NULL_WIN)
|
||||||
{
|
{
|
||||||
|
#if XVT_OS == XVT_OS_SCOUNIX
|
||||||
if (wt == WC_PUSHBUTTON)
|
if (wt == WC_PUSHBUTTON)
|
||||||
{
|
{
|
||||||
if (dy == 2) r.bottom -= ROWY;
|
if (dy == 2) r.bottom -= ROWY;
|
||||||
@ -816,7 +817,7 @@ WINDOW xvt_create_control(WIN_TYPE wt,
|
|||||||
{ wt = WC_TEXT; r.right = r.left+CHARX; caption = "*"; }
|
{ wt = WC_TEXT; r.right = r.left+CHARX; caption = "*"; }
|
||||||
else if (*caption == '*') caption = "";
|
else if (*caption == '*') caption = "";
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
while (*caption == '@') caption += 2;
|
while (*caption == '@') caption += 2;
|
||||||
win = xvt_ctl_create(wt, &r, (char*)caption, parent,
|
win = xvt_ctl_create(wt, &r, (char*)caption, parent,
|
||||||
flags, app_data, id);
|
flags, app_data, id);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user