Aggiunta segnalazione d'errore se si persevera nell'uso di MainApp()
Aggiunta ricerca alternativa anche all'interno degli sheet git-svn-id: svn://10.65.10.50/trunk@587 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
4dcf5f74ad
commit
8ca7b5aa46
@ -1,3 +1,678 @@
|
||||
<<<<<<< applicat.cpp
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <xvt.h>
|
||||
|
||||
#include <extcdecl.h>
|
||||
#include <modaut.h>
|
||||
|
||||
#include <applicat.h>
|
||||
#include <config.h>
|
||||
#include <mask.h>
|
||||
#include <prefix.h>
|
||||
#include <progind.h>
|
||||
#include <relation.h>
|
||||
#include <urldefid.h>
|
||||
#include <utility.h>
|
||||
|
||||
#include <bagn002.h>
|
||||
|
||||
#define BITTEST(w,p) (((w) & (0x0001 << (p))) != 0)
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// Metodi di accesso globali all'applicazione corrente
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
HIDDEN TApplication* _application = NULL;
|
||||
|
||||
TString16 TApplication::_user;
|
||||
|
||||
TApplication* MainApp()
|
||||
{
|
||||
CHECK(_application, "NULL application!");
|
||||
#ifdef DBG
|
||||
error_box("Ti lascio usare MainApp ancora per pochi giorni!");
|
||||
#endif
|
||||
return _application;
|
||||
}
|
||||
|
||||
TApplication& main_app()
|
||||
{
|
||||
CHECK(_application, "NULL application!");
|
||||
return *_application;
|
||||
}
|
||||
|
||||
bool xvt_running() { return _application != NULL; }
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// Gestione dello sfondo della finestra principale
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
HIDDEN long backdrop_eh( WINDOW win, EVENT* ep)
|
||||
{
|
||||
#if XVT_OS == XVT_OS_WIN
|
||||
clear_window( win, COLOR_GRAY );
|
||||
#else
|
||||
clear_window( win, COLOR_BLUE );
|
||||
#endif
|
||||
|
||||
return 0L;
|
||||
}
|
||||
|
||||
HIDDEN void create_backdrop( void )
|
||||
{
|
||||
#if XVT_OS == XVT_OS_WIN
|
||||
xvt_create_statbar();
|
||||
xvt_statbar_set("");
|
||||
#else
|
||||
xvt_escape(XVT_ESC_CH_COLOR, XVT_CH_CLR_MENU, COLOR_BLACK, COLOR_WHITE);
|
||||
xvt_escape(XVT_ESC_CH_COLOR, XVT_CH_CLR_DIALOG, COLOR_BLUE, COLOR_WHITE);
|
||||
xvt_escape(XVT_ESC_CH_COLOR, XVT_CH_CLR_WINDOW, COLOR_RED, COLOR_WHITE);
|
||||
xvt_escape(XVT_ESC_CH_COLOR, XVT_CH_CLR_CONTROL, COLOR_BLACK, COLOR_WHITE);
|
||||
xvt_escape(XVT_ESC_CH_COLOR, XVT_CH_CLR_DISABLED, COLOR_GRAY, COLOR_WHITE);
|
||||
xvt_escape(XVT_ESC_CH_COLOR, XVT_CH_CLR_MNEMONIC, COLOR_RED, COLOR_WHITE);
|
||||
|
||||
RCT rct;
|
||||
get_client_rect( SCREEN_WIN, &rct );
|
||||
create_window(W_PLAIN, &rct, (char*) "BACKDROP", 0, TASK_WIN,
|
||||
WSF_NO_MENUBAR | WSF_CH_BACKDROP , EM_UPDATE,
|
||||
backdrop_eh, 0L );
|
||||
#endif
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// Gestione del banner iniziale
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
class TBanner : public TWindow
|
||||
{
|
||||
protected:
|
||||
virtual void handler(WINDOW win, EVENT* ep);
|
||||
|
||||
public:
|
||||
TBanner();
|
||||
~TBanner();
|
||||
};
|
||||
|
||||
TBanner::TBanner()
|
||||
{
|
||||
create(-1, 6, 72, 6, "BANNER", WSF_NONE, W_PLAIN);
|
||||
hide_brush();
|
||||
open_modal();
|
||||
do_events();
|
||||
}
|
||||
|
||||
TBanner::~TBanner()
|
||||
{
|
||||
close_modal();
|
||||
}
|
||||
|
||||
void TBanner::handler(WINDOW win, EVENT* ep)
|
||||
{
|
||||
if (ep->type == E_UPDATE)
|
||||
{
|
||||
const int BIGY = CHARY<<1;
|
||||
|
||||
clear(COLOR_LTGRAY);
|
||||
RCT r; get_client_rect(win, &r);
|
||||
|
||||
set_color(COLOR_WHITE, COLOR_LTGRAY);
|
||||
set_font(FF_TIMES, FS_BOLD | FS_ITALIC, BIGY);
|
||||
char* t = (char*)(const char*)main_app().title();
|
||||
int w = win_get_text_width(win, t, -1);
|
||||
int a; win_get_font_metrics(win, NULL, &a, NULL);
|
||||
int x = (r.right-w)>>1, y = (r.bottom+a)>>1 ;
|
||||
win_draw_text(win, x+1, y+1, t, -1);
|
||||
set_color(COLOR_BLACK, COLOR_LTGRAY);
|
||||
win_draw_text(win, x, y, t, -1);
|
||||
|
||||
set_font(FF_TIMES);
|
||||
t = "PRASSI S.p.A.";
|
||||
w = win_get_text_width(win, t, -1);
|
||||
x = (r.right-r.left-w)>>1, y = BIGY;
|
||||
win_draw_text(win, x, y, t, -1);
|
||||
|
||||
t = "Caricamento in corso";
|
||||
w = win_get_text_width(win, t, -1);
|
||||
x = (r.right-r.left-w)>>1, y = r.bottom - CHARY;
|
||||
win_draw_text(win, x, y, t, -1);
|
||||
|
||||
r.left += 4; r.right -= 4;
|
||||
r.top += 4; r.bottom -= 4;
|
||||
set_pen(COLOR_BLACK); win_draw_rect(win, &r);
|
||||
offset_rect(&r, 1, 1);
|
||||
set_pen(COLOR_WHITE); win_draw_rect(win, &r);
|
||||
|
||||
win_draw_icon(win, CHARX<<1, CHARX<<1, ICON_RSRC);
|
||||
}
|
||||
else
|
||||
TWindow::handler(win, ep);
|
||||
}
|
||||
|
||||
#if XVT_OS == XVT_OS_WIN
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// Gestione dei processi per Windows(R)
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
const word WM_WAKEUP = RegisterWindowMessage("WAKEUP");
|
||||
DWORD waiting_for = 0;
|
||||
|
||||
HIDDEN BOOLEAN waiting_event_hook(HWND, WORD msg, WORD,
|
||||
DWORD lparam, long far* ret)
|
||||
{
|
||||
if (msg == WM_WAKEUP)
|
||||
{
|
||||
if( lparam == waiting_for || lparam == 0)
|
||||
{
|
||||
waiting_for = 0L;
|
||||
TTemp_window tw(TASK_WIN);
|
||||
tw.maximize();
|
||||
}
|
||||
*ret = 0;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
HIDDEN DWORD name2id(const char* name)
|
||||
{
|
||||
waiting_for = 0L;
|
||||
for (int i = 0; i < 5 && name[i] > ' '; i++)
|
||||
{
|
||||
waiting_for <<= 6;
|
||||
waiting_for |= toupper(name[i]) - '0';
|
||||
}
|
||||
return waiting_for;
|
||||
}
|
||||
|
||||
|
||||
void TApplication::wait_for(const char* command)
|
||||
{
|
||||
TTemp_window tw(TASK_WIN);
|
||||
tw.iconize();
|
||||
name2id(cmd2name(command));
|
||||
|
||||
const long old_hook = get_value(TASK_WIN, ATTR_EVENT_HOOK);
|
||||
set_value(TASK_WIN, ATTR_EVENT_HOOK, (long)waiting_event_hook);
|
||||
while (waiting_for) do_events();
|
||||
|
||||
// We need to restore these things
|
||||
set_value(TASK_WIN, ATTR_EVENT_HOOK, old_hook);
|
||||
xvt_statbar_refresh();
|
||||
}
|
||||
|
||||
void TApplication::wake_up_caller() const
|
||||
{
|
||||
name2id(name());
|
||||
SendMessage(-1, WM_WAKEUP, 0, waiting_for);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
long TApplication::task_eh(WINDOW win, EVENT *ep)
|
||||
{
|
||||
switch (ep->type)
|
||||
{
|
||||
case E_CREATE:
|
||||
create_backdrop();
|
||||
#if defined(DBG) && XVT_OS == XVT_OS_SCOUNIX
|
||||
message_box("Attach to process %d ...", getpid());
|
||||
#endif
|
||||
do_events();
|
||||
break;
|
||||
#if XVT_OS == XVT_OS_WIN
|
||||
case E_UPDATE:
|
||||
backdrop_eh(win, ep);
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return _application->handler(win, ep);
|
||||
}
|
||||
|
||||
long TApplication::handler(WINDOW win, EVENT* ep)
|
||||
{
|
||||
switch (ep->type)
|
||||
{
|
||||
case E_CREATE:
|
||||
{
|
||||
TBanner banner;
|
||||
_create_ok = create();
|
||||
if (!_create_ok)
|
||||
stop_run();
|
||||
}
|
||||
break;
|
||||
case E_COMMAND:
|
||||
switch(ep->v.cmd.tag)
|
||||
{
|
||||
case M_FILE_QUIT:
|
||||
if (can_close())
|
||||
stop_run();
|
||||
break;
|
||||
case M_FILE_PG_SETUP:
|
||||
printer().set();
|
||||
break;
|
||||
case M_FILE_PRINT:
|
||||
print();
|
||||
break;
|
||||
case M_FILE_NEW:
|
||||
set_firm();
|
||||
break;
|
||||
case M_FILE_REVERT:
|
||||
config();
|
||||
break;
|
||||
case (M_FILE+11):
|
||||
about();
|
||||
break;
|
||||
default:
|
||||
if (ep->v.cmd.tag >= BAR_ITEM(1))
|
||||
{
|
||||
if(!menu(ep->v.cmd.tag))
|
||||
stop_run();
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case E_CLOSE:
|
||||
if (can_close())
|
||||
stop_run();
|
||||
break;
|
||||
case E_QUIT:
|
||||
if (ep->v.query)
|
||||
{
|
||||
if (can_close())
|
||||
quit_OK();
|
||||
}
|
||||
else
|
||||
stop_run();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return 0L;
|
||||
}
|
||||
|
||||
|
||||
void TApplication::stop_run()
|
||||
{
|
||||
if (_savefirm) prefhndl->set_codditta(_savefirm);
|
||||
terminate();
|
||||
xvt_terminate();
|
||||
}
|
||||
|
||||
|
||||
TApplication::TApplication() : _printer(NULL), _savefirm(0), _create_ok(FALSE)
|
||||
{
|
||||
init_global_vars();
|
||||
_bar = TASK_MENUBAR;
|
||||
}
|
||||
|
||||
|
||||
TApplication::~TApplication()
|
||||
{}
|
||||
|
||||
|
||||
TPrinter* TApplication::set_printer(TPrinter* p)
|
||||
{
|
||||
TPrinter* printer = _printer;
|
||||
_printer = p;
|
||||
return printer;
|
||||
}
|
||||
|
||||
|
||||
TPrinter& TApplication::printer()
|
||||
{
|
||||
if (_printer == NULL)
|
||||
_printer = new TPrinter;
|
||||
return *_printer;
|
||||
}
|
||||
|
||||
|
||||
bool TApplication::create()
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
bool TApplication::destroy()
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
void TApplication::terminate()
|
||||
{
|
||||
#if XVT_OS == XVT_OS_WIN
|
||||
wake_up_caller(); // Manda il segnale di risveglio al chiamante
|
||||
#endif
|
||||
|
||||
close_all_dialogs();
|
||||
|
||||
if (_create_ok)
|
||||
{
|
||||
destroy(); // Distruzione files e maschere
|
||||
do_events();
|
||||
|
||||
if (_printer != NULL) // Distruzione dell'eventuale stampante
|
||||
{
|
||||
if (printer().isopen())
|
||||
printer().close();
|
||||
delete _printer;
|
||||
_printer = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
free_global_vars(); // Distruzione variabili globali
|
||||
|
||||
customize_controls(FALSE); // Rilascio eventuali DLL
|
||||
}
|
||||
|
||||
|
||||
const char* TApplication::get_module_name() const
|
||||
{
|
||||
TScanner scanner("prassi.aut");
|
||||
|
||||
bool ok = FALSE;
|
||||
for (int aut = 0; scanner.line() != ""; aut++)
|
||||
if (strncmp(scanner.token(), _name, 2) == 0) { ok = TRUE; break; }
|
||||
|
||||
const char* module = scanner.token().mid(3);
|
||||
if (ok) ok = has_module(aut);
|
||||
|
||||
if (!ok)
|
||||
fatal_box("Il modulo '%s' non e' autorizzato", module);
|
||||
|
||||
return module;
|
||||
}
|
||||
|
||||
|
||||
void TApplication::set_perms()
|
||||
{
|
||||
CGetAut(1);
|
||||
_dongle_aut.set(0, TRUE);
|
||||
for (int i = 1 ; i < ENDAUT; i++)
|
||||
{
|
||||
const int af = i - 1;
|
||||
const bool val = BITTEST(_int_tab0[af / 16], af % 16);
|
||||
_dongle_aut.set(i, val);
|
||||
}
|
||||
_user_aut.set(0, TRUE);
|
||||
if (_user.not_empty())
|
||||
{
|
||||
if (_user == "PRASSI")
|
||||
{
|
||||
for (int i = 1 ; i < ENDAUT; i++)
|
||||
_user_aut.set(i);
|
||||
}
|
||||
else
|
||||
{
|
||||
TLocalisamfile users(LF_USER);
|
||||
|
||||
users.zero();
|
||||
users.put("USERNAME", _user);
|
||||
if (users.read() == NOERR)
|
||||
{
|
||||
const TString80 aut(users.get("AUTSTR"));
|
||||
const int max = aut.len();
|
||||
|
||||
for (int i = 1 ; i < max; i++)
|
||||
_user_aut.set(i, aut[i] == 'X');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void TApplication::check_parameters(int & argc, char* argv[])
|
||||
|
||||
{
|
||||
if (strncmp(argv[argc - 1], "-u", 2) == 0)
|
||||
{
|
||||
_user = &argv[argc - 1][2];
|
||||
argc--;
|
||||
}
|
||||
#ifdef DBG
|
||||
else _user = "PRASSI";
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void TApplication::run(int argc, char* argv[], const char* title)
|
||||
{
|
||||
TFilename base(argv[0]);
|
||||
|
||||
base.ext(""); base.lower();
|
||||
_title = title;
|
||||
if (_user.empty())
|
||||
check_parameters(argc, argv);
|
||||
|
||||
__argc = argc;
|
||||
__argv = (const char**)argv;
|
||||
|
||||
int addbar;
|
||||
if (argc > 1)
|
||||
{
|
||||
addbar = atoi(argv[1]+1);
|
||||
_name = cmd2name(argv[0], argv[1]);
|
||||
}
|
||||
else
|
||||
{
|
||||
addbar = 0;
|
||||
_name = cmd2name(argv[0]);
|
||||
}
|
||||
set_perms();
|
||||
|
||||
TString80 caption;
|
||||
caption << "PRASSI S.p.A. - " << get_module_name();
|
||||
|
||||
static XVT_CONFIG cfg;
|
||||
cfg.base_appl_name = (char*)base.name();
|
||||
cfg.appl_name = (char*)(const char*)_title;
|
||||
cfg.taskwin_title = (char*)(const char*)caption;
|
||||
cfg.menu_bar_ID = TASK_MENUBAR+addbar;
|
||||
cfg.about_box_ID = 0;
|
||||
|
||||
customize_controls(TRUE);
|
||||
|
||||
_application = this;
|
||||
xvt_system(argc, argv, 0L, task_eh, &cfg);
|
||||
}
|
||||
|
||||
|
||||
// About box: risposta alla opzione Informazioni del menu File
|
||||
void TApplication::about() const
|
||||
{
|
||||
#include <prassi.ver>
|
||||
const TFilename n(__argv[0]);
|
||||
message_box("PRASSI Versione Beta %4.2f\nProgramma %s\nLibreria del %s",
|
||||
VERSION, (const char*)n.name(), __DATE__);
|
||||
}
|
||||
|
||||
// Risposta alla selezione Stampa del menu File
|
||||
void TApplication::print()
|
||||
{
|
||||
#ifdef DBG
|
||||
error_box("Non saprei bene cosa stampare!");
|
||||
#endif
|
||||
}
|
||||
|
||||
void TApplication::check_menu_item(MENU_TAG item)
|
||||
{
|
||||
win_menu_check(TASK_WIN, item, TRUE);
|
||||
win_update_menu_bar(TASK_WIN);
|
||||
}
|
||||
|
||||
void TApplication::uncheck_menu_item(MENU_TAG item)
|
||||
{
|
||||
win_menu_check(TASK_WIN, item, FALSE);
|
||||
win_update_menu_bar(TASK_WIN);
|
||||
}
|
||||
|
||||
|
||||
void TApplication::enable_menu_item(MENU_TAG item, bool on)
|
||||
{
|
||||
win_menu_enable(TASK_WIN, item, on);
|
||||
win_update_menu_bar(TASK_WIN);
|
||||
}
|
||||
|
||||
|
||||
void TApplication::dispatch_e_menu(MENU_TAG item)
|
||||
{
|
||||
#if XVT_OS == XVT_OS_WIN
|
||||
HWND w = (HWND)get_value(TASK_WIN, ATTR_NATIVE_WINDOW);
|
||||
PostMessage(w, WM_COMMAND, item, 0L);
|
||||
#else
|
||||
EVENT e;
|
||||
e.type = E_COMMAND;
|
||||
e.v.cmd.tag = item;
|
||||
e.v.cmd.shift = e.v.cmd.control = 0;
|
||||
dispatch_event(TASK_WIN, &e);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
bool TApplication::has_module(int module, int checktype) const
|
||||
{
|
||||
bool ok = TRUE;
|
||||
if (checktype == CHK_ALL || checktype == CHK_DONGLE)
|
||||
ok = _dongle_aut[module];
|
||||
if (ok && checktype == CHK_ALL || checktype == CHK_USER)
|
||||
ok = _user_aut[module];
|
||||
return ok;
|
||||
}
|
||||
|
||||
|
||||
long TApplication::get_firm() const
|
||||
{
|
||||
return prefhndl->get_codditta();
|
||||
}
|
||||
|
||||
const char* TApplication::get_firm_dir() const
|
||||
{
|
||||
return format("%s%s", __ptprf, prefhndl->name());
|
||||
}
|
||||
|
||||
|
||||
bool TApplication::set_firm(long newfirm)
|
||||
{
|
||||
disable_menu_item(M_FILE_NEW);
|
||||
const long oldfirm = get_firm();
|
||||
|
||||
if (newfirm < 1)
|
||||
{
|
||||
TMask mask("bagn002");
|
||||
|
||||
mask.send_key(K_CTRL+K_SHIFT+(extended_firm() ? 's' : 'h'), -2);
|
||||
const KEY k = mask.run();
|
||||
|
||||
enable_menu_item(M_FILE_NEW);
|
||||
if (k == K_ENTER)
|
||||
{
|
||||
newfirm = mask.get_long(F_CODDITTA);
|
||||
const int tipodir = mask.get_int(F_TIPO);
|
||||
|
||||
if (tipodir > 0)
|
||||
{
|
||||
if (_savefirm == 0) _savefirm = oldfirm;
|
||||
prefhndl->set(tipodir == 1 ? "com" : "");
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (newfirm == oldfirm || newfirm < 1)
|
||||
return newfirm > 0;
|
||||
|
||||
if (prefhndl->test(newfirm))
|
||||
{
|
||||
prefhndl->set_codditta(newfirm);
|
||||
_savefirm = 0;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TApplication::config()
|
||||
// gestisce le voci di configurazione
|
||||
// le si passa il file in cui cercare il proprio
|
||||
// paragrafo (comunque relativo alla ditta)
|
||||
// se non c'e', viene creato copiando il default
|
||||
// la variabile EdMask di quel paragrafo specifica
|
||||
// la maschera da usare
|
||||
{
|
||||
TConfig cnf(CONFIG_DITTA);
|
||||
bool ok = FALSE;
|
||||
|
||||
TFilename maskname(cnf.get("EdMask"));
|
||||
if (!maskname.empty())
|
||||
{
|
||||
TMask m(maskname);
|
||||
|
||||
// carica campi
|
||||
for (int i = 0; i < m.fields(); i++)
|
||||
{
|
||||
TMask_field& f = m.fld(i);
|
||||
const TFieldref* fref = f.field();
|
||||
if (fref != NULL)
|
||||
{
|
||||
const char* fname = fref->name();
|
||||
if (fname != NULL)
|
||||
{
|
||||
TString& oldvl = cnf.get(fname);
|
||||
if (!oldvl.empty())
|
||||
f.set(oldvl);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// run mask
|
||||
disable_menu_item(M_FILE_NEW);
|
||||
disable_menu_item(M_FILE_REVERT);
|
||||
|
||||
if (m.run() == K_ENTER)
|
||||
{
|
||||
// aggiusta campi
|
||||
for (i = 0; i < m.fields(); i++)
|
||||
{
|
||||
TMask_field& f = m.fld(i);
|
||||
if (f.dirty())
|
||||
{
|
||||
const TFieldref* fref = f.field();
|
||||
if (fref != NULL)
|
||||
{
|
||||
const char* fname = fref->name();
|
||||
const char* value = f.get();
|
||||
const char* oldvl = cnf.get(fname);
|
||||
if (change_config(fname,oldvl,value))
|
||||
cnf.set(fname, value, NULL, TRUE);
|
||||
}
|
||||
}
|
||||
}
|
||||
ok = TRUE;
|
||||
}
|
||||
else ok = FALSE;
|
||||
enable_menu_item(M_FILE_NEW);
|
||||
enable_menu_item(M_FILE_REVERT);
|
||||
return ok;
|
||||
}
|
||||
return warning_box("Nessun parametro da configurare");
|
||||
}
|
||||
|
||||
bool TApplication::change_config(const char* var, const char* oldv,
|
||||
const char* newv)
|
||||
|
||||
{ return TRUE; }
|
||||
=======
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <xvt.h>
|
||||
@ -666,3 +1341,4 @@ bool TApplication::change_config(const char* var, const char* oldv,
|
||||
const char* newv)
|
||||
|
||||
{ return TRUE; }
|
||||
>>>>>>> 1.24
|
||||
|
@ -32,6 +32,8 @@ class TApplication
|
||||
TString80 _name, _title;
|
||||
TPrinter* _printer;
|
||||
|
||||
long _savefirm;
|
||||
bool _create_ok;
|
||||
static TString16 _user;
|
||||
|
||||
protected:
|
||||
|
@ -36,10 +36,9 @@ int fatal_box(const char* fmt, ...)
|
||||
#if XVT_OS == XVT_OS_WIN
|
||||
MessageBeep(MB_ICONHAND);
|
||||
MessageBox(GetFocus(), msg, "ERRORE FATALE", MB_OK | MB_ICONHAND | MB_SYSTEMMODAL);
|
||||
const TApplication* a = MainApp();
|
||||
if (a != NULL)
|
||||
a->wake_up_caller();
|
||||
xvt_terminate();
|
||||
|
||||
if (xvt_running())
|
||||
main_app().stop_run();
|
||||
#else
|
||||
beep();
|
||||
if (xvt_running()) xvt_fatal("%s", msg);
|
||||
|
@ -572,14 +572,15 @@ TPush_button::TPush_button(short left, short top, short right, short bottom,
|
||||
const int height = bottom-top;
|
||||
const int width = right-left;
|
||||
|
||||
if (*capt == '#')
|
||||
const char* diesis = strchr(capt, '#');
|
||||
if (diesis != NULL)
|
||||
{
|
||||
int pid = atoi(capt+1);
|
||||
int pid = atoi(++diesis);
|
||||
_picup = cpb.getbmp(pid);
|
||||
const char* d = strrchr(capt, '#');
|
||||
if (d > capt)
|
||||
diesis = strchr(diesis, '#');
|
||||
if (diesis != NULL)
|
||||
{
|
||||
pid = atoi(d+1);
|
||||
pid = atoi(++diesis);
|
||||
_picdn = cpb.getbmp(pid);
|
||||
}
|
||||
|
||||
|
@ -934,7 +934,7 @@ bool TForm::parse_join(TScanner& scanner)
|
||||
|
||||
bool TForm::set_header()
|
||||
{
|
||||
TPrinter& printer = MainApp()->printer();
|
||||
TPrinter& printer = main_app().printer();
|
||||
printer.resetheader();
|
||||
|
||||
const bool ok = _head.update();
|
||||
@ -949,7 +949,7 @@ bool TForm::set_header()
|
||||
|
||||
bool TForm::set_footer()
|
||||
{
|
||||
TPrinter& printer = MainApp()->printer();
|
||||
TPrinter& printer = main_app().printer();
|
||||
printer.resetfooter();
|
||||
|
||||
const bool ok = _foot.update();
|
||||
@ -966,7 +966,7 @@ bool TForm::set_footer()
|
||||
|
||||
bool TForm::print(long from, long to)
|
||||
{
|
||||
TPrinter& printer = MainApp()->printer();
|
||||
TPrinter& printer = main_app().printer();
|
||||
const bool was_open = printer.isopen();
|
||||
|
||||
if (!was_open && !printer.open())
|
||||
|
@ -1,4 +1,4 @@
|
||||
// $Id: mailbox.cpp,v 1.5 1994-10-25 10:00:59 alex Exp $
|
||||
// $Id: mailbox.cpp,v 1.6 1994-11-10 13:44:25 guy Exp $
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <fstream.h>
|
||||
@ -196,7 +196,7 @@ TMailbox::~TMailbox()
|
||||
// send unread messages to myself
|
||||
while((m = next()) != NULL)
|
||||
{
|
||||
m->to(MainApp()->name());
|
||||
m->to(main_app().name());
|
||||
send(*m);
|
||||
}
|
||||
}
|
||||
|
@ -769,7 +769,8 @@ bool TMask::on_key(KEY key)
|
||||
}
|
||||
}
|
||||
}
|
||||
else return fld(_focus).on_key(key);
|
||||
else
|
||||
return fld(_focus).on_key(key);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
@ -1125,7 +1126,9 @@ void TMask::send_key(KEY key, short to) const
|
||||
{
|
||||
if (to == 0)
|
||||
{
|
||||
dispatch_e_char(win(), key);
|
||||
WINDOW w = win();
|
||||
if (w == NULL_WIN) w = _pagewin[0];
|
||||
dispatch_e_char(w, key);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
// $Id: maskfld.cpp,v 1.42 1994-11-07 13:50:56 guy Exp $
|
||||
// $Id: maskfld.cpp,v 1.43 1994-11-10 13:44:30 guy Exp $
|
||||
#include <xvt.h>
|
||||
|
||||
#include <applicat.h>
|
||||
@ -1349,8 +1349,7 @@ TToken_string& TBrowse::create_siblings(TToken_string& siblings)
|
||||
const TMask& mask = field().mask();
|
||||
siblings = ""; // Azzera la lista dei campi associati
|
||||
|
||||
if (!mask.is_running())
|
||||
return siblings; // Non saprei come fare
|
||||
// if (!mask.is_running()) return siblings;
|
||||
|
||||
TBit_array key(4); // Elenco delle chiavi gia' utilizzate
|
||||
key.set(_cursor->key());
|
||||
@ -1451,8 +1450,7 @@ default:
|
||||
{
|
||||
const short id = siblings.get_int((k - K_CTRL) << 1);
|
||||
TEdit_field& ef = (TEdit_field&)_fld->mask().field(id);
|
||||
if (ef.mask().is_running()) ef.set_focus();
|
||||
else ef.mask().first_focus(-ef.dlg());
|
||||
ef.set_focus();
|
||||
ef.mask().send_key(k = K_F9, 0);
|
||||
}
|
||||
break;
|
||||
@ -1652,7 +1650,7 @@ bool TEdit_field::parse_item(TScanner& scanner)
|
||||
|
||||
if (tabmaskname.not_empty())
|
||||
{
|
||||
if (strncmp(MainApp()->name(), "ba3", 3) != 0)
|
||||
if (strncmp(main_app().name(), "ba3", 3) != 0)
|
||||
{
|
||||
tabmaskname.insert("MBATB", 0);
|
||||
_browse->set_insert(tabmaskname);
|
||||
@ -2412,7 +2410,7 @@ void TReal_field::create(WINDOW w)
|
||||
TEdit_field::create(w);
|
||||
|
||||
if (_flags.firm)
|
||||
set(::format("%ld", MainApp()->get_firm())); else
|
||||
set(::format("%ld", main_app().get_firm())); else
|
||||
if (automagic())
|
||||
{
|
||||
TDate d(TODAY);
|
||||
|
@ -1151,6 +1151,11 @@ void TSheet_field::enable_cell(int row, int column, bool on)
|
||||
_sheet->enable_cell(row, column, on);
|
||||
}
|
||||
|
||||
bool TSheet_field::cell_disabled(int row, int column) const
|
||||
{
|
||||
return _sheet->cell_disabled(row, column);
|
||||
}
|
||||
|
||||
|
||||
TMask& TSheet_field::sheet_mask() const
|
||||
{
|
||||
|
@ -42,6 +42,7 @@ public:
|
||||
void enable_column(int col, bool on = TRUE);
|
||||
void enable_cell(int row, int column, bool on = TRUE);
|
||||
void disable_cell(int row, int column) { enable_cell(row, column, FALSE); }
|
||||
bool cell_disabled(int row, int column) const;
|
||||
|
||||
TSheet_field(TMask* m);
|
||||
virtual ~TSheet_field();
|
||||
|
@ -604,7 +604,7 @@ bool printers_on_key (TMask_field & f, KEY key)
|
||||
{
|
||||
TToken_string pn1 (10), pn2 (20);
|
||||
|
||||
const PrinterDef & def = MainApp()->printer().get_description(atoi(f.get ()));
|
||||
const PrinterDef & def = main_app().printer().get_description(atoi(f.get ()));
|
||||
const char *s;
|
||||
int j = 0;
|
||||
while ((s = def.get_codenames (j)) != NULL)
|
||||
@ -625,16 +625,16 @@ bool set_windows_print_device (TMask_field& f, KEY key)
|
||||
static char szDevice[80];
|
||||
if (key == K_SPACE && f.mask().is_running())
|
||||
{
|
||||
if (MainApp()->printer().get_printrcd() != NULL)
|
||||
free_print_rcd (MainApp ()->printer().get_printrcd ());
|
||||
TToken_string & pn = MainApp()->printer().getprinternames ();
|
||||
if (main_app().printer().get_printrcd() != NULL)
|
||||
free_print_rcd (main_app().printer().get_printrcd ());
|
||||
TToken_string & pn = main_app().printer().getprinternames ();
|
||||
TString pdev (pn.get (atoi (f.get())));
|
||||
GetProfileString ("devices", pdev, "", szDevice, sizeof (szDevice));
|
||||
pdev << "," << szDevice;
|
||||
// scrivi (e semmai lo si risistema poi)
|
||||
WriteProfileString("windows", "device", pdev);
|
||||
MainApp()->printer().set_printrcd(get_print_rcd (&(MainApp ()->printer ().get_printrcdsize ())));
|
||||
MainApp()->printer().set_win_formlen();
|
||||
main_app().printer().set_printrcd(get_print_rcd (&(MainApp ()->printer ().get_printrcdsize ())));
|
||||
main_app().printer().set_win_formlen();
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
@ -1308,7 +1308,7 @@ void TPrinter::set()
|
||||
{
|
||||
// riaggiusta stampante default windows come prima
|
||||
// curprn e rcd sono quelle di prima
|
||||
MainApp()->enable_menu_item(M_FILE_PG_SETUP);
|
||||
main_app().enable_menu_item(M_FILE_PG_SETUP);
|
||||
WriteProfileString("windows","device", old_default);
|
||||
}
|
||||
if (k == K_ESC)
|
||||
|
@ -504,7 +504,7 @@ void TSheet::update()
|
||||
|
||||
void TSheet::print()
|
||||
{
|
||||
TPrinter& pr = MainApp()->printer();
|
||||
TPrinter& pr = main_app().printer();
|
||||
TPrintrow row;
|
||||
bool ok = pr.open();
|
||||
|
||||
|
@ -592,36 +592,38 @@ const TFilename& TFilename::tempdir()
|
||||
const int last = len()-1;
|
||||
|
||||
if (!is_not_slash(_str[last])) cut(last);
|
||||
if (!fexist(_str))
|
||||
{
|
||||
int res =
|
||||
#if XVT_OS==XVT_OS_SCOUNIX
|
||||
mkdir(_str, 0777);
|
||||
#else
|
||||
mkdir(_str);
|
||||
#endif
|
||||
if (res != 0)
|
||||
fatal_box("Impossibile creare la directory '%s' per i file temporanei", _str);
|
||||
}
|
||||
if (not_empty()) *this << "/" ;
|
||||
TString16 u(main_app().user());
|
||||
|
||||
u.lower();
|
||||
*this << u;
|
||||
int res = 0;
|
||||
|
||||
if (!fexist(_str))
|
||||
{
|
||||
int res =
|
||||
res =
|
||||
#if XVT_OS==XVT_OS_SCOUNIX
|
||||
mkdir(_str, 0777);
|
||||
#else
|
||||
mkdir(_str);
|
||||
mkdir(_str);
|
||||
#endif
|
||||
// if (res == 0)
|
||||
// message_box("E' stata creata la directory per i file temporanei '%s'", _str);
|
||||
// else
|
||||
if (res != 0)
|
||||
fatal_box("Impossibile creare la directory '%s' per i file temporanei", _str);
|
||||
}
|
||||
|
||||
if (res == 0)
|
||||
{
|
||||
if (not_empty()) *this << "/" ;
|
||||
*this << main_app().user();
|
||||
lower();
|
||||
if (!fexist(_str))
|
||||
{
|
||||
res =
|
||||
#if XVT_OS==XVT_OS_SCOUNIX
|
||||
mkdir(_str, 0777);
|
||||
#else
|
||||
mkdir(_str);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
if (res != 0)
|
||||
fatal_box("Impossibile creare la directory '%s' per i file temporanei", _str);
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
@ -443,7 +443,7 @@ HIDDEN bool _mtcheck_val(TEdit_field& f, KEY)
|
||||
|
||||
TLocalisamfile d(LF_NDITTE);
|
||||
d.zero();
|
||||
d.put(NDT_CODDITTA, MainApp()->get_firm());
|
||||
d.put(NDT_CODDITTA, main_app().get_firm());
|
||||
d.read();
|
||||
if (d.bad()) return TRUE;
|
||||
if (d.get_char(NDT_FREQVIVA) == 'M') return TRUE;
|
||||
|
@ -55,8 +55,8 @@ extern "C"
|
||||
#define CTRL_R ('R')
|
||||
|
||||
// vista la mania degli 883, eccoti un po' di concerti di Mozart
|
||||
const long E_ADDLINE = 488l;
|
||||
const long E_ADDLINE_ONSCREEN = 467l;
|
||||
const long E_ADDLINE = 488L;
|
||||
const long E_ADDLINE_ONSCREEN = 467L;
|
||||
|
||||
|
||||
void TViswin::exec_link()
|
||||
@ -75,9 +75,8 @@ void TViswin::exec_link()
|
||||
{
|
||||
if (yesno_box("Si desidera riaggiornare la stampa?"))
|
||||
{
|
||||
((TPrint_application*)MainApp())->repeat_print();
|
||||
((TPrint_application&)main_app()).repeat_print();
|
||||
#if XVT_OS == XVT_OS_WIN
|
||||
xvt_statbar_set ("");
|
||||
xvt_statbar_refresh ();
|
||||
#endif
|
||||
stop_run(K_ENTER);
|
||||
|
@ -826,13 +826,12 @@ WINDOW xvt_create_statbar()
|
||||
void xvt_statbar_set(const char* text, bool def)
|
||||
{
|
||||
#if XVT_OS == XVT_OS_WIN
|
||||
TString256 t(text);
|
||||
const TDate oggi(TODAY);
|
||||
t << '\t' << oggi.string() << " - " << main_app().title();
|
||||
TString t(80);
|
||||
t << text << '\t' << oggi.string() << " - " << main_app().title();
|
||||
if (def)
|
||||
statbar_set_default_title(statbar, (char*)(const char*)t);
|
||||
else
|
||||
statbar_set_title(statbar, (char*)(const char*)t);
|
||||
statbar_set_title(statbar, (char*)(const char*)t);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user