Patch level :10.0 patch 24

Files correlati     : tutte le librerie
Ricompilazione Demo : [ ]
Commento            :


git-svn-id: svn://10.65.10.50/trunk@16463 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2008-04-04 16:04:15 +00:00
parent fab5abc300
commit 0216f2cbf9
32 changed files with 962 additions and 642 deletions

View File

@ -329,7 +329,7 @@ long TApplication::handler(WINDOW win, EVENT* ep)
case M_FILE_NEW: case M_FILE_NEW:
set_firm(); set_firm();
break; break;
case (M_FILE_ABOUT+1): case M_FILE_ABOUT:
about(); about();
break; break;
case M_HELP_CONTENTS: case M_HELP_CONTENTS:
@ -639,14 +639,9 @@ void TApplication::run(
CGetPref(); CGetPref();
const int sn = get_serial_number(); const int sn = get_serial_number();
if (sn < 0) if (sn > 0 && !test_assistance_year())
{ {
error_box(TR("Probabilmente non e' inserita la chiave di protezione\noppure mancano i relativi driver.")); error_box(TR("E' necessario attivare il contratto di assistenza per l'anno in corso"));
return;
}
if (!test_assistance_year())
{
error_box(TR("Probabilmente e' necessario attivare il contratto di assistenza per l'anno in corso"));
return; return;
} }
@ -671,10 +666,7 @@ void TApplication::run(
bool TApplication::get_version_info(int& year, int& release, int& tag, int& patch) bool TApplication::get_version_info(int& year, int& release, int& tag, int& patch)
{ {
//Commentato per la 10.0! Non cancellare!! const char* const VERSIONANDPATCH = "Don't cry for me Argentina.2008.10.00.0000.2018";
//const char* const VERSIONANDPATCH = "Don't cry for me Argentina.2008.10.00.0000.2018";
const char* const VERSIONANDPATCH = "Don't cry for me Argentina.2008.04.00.0001.2013";
TToken_string vep(VERSIONANDPATCH, '.'); TToken_string vep(VERSIONANDPATCH, '.');
year = vep.get_int(1); year = vep.get_int(1);
@ -683,9 +675,6 @@ bool TApplication::get_version_info(int& year, int& release, int& tag, int& patc
patch = vep.get_int(); patch = vep.get_int();
int checksum = vep.get_int(); int checksum = vep.get_int();
//Commentato per la 10.0! Non cancellare!!
//bool valid = year >= 2008 && release > 0 && tag >= 0 && patch >= 0 &&
bool valid = year >= 2008 && release > 0 && tag >= 0 && patch >= 0 && bool valid = year >= 2008 && release > 0 && tag >= 0 && patch >= 0 &&
checksum == (year + release + tag + patch); checksum == (year + release + tag + patch);

View File

@ -20,8 +20,7 @@ bool TAutomask::error_box(const char* fmt, ...)
{ {
post_error_message(msg, 3); post_error_message(msg, 3);
} }
return false;
return FALSE;
} }
TField_event TAutomask::key2event(TMask_field& f, KEY key) const TField_event TAutomask::key2event(TMask_field& f, KEY key) const
@ -61,7 +60,7 @@ TField_event TAutomask::key2event(TMask_field& f, KEY key) const
if (!f.is_edit()) if (!f.is_edit())
{ {
const TMask& wm = f.mask(); const TMask& wm = f.mask();
if (f.is_kind_of(CLASS_BUTTON_FIELD)) if (f.is_kind_of(CLASS_BUTTON_FIELD) || f.is_kind_of(CLASS_BUTTON_TOOL))
fe = fe_button; else fe = fe_button; else
if (f.is_kind_of(CLASS_TREE_FIELD)) if (f.is_kind_of(CLASS_TREE_FIELD))
fe = wm.is_running() ? fe_modify : fe_init; fe = wm.is_running() ? fe_modify : fe_init;

View File

@ -1,4 +1,4 @@
TOOLBAR "Toolbar" 0 -2 0 2 TOOLBAR "Toolbar" 0 0 0 2
BUTTON DLG_PRINT 10 2 BUTTON DLG_PRINT 10 2
BEGIN BEGIN
@ -9,39 +9,38 @@ END
BUTTON DLG_SAVEREC 10 2 BUTTON DLG_SAVEREC 10 2
BEGIN BEGIN
PROMPT -24 -1 "~Registra" PROMPT -24 -1 "Esporta"
MESSAGE EXIT,K_SAVE MESSAGE EXIT,K_SAVE
PICTURE BMP_SAVEREC PICTURE BMP_SAVEREC
PICTURE BMP_SAVERECDN
END
BUTTON DLG_PREVREC 3
BEGIN
PROMPT -34 -2 ""
PICTURE 122
END END
BUTTON DLG_FIRSTREC 3 BUTTON DLG_FIRSTREC 3
BEGIN BEGIN
PROMPT -34 -1 "" PROMPT -34 -1 "Prima pagina"
PICTURE 121 PICTURE 121
END END
BUTTON DLG_PREVREC 3
BEGIN
PROMPT -34 -2 "Pagina Precedente"
PICTURE 122
END
BUTTON DLG_FINDREC 10 2 BUTTON DLG_FINDREC 10 2
BEGIN BEGIN
PROMPT -34 -1 "" PROMPT -34 -1 "Ricerca Pagina"
PICTURE 166 PICTURE 166
END END
BUTTON DLG_NEXTREC 3 BUTTON DLG_NEXTREC 3
BEGIN BEGIN
PROMPT -34 -2 "" PROMPT -34 -2 "Prossima pagina"
PICTURE 124 PICTURE 124
END END
BUTTON DLG_LASTREC 3 BUTTON DLG_LASTREC 3
BEGIN BEGIN
PROMPT -34 -1 "" PROMPT -34 -1 "Ultima Pagina"
PICTURE 125 PICTURE 125
END END
@ -53,9 +52,9 @@ END
ENDPAGE ENDPAGE
PAGE "Anteprima" -1 -1 60 13 PAGE "Anteprima" 0 0 0 0
PREVIEW DLG_USER -3 -1 PREVIEW DLG_USER
BEGIN BEGIN
PROMPT 0 0 "" PROMPT 0 0 ""
END END

View File

@ -54,6 +54,9 @@
#define CLASS_GOLEM_CLIENT_FIELD 252 #define CLASS_GOLEM_CLIENT_FIELD 252
#define CLASS_OUTLOOK_FIELD 253 #define CLASS_OUTLOOK_FIELD 253
#define CLASS_TOOL_FIELD 280
#define CLASS_BUTTON_TOOL 281
#define CLASS_BASEISAMFILE 300 #define CLASS_BASEISAMFILE 300
#define CLASS_ISAMFILE 301 #define CLASS_ISAMFILE 301
#define CLASS_SYSTEMISAMFILE 302 #define CLASS_SYSTEMISAMFILE 302

View File

@ -36,6 +36,7 @@ extern bool ADVANCED_GRAPHICS;
extern bool AUTOSELECT; extern bool AUTOSELECT;
extern bool AUTOZOOM; extern bool AUTOZOOM;
extern bool AUTOEND; extern bool AUTOEND;
extern int TOOL_SIZE;
const COLOR COLOR_DKCYAN = MAKE_COLOR(0,128,128); const COLOR COLOR_DKCYAN = MAKE_COLOR(0,128,128);
const COLOR COLOR_DKYELLOW = MAKE_COLOR(128,128, 0); const COLOR COLOR_DKYELLOW = MAKE_COLOR(128,128, 0);

View File

@ -40,7 +40,7 @@ bool ADVANCED_GRAPHICS = true;
bool AUTOZOOM = false; bool AUTOZOOM = false;
bool AUTOEND = false; bool AUTOEND = false;
bool NATIVE_CONTROLS = false; bool NATIVE_CONTROLS = false;
bool USE_NOTEBOOK = false; // NATIVE_CONTROLS int TOOL_SIZE = 24;
HIDDEN bool _button_blocked = false; HIDDEN bool _button_blocked = false;
HIDDEN int _last_mouse_button = 0; HIDDEN int _last_mouse_button = 0;
@ -326,6 +326,7 @@ void customize_colors()
xi_set_pref(XI_PREF_NATIVE_CTRLS, NATIVE_CONTROLS); xi_set_pref(XI_PREF_NATIVE_CTRLS, NATIVE_CONTROLS);
} }
} }
TOOL_SIZE = colors.get_int("ToolSize", NULL, -1, TOOL_SIZE);
const int SPEECH_MODE = colors.get_int("SpeechMode", NULL, -1, 0); const int SPEECH_MODE = colors.get_int("SpeechMode", NULL, -1, 0);
xvt_vobj_set_attr(NULL_WIN, ATTR_SPEECH_MODE, SPEECH_MODE); xvt_vobj_set_attr(NULL_WIN, ATTR_SPEECH_MODE, SPEECH_MODE);
@ -464,7 +465,8 @@ HIDDEN void init_fu_multiple(XI_OBJ* itf)
Y_FU_MULTIPLE = max_rct.bottom / 25; Y_FU_MULTIPLE = max_rct.bottom / 25;
} }
#define MASK_RECT_ID -883 // OBSOLETE
// #define MASK_RECT_ID -883
HIDDEN XI_BITMAP* get_background_bitmap() HIDDEN XI_BITMAP* get_background_bitmap()
{ {
@ -484,7 +486,7 @@ HIDDEN XI_BITMAP* get_background_bitmap()
} }
WINDOW create_interface(WINDOW parent, short x, short y, short dx, short dy, WINDOW create_interface(WINDOW parent, short x, short y, short dx, short dy,
const char* caption, TWindow* msk, bool orecchie) const char* caption, TWindow* msk/*, bool orecchie*/)
{ {
if (parent == NULL_WIN) if (parent == NULL_WIN)
parent = TASK_WIN; parent = TASK_WIN;
@ -524,17 +526,8 @@ WINDOW create_interface(WINDOW parent, short x, short y, short dx, short dy,
const WIN_TYPE wt = (dx == 0) ? W_PLAIN : W_DOC; const WIN_TYPE wt = (dx == 0) ? W_PLAIN : W_DOC;
long wsf = WSF_INVISIBLE | WSF_NO_MENUBAR; long wsf = WSF_INVISIBLE | WSF_NO_MENUBAR;
WINDOW win = NULL_WIN; WINDOW win = xvt_win_create(wt, &r, caption, 0L, parent, wsf,
if (USE_NOTEBOOK && orecchie && parent != NULL_WIN) EM_ALL, (EVENT_HANDLER)xi_event, (long)msk);
{
const short tab_no = xvt_notebk_get_num_tabs(parent);
xvt_notebk_add_tab(parent, tab_no, caption, NULL);
xvt_notebk_add_page(parent, tab_no, 0, caption, (long)msk);
win = xvt_notebk_create_face(parent, tab_no, 0, EM_ALL, xi_event, (long)msk);
}
else
win = xvt_win_create(wt, &r, caption, 0L, parent, wsf,
EM_ALL, (EVENT_HANDLER)xi_event, (long)msk);
CHECK(win, "Can't create an XVT window for an interface"); CHECK(win, "Can't create an XVT window for an interface");
xvtil_set_font(win, NULL, 0, 0); xvtil_set_font(win, NULL, 0, 0);
@ -574,6 +567,7 @@ WINDOW create_interface(WINDOW parent, short x, short y, short dx, short dy,
xvt_vobj_move(win, &r); xvt_vobj_move(win, &r);
} }
/* OBSOLETE
// Aggiunge rettangolo di cornice per pagine con orecchie // Aggiunge rettangolo di cornice per pagine con orecchie
if (!USE_NOTEBOOK && orecchie) if (!USE_NOTEBOOK && orecchie)
{ {
@ -598,6 +592,7 @@ WINDOW create_interface(WINDOW parent, short x, short y, short dx, short dy,
xi_dequeue(); xi_dequeue();
xi_tree_free(def); xi_tree_free(def);
} }
*/
return win; return win;
} }
@ -914,6 +909,7 @@ void TControl::coord2rct(WINDOW win, short x, short y, short dx, short dy, RCT &
if (Y_FU_MULTIPLE == 0) // Puo' succedere che non sia ancora inizializzato if (Y_FU_MULTIPLE == 0) // Puo' succedere che non sia ancora inizializzato
init_fu_multiple(itf); init_fu_multiple(itf);
/* OBSOLETE
// Se ci sono i tab controls sulla pagina salta una riga // Se ci sono i tab controls sulla pagina salta una riga
if (y >= 0) if (y >= 0)
{ {
@ -922,6 +918,7 @@ void TControl::coord2rct(WINDOW win, short x, short y, short dx, short dy, RCT &
if (num > 0 && child[0]->cid == MASK_RECT_ID) if (num > 0 && child[0]->cid == MASK_RECT_ID)
y++; y++;
} }
*/
RCT max_rct; xvt_vobj_get_client_rect(win, &max_rct); RCT max_rct; xvt_vobj_get_client_rect(win, &max_rct);
xi_pu_to_fu(itf, (XinPoint *)&max_rct, 2); xi_pu_to_fu(itf, (XinPoint *)&max_rct, 2);
@ -1409,7 +1406,7 @@ void TField_control::create(WINDOW win, short cid,
{ {
f->button = true; f->button = true;
f->pixel_button_distance = 1; f->pixel_button_distance = 1;
f->button_width = 16; f->button_width = 18;
} }
} }
else // E' un multiline, quindi setto il rettangolo else // E' un multiline, quindi setto il rettangolo

View File

@ -24,7 +24,7 @@ XVT_FNTID xvt_default_font(bool bold = false, bool big = false);
XVT_FNTID xvt_load_default_font(); XVT_FNTID xvt_load_default_font();
WINDOW create_interface(WINDOW parent, short x, short y, short dx, short dy, WINDOW create_interface(WINDOW parent, short x, short y, short dx, short dy,
const char* caption, TWindow* mask, bool tags); const char* caption, TWindow* mask /*, bool tags*/);
void attach_interface(WINDOW win, COLOR back); void attach_interface(WINDOW win, COLOR back);
short low_get_focus_id(WINDOW win); short low_get_focus_id(WINDOW win);

View File

@ -34,6 +34,8 @@
#define DLG_PROFILE 30 /* TAG del campo <Profilo> */ #define DLG_PROFILE 30 /* TAG del campo <Profilo> */
#define DLG_PDF 31 /* TAG del bottone Stampa PDF */ #define DLG_PDF 31 /* TAG del bottone Stampa PDF */
#define DLG_ARCHIVE 32 /* TAG del bottone Archiviazione */ #define DLG_ARCHIVE 32 /* TAG del bottone Archiviazione */
#define DLG_INFO 33 /* TAG del bottone Informazioni */
#define DLG_HELP 34 /* TAG del bottone Informazioni */
#define DLG_USER 100 /* TAG del primo controllo definito dall'utente */ #define DLG_USER 100 /* TAG del primo controllo definito dall'utente */
/* @M /* @M

View File

@ -5,6 +5,13 @@
#include <prefix.h> #include <prefix.h>
#include <recarray.h> #include <recarray.h>
static bool is_outlook_menu()
{
const int dw = xvt_vobj_get_attr(NULL_WIN, ATTR_SCREEN_WIDTH);
RCT rct; xvt_vobj_get_outer_rect(TASK_WIN, &rct);
return rct.left > 0 && rct.right < dw-1;
}
// @doc EXTERNAL // @doc EXTERNAL
// @mfunc Esegue il processo // @mfunc Esegue il processo
@ -65,6 +72,9 @@ long TExternal_app::run(
xvt_fsys_set_dir(&d); xvt_fsys_set_dir(&d);
} }
} }
// Vecchio titolo della finestra principale
TString256 old_title;
const bool close_all = !async && _path.starts_with("ba1 -0") && prefix_valid(); const bool close_all = !async && _path.starts_with("ba1 -0") && prefix_valid();
if (!async) if (!async)
@ -76,11 +86,21 @@ long TExternal_app::run(
if (dongle().local()) if (dongle().local())
dongle().logout(); dongle().logout();
if (iconize && utente && is_outlook_menu())
{
xvt_vobj_get_title(TASK_WIN, old_title.get_buffer(), old_title.size());
xvt_vobj_set_title(TASK_WIN, __MAGIC_CAPTION__);
iconize = false;
}
} }
// iconize &= !async && show;
// _exitcode = os_execute(path, !async, iconize, show);
_exitcode = xvt_sys_execute(path, !async, iconize); _exitcode = xvt_sys_execute(path, !async, iconize);
if (old_title.full()) // Rimetto le cose a posto
{
xvt_vobj_set_title(TASK_WIN, old_title);
}
// restore cwd // restore cwd
xvt_fsys_set_dir(&oldir); xvt_fsys_set_dir(&oldir);

View File

@ -5,6 +5,9 @@
#include <strings.h> #include <strings.h>
#endif #endif
// Nome segreto per la finestra che deve ospitare un programma
#define __MAGIC_CAPTION__ "__CAMPO_HOST_WINDOW__"
// @doc EXTERNAL // @doc EXTERNAL
// @class TExternal_app | Classe per l'esecuzione di oggetti esterni // @class TExternal_app | Classe per l'esecuzione di oggetti esterni
@ -14,10 +17,8 @@ class TExternal_app : public TObject
// @author:(INTERNAL) Villa // @author:(INTERNAL) Villa
// @comm Gli oggetti eseguiti dalla presente classe possono essere eseguiti // @comm Gli oggetti della presente classe possono essere eseguiti
// in background in tutti gli ambienti, oppure in modo sincrono. // in background in tutti gli ambienti, oppure in modo sincrono.
// <nl>Non sono implementate linee di comando; si suppone che l'utente
// utilizzi la mailbox per questo.
// @access:(INTERNAL) Private Member // @access:(INTERNAL) Private Member
{ {

View File

@ -299,7 +299,6 @@ void TDir::zero ()
} }
void TDir::print_on (ostream & out) const void TDir::print_on (ostream & out) const
{ {
CHECK(_dir,"Can't print a NULL _dir"); CHECK(_dir,"Can't print a NULL _dir");
out << _num << '\n'; out << _num << '\n';
@ -523,20 +522,16 @@ void TTrec::zero ()
} }
int TTrec::status (TDirtype dirop) const int TTrec::status (TDirtype dirop) const
{ {
return rdir[dirop].IOR; return rdir[dirop].IOR;
} }
int TTrec ::field (const char *name) const int TTrec::field(const char *name) const
{ {
return findfld (_rec, (char *) name); return findfld(_rec, name);
} }
const char *TTrec ::fielddef (int fld) const const char *TTrec ::fielddef (int fld) const
{ {
sprintf (_files_tmp_string, "%s|%d|%d|%d", _rec->Fd[fld].Name, sprintf (_files_tmp_string, "%s|%d|%d|%d", _rec->Fd[fld].Name,
(int) _rec->Fd[fld].TypeF, (int) _rec->Fd[fld].Len, (int) _rec->Fd[fld].TypeF, (int) _rec->Fd[fld].Len,
@ -545,7 +540,6 @@ const char *TTrec ::fielddef (int fld) const
} }
const char *TTrec ::keydef (int key) const const char *TTrec ::keydef (int key) const
{ {
TFixed_string s (_files_tmp_string, 128); TFixed_string s (_files_tmp_string, 128);
@ -584,26 +578,23 @@ bool TDir::is_active () const
return main_app().has_module(module, CHK_DONGLE); return main_app().has_module(module, CHK_DONGLE);
} }
void TTrec::update_fielddef (int nfld, const char *desc) void TTrec::update_fielddef (int nfld, TToken_string& s)
{ {
TToken_string s (desc); RecFieldDes& rfd = _rec->Fd[nfld];
strcpy (_rec->Fd[nfld].Name, s.get ()); strcpy (rfd.Name, s.get(0));
_rec->Fd[nfld].TypeF = s.get_int (); rfd.TypeF = s.get_int ();
_rec->Fd[nfld].Len = s.get_int (); rfd.Len = s.get_int ();
_rec->Fd[nfld].Dec = s.get_int (); rfd.Dec = s.get_int ();
} }
void TTrec::update_keydef (int key, const char *desc) void TTrec::update_keydef (int key, TToken_string& s)
{ {
TExpression expr ("", _strexpr); TExpression expr ("", _strexpr);
TToken_string s (desc); TString ke (s.get(0));
TString ke (s.get ());
if (expr.set ((const char *) ke, _strexpr)) if (expr.set(ke, _strexpr))
{ {
const char * dup = s.get(); const char* dup = s.get();
_rec->Ky[key].DupKeys = (dup && *dup != ' '); _rec->Ky[key].DupKeys = (dup && *dup != ' ');
TCodearray & c = expr.code (); TCodearray & c = expr.code ();
c.begin (); c.begin ();
@ -645,8 +636,7 @@ void TTrec::update_keydef (int key, const char *desc)
} }
} }
void TTrec::print_on (ostream & out) const void TTrec::print_on(ostream & out) const
{ {
const int n = num(); const int n = num();
out << n; out << n;
@ -676,52 +666,46 @@ void TTrec::print_on (ostream & out) const
} }
} }
void TTrec::read_from (istream & in) void TTrec::read_from(istream & in)
{ {
const int n = num(); const int n = num();
in.getline (_files_tmp_string, sizeof (_files_tmp_string), '\n'); TToken_string t(256);
if (_des && n>=LF_TABGEN && n<=LF_TAB) in.getline (t.get_buffer(), t.size(), '\n');
if (_des && n >= LF_TABGEN && n <= LF_TAB)
{ {
const TFixed_string t(_files_tmp_string);
if (t.find('|') >= 0) if (t.find('|') >= 0)
{ {
const TString4 tabname(t.right(3)); const TString4 tabname(t.right(3));
strcpy(_files_tmp_string,t.left(t.len()-4)); // Toglie il nome della tabella t.rtrim(4); // Toglie il nome della tabella
if (_tab != tabname && !yesno_box("Descrizione relativa alla tabella %s.\n Continuo ?",(const char*) tabname)) if (_tab != tabname && !yesno_box("Descrizione relativa alla tabella %s.\n Continuare?",(const char*) tabname))
return; return;
} }
} }
const int ln = atoi (_files_tmp_string); const int ln = t.get_int(0);
if (n > 0 && ln != n && !yesno_box ("Descrizione relativa al file n.ro %d.\n Continuo ?", ln)) if (n > 0 && ln != n && !yesno_box ("Descrizione relativa al file n.ro %d.\n Continuare?", ln))
return; return;
in.getline (_files_tmp_string, sizeof (_files_tmp_string), '\n'); in.getline (t.get_buffer(), t.size(), '\n');
const int nfields = atoi (_files_tmp_string); const int nfields = t.get_int(0);
set_fields (nfields); set_fields (nfields);
TToken_string t;
int i;
for (i = 0; i < nfields; i++) for (int i = 0; i < nfields; i++)
{ {
in.getline (_files_tmp_string, sizeof (_files_tmp_string), '\n'); in.getline (t.get_buffer(), t.size(), '\n');
t = _files_tmp_string; update_fielddef (i, t);
const int itms = t.items(); const int itms = t.items();
if (_des && itms >= 5) // La descrizione viene caricata solo se esiste
update_fielddef (i, _files_tmp_string); _des->set(_rec->Fd[i].Name, t.get(4));
if (_des && itms == 5) // La descrizione viene caricata solo se esiste
_des->set(_rec->Fd[i].Name, t.get(itms-1));
} }
int nkeys;
in.getline (_files_tmp_string, sizeof (_files_tmp_string), '\n'); in.getline (t.get_buffer(), t.size(), '\n');
nkeys = atoi (_files_tmp_string); const int nkeys = t.get_int(0);
set_keys (nkeys); set_keys (nkeys);
for (i = 0; i < nkeys; i++) for (int i = 0; i < nkeys; i++)
{ {
in.getline (_files_tmp_string, sizeof (_files_tmp_string), '\n'); in.getline (t.get_buffer(), t.size(), '\n');
update_keydef (i, _files_tmp_string); update_keydef (i, t);
} }
rehash (); rehash ();
_des = NULL; _des = NULL;

View File

@ -245,9 +245,9 @@ public:
#ifndef FOXPRO #ifndef FOXPRO
// @cmember Aggiorna la chiave. <p desc> e' una token string // @cmember Aggiorna la chiave. <p desc> e' una token string
void update_keydef(int key, const char* desc); void update_keydef(int key, TToken_string& desc);
// @cmember Aggiorna il campo. <p desc> e' una token string // @cmember Aggiorna il campo. <p desc> e' una token string
void update_fielddef(int nfld, const char* desc); void update_fielddef(int nfld, TToken_string& desc);
// @cmember Stampa il tracciato record sull'output selezionato // @cmember Stampa il tracciato record sull'output selezionato
virtual void print_on(ostream& out) const; virtual void print_on(ostream& out) const;
// @cmember Legge il tracciato record da input selezionato // @cmember Legge il tracciato record da input selezionato

View File

@ -12,7 +12,7 @@
#include <recarray.h> #include <recarray.h>
#include <relation.h> #include <relation.h>
#include <scanner.h> #include <scanner.h>
#include <utility.h> #include <utility.h>
#include <tabutil.h> #include <tabutil.h>
#include <varrec.h> #include <varrec.h>
@ -27,8 +27,7 @@
#include <sys/stat.h> #include <sys/stat.h>
#include <codeb.h> #include <codeb.h>
#include <nditte.h>
#ifdef JOURNAL #ifdef JOURNAL
#include <journal.h> #include <journal.h>
@ -2126,16 +2125,16 @@ int TSystemisamfile::update(
if (newfields < MaxFields) if (newfields < MaxFields)
{ {
wrec.update_fielddef(newfields++, def); wrec.update_fielddef(newfields++, def);
wrec.set_fields(newfields); wrec.set_fields(newfields);
wrec.rehash(); wrec.rehash();
} }
else else
{
if(!yesno_box("Il campo %s non verra' preservato, devo continuare?", if(!yesno_box("Il campo %s non verra' preservato, devo continuare?",
(const char*)fname)) (const char*)fname))
return NOERR; return NOERR;
}
} }
} }
} }
if (wfields < newfields) if (wfields < newfields)
@ -2462,14 +2461,9 @@ int TSystemisamfile::load(
if (extended) if (extended)
{ {
TDate d(TODAY); TDate d(TODAY);
TLocalisamfile ditte(LF_NDITTE);
firm.format("%05ld", prefix().get_codditta());
year.format("%04d", d.year()); year.format("%04d", d.year());
ditte.zero(); firm.format("%05ld", prefix().get_codditta());
ditte.put("CODDITTA", firm); attprev = cache().get(LF_NDITTE, firm, NDT_CODATTPREV);
if (ditte.read() == NOERR)
attprev = ditte.get("CODATTPREV");
} }
fseek(fl, 0L, SEEK_END); fseek(fl, 0L, SEEK_END);

File diff suppressed because it is too large Load Diff

View File

@ -8,13 +8,13 @@
class TSheet_field; class TSheet_field;
class TTree_field; class TTree_field;
class TCurrency; class TCurrency;
class TButton_tool;
// @doc EXTERNAL // @doc EXTERNAL
// @type MASK_HANDLER | Prototipo funzione per gestire i tasti speciali all'interno di una maschera. // @type MASK_HANDLER | Prototipo funzione per gestire i tasti speciali all'interno di una maschera.
typedef bool (*MASK_HANDLER)(TMask& mask, KEY key); typedef bool (*MASK_HANDLER)(TMask& mask, KEY key);
// @doc EXTERNAL // @doc EXTERNAL
// @enum Modalita' di utilizzo della maschera corrente // @enum Modalita' di utilizzo della maschera corrente
@ -47,7 +47,8 @@ class TMask : public TWindow
private: private:
// @cmember:(INTERNAL) Windows delle pagine // @cmember:(INTERNAL) Windows delle pagine
WINDOW _pagewin[MAX_PAGES+1]; WINDOW _toolwin, _notebook, _single, _toolbar;
WINDOW _pagewin[MAX_PAGES];
// @cmember:(INTERNAL) Numero della maschera all'interno del file sorgente // @cmember:(INTERNAL) Numero della maschera all'interno del file sorgente
int _mask_num; int _mask_num;
@ -108,17 +109,20 @@ protected:
// @cmember Inizializza la maschera (Chiamata quando la maschera parte) // @cmember Inizializza la maschera (Chiamata quando la maschera parte)
virtual void start_run(); virtual void start_run();
// @cmember Aggiunge una toolbar alla maschera (top or bottom only)
void insert_bar(WINDOW bar);
WINDOW create_book(bool single);
WINDOW create_bar(int height); // if height < 0 then BottomBar else TopBar
// @cmember Aggiunge una pagina alla maschera
void insert_page(WINDOW page, int pos);
WINDOW create_page(const char* title, int pos); // -1 <= pos < MAX_PAGES
// @cmember Inizializza la maschera // @cmember Inizializza la maschera
void init_mask(); void init_mask();
// @cmember Legge la pagina da file // @cmember Legge la pagina da file
WINDOW read_page(TScanner& scanner, bool toolbar = false); void read_page(TScanner& scanner, bool toolbar);
WINDOW insert_page(const char* title, int pos);
// @cmember Aggiunge i tags ad una pagina
void add_tag_button(byte pag, TToken_string& tags, byte sel);
// @cmember Aggiunge alla maschera tutti i bottoni per la navigazione tra le pagine // @cmember Aggiunge alla maschera tutti i bottoni per la navigazione tra le pagine
void add_tag_buttons(TToken_string& tags); void set_tab_buttons(TToken_string& tabs);
// @cmember Ritorna il numero del primo campo attivo della pagina con finestra <p w> // @cmember Ritorna il numero del primo campo attivo della pagina con finestra <p w>
int find_first_active(WINDOW w) const; int find_first_active(WINDOW w) const;
@ -126,11 +130,12 @@ protected:
int find_parent_page(const TMask_field& f) const; int find_parent_page(const TMask_field& f) const;
// @cmember Esegue i check del campo corrente // @cmember Esegue i check del campo corrente
bool check_current_field() const; bool check_current_field() const;
// @cmember Mostra la prossima/precedente pagina // @cmember Mostra la prossima/precedente pagina
virtual void next_page(int p); virtual void next_page(int p);
// @cmember Cambia arbitrariamente il nome del file (uso molto raro) // @cmember Cambia arbitrariamente il nome del file (uso molto raro)
void set_source_file(const char* name) { _source_file = name; } void set_source_file(const char* name) { _source_file = name; }
WINDOW notebook() const { return _notebook; }
// @access Public Member // @access Public Member
public: public:
// @cmember Costruttore (crea la maschera leggendo la descrizione dal file .msk) // @cmember Costruttore (crea la maschera leggendo la descrizione dal file .msk)
@ -151,6 +156,8 @@ public:
// @cmember Legge il campo da file // @cmember Legge il campo da file
virtual TMask_field* parse_field(TScanner& scanner); virtual TMask_field* parse_field(TScanner& scanner);
// @cmember Legge il bottone della toolbar da file
virtual TMask_field* parse_tool(TScanner& scanner);
// Aggiunge un campo all'array _field // Aggiunge un campo all'array _field
void add_field(TMask_field* f); void add_field(TMask_field* f);
@ -164,23 +171,19 @@ public:
// @cmember Ritorna il numero della pagina corrente // @cmember Ritorna il numero della pagina corrente
int curr_page() const { return _page; } int curr_page() const { return _page; }
// @cmember Ritorna la finestra della pagina corrente (Usare con attenzione)
WINDOW win() const
{ return _page < 0 ? _pagewin[0] : _pagewin[_page]; }
// @cmember Ritorna la finestra della pagina <p> (Usare con attenzione) // @cmember Ritorna la finestra della pagina <p> (Usare con attenzione)
WINDOW win(int p) const WINDOW page_win(int p) const;
{ return p < 0 ? toolwin() : _pagewin[p]; } // @cmember Ritorna la finestra della pagina corrente
WINDOW curr_win() const;
// @cmember Ritorna il nome del file contentente la maschera // @cmember Ritorna il nome del file contentente la maschera
const TFilename& source_file() const const TFilename& source_file() const { return _source_file; }
{ return _source_file; }
// @cmember Ritorna il numero della maschera nel file (> 0 se spreadsheet) // @cmember Ritorna il numero della maschera nel file (> 0 se spreadsheet)
int number() const int number() const { return _mask_num; }
{ return _mask_num; }
// @cmember Aggiunge alla maschera tutti i bottoni Pag. n // @cmember Aggiunge alla maschera tutti i bottoni Pag.n
void add_default_tag_buttons(); void set_default_tab_buttons();
// @cmember Aggiunge runtime un campo testo alla maschera // @cmember Aggiunge runtime un campo testo alla maschera
TMask_field& add_static (short id, int page, const char* prompt, int x, int y, const char* flags = ""); TMask_field& add_static (short id, int page, const char* prompt, int x, int y, const char* flags = "");
@ -211,6 +214,9 @@ public:
// @cmember Aggiunge runtime un group box alla maschera // @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 = ""); 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 bottone alla toolbar
TButton_tool& add_button_tool(short id, const char* prompt, short bmpup);
// @cmember Ritorna il numero di campi della maschera // @cmember Ritorna il numero di campi della maschera
int fields() const int fields() const
{ return _field.items(); } { return _field.items(); }
@ -246,6 +252,7 @@ public:
virtual void close(); virtual void close();
// @cmember Permette di attivare/disattivare tutta la pagina // @cmember Permette di attivare/disattivare tutta la pagina
virtual void activate(bool on = TRUE); virtual void activate(bool on = TRUE);
virtual void set_focus();
// @cmember Converte un identificatore di campo nella sua posizione // @cmember Converte un identificatore di campo nella sua posizione
int id2pos(short id) const; int id2pos(short id) const;
@ -256,6 +263,8 @@ public:
{ return (TMask_field&)_field[i]; } { return (TMask_field&)_field[i]; }
// @cmember Ritorna il campo contraddistinto dall'identificatore passato // @cmember Ritorna il campo contraddistinto dall'identificatore passato
TMask_field& field(short id) const; TMask_field& field(short id) const;
// @cmember Ritorna il campo corrispondente ad id se c'e'
TMask_field* find_by_id(short id) const;
// @cmember Ritorna il campo corrispondente al FIELD fieldname // @cmember Ritorna il campo corrispondente al FIELD fieldname
TMask_field* find_by_fieldname(const char* fieldname) const; TMask_field* find_by_fieldname(const char* fieldname) const;
// @cmember Ritorna il campo di edit contraddistinto dall'identificatore passato // @cmember Ritorna il campo di edit contraddistinto dall'identificatore passato
@ -437,7 +446,9 @@ public:
int win2page(WINDOW p) const ; int win2page(WINDOW p) const ;
// @cmember Ritorna la finestra della toolbar // @cmember Ritorna la finestra della toolbar
WINDOW toolwin() const WINDOW toolwin() const
{ return _pagewin[MAX_PAGES]; } { return _toolwin; }
WINDOW toolbar() const
{ return _toolbar; }
}; };
// @doc EXTERNAL // @doc EXTERNAL

View File

@ -111,8 +111,6 @@ char TMask_field::TField_Flags::update(const char* f, bool reset)
return *s; return *s;
} }
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
// TMask_field // TMask_field
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
@ -271,6 +269,7 @@ void TMask_field::construct(
_ctl_data._width = len; _ctl_data._width = len;
break; break;
case CLASS_BUTTON_FIELD: case CLASS_BUTTON_FIELD:
case CLASS_BUTTON_TOOL:
_ctl_data._height = len; _ctl_data._height = len;
_ctl_data._width = width <= 0 ? 12 : width; _ctl_data._width = width <= 0 ? 12 : width;
_ctl_data._bmp_up = bmp_up; _ctl_data._bmp_up = bmp_up;
@ -334,7 +333,8 @@ void TMask_field::construct(TScanner& scanner, WINDOW parent)
void TMask_field::destroy() void TMask_field::destroy()
{ {
_ctl->destroy(); if (_ctl != NULL)
_ctl->destroy();
} }
void TMask_field::set_group(byte group) void TMask_field::set_group(byte group)
@ -345,7 +345,6 @@ void TMask_field::set_group(byte group)
_groups->set(0L); _groups->set(0L);
} }
bool TMask_field::parse_item(TScanner& scanner) bool TMask_field::parse_item(TScanner& scanner)
{ {
if (scanner.key() == "PR") // PROMPT if (scanner.key() == "PR") // PROMPT
@ -569,7 +568,10 @@ bool TMask_field::on_key(KEY key)
return TRUE; return TRUE;
} }
#define build_msg() char* _msg = (char*)(const char*)_ctl_data._park;va_list argptr;va_start(argptr,fmt);vsprintf(_msg,fmt,argptr);va_end(argptr) #define build_msg() \
char* _msg = _ctl_data._park.get_buffer(256); \
va_list argptr; va_start(argptr,fmt); \
vsprintf(_msg,fmt,argptr);va_end(argptr)
// @doc EXTERNAL // @doc EXTERNAL
@ -1157,7 +1159,7 @@ void TButton_field::create(WINDOW parent)
if (mess) if (mess)
{ {
TToken_string msg(mess->get(0), ','); TToken_string msg(mess->get(0), ',');
const TString m(msg.get(0)); const TFixed_string m = msg.get(0);
if (m == "EXIT") if (m == "EXIT")
{ {
_exit_key = msg.get_int(); _exit_key = msg.get_int();
@ -4548,10 +4550,8 @@ void TCurrency_field::create(WINDOW w)
TEdit_field::create(w); TEdit_field::create(w);
} }
TCurrency_field::TCurrency_field(TMask* m) TCurrency_field::TCurrency_field(TMask* m) : TEdit_field(m)
: TEdit_field(m) { }
{
}
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
// List_field // List_field

View File

@ -3290,3 +3290,50 @@ void TSheet_field::set_userput(SHEET_USERGETPUT handler)
{ {
_userput = handler; _userput = handler;
} }
bool TSheet_field::esporta() const
{
TFilename name("tabella.xls");
FILE_SPEC fs;
xvt_fsys_convert_str_to_fspec(name, &fs);
if (xvt_dm_post_file_save(&fs, TR("Selezionare il file di destinazione")))
xvt_fsys_convert_fspec_to_str(&fs, name.get_buffer(), name.size());
if (name.full())
{
ofstream xls(name);
const char sep = '\t';
TToken_string tab(128, sep);
TString str;
int columns = 0;
for (columns = 0; ; columns++)
{
str = get_column_header(columns);
if (str.not_empty())
tab.add(str);
else
break;
}
xls << tab << endl;
for (long n = 0; n < items(); n++)
{
const TToken_string& r = ((TSheet_field*)this)->row(n);
tab = r;
tab.replace(r.separator(), sep);
tab.separator(sep);
for (int c = 0; tab.get(c, str); c++)
{
if (real::is_real(str))
{
xvt_str_number_format(str.get_buffer(), str.size());
tab.add(str, c);
}
}
xls << tab << endl;
}
}
return true;
}

View File

@ -269,6 +269,8 @@ public:
// @cmember Trasferisce i valori dalla riga alla maschera <p n> // @cmember Trasferisce i valori dalla riga alla maschera <p n>
void update_mask(int n) { row2mask(n, row(n)); } void update_mask(int n) { row2mask(n, row(n)); }
bool esporta() const;
// @cmember Costruttore // @cmember Costruttore
TSheet_field(TMask* m); TSheet_field(TMask* m);
// @cmember Distruttore // @cmember Distruttore

View File

@ -450,8 +450,6 @@ void TFile_info::auto_close()
const bool yes = is_open() && !(is_locked() || is_exclusive()); const bool yes = is_open() && !(is_locked() || is_exclusive());
if (yes) if (yes)
close_low(); close_low();
else
NFCHECK("Can't auto_close file '%s'", (const char*)_name);
} }
int TFile_info::auto_open(int key) int TFile_info::auto_open(int key)
@ -807,7 +805,7 @@ int TFile_manager::close_closeable()
TFile_info& i = fileinfo(n); TFile_info& i = fileinfo(n);
if (i.is_open()) if (i.is_open())
{ {
if (!i.is_exclusive()) if (!i.is_locked() && !i.is_exclusive())
{ {
cache().discard(i.num()); cache().discard(i.num());
i.auto_close(); i.auto_close();
@ -826,7 +824,7 @@ void TFile_manager::close_all()
const int zoccolo_duro = close_closeable(); const int zoccolo_duro = close_closeable();
#ifdef DBG #ifdef DBG
if (zoccolo_duro > 0) if (zoccolo_duro > 0)
NFCHECK("%d files refuse can't be closed!", zoccolo_duro); NFCHECK("%d files refuse to be closed!", zoccolo_duro);
#endif #endif
for (int n = _recinfo.last(); n > 0; n = _recinfo.pred(n)) for (int n = _recinfo.last(); n > 0; n = _recinfo.pred(n))
@ -933,14 +931,13 @@ const TString& TFirm::codice_valuta() const
} }
const TString& TFirm::ragione_sociale() const const TString& TFirm::ragione_sociale() const
{ {
return get(NDT_RAGSOC); return get(NDT_RAGSOC);
} }
TFirm::TFirm(long code) TFirm::TFirm(long code)
{ {
read(code); read(code);
} }
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////

View File

@ -35,7 +35,7 @@ TIndwin::TIndwin(long tot, const char* txt, bool cancel, bool bar, int div)
const int y = _indwin_count == 0 ? 3 : 12; const int y = _indwin_count == 0 ? 3 : 12;
set_win(create_interface(TASK_WIN, -1, y, hor, ver, TR("Elaborazione in corso"), this, FALSE)); set_win(create_interface(TASK_WIN, -1, y, hor, ver, TR("Elaborazione in corso"), this/*, FALSE*/));
_text = new TMultiline_control(win(), DLG_NULL, 1, 0, hor-2, lines+1, 512, "CD", ""); _text = new TMultiline_control(win(), DLG_NULL, 1, 0, hor-2, lines+1, 512, "CD", "");
_text->set_read_only(); _text->set_read_only();

View File

@ -1613,6 +1613,16 @@ const char* real::stringa (int len, int dec, char pad) const
return str; return str;
} }
// Certified 99%
const char* real::stringe(int len, int dec, char pad) const
{
char* str = (char*)string(len, dec, pad);
if (dec > 0 || dec == UNDEFINED)
xvt_str_number_format(str, len > 0 ? len+1 : 50);
return str;
}
void real::print_on(ostream& out) const void real::print_on(ostream& out) const
{ {
out << string(); out << string();

View File

@ -61,9 +61,12 @@ public:
static bool is_null(const char* n); static bool is_null(const char* n);
// @cmember Trasforma un reale in stringa // @cmember Trasforma un reale in stringa
const char* string(int len = 0, int dec = UNDEFINED, char pad = ' ') const; const char* string(int len = 0, int dec = UNDEFINED, char pad = ' ') const;
// @cmember Trasforma un reale in stringa (chiama <mf real::string>), ma // @cmember Trasforma un reale in stringa (chiama <mf real::string>),
// ritorna il formato italiano // ma ritorna il formato italiano
const char* stringa(int len = 0, int dec = UNDEFINED, char pad = ' ') const; const char* stringa(int len = 0, int dec = UNDEFINED, char pad = ' ') const;
// @cmember Trasforma un reale in stringa (chiama <mf real::string>),
// ma ritorna il formato atteso da Excel
const char* stringe(int len = 0, int dec = UNDEFINED, char pad = ' ') const;
// @cmember Ritorna la stringa con il formato passato // @cmember Ritorna la stringa con il formato passato
const char* string(const char* picture) const; const char* string(const char* picture) const;
// @cmember Ritorna la stringa con il formato passato // @cmember Ritorna la stringa con il formato passato

View File

@ -34,6 +34,17 @@ static bool is_numeric(const char* str)
return true; return true;
} }
static void num_reformat(TString& val)
{
xvt_str_number_format(val.get_buffer(), val.size());
const int comma = val.find(',');
const int point = val.find('.');
if (comma >= 0 && comma < point)
val.strip(","); else
if (point >= 0 && point < comma)
val.strip(".");
}
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
// TRecordset // TRecordset
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
@ -170,14 +181,20 @@ bool TRecordset::save_as_silk(const char* path)
{ {
out << ";X" << (c+1) << ";K"; out << ";X" << (c+1) << ";K";
var.as_string(val); var.as_string(val);
if (var.type() == _alfafld || var.type() == _datefld) switch (var.type())
{ {
val.rtrim(); case _alfafld:
val.replace('"', '\''); case _datefld:
out << '"' << val << '"'; {
} val.rtrim();
else val.replace('"', '\'');
out << '"' << val << '"';
}
break;
default:
out << val; out << val;
break;
}
} }
out << endl; out << endl;
} }
@ -209,7 +226,11 @@ bool TRecordset::save_as_text(const char* path)
if (val.find('\n') >= 0 || val.find('\t') >= 0) if (val.find('\n') >= 0 || val.find('\t') >= 0)
out << unesc(val); // Evitiamo doppi separatori di campo e record out << unesc(val); // Evitiamo doppi separatori di campo e record
else else
{
if (var.type() == _realfld)
num_reformat(val);
out << val; out << val;
}
} }
} }
out << endl; out << endl;

View File

@ -1325,6 +1325,12 @@ void TRelation_application::main_loop()
if (!save(TRUE)) if (!save(TRUE))
k = K_ENTER; k = K_ENTER;
break; break;
case K_F1:
dispatch_e_menu(M_HELP_CONTENTS);
break;
case K_F2:
dispatch_e_menu(M_FILE_ABOUT);
break;
case K_ENTER: case K_ENTER:
if (_lnflag && _curr_transaction != TRANSACTION_RUN) if (_lnflag && _curr_transaction != TRANSACTION_RUN)
{ {

View File

@ -19,12 +19,6 @@
static bool _print_aborted = false; static bool _print_aborted = false;
#if _MSC_VER >= 1400
#define SAFE_SCAN sscanf_s
#else
#define SAFE_SCAN sscanf
#endif
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
// Utility // Utility
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
@ -361,6 +355,13 @@ void TPrint_preview_window::update()
TString80 str; str.format(FR("Pagina %u di %u"), _page, _book->pages()); TString80 str; str.format(FR("Pagina %u di %u"), _page, _book->pages());
statbar_set_title(TASK_WIN, str); statbar_set_title(TASK_WIN, str);
TMask& m = owner().mask();
m.enable(DLG_FIRSTREC, _page > 1);
m.enable(DLG_PREVREC, _page > 1);
m.enable(DLG_FINDREC, _book->pages() > 1);
m.enable(DLG_NEXTREC, _page < _book->pages());
m.enable(DLG_LASTREC, _page < _book->pages());
} }
#define POPUP_FIRST 20883 #define POPUP_FIRST 20883
@ -697,6 +698,7 @@ TPreview_mask::TPreview_mask(TBook* book) : _book(book)
read_mask("bagn008", 0, -1); read_mask("bagn008", 0, -1);
set_handlers(); set_handlers();
/* Roba obsoleta con le moderne toolbar
int pos = id2pos(DLG_FINDREC); int pos = id2pos(DLG_FINDREC);
if (pos >= 0 && id2pos(DLG_FIRSTREC) >= 0) //se e' un bottone pentapartito... if (pos >= 0 && id2pos(DLG_FIRSTREC) >= 0) //se e' un bottone pentapartito...
{ {
@ -740,6 +742,7 @@ TPreview_mask::TPreview_mask(TBook* book) : _book(book)
} }
} }
} }
*/
} }
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
@ -1222,9 +1225,7 @@ bool TBook::print_page(TWindow& win, size_t page)
pw.alinks().destroy(); pw.alinks().destroy();
} }
const int buffer_size = 1024; TToken_string str(1024, '=');
TString str(buffer_size);
char* buffer = str.get_buffer();
TString_array paragrafo; // Testo completo di un campo TString_array paragrafo; // Testo completo di un campo
@ -1247,7 +1248,7 @@ bool TBook::print_page(TWindow& win, size_t page)
while (!ifs.eof()) while (!ifs.eof())
{ {
ifs.getline(buffer, str.size()); ifs.getline(str.get_buffer(), str.size());
if (str.starts_with("</page")) if (str.starts_with("</page"))
break; break;
@ -1322,9 +1323,9 @@ bool TBook::print_page(TWindow& win, size_t page)
} }
if (str.starts_with("<brush ")) if (str.starts_with("<brush "))
{ {
COLOR col = COLOR_BLACK; // <brush color=%u pattern=%u />
PAT_STYLE pat = PAT_SOLID; COLOR col = str.get_long(1);
SAFE_SCAN(str, "<brush color=%u pattern=%u />", &col, &pat); PAT_STYLE pat = (PAT_STYLE)str.get_long();
if (pat <= PAT_HOLLOW) if (pat <= PAT_HOLLOW)
win.hide_brush(); win.hide_brush();
else else
@ -1346,8 +1347,11 @@ bool TBook::print_page(TWindow& win, size_t page)
} }
if (str.starts_with("<frame ")) if (str.starts_with("<frame "))
{ {
long x, y, dx, dy; // <frame x=ld y=%ld dx=%ld dy=%ld />
SAFE_SCAN(str, "<frame x=%ld y=%ld dx=%ld dy=%ld />", &x, &y, &dx, &dy); const long x = str.get_long(1);
const long y = str.get_long();
const long dx= str.get_long();
const long dy= str.get_long();
_rect.set(x, y, dx, dy); _rect.set(x, y, dx, dy);
win.log2dev(_rect, rct); win.log2dev(_rect, rct);
continue; continue;
@ -1398,10 +1402,10 @@ bool TBook::print_page(TWindow& win, size_t page)
} }
if (str.starts_with("<pen ")) if (str.starts_with("<pen "))
{ {
COLOR col = COLOR_BLACK; // <pen color=%u width=%d style=%u />
int width = 0; COLOR col = str.get_long(1);
PEN_STYLE style = P_SOLID; int width = str.get_int();
SAFE_SCAN(str, "<pen color=%u width=%d style=%u />", &col, &width, &style); PEN_STYLE style = (PEN_STYLE)str.get_int();
if (width < 0) if (width < 0)
win.hide_pen(); win.hide_pen();
else else
@ -1433,7 +1437,7 @@ bool TBook::print_page(TWindow& win, size_t page)
paragrafo.destroy(); paragrafo.destroy();
while (!ifs.eof()) while (!ifs.eof())
{ {
ifs.getline(buffer, str.size()); ifs.getline(str.get_buffer(), str.size());
if (str == "</text>") if (str == "</text>")
break; break;
paragrafo.add(str); paragrafo.add(str);
@ -1446,21 +1450,17 @@ bool TBook::print_page(TWindow& win, size_t page)
} }
if (str.starts_with("<text_align ")) if (str.starts_with("<text_align "))
{ {
#if _MSC_VER >= 1400 // <text_align horizontal=%c vertical=%c />
sscanf_s(str, "<text_align horizontal=%c vertical=%c />", _horizontal_alignment = str.get_char(1);
&_horizontal_alignment, sizeof(_horizontal_alignment), _vertical_alignment = str.get_char();
&_vertical_alignment, sizeof(_vertical_alignment));
#else
sscanf(str, "<text_align horizontal=%c vertical=%c />",
&_horizontal_alignment, &_vertical_alignment);
#endif
continue; continue;
} }
if (str.starts_with("<text_color")) if (str.starts_with("<text_color"))
{ {
COLOR fore, back; // <text_color fore=%u back=%u opaque=%d />
int opaque; const COLOR fore = str.get_long(1);
SAFE_SCAN(str, "<text_color fore=%u back=%u opaque=%d />", &fore, &back, &opaque); const COLOR back = str.get_long();
const int opaque = str.get_int();
win.set_color(fore, back); win.set_color(fore, back);
win.set_opaque_text(opaque != 0); win.set_opaque_text(opaque != 0);
continue; continue;
@ -1494,8 +1494,7 @@ bool TBook::export_text(const TFilename& fname)
if (fname.ends_with(".pdf", true)) if (fname.ends_with(".pdf", true))
return export_pdf(fname); return export_pdf(fname);
TString str(1024); TToken_string str(1024, '=');
char* buffer = str.get_buffer();
ifstream ifs(_file); ifstream ifs(_file);
ofstream ofs(fname); ofstream ofs(fname);
@ -1507,12 +1506,15 @@ bool TBook::export_text(const TFilename& fname)
while (!ifs.eof()) while (!ifs.eof())
{ {
ifs.getline(buffer, str.size()); ifs.getline(str.get_buffer(), str.size());
if (str.starts_with("<frame ")) if (str.starts_with("<frame "))
{ {
long x, y, dx, dy; // <frame x=%ld y=%ld dx=%ld dy=%ld />
SAFE_SCAN(str, "<frame x=%ld y=%ld dx=%ld dy=%ld />", &x, &y, &dx, &dy); const long x = str.get_long(1);
const long y = str.get_long();
const long dx= str.get_long();
const long dy= str.get_long();
row = y * lpi() / res.y; row = y * lpi() / res.y;
col = x * cpi() / res.x; col = x * cpi() / res.x;
wid = dx * cpi() / res.x; wid = dx * cpi() / res.x;
@ -1595,7 +1597,7 @@ bool TBook::export_text(const TFilename& fname)
TString stringona; TString stringona;
while (!ifs.eof()) while (!ifs.eof())
{ {
ifs.getline(buffer, str.size()); ifs.getline(str.get_buffer(), str.size());
if (str == "</text>") if (str == "</text>")
break; break;
stringona << str << '\n'; stringona << str << '\n';
@ -1619,14 +1621,9 @@ bool TBook::export_text(const TFilename& fname)
} else } else
if (str.starts_with("<text_align ")) if (str.starts_with("<text_align "))
{ {
#if _MSC_VER >= 1400 // <text_align horizontal=%c vertical=%c />
sscanf_s(str, "<text_align horizontal=%c vertical=%c />", _horizontal_alignment = str.get_char(1);
&_horizontal_alignment, sizeof(_horizontal_alignment), _vertical_alignment = str.get_char();
&_vertical_alignment, sizeof(_vertical_alignment));
#else
sscanf(str, "<text_align horizontal=%c vertical=%c />",
&_horizontal_alignment, &_vertical_alignment);
#endif
} }
} }
@ -1676,8 +1673,7 @@ void TBook::split_file(int colonne)
close_output(); // Chiudo file di stampa eventualmente aperto close_output(); // Chiudo file di stampa eventualmente aperto
ifstream ifs(_file); // Apro file di stampa da splittare ifstream ifs(_file); // Apro file di stampa da splittare
TString str(1024); TToken_string str(1024, '=');
char* buffer = str.get_buffer();
for (unsigned int page = 1; page <= pages(); page++) for (unsigned int page = 1; page <= pages(); page++)
{ {
if (!pi.setstatus(page)) if (!pi.setstatus(page))
@ -1690,7 +1686,7 @@ void TBook::split_file(int colonne)
ifs.seekg(pos); ifs.seekg(pos);
while (!ifs.eof()) while (!ifs.eof())
{ {
ifs.getline(buffer, str.size()); ifs.getline(str.get_buffer(), str.size());
if (str.starts_with("<page ")) if (str.starts_with("<page "))
{ {
@ -1700,8 +1696,11 @@ void TBook::split_file(int colonne)
} else } else
if (str.starts_with("<frame ")) if (str.starts_with("<frame "))
{ {
long x, y, dx, dy; // <frame x=%ld y=%ld dx=%ld dy=%ld />
SAFE_SCAN(str, "<frame x=%ld y=%ld dx=%ld dy=%ld />", &x, &y, &dx, &dy); const long x = str.get_long(1);
const long y = str.get_long();
const long dx= str.get_long();
const long dy= str.get_long();
str.format("<frame x=%ld y=%ld dx=%ld dy=%ld />", x-rct_page.x, y, dx, dy); str.format("<frame x=%ld y=%ld dx=%ld dy=%ld />", x-rct_page.x, y, dx, dy);
} else } else
if (str.starts_with("</page ")) if (str.starts_with("</page "))
@ -1742,7 +1741,6 @@ void TBook::join_file(int pps)
TFilename temp; temp.temp(); TFilename temp; temp.temp();
ofstream out(temp); ofstream out(temp);
close_output(); // Chiudo file di stampa eventualmente aperto close_output(); // Chiudo file di stampa eventualmente aperto
ifstream ifs(_file); // Apro file di stampa da splittare ifstream ifs(_file); // Apro file di stampa da splittare
@ -1753,16 +1751,15 @@ void TBook::join_file(int pps)
int out_page = 0; int out_page = 0;
int off_page = 0; int off_page = 0;
TString str(1024); TToken_string str(1024, '=');
char* buffer = str.get_buffer();
while (!ifs.eof()) while (!ifs.eof())
{ {
ifs.getline(buffer, str.size()); ifs.getline(str.get_buffer(), str.size());
if (str.starts_with("<page ")) if (str.starts_with("<page "))
{ {
sscanf(str, "<page number=%d", &in_page); // <page number=%d />
// const int sub = (in_page % pps) - 1; in_page = str.get_int(1);
const int sub = ((in_page - 1) % pps); const int sub = ((in_page - 1) % pps);
off_page = sub * logical_page_height() / pps; off_page = sub * logical_page_height() / pps;
if (sub == 0) if (sub == 0)
@ -1779,8 +1776,11 @@ void TBook::join_file(int pps)
} else } else
if (str.starts_with("<frame ") && off_page > 0) if (str.starts_with("<frame ") && off_page > 0)
{ {
long x, y, dx, dy; // <frame x=ld y=%ld dx=%ld dy=%ld />
sscanf(str, "<frame x=%ld y=%ld dx=%ld dy=%ld />", &x, &y, &dx, &dy); const long x = str.get_long(1);
const long y = str.get_long();
const long dx= str.get_long();
const long dy= str.get_long();
str.format("<frame x=%ld y=%ld dx=%ld dy=%ld />", x, y+off_page, dx, dy); str.format("<frame x=%ld y=%ld dx=%ld dy=%ld />", x, y+off_page, dx, dy);
} else } else
if (str.starts_with("</page ")) if (str.starts_with("</page "))

View File

@ -142,4 +142,4 @@ void advanced_draw_text_line(TWindow& win, const char* text, const RCT& r, char
void advanced_draw_paragraph(TWindow& win, const TString_array& text, const RCT& r, void advanced_draw_paragraph(TWindow& win, const TString_array& text, const RCT& r,
char halign, char valign, int default_row_height); char halign, char valign, int default_row_height);
#endif #endif

View File

@ -1,5 +1,6 @@
#define XI_INTERNAL #define XI_INTERNAL
#include <xinclude.h> #include <xinclude.h>
#include <statbar.h>
#include <applicat.h> #include <applicat.h>
#include <colors.h> #include <colors.h>
@ -7,6 +8,7 @@
#include <controls.h> #include <controls.h>
#include <relation.h> #include <relation.h>
#include <sheet.h> #include <sheet.h>
#include <toolfld.h>
#include <urldefid.h> #include <urldefid.h>
#include <utility.h> #include <utility.h>
#include <xvtility.h> #include <xvtility.h>
@ -85,6 +87,7 @@ public:
void load_columns_order(const TEdit_field& f); void load_columns_order(const TEdit_field& f);
void update(long n = -1); void update(long n = -1);
bool head(int c, TString& str) const;
TSheet_control(WINDOW sheet, short cid, short x, short y, short dx, short dy, TSheet_control(WINDOW sheet, short cid, short x, short y, short dx, short dy,
const char* flags, const char* head); const char* flags, const char* head);
@ -270,24 +273,19 @@ TSheet_control::TSheet_control(
// Se la finestra e' troppo grande riducila // Se la finestra e' troppo grande riducila
RCT cli; xvt_vobj_get_client_rect(parent, &cli); RCT cli; xvt_vobj_get_client_rect(parent, &cli);
RCT xc = cli; xi_pu_to_fu(itf, (XinPoint *) &xc, 2); xi_get_rect(_obj, (XinRect*)&rct);
if (xc.right > 45 * XI_FU_MULTIPLE) // Deve contenere almeno 4 bottoni
{
xi_get_rect(_obj, (XinRect *) &rct);
const int width = (rct.right-rct.left) + 2*XI_FU_MULTIPLE; const int extra = (cli.right - (rct.right-rct.left+2*XI_FU_MULTIPLE)) / 2;
if (width < cli.right) if (extra > XI_FU_MULTIPLE)
{ {
RCT out; xvt_vobj_get_outer_rect(parent, &out); WINDOW main_win = _sheet->win();
RCT rct; xvt_vobj_get_outer_rect(main_win, &cli);
rct.left = out.left + (cli.right - width) / 2; cli.left += extra;
rct.right = rct.left + width; cli.right -= extra;
rct.top = out.top; // cli had left = 0 and top = 0 xvt_vobj_move(main_win, &cli);
rct.bottom = rct.top + cli.bottom; xvt_vobj_get_client_rect(parent, &cli);
xvt_vobj_move(parent, &rct); }
}
}
int num; int num;
XI_OBJ** column = xi_get_member_list(_obj, &num); XI_OBJ** column = xi_get_member_list(_obj, &num);
for (i = 0; i < num; i++) for (i = 0; i < num; i++)
@ -315,7 +313,6 @@ int TSheet_control::rec2row(long record) const
return r; return r;
} }
// Converts a row number in the correspondig record number // Converts a row number in the correspondig record number
long TSheet_control::row2rec(int row) const long TSheet_control::row2rec(int row) const
{ {
@ -462,7 +459,15 @@ XI_OBJ* TSheet_control::find_column(
return c >= 0 ? column[c] : NULL; return c >= 0 ? column[c] : NULL;
} }
bool TSheet_control::head(int c, TString& str) const
{
XI_OBJ* col = find_column(c);
if (col != NULL)
xi_get_text(col, str.get_buffer(80), 80);
else
str.cut(0);
return col != NULL;
}
void TSheet_control::enable_check(bool on) void TSheet_control::enable_check(bool on)
{ {
@ -670,7 +675,7 @@ void TSheet_control::set_columns_order(TToken_string* order)
if (col) if (col)
{ {
xi_move_column(col, index); xi_move_column(col, index);
RCT rct; xi_get_rect(col, (XinRect *) &rct); RCT rct; xi_get_rect(col, (XinRect*)&rct);
if (_default_width[index] != rct.right - rct.left) if (_default_width[index] != rct.right - rct.left)
xi_column_set_pixel_width(col, _default_width[index]-offset); xi_column_set_pixel_width(col, _default_width[index]-offset);
} }
@ -724,13 +729,13 @@ bool TSheet_control::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
break; break;
case XIE_GET_PREV: case XIE_GET_PREV:
case XIE_GET_NEXT: case XIE_GET_NEXT:
{ {
const long n = xiev->v.rec_request.spec_rec + (xiev->type == XIE_GET_NEXT ? +1 : -1) ; const long n = xiev->v.rec_request.spec_rec + (xiev->type == XIE_GET_NEXT ? +1 : -1) ;
if (n < 0 || n >= items()) if (n < 0 || n >= items())
refused = TRUE; refused = TRUE;
else else
xiev->v.rec_request.data_rec = n; xiev->v.rec_request.data_rec = n;
} }
break; break;
case XIE_CELL_REQUEST: case XIE_CELL_REQUEST:
{ {
@ -778,7 +783,7 @@ bool TSheet_control::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
if (_disabled[rec]) if (_disabled[rec])
{ {
xiev->v.cell_request.color = NORMAL_COLOR; xiev->v.cell_request.color = DISABLED_COLOR;
xiev->v.cell_request.back_color = DISABLED_BACK_COLOR; xiev->v.cell_request.back_color = DISABLED_BACK_COLOR;
} }
else else
@ -975,11 +980,10 @@ void TQuery_field::create(WINDOW parent)
{ {
_ctl = new TSheet_control(parent, dlg(), _ctl = new TSheet_control(parent, dlg(),
_ctl_data._x, _ctl_data._y, _ctl_data._x, _ctl_data._y,
_ctl_data._width, _ctl_data._size, _ctl_data._width, (int)_ctl_data._size,
_ctl_data._flags, _ctl_data._prompt); _ctl_data._flags, _ctl_data._prompt);
} }
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
// TSheet // TSheet
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
@ -989,26 +993,42 @@ void TQuery_field::create(WINDOW parent)
TSheet::TSheet(short x, short y, short dx, short dy, TSheet::TSheet(short x, short y, short dx, short dy,
const char* title, const char* head, const char* title, const char* head,
byte buttons, short sht_y, WINDOW parent) byte buttons, short sht_y, WINDOW parent)
: TMask(title, sht_y == 0 ? 1 : 2, dx, dy, x, y, parent), : TMask(title, 1, dx, dy, x, y, parent),
_sheet(NULL), _select_row(-1), _parked(-1) _sheet(NULL), _select_row(-1), _parked(-1)
{ {
if (sht_y > 0) // Crea notebook se TBrowse_sheet
{
create_book(false); // Crea notebook e poi ...
create_page(title, 0); // ... la sua prima pagina
}
create_bar(1); // Crea toolbar in alto
TQuery_field* qf = new TQuery_field(this); TQuery_field* qf = new TQuery_field(this);
qf->construct(DLG_QUERY, head, 1, sht_y, -3, win(), "", -1); qf->construct(DLG_QUERY, head, 1, sht_y, 0, page_win(0), "", 0);
fields_array().add(qf); fields_array().add(qf);
_sheet = qf->sheet(); _sheet = qf->sheet();
if (!(buttons & 0x10)) add_button(DLG_SELECT, TR("~Selezione"), K_ENTER); if (!(buttons & 0x10))
add_button(DLG_SELECT, TR("~Selezione"), K_ENTER, BMP_OK);
if (check_enabled()) if (check_enabled())
{ {
add_button(DLG_USER, TR("~Tutti"), 0); add_button(DLG_USER, TR("~Tutti"), 0, BMP_SELECT);
set_handler(DLG_USER, tutti_handler); set_handler(DLG_USER, tutti_handler);
} }
if (buttons & 0x01) add_button(DLG_LINK, TR("Colle~ga"), K_CTRL+'G', BMP_LINK); if (buttons & 0x01) add_button(DLG_LINK, TR("Colle~ga"), K_CTRL+'G', BMP_LINK);
if (buttons & 0x02) add_button(DLG_NEWREC, TR("~Nuovo"), K_INS, BMP_NEWREC, BMP_NEWRECDN); if (buttons & 0x02) add_button(DLG_NEWREC, TR("~Nuovo"), K_INS, BMP_NEWREC);
if (buttons & 0x04) add_button(DLG_DELREC, "", K_DEL); if (buttons & 0x04) add_button(DLG_DELREC, "~Elimina", K_DEL, BMP_DELREC);
if (buttons & 0x08) add_button(DLG_QUIT, "", K_ESC); if (!check_enabled())
else add_button(DLG_CANCEL, "", K_ESC); {
add_button(DLG_SAVEREC, TR("~Esporta"), 0, BMP_SAVEREC);
set_handler(DLG_SAVEREC, export_handler);
}
if (buttons & 0x08) add_button(DLG_QUIT, "Fine", K_ESC, BMP_QUIT);
else add_button(DLG_CANCEL, "Annulla", K_ESC, BMP_CANCEL);
xvt_toolbar_realize(toolbar()); // Necessario per calcolare dimensioni corrette dello sheet
} }
TSheet::~TSheet() TSheet::~TSheet()
@ -1046,14 +1066,27 @@ void TSheet::add_button(
short bmp_up, // @parm Bitmap normale short bmp_up, // @parm Bitmap normale
short bmp_dn) // @parm Bitmap premuta short bmp_dn) // @parm Bitmap premuta
{ {
TButton_field& butt = TMask::add_button(id, 0, caption, 0, -1, 11, 2, if (bmp_up <= 0)
"", bmp_up, bmp_dn); {
butt.set_exit_key(key); if (toolwin() == NULL_WIN)
create_bar(-2); // Forza la creazione della bottom bar
TButton_field& butt = TMask::add_button(id, MAX_PAGES, caption, 0, -1, 11, 2);
butt.set_exit_key(key);
}
else
{
if (toolbar() == NULL_WIN)
create_bar(1); // Forza la creazione della top bar
TButton_tool& butt = add_button_tool(id, caption, bmp_up);
butt.set_exit_key(key);
}
} }
bool TSheet::get_cell_colors(int row, int col, COLOR& fore, COLOR& back) const bool TSheet::get_cell_colors(int row, int col, COLOR& fore, COLOR& back) const
{ {
fore = back = 0; // Default colors fore = back = 0; // Default colors
if (row & 1)
back = REQUIRED_BACK_COLOR;
return false; // Not assigned return false; // Not assigned
} }
@ -1062,40 +1095,50 @@ void TSheet::repos_buttons() const
if (_sheet == NULL) if (_sheet == NULL)
return; // Sono ancora in fase di creazione: aspetta! return; // Sono ancora in fase di creazione: aspetta!
RCT br; WINDOW btnwin = toolwin(); // was win()
int buttons = 0, f; RCT br, wr;
for (f = fields()-1; f >= 0; f--) int buttons = 0;
{ FOR_EACH_MASK_FIELD((*this), f, c)
TMask_field& c = fld(f); {
if (c.is_kind_of(CLASS_BUTTON_FIELD)) if (c->parent() == btnwin && c->is_kind_of(CLASS_BUTTON_FIELD))
{ {
if (buttons == 0) if (buttons == 0)
c.get_rect(br); c->get_rect(br);
buttons++; buttons++;
} }
} }
RCT wr; xvt_vobj_get_client_rect(win(), &wr); if (buttons > 0)
const short width = br.right - br.left; {
const short height = br.bottom - br.top; xvt_vobj_get_client_rect(btnwin, &wr);
const short width = br.right - br.left;
int space = (wr.right - buttons * width) / (buttons+1); const short height = br.bottom - br.top;
if (space < 0) space = 0;
int x = space; int space = (wr.right - buttons * width) / (buttons+1);
const int y = wr.bottom - height - XI_FU_MULTIPLE; if (space < 0) space = 0;
int x = space;
const int y = (wr.bottom - height) / 2;
for (f = 0; buttons > 0; f++) FOR_EACH_MASK_FIELD((*this), f, c)
{ {
TMask_field& c = fld(f); if (c->parent() == btnwin && c->is_kind_of(CLASS_BUTTON_FIELD))
if (c.is_kind_of(CLASS_BUTTON_FIELD)) {
{ buttons--;
buttons--; const PNT p = { y, x };
const PNT p = { y, x }; xvt_rect_set_pos(&br, p);
xvt_rect_set_pos(&br, p); c->set_rect(br);
c.set_rect(br); x += space+width;
x += space+width; }
} }
} }
// Aggiusta anche lo spreadsheet
TMask_field& s = field(DLG_QUERY);
xvt_vobj_get_client_rect(s.parent(), &wr);
s.get_rect(br);
// br.right = wr.right - br.left + 2*CHARX;
br.bottom = wr.bottom - br.left;
s.set_rect(br);
} }
void TSheet::force_update(int r) void TSheet::force_update(int r)
@ -1210,6 +1253,9 @@ bool TSheet::on_key(KEY key)
{ {
switch(key) switch(key)
{ {
case K_CTRL+'E':
export_handler(field(DLG_SAVEREC), K_SPACE);
break;
case K_CTRL+'T': case K_CTRL+'T':
tutti_handler(field(DLG_USER), K_SPACE); tutti_handler(field(DLG_USER), K_SPACE);
break; break;
@ -1265,7 +1311,8 @@ TToken_string& TSheet::row(
// @comm Se viene passato un numero di riga minore di 1 viene ritornato il contenuto della riga // @comm Se viene passato un numero di riga minore di 1 viene ritornato il contenuto della riga
// selezionata. // selezionata.
{ {
if (n < 0) n = selected(); if (n < 0)
n = selected();
if (n != _parked) if (n != _parked)
get_row(_parked = n, _park); get_row(_parked = n, _park);
return _park; return _park;
@ -1282,6 +1329,56 @@ bool TSheet::tutti_handler(TMask_field& f, KEY k)
return true; return true;
} }
bool TSheet::export_handler(TMask_field& f, KEY k)
{
if (k == K_SPACE)
{
TSheet& s = (TSheet&)f.mask();
FILE_SPEC fs;
TFilename name;
s.get_caption(name); name.ext("xls");
xvt_fsys_convert_str_to_fspec(name, &fs);
if (xvt_dm_post_file_save(&fs, TR("Selezionare il file di destinazione")))
{
xvt_fsys_convert_fspec_to_str(&fs, name.get_buffer(), name.size());
ofstream xls(name);
const char sep = '\t';
TToken_string tab(128, sep);
TString80 str;
int columns = 0;
for (columns = 0; ; columns++)
{
if (s._sheet->head(columns, str))
tab.add(str);
else
break;
}
xls << tab << endl;
for (long n = 0; n < s.items(); n++)
{
const TToken_string& r = s.row(n);
tab = r;
tab.replace(r.separator(), sep);
tab.separator(sep);
for (int c = 0; c < columns; c++)
{
const char ct = s._sheet->column_type(c);
if (ct == 'P' || ct == 'V')
{
tab.get(c, str);
xvt_str_number_format(str.get_buffer(), str.size());
tab.add(str, c);
}
}
xls << tab << endl;
}
}
}
return true;
}
void TSheet::save_columns_order(const TEdit_field& field) void TSheet::save_columns_order(const TEdit_field& field)
{ sheet().save_columns_order(field); } { sheet().save_columns_order(field); }
@ -1291,7 +1388,6 @@ void TSheet::set_columns_order(TToken_string* col)
void TSheet::load_columns_order(const TEdit_field& field) void TSheet::load_columns_order(const TEdit_field& field)
{ sheet().load_columns_order(field); } { sheet().load_columns_order(field); }
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
// TArray_sheet // TArray_sheet
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
@ -1300,11 +1396,13 @@ TArray_sheet::TArray_sheet(short x, short y, short dx, short dy, const char* cap
const char* head, byte buttons, short sht_y) const char* head, byte buttons, short sht_y)
: TSheet(x, y, dx, dy, caption, head, buttons, sht_y) : TSheet(x, y, dx, dy, caption, head, buttons, sht_y)
{ {
if (dx == 0) TToken_string cap(caption);
if (cap.items() > 1)
{ {
TToken_string cap(caption); cap.get(0);
add_tag_buttons(cap); FOR_EACH_TOKEN(cap, tok)
} create_page(tok, 0);
}
} }
// Certified 99% // Certified 99%
@ -1351,7 +1449,6 @@ long TArray_sheet::insert(const TToken_string& s, long n)
return n; return n;
} }
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
// TCursor_sheet // TCursor_sheet
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
@ -1380,7 +1477,7 @@ bool TCursor_sheet::in_key(const TFieldref& fr) const
TCursor_sheet::TCursor_sheet(TCursor* cursor, const char* fields, TCursor_sheet::TCursor_sheet(TCursor* cursor, const char* fields,
const char* title, const char* head, const char* title, const char* head,
byte buttons, short sht_y, WINDOW parent) byte buttons, short sht_y, WINDOW parent)
: TSheet(sht_y ? 3 : 0, sht_y ? 3 : 0, sht_y ? -3 : 0, sht_y ? -3 : 0, : TSheet(sht_y ? 2 : 0, sht_y ? 2 : 0, sht_y ? -2 : 0, sht_y ? -2 : 0,
title, head, buttons, sht_y, parent), _cursor(cursor) title, head, buttons, sht_y, parent), _cursor(cursor)
{ {
TToken_string fldlst(fields); TToken_string fldlst(fields);
@ -1442,13 +1539,12 @@ bool TCursor_sheet::get_cell_colors(int row, int col, COLOR& fore, COLOR& back)
if (_key_cols[col]) if (_key_cols[col])
{ {
fore = 0; fore = 0;
back = REQUIRED_BACK_COLOR; back = REQUIRED_BACK_COLOR; // Evidenzia i campi chiave
return true; return true;
} }
return TSheet::get_cell_colors(row, col, fore, back); return TSheet::get_cell_colors(row, col, fore, back);
} }
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
// TBrowse_sheet // TBrowse_sheet
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
@ -1592,9 +1688,9 @@ void TBrowse_sheet::handler(
WINDOW win, // @parm Finestra da gestire WINDOW win, // @parm Finestra da gestire
EVENT* ep) // @parm Evento da gestire nella finestra EVENT* ep) // @parm Evento da gestire nella finestra
{ {
if (ep->type == E_MOUSE_DOWN) switch (ep->type)
{ {
TSheet_control& sht = sheet(); case E_MOUSE_DOWN:
switch (ep->v.mouse.button ) switch (ep->v.mouse.button )
{ {
case 1: case 1:
@ -1602,7 +1698,7 @@ void TBrowse_sheet::handler(
MENU_ITEM* menu = xvt_res_get_menu(BROWSE_BAR); MENU_ITEM* menu = xvt_res_get_menu(BROWSE_BAR);
if (menu) if (menu)
{ {
dictionary_translate_menu(menu); dictionary_translate_menu(menu);
const PNT& p = ep->v.mouse.where; const PNT& p = ep->v.mouse.where;
RCT cr; xvt_vobj_get_client_rect(win, &cr); RCT cr; xvt_vobj_get_client_rect(win, &cr);
XVT_POPUP_ALIGNMENT pa = XVT_POPUP_CENTER; XVT_POPUP_ALIGNMENT pa = XVT_POPUP_CENTER;
@ -1620,7 +1716,7 @@ void TBrowse_sheet::handler(
break; break;
default: default:
{ {
RCT r; sht.get_rect(r); RCT r; sheet().get_rect(r);
if (xvt_rect_has_point(&r, ep->v.mouse.where) && _rec_to_select >= 0) if (xvt_rect_has_point(&r, ep->v.mouse.where) && _rec_to_select >= 0)
{ {
post_select(_rec_to_select); post_select(_rec_to_select);
@ -1629,15 +1725,13 @@ void TBrowse_sheet::handler(
} }
break; break;
} }
} break;
else case E_COMMAND:
if (ep->type == E_COMMAND)
{
switch (ep->v.cmd.tag) switch (ep->v.cmd.tag)
{ {
case BROWSE_BAR + 1: case BROWSE_BAR + 1:
save_columns_order(field()); save_columns_order(field());
return; return;
case BROWSE_BAR + 2: case BROWSE_BAR + 2:
set_columns_order(NULL); set_columns_order(NULL);
return; return;
@ -1647,6 +1741,17 @@ void TBrowse_sheet::handler(
default: default:
break; break;
} }
break;
case E_CONTROL:
if (ep->v.ctl.ci.type == WC_NOTEBK)
{
const int new_search = ep->v.ctl.ci.v.notebk.tab_no;
on_key(K_CTRL+K_F1+new_search);
return;
}
break;
default:
break;
} }
TCursor_sheet::handler(win, ep); TCursor_sheet::handler(win, ep);
@ -1678,9 +1783,9 @@ TBrowse_sheet::TBrowse_sheet(TCursor* cursor, const char* fields,
{ {
ca = f.prompt(); ca = f.prompt();
if (ca.blank()) if (ca.blank())
ca = PR("Codice"); ca = TR("Codice");
} }
add_tag_button(0, ca, _sel); set_tab_buttons(ca);
TToken_string tids = head; TToken_string tids = head;
TToken_string tfns = fields; TToken_string tfns = fields;
@ -1800,10 +1905,8 @@ bool TBrowse_sheet::on_key(KEY k)
KEY TBrowse_sheet::run() KEY TBrowse_sheet::run()
{ {
_cur_browse = this; _cur_browse = this;
show_page(_sel);
const KEY key = TCursor_sheet::run(); const KEY key = TCursor_sheet::run();
_cur_browse = NULL; _cur_browse = NULL;
return key; return key;
} }

View File

@ -30,7 +30,8 @@ protected: // TMask
virtual void on_idle(); virtual void on_idle();
static bool tutti_handler(TMask_field& f, KEY k); static bool tutti_handler(TMask_field& f, KEY k);
static bool export_handler(TMask_field& f, KEY k);
protected: protected:
void reset_parked() { _parked = -1; } void reset_parked() { _parked = -1; }
virtual void get_row(long r, TToken_string& row) { row.cut(0); } virtual void get_row(long r, TToken_string& row) { row.cut(0); }

View File

@ -952,14 +952,17 @@ bool TTree_window::add_child(XVT_TREEVIEW_NODE parent)
XVT_IMAGE ii = NULL, ic = NULL, ie = NULL; XVT_IMAGE ii = NULL, ic = NULL, ie = NULL;
TImage* im_nor = _tree->image(false); TImage* im_nor = _tree->image(false);
if (type == XVT_TREEVIEW_NODE_NONTERMINAL) if (im_nor != NULL)
{ {
TImage* im_sel = _tree->image(true); if (type == XVT_TREEVIEW_NODE_NONTERMINAL)
ic = im_nor->xvt_image(); {
ie = im_sel->xvt_image(); TImage* im_sel = _tree->image(true);
ic = im_nor->xvt_image();
ie = im_sel->xvt_image();
}
else
ii = im_nor->xvt_image();
} }
else
ii = im_nor->xvt_image();
XVT_TREEVIEW_NODE child = xvt_treeview_add_child_node(_ctrl, parent, type, ii, ic, ie, desc, NULL, id); XVT_TREEVIEW_NODE child = xvt_treeview_add_child_node(_ctrl, parent, type, ii, ic, ie, desc, NULL, id);
if (child != NULL && type == XVT_TREEVIEW_NODE_NONTERMINAL && _tree->expanded()) if (child != NULL && type == XVT_TREEVIEW_NODE_NONTERMINAL && _tree->expanded())
{ {

View File

@ -88,6 +88,8 @@
#define BMP_SAVERECDN 153 #define BMP_SAVERECDN 153
#define BMP_DELRECDN 154 #define BMP_DELRECDN 154
#define BMP_NEWRECDN 155 #define BMP_NEWRECDN 155
#define BMP_INFO 162
#define BMP_HELP 163
#define BMP_QUITDN 164 #define BMP_QUITDN 164
#define BMP_SETPRINT 165 #define BMP_SETPRINT 165
#define BMP_LENTE 166 #define BMP_LENTE 166
@ -101,6 +103,34 @@
#define BMP_PDF 174 #define BMP_PDF 174
#define BMP_ARCHIVE 175 #define BMP_ARCHIVE 175
#define BMP_PROGRAM 176 #define BMP_PROGRAM 176
#define TOOL_OK 101
#define TOOL_CANCEL 102
#define TOOL_SAVEREC 103
#define TOOL_DELREC 104
#define TOOL_NEWREC 105
#define TOOL_CONFIG 107
#define TOOL_QUIT 114
#define TOOL_SELECT 115
#define TOOL_EDIT 116
#define TOOL_LINK 117
#define TOOL_PRINT 118
#define TOOL_RECALC 119
#define TOOL_ELABORA 120
#define TOOL_FIRSTREC 121
#define TOOL_PREVREC 122
#define TOOL_STOPREC 123
#define TOOL_NEXTREC 124
#define TOOL_LASTREC 125
#define TOOL_FINDREC 126
#define TOOL_EMAIL 139
#define TOOL_INFO 162
#define TOOL_HELP 163
#define TOOL_SETPRINT 165
#define TOOL_LENTE 166
#define TOOL_PREF 204
#define TOOL_ADDPREF 205
#endif #endif
/* @END */ /* @END */

View File

@ -471,7 +471,6 @@ void TWindow::open_modal()
WinManager.reg(this); WinManager.reg(this);
} }
void TWindow::close() void TWindow::close()
{ {
CHECK(_win != NULL_WIN, "Can't close a NULL window"); CHECK(_win != NULL_WIN, "Can't close a NULL window");
@ -479,7 +478,6 @@ void TWindow::close()
xvt_vobj_set_visible(_win, _open = FALSE); xvt_vobj_set_visible(_win, _open = FALSE);
} }
void TWindow::close_modal() void TWindow::close_modal()
{ {
if (is_modal()) if (is_modal())

View File

@ -54,7 +54,7 @@ RCT& resize_rect(
{ {
if (xvt_vobj_get_type(parent) == W_PLAIN) // Mask with Toolbar if (xvt_vobj_get_type(parent) == W_PLAIN) // Mask with Toolbar
{ {
if (y >= 0) /* if (y >= 0)
{ {
const TWindow* w = (const TWindow*)xvt_vobj_get_data(parent); const TWindow* w = (const TWindow*)xvt_vobj_get_data(parent);
if (w->is_kind_of(CLASS_MASK)) if (w->is_kind_of(CLASS_MASK))
@ -63,7 +63,7 @@ RCT& resize_rect(
if (parent != m->toolwin()) if (parent != m->toolwin())
y++; y++;
} }
} } */
if (x > 0 || (wt != WO_TE && wt != W_PLAIN && x == 0)) if (x > 0 || (wt != WO_TE && wt != W_PLAIN && x == 0))
{ {
RCT pc; xvt_vobj_get_client_rect(parent, &pc); // Get parent window size RCT pc; xvt_vobj_get_client_rect(parent, &pc); // Get parent window size
@ -72,13 +72,13 @@ RCT& resize_rect(
if (width > tot) x += (width-tot) / (CHARX<<1); if (width > tot) x += (width-tot) / (CHARX<<1);
} }
} }
wt = WC_TEXTEDIT; wt = WC_TEXTEDIT; // Campo di maschera
} }
else else
{ {
if (ROWY <= 0) // Not yet initialized if (ROWY <= 0) // Not yet initialized
{ {
RCT pc; xvt_vobj_get_client_rect(TASK_WIN, &pc); RCT pc; xvt_vobj_get_client_rect(parent, &pc);
ROWY = (pc.bottom - pc.top) / 23; ROWY = (pc.bottom - pc.top) / 23;
} }
} }
@ -86,12 +86,19 @@ RCT& resize_rect(
switch (wt) switch (wt)
{ {
case WC_TEXTEDIT : case WC_TEXTEDIT :
r.left = (x+1)*CHARX; if (x == 0 && dx == 0 && y == 0 && dy == 0) // Campo a tutta pagina!
r.top = y*ROWY; {
r.right = dx*CHARX; xvt_vobj_get_client_rect(parent, &r);
r.bottom = (CHARY << 1) - BASEY; }
if (dy > 1) else
r.bottom += ROWY*(dy-1); {
r.left = (x+1)*CHARX;
r.top = y*ROWY;
r.right = dx*CHARX;
r.bottom = (CHARY << 1) - BASEY;
if (dy > 1)
r.bottom += ROWY*(dy-1);
}
break; break;
case W_DOC: case W_DOC:
r.left = x * CHARX; r.left = x * CHARX;