applicat.* Aggiunta l'utilissima TSkeleton_app per creare semplici applicazioni

bafgn006.uml Migliorata maschera di gestione Golem
default.url  La voce 'Editor' del menu e' diventata 'Editors' per i Golem
golem.cpp    Migliorata maschera di gestione Golem
maskfld.*    Aggiunto il metodo TButton_field::set_icon
xvtility.cpp Corretta gestione del tasto F1


git-svn-id: svn://10.65.10.50/trunk@5354 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 1997-10-13 14:04:22 +00:00
parent e013f6b878
commit b7b5f606a8
8 changed files with 251 additions and 146 deletions

View File

@ -772,12 +772,25 @@ bool TApplication::firm_change_enabled() const
#endif
}
void TApplication::on_firm_change()
{}
void TApplication::on_config_change()
{}
///////////////////////////////////////////////////////////
// The Skeleton application!
///////////////////////////////////////////////////////////
bool TSkeleton_application::create()
{
dispatch_e_menu(BAR_ITEM(1));
return TRUE;
}
bool TSkeleton_application::menu(MENU_TAG)
{
main_loop();
return FALSE;
}

View File

@ -192,6 +192,21 @@ public:
virtual ~TApplication();
};
class TSkeleton_application : public TApplication
{
protected:
virtual bool create();
virtual bool menu(MENU_TAG);
protected:
virtual void main_loop() pure;
public:
TSkeleton_application() { }
virtual ~TSkeleton_application() { }
};
bool xvt_running();
TApplication& main_app();

View File

@ -4,7 +4,7 @@ PAGE "Oggetti esterni" -1, -1, 76, 16
SPREADSHEET F_SHEET 0 -3
BEGIN
PROMPT 1 1 "Lista"
PROMPT 1 4 "Lista"
ITEM "File@35"
ITEM "Nome@15"
ITEM "Collegamento"
@ -23,8 +23,8 @@ END
BUTTON F_LINK 10 2
BEGIN
PROMPT -35 -1 ""
PICTURE BMP_LINK
PROMPT -35 -1 "~Edit"
PICTURE BMP_EDIT
END
BUTTON F_PRINT 10 2
@ -74,8 +74,8 @@ END
BUTTON F_LINK 10 2
BEGIN
PROMPT -35 -1 ""
PICTURE BMP_LINK
PROMPT -35 -1 "~Edit"
PICTURE BMP_EDIT
END
BUTTON F_PRINT 10 2

View File

@ -100,10 +100,10 @@ image BMP_DELREC QRESDIR"delrec.bmp"
image BMP_DELRECDN QRESDIR"delrecdn.bmp"
image BMP_FINDREC QRESDIR"findrec.bmp"
image BMP_SEARCH QRESDIR"search.bmp"
image BMP_CHECK_ON QRESDIR"checkon.bmp"
image BMP_CHECK_OFF QRESDIR"checkoff.bmp"
image BMP_RADIO_ON QRESDIR"radioon.bmp"
image BMP_RADIO_OFF QRESDIR"radiooff.bmp"
//image BMP_CHECK_ON QRESDIR"checkon.bmp"
//image BMP_CHECK_OFF QRESDIR"checkoff.bmp"
//image BMP_RADIO_ON QRESDIR"radioon.bmp"
//image BMP_RADIO_OFF QRESDIR"radiooff.bmp"
image BMP_MODULE1 QRESDIR"module1.bmp"
image BMP_MODULE2 QRESDIR"module2.bmp"
image BMP_MODULE3 QRESDIR"module3.bmp"

View File

@ -68,9 +68,6 @@ HIDDEN bool file2app(const char* filename, TString& app)
}
}
if (ok && !fexist(app))
ok = warning_box("Il programma %s e' stato rimosso!", app.get_buffer());
return ok;
}
@ -181,6 +178,208 @@ HIDDEN bool print_url(const char* url)
return error >= 32;
}
///////////////////////////////////////////////////////////
// Maschera GOLEM
///////////////////////////////////////////////////////////
class TGolem_mask : public TMask
{
protected:
static bool file_handler(TMask_field& f, KEY k);
static bool link_handler(TMask_field& f, KEY k);
static bool main_link_handler(TMask_field& f, KEY k);
static bool ole_handler(TMask_field& f, KEY k);
public:
TGolem_mask();
virtual ~TGolem_mask() { }
};
bool TGolem_mask::file_handler(TMask_field& f, KEY k)
{
TMask& m = f.mask();
if (k == K_F9)
{
FILE_SPEC fs;
xvt_fsys_convert_str_to_dir(".", &fs.dir);
strcpy(fs.type, "");
strcpy(fs.name, "*.*");
strcpy(fs.creator, "GOLEM");
xvt_fsys_save_dir();
FL_STATUS ok = xvt_dm_post_file_open(&fs, "Selezionare il file ...");
if (ok == FL_OK)
{
xvt_fsys_restore_dir();
TFilename file;
xvt_fsys_convert_dir_to_str(&fs.dir, file.get_buffer(), file.size());
file.add(fs.name);
file.ext(fs.type);
f.set(file);
k = K_TAB;
}
}
if (k == K_TAB && f.focusdirty())
{
TFilename file = m.get(S_FILE);
if (fexist(file))
{
char ext[_MAX_EXT];
char name[_MAX_FNAME];
_splitpath(file, NULL, NULL, name, ext);
file = name; file.ext(ext);
m.enable(S_LINK);
m.disable(F_NEWREC);
m.enable(F_LINK);
m.enable(F_PRINT);
}
else
{
const bool full = file.not_empty();
m.set(S_LINK, full ? "X" : "");
m.disable(S_LINK);
m.enable(F_NEWREC, full);
m.enable(F_LINK, full);
m.disable(F_PRINT);
file.cut(0);
}
m.set(S_ALIAS, file);
}
return TRUE;
}
bool TGolem_mask::link_handler(TMask_field& f, KEY k)
{
if (k == K_SPACE)
{
TMask& m = f.mask();
TFilename url = m.get(S_FILE);
short id = f.dlg();
if (id == F_NEWREC && url.not_empty())
{
if (!fexist(url))
{
TFilename name;
char ext[_MAX_EXT];
_splitpath(url, NULL, NULL, name.get_buffer(), ext);
if (name.not_empty() && *ext)
{
name.ext(ext);
url.tempdir();
url.add(name);
ofstream out(url); // Crea un file vuoto
}
else
url.cut(0);
m.set(S_FILE, url, TRUE); // ... memorizza il suo nome ...
m.reset(S_LINK); // Non puo' essere un collegamento
}
else
id = F_LINK;
}
if (url.not_empty())
{
bool open = TRUE;
if (id == DLG_PRINT)
open = !print_url(url);
if (open)
goto_url(url);
}
}
return TRUE;
}
bool TGolem_mask::main_link_handler(TMask_field& f, KEY k)
{
if (k == K_SPACE)
{
TSheet_field& sheet = f.mask().sfield(F_SHEET);
if (sheet.items() > 0)
{
sheet.check_row(sheet.selected());
TMask& sm = sheet.sheet_mask();
TMask_field& link = sm.field(f.dlg());
link_handler(link, K_SPACE);
}
}
return TRUE;
}
bool TGolem_mask::ole_handler(TMask_field& f, KEY k)
{
if (k == K_SPACE)
{
TSheet_field& sheet = f.mask().sfield(F_SHEET);
if (sheet.items() == 0)
sheet.row(-1);
sheet.check_row(sheet.selected());
TMask& sm = sheet.sheet_mask();
TString16 ext = f.prompt();
if (ext[0] != '.')
ext.insert(".", 0);
TFilename file = sm.get(S_FILE);
if (file.blank())
{
file.temp(NULL, ext);
sm.set(S_FILE, file);
ofstream out(file);
sheet.row(sheet.selected()) = file;
}
sheet.force_update();
TFilename app; file2app(ext, app);
app << ' ' << file;
WinExec(app, SW_SHOWNORMAL);
}
return TRUE;
}
TGolem_mask::TGolem_mask()
: TMask("bagn006")
{
TSheet_field& sheet = sfield(F_SHEET);
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);
sm.set_handler(F_PRINT, link_handler);
TConfig ini(CONFIG_USER, "Link");
TString_array list;
const int items = ini.list_variables(list);
list.sort();
const int ITEMS_PER_ROW = 15;
const int MAX_ITEMS = ITEMS_PER_ROW * 2 - 1;
for (int i = 0; i < items && i < MAX_ITEMS; i++)
{
TString16 ext = list.row(i);
const int x = (i < ITEMS_PER_ROW ? i*5 : (i-ITEMS_PER_ROW)*5) + 1;
const int y = i < ITEMS_PER_ROW ? 0 : 2;
TButton_field& btn = add_button(301+i, 0, ext, x, y, 3, 2);
btn.set_handler(ole_handler);
if (ext[0] != '.')
ext.insert(".", 0);
word icon = file2icon(ext);
if (icon)
btn.set_icon(icon);
else
btn.set_bmp(BMP_OLE, 0);
}
}
///////////////////////////////////////////////////////////
// Campi GOLEM
///////////////////////////////////////////////////////////
@ -301,137 +500,15 @@ bool TGolem_field::autosave(TRelation& r)
return TEditable_field::autosave(r);
}
static bool file_handler(TMask_field& f, KEY k)
{
TMask& m = f.mask();
if (k == K_F9)
{
FILE_SPEC fs;
xvt_fsys_convert_str_to_dir(".", &fs.dir);
strcpy(fs.type, "");
strcpy(fs.name, "*.*");
strcpy(fs.creator, "GOLEM");
xvt_fsys_save_dir();
FL_STATUS ok = xvt_dm_post_file_open(&fs, "Selezionare il file ...");
if (ok == FL_OK)
{
xvt_fsys_restore_dir();
TFilename file;
xvt_fsys_convert_dir_to_str(&fs.dir, file.get_buffer(), file.size());
file.add(fs.name);
file.ext(fs.type);
f.set(file);
k = K_TAB;
}
}
if (k == K_TAB && f.focusdirty())
{
TFilename file = m.get(S_FILE);
if (fexist(file))
{
char ext[_MAX_EXT];
char name[_MAX_FNAME];
_splitpath(file, NULL, NULL, name, ext);
file = name; file.ext(ext);
m.enable(S_LINK);
m.disable(F_NEWREC);
m.enable(F_LINK);
m.enable(F_PRINT);
}
else
{
const bool full = file.not_empty();
m.set(S_LINK, full ? "X" : "");
m.disable(S_LINK);
m.enable(F_NEWREC, full);
m.enable(F_LINK, full);
m.disable(F_PRINT);
file.cut(0);
}
m.set(S_ALIAS, file);
}
return TRUE;
}
static bool link_handler(TMask_field& f, KEY k)
{
if (k == K_SPACE)
{
TMask& m = f.mask();
TFilename url = m.get(S_FILE);
short id = f.dlg();
if (id == F_NEWREC && url.not_empty())
{
if (!fexist(url))
{
TFilename name;
char ext[_MAX_EXT];
_splitpath(url, NULL, NULL, name.get_buffer(), ext);
if (name.not_empty() && *ext)
{
name.ext(ext);
url.tempdir();
url.add(name);
ofstream out(url); // Crea un file vuoto
}
else
url.cut(0);
m.set(S_FILE, url, TRUE); // ... memorizza il suo nome ...
m.reset(S_LINK); // Non puo' essere un collegamento
}
else
id = F_LINK;
}
if (url.not_empty())
{
bool open = TRUE;
if (id == DLG_PRINT)
open = !print_url(url);
if (open)
goto_url(url);
}
}
return TRUE;
}
static bool main_link_handler(TMask_field& f, KEY k)
{
if (k == K_SPACE)
{
TSheet_field& sheet = f.mask().sfield(F_SHEET);
if (sheet.items() > 0)
{
sheet.check_row(sheet.selected());
TMask& sm = sheet.sheet_mask();
TMask_field& link = sm.field(f.dlg());
link_handler(link, K_SPACE);
}
}
return TRUE;
}
bool TGolem_field::on_key(KEY key)
{
bool ok = TRUE;
if (key == K_SPACE)
{
TMask* msk = new TMask("bagn006");
TMask* msk = new TGolem_mask;
TSheet_field& sheet = msk->sfield(F_SHEET);
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);
sm.set_handler(F_PRINT, link_handler);
TToken_string tmp = get();
if (roman())
{
tmp.separator('\n');
@ -440,9 +517,6 @@ bool TGolem_field::on_key(KEY key)
if (*row > ' ')
sheet.row(-1) = row;
}
msk->set_handler(F_NEWREC, main_link_handler);
msk->set_handler(F_LINK, main_link_handler);
msk->set_handler(F_PRINT, main_link_handler);
if (msk->run() == K_ENTER)
{
tmp.cut(0);
@ -457,6 +531,7 @@ bool TGolem_field::on_key(KEY key)
}
else
{
TMask& sm = sheet.sheet_mask();
for (int i = 0; i < 3; i++)
sm.set(S_FILE+i, tmp.get());

View File

@ -422,8 +422,6 @@ void TMask_field::set_dirty(bool d)
set_focusdirty(d);
}
// Certified 100%
const char* TMask_field::prompt() const
{
@ -1115,6 +1113,11 @@ void TButton_field::set_bmp(short up, short dn)
((TPushbutton_control*)_ctl)->set_bmp(up, dn);
}
void TButton_field::set_icon(word icon)
{
((TPushbutton_control*)_ctl)->set_icon(icon);
}
///////////////////////////////////////////////////////////
// TEditable_field
///////////////////////////////////////////////////////////

View File

@ -524,6 +524,7 @@ public:
void set_hot_key(KEY k) { _virtual_key = _exit_key = k; }
void set_bmp(short up, short dn);
void set_icon(word icon);
// @cmember Costruttore
TButton_field(TMask* mask);

View File

@ -57,9 +57,7 @@ static BOOLEAN event_hook(HWND hwnd,
WINDOW win = cur_win();
if (win != NULL_WIN)
{
// TWindow* w = (TWindow*)xvt_vobj_get_data(win);
const KEY key = toupper(wparam)+K_CTRL;
// w->on_key(key);
dispatch_e_char(win, key);
*ret = 2 << 8;
}
@ -72,10 +70,10 @@ static BOOLEAN event_hook(HWND hwnd,
{
KEY k = K_F1;
int sc = GetAsyncKeyState(VK_CONTROL); // Stato del tasto control
if (sc & 1) k += K_CTRL;
if (sc & 0x8000) k += K_CTRL;
int ss = GetAsyncKeyState(VK_SHIFT); // Stato del tasto shift
if (ss & 1) k += K_SHIFT;
if (ss & 0x8000) k += K_SHIFT;
WINDOW win = cur_win();
if (win != NULL_WIN)