Gestione ordinamenti in sheet di ricerca
git-svn-id: svn://10.65.10.50/branches/R_10_00@23139 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
6a84387e62
commit
07f592bd22
include
about.cppapplicat.cppapplicat.hassoc.hbagn010a.repbrwbut.cppbrwbut.hcampo.autcfiles.cchecks.cppclifo.hconfapp.cppcontrols.cppdate.cppdate.hdongle.cppexpr.hgolem.cppisam.cppmaskfld.cppmodaut.hmsksheet.cppmultirec.cppnetsock.cppobject.hprefix.cppprefix.hrdoc.hrecset.cpprecset.hrelapp.cppreport.cppreprint.cppscanner.hsheet.cppsheet.hsqlset.cppstdtypes.hstrings.cppstrings.hvalidate.cppvarrec.cppvarrec.hxvtility.cppxvtility.h
@ -5,6 +5,7 @@
|
||||
#include <dongle.h>
|
||||
#include <golem.h>
|
||||
#include <isamrpc.h>
|
||||
#include <mask.h>
|
||||
#include <prefix.h>
|
||||
#include <progind.h>
|
||||
#include <sqlset.h>
|
||||
@ -113,14 +114,8 @@ void history()
|
||||
last_module = mod;
|
||||
else
|
||||
mod.cut(0);
|
||||
|
||||
h << "<tr>" << "<td><b>" << mod << "</b></td>";
|
||||
h << "<td>" << rel << "</td><td>";
|
||||
if (np > patch)
|
||||
h << "<b>" << name << "</b>";
|
||||
else
|
||||
h << name;
|
||||
h << "</td><td>";
|
||||
|
||||
TString content;
|
||||
if (http_get(server, remote, local))
|
||||
{
|
||||
ifstream i(local);
|
||||
@ -130,12 +125,22 @@ void history()
|
||||
i.getline(str.get_buffer(), str.size());
|
||||
if (str.find('.') > 0 && fexist(str))
|
||||
continue;
|
||||
h << str << "<br/>";
|
||||
content << str << "<br/>";
|
||||
}
|
||||
i.close();
|
||||
xvt_fsys_remove_file(local);
|
||||
}
|
||||
h << "</td></tr>" << endl;
|
||||
|
||||
if (content.len() > 12)
|
||||
{
|
||||
h << "<tr>" << "<td><b>" << mod << "</b></td>";
|
||||
h << "<td>" << rel << "</td><td>";
|
||||
if (np > patch)
|
||||
h << "<b>" << name << "</b>";
|
||||
else
|
||||
h << name;
|
||||
h << "</td><td>" << content << "</td></tr>" << endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
h << "</table></body></html>" << endl;
|
||||
@ -164,7 +169,7 @@ public:
|
||||
bool curr_prop(TString& prop, TVariant& value);
|
||||
|
||||
void set_read_only(bool ro = true);
|
||||
TAdvanced_property_sheet(const char* title = "", int width = 78, int height = 20);
|
||||
TAdvanced_property_sheet(const char* title = "", int width = 78, int height = 24);
|
||||
};
|
||||
|
||||
long TAdvanced_property_sheet::handler(WINDOW win, EVENT* e)
|
||||
@ -280,7 +285,7 @@ void TAdvanced_property_sheet::set_read_only(bool ro)
|
||||
TAdvanced_property_sheet::TAdvanced_property_sheet(const char* title, int width, int height)
|
||||
: TMask(title && *title ? title : TR("Proprietà"), 1, width, height), _pf(NULL)
|
||||
{
|
||||
add_button_tool(DLG_CANCEL, TR("Ritorna"), TOOL_CANCEL);
|
||||
add_button_tool(DLG_CANCEL, TR("Chiudi"), TOOL_CANCEL);
|
||||
add_button_tool(DLG_EXPORT, TR("Esporta"), TOOL_EXCEL);
|
||||
if (is_power_reseller(true))
|
||||
add_button_tool(DLG_EDIT, TR("Edit"), TOOL_EDIT);
|
||||
|
@ -39,6 +39,38 @@ TApplication& main_app()
|
||||
// Gestione dello sfondo della finestra principale
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
static clock_t _next_flash = 0;
|
||||
|
||||
HIDDEN void paint_title(WINDOW win, COLOR rgb, BOOLEAN bShadow = FALSE)
|
||||
{
|
||||
RCT r; xvt_vobj_get_client_rect(win, &r);
|
||||
|
||||
int BIGY = 3*ROWY/2;
|
||||
xvtil_set_font(win, XVT_FFN_TIMES, XVT_FS_BOLD | XVT_FS_ITALIC, BIGY);
|
||||
|
||||
const char* t = main_app().title();
|
||||
int w = xvt_dwin_get_text_width(win, t, -1);
|
||||
if (w > r.right)
|
||||
{
|
||||
BIGY = BIGY*r.right/w;
|
||||
xvtil_set_font(win, XVT_FFN_TIMES, XVT_FS_BOLD | XVT_FS_ITALIC, BIGY);
|
||||
w = xvt_dwin_get_text_width(win, t, -1);
|
||||
}
|
||||
|
||||
int x = (r.right-w)/2, y = r.top+BIGY+ROWY;
|
||||
if (bShadow)
|
||||
{ // Disegna ombra
|
||||
const int k = max(BIGY/24, 1);
|
||||
xvt_dwin_set_fore_color(win, MASK_LIGHT_COLOR);
|
||||
xvt_dwin_draw_text(win, x+k, y+k, t, -1);
|
||||
}
|
||||
xvt_dwin_set_fore_color(win, rgb);
|
||||
xvt_dwin_draw_text(win, x, y, t, -1);
|
||||
|
||||
xvtil_set_font(win, NULL, XVT_FS_NONE);
|
||||
xvt_dwin_set_fore_color(win, PROMPT_COLOR);
|
||||
}
|
||||
|
||||
HIDDEN void paint_background(WINDOW win)
|
||||
{
|
||||
RCT r; xvt_vobj_get_client_rect(win, &r);
|
||||
@ -54,45 +86,43 @@ HIDDEN void paint_background(WINDOW win)
|
||||
else
|
||||
xvt_dwin_clear(win, MASK_DARK_COLOR);
|
||||
|
||||
int BIGY = 3*ROWY/2;
|
||||
xvtil_set_font(win, XVT_FFN_TIMES, XVT_FS_BOLD | XVT_FS_ITALIC, BIGY);
|
||||
|
||||
const char* t = main_app().title();
|
||||
int w = xvt_dwin_get_text_width(win, t, -1);
|
||||
if (w > r.right)
|
||||
{
|
||||
BIGY = BIGY*r.right/w;
|
||||
xvtil_set_font(win, XVT_FFN_TIMES, XVT_FS_BOLD | XVT_FS_ITALIC, BIGY);
|
||||
w = xvt_dwin_get_text_width(win, t, -1);
|
||||
}
|
||||
|
||||
int x = (r.right-w)/2, y = r.top+BIGY+ROWY;
|
||||
if (ADVANCED_GRAPHICS)
|
||||
{ // Disegna ombra
|
||||
const int k = max(BIGY/24, 1);
|
||||
xvt_dwin_set_fore_color(win, MASK_LIGHT_COLOR);
|
||||
xvt_dwin_draw_text(win, x+k, y+k, t, -1);
|
||||
}
|
||||
xvt_dwin_set_fore_color(win, MASK_DARK_COLOR);
|
||||
xvt_dwin_draw_text(win, x, y, t, -1);
|
||||
|
||||
xvtil_set_font(win, NULL, XVT_FS_NONE);
|
||||
xvt_dwin_set_fore_color(win, PROMPT_COLOR);
|
||||
paint_title(win, MASK_DARK_COLOR, ADVANCED_GRAPHICS);
|
||||
|
||||
TString spa; spa << dongle().product();
|
||||
if (!xvt_sys_is_pda())
|
||||
spa << " - " << dongle().reseller();
|
||||
w = xvt_dwin_get_text_width(win, spa, -1);
|
||||
x = (r.right-r.left-w)/2; y = r.bottom-CHARY;
|
||||
int w = xvt_dwin_get_text_width(win, spa, -1);
|
||||
int x = (r.right-r.left-w)/2, y = r.bottom-CHARY;
|
||||
xvt_dwin_draw_text(win, x, y, spa, -1);
|
||||
|
||||
if (ADVANCED_GRAPHICS)
|
||||
{
|
||||
RCT ir;
|
||||
xvt_rect_set(&ir, CHARY, r.bottom-TOOL_SIZE-CHARY, TOOL_SIZE+CHARY, r.bottom-CHARY);
|
||||
const int sz = TOOL_SIZE <= 32 ? 32 : 48;
|
||||
xvt_rect_set(&ir, CHARY, r.bottom-sz-CHARY, sz+CHARY, r.bottom-CHARY);
|
||||
xvt_dwin_draw_icon_rect(win, &ir, ICON_RSRC);
|
||||
xvt_rect_set(&ir, r.right-CHARY-TOOL_SIZE, r.bottom-TOOL_SIZE-CHARY, r.right-CHARY, r.bottom-CHARY);
|
||||
xvt_rect_set(&ir, r.right-CHARY-sz, r.bottom-sz-CHARY, r.right-CHARY, r.bottom-CHARY);
|
||||
xvt_dwin_draw_icon_rect(win, &ir, ICON_RSRC);
|
||||
|
||||
_next_flash = clock() + 5*CLOCKS_PER_SEC;
|
||||
}
|
||||
}
|
||||
|
||||
void TApplication::on_idle()
|
||||
{
|
||||
if (_next_flash > 0 && clock() > _next_flash)
|
||||
{
|
||||
const double delta = clock()-_next_flash;
|
||||
if (delta < CLOCKS_PER_SEC)
|
||||
{
|
||||
COLOR rgb = blend_colors( MASK_DARK_COLOR, MASK_LIGHT_COLOR, delta/CLOCKS_PER_SEC);
|
||||
paint_title(TASK_WIN, rgb);
|
||||
}
|
||||
else
|
||||
{
|
||||
paint_title(TASK_WIN, MASK_DARK_COLOR);
|
||||
_next_flash = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -285,7 +315,7 @@ bool TApplication::remove_menu(MENU_TAG id)
|
||||
|
||||
|
||||
TApplication::TApplication()
|
||||
: _god_vars(NULL),_savefirm(0), _running(FALSE), _create_ok(FALSE)
|
||||
: _god_vars(NULL),_savefirm(0), _running(FALSE), _create_ok(FALSE)
|
||||
{
|
||||
}
|
||||
|
||||
@ -369,7 +399,7 @@ const char* TApplication::get_module_name() const
|
||||
}
|
||||
if (!ok)
|
||||
{
|
||||
error_box(FR("Il modulo '%s' non è autorizzato per l'utente %s"), (const char*)module, ((const char*)user()));
|
||||
cantaccess_box(module);
|
||||
module.cut(0);
|
||||
}
|
||||
}
|
||||
@ -561,7 +591,7 @@ bool TApplication::get_version_info(int& year, int& release, int& tag, int& patc
|
||||
patch = vep.get_int();
|
||||
int checksum = vep.get_int();
|
||||
|
||||
bool valid = year >= 2151 && release > 0 && tag >= 0 && patch >= 0 &&
|
||||
bool valid = year >= 2151 && release >= 12 && tag >= 0 && patch >= 0 &&
|
||||
checksum == (year + release + tag + patch);
|
||||
return valid;
|
||||
}
|
||||
|
@ -130,6 +130,7 @@ public:
|
||||
virtual const char * extra_modules() const { return ""; }
|
||||
// @cmember Abilita la verifica del modulo cui appartiene il programma
|
||||
virtual bool check_autorization() const;
|
||||
virtual void on_idle();
|
||||
|
||||
// @cmember Forza la chiusura dell'applicazione
|
||||
void stop_run();
|
||||
|
@ -176,6 +176,7 @@ public:
|
||||
TCache(size_t size = 0); // 883 assigned by default
|
||||
virtual ~TCache();
|
||||
};
|
||||
|
||||
/*
|
||||
__ass = TAssoc_array da scandire
|
||||
__obj = variabile del cazzo che serve internamente al ciclo; va nominata e dimenticata
|
||||
|
@ -1,7 +1,7 @@
|
||||
|
||||
<report name="bagn010a" lpi="6">
|
||||
<description>Log di elaborazione</description>
|
||||
<font face="Arial" size="10" />
|
||||
<font face="Courier New" size="10" />
|
||||
<section type="Head" />
|
||||
<section type="Head" level="1">
|
||||
<field type="Stringa" valign="center" align="center" width="80" height="3" pattern="1">
|
||||
|
@ -197,12 +197,16 @@ bool TList_sheet::check(CheckTime t)
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
// Certified 100%
|
||||
TBrowse::TBrowse(TEdit_field* f, TRelation* r, int key, const char* filter)
|
||||
TBrowse::TBrowse(TEdit_field* f, TRelation* r, int key, const char* filter, const char* orderby)
|
||||
: TBrowse_button(f),
|
||||
_relation(r), _cursor(new TCursor (r, "", key)),
|
||||
_filter(filter), _secondary(false), _alt_browse(NULL),
|
||||
_relation(r), _filter(filter), _secondary(false), _alt_browse(NULL),
|
||||
_custom_filter_handler(NULL)
|
||||
{
|
||||
if (*orderby && *orderby)
|
||||
_cursor = new TSorted_cursor(r, orderby, "", key);
|
||||
else
|
||||
_cursor = new TCursor (r, "", key);
|
||||
|
||||
custom_cursor();
|
||||
}
|
||||
|
||||
@ -252,9 +256,8 @@ static bool descr_filter_handler(TMask_field& f, KEY k)
|
||||
|
||||
void TBrowse::custom_cursor()
|
||||
{
|
||||
TRelation * relation = _relation == NULL ? _cursor->relation() : _relation;
|
||||
int logicnum = relation->lfile().num();
|
||||
|
||||
TRelation* relation = _relation ? _relation : _cursor->relation();
|
||||
const int logicnum = relation->lfile().num();
|
||||
switch(logicnum)
|
||||
{
|
||||
case LF_ANAMAG :
|
||||
@ -415,12 +418,14 @@ void TBrowse::parse_join(TScanner& scanner)
|
||||
int key = 1;
|
||||
if (scanner.popkey() == "KE")
|
||||
key = scanner.integer();
|
||||
else scanner.push();
|
||||
else
|
||||
scanner.push();
|
||||
|
||||
int alias = 0;
|
||||
if (scanner.popkey() == "AL")
|
||||
alias = scanner.integer();
|
||||
else scanner.push();
|
||||
else
|
||||
scanner.push();
|
||||
|
||||
TToken_string exp(80);
|
||||
if (scanner.pop() == "INTO")
|
||||
@ -443,11 +448,10 @@ void TBrowse::parse_join(TScanner& scanner)
|
||||
else
|
||||
{
|
||||
#ifdef DBG
|
||||
if (j.len() > 4)
|
||||
yesnofatal_box("'%s' non e' una tabella valida: %d", (const char*)j);
|
||||
else
|
||||
if (j[0] != '&' && j.len() > 4)
|
||||
yesnofatal_box("'%s' non è una tabella valida: %d", (const char*)j);
|
||||
#endif
|
||||
_relation->add(j, exp, key, to, alias); // join table
|
||||
_relation->add(j, exp, key, to, alias); // join table
|
||||
}
|
||||
}
|
||||
|
||||
@ -923,8 +927,7 @@ bool TBrowse::do_link(bool insert)
|
||||
{
|
||||
if (*f == '#')
|
||||
{
|
||||
const int id = atoi(++f);
|
||||
app << field(id).get();
|
||||
app << field().evaluate_field(f);
|
||||
while (isspace(*f)) ++f;
|
||||
while (isdigit(*f)) ++f;
|
||||
if (*f)
|
||||
@ -1489,7 +1492,7 @@ KEY TProfile_select::run()
|
||||
running = false;
|
||||
}
|
||||
else
|
||||
error_box("Esiste gia' un profilo di nome\n%s",
|
||||
error_box("Esiste già un profilo di nome\n%s",
|
||||
(const char*)name);
|
||||
}
|
||||
break;
|
||||
@ -1507,7 +1510,7 @@ KEY TProfile_select::run()
|
||||
running = false;
|
||||
}
|
||||
else
|
||||
error_box("Esiste gia' un profilo di nome\n%s",
|
||||
error_box("Esiste già un profilo di nome\n%s",
|
||||
(const char*)name);
|
||||
}
|
||||
else
|
||||
|
@ -229,7 +229,7 @@ public:
|
||||
void do_output(CheckTime = RUNNING_CHECK);
|
||||
|
||||
// @cmember Costruttore
|
||||
TBrowse(TEdit_field* f, TRelation* r, int key = 1, const char* filter = "");
|
||||
TBrowse(TEdit_field* f, TRelation* r, int key = 1, const char* filter = "", const char* orderby = NULL);
|
||||
// @cmember Costruttore
|
||||
TBrowse(TEdit_field* f, TCursor* c);
|
||||
// @cmember Distruttore
|
||||
|
@ -3,7 +3,7 @@ ct CUP Tracciabilit
|
||||
np No Profit
|
||||
fe Comunicazione Polivalente
|
||||
77 Percipienti
|
||||
?? Modulo vario ex- Gestione IVA
|
||||
gd Gestione DNinst
|
||||
se Contabilità Semplificata
|
||||
cg Contabilità Generale
|
||||
ci Contabilità Industriale
|
||||
|
@ -117,10 +117,11 @@ void COpenFile(logicname,filed,lockmode,dirflg)
|
||||
}
|
||||
} while TESTLOCK(fdir[dirflg].IOR) ;
|
||||
strcpy(filed->SysName, CAddPref(filed->SysName)) ;
|
||||
#ifndef _NDEBUG
|
||||
if (strlen(filed->SysName) >= sizeof(filed->SysName))
|
||||
xvt_dm_post_error(filed->SysName);
|
||||
#endif
|
||||
{
|
||||
char msg[256]; sprintf(msg, "Nome troppo lungo '%s'" , filed->SysName);
|
||||
xvt_dm_post_error(msg);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -188,7 +188,7 @@ bool cantaccess_box(const char* filename)
|
||||
{
|
||||
if (filename == NULL || *filename < ' ')
|
||||
filename = TR("questa funzione");
|
||||
return error_box(FR("L'utente %s non può accedere a %s"), (const char*)user(), filename);
|
||||
return error_box(FR("L'utente %s non puo' accedere a %s"), (const char*)user(), filename);
|
||||
}
|
||||
|
||||
bool delete_box(const char* fmt, ...)
|
||||
|
@ -74,5 +74,8 @@
|
||||
#define CLI_AUTORIZ "AUTORIZ"
|
||||
#define CLI_SPLITPAY "SPLITPAY"
|
||||
|
||||
#define CLI_UTENTE "UTENTE"
|
||||
#define CLI_DATAAGG "DATAAGG"
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -25,7 +25,7 @@ bool TConfig_application::create()
|
||||
|
||||
user_create();
|
||||
dispatch_e_menu(_last_choice);
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TConfig_application::destroy()
|
||||
@ -51,12 +51,12 @@ bool TConfig_application::menu(MENU_TAG m)
|
||||
|
||||
bool TConfig_application::user_create()
|
||||
{
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TConfig_application::user_destroy()
|
||||
{
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@ -86,10 +86,10 @@ void TConfig_application::save_mask(bool tosave)
|
||||
{
|
||||
TString val;
|
||||
val << '"' << value << '"';
|
||||
_cnf->set(fname, val, NULL, TRUE, index > -1 ? index : -1);
|
||||
_cnf->set(fname, val, NULL, true, index > -1 ? index : -1);
|
||||
}
|
||||
else
|
||||
_cnf->set(fname, value, NULL, TRUE, index > -1 ? index : -1);
|
||||
_cnf->set(fname, value, NULL, true, index > -1 ? index : -1);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -205,17 +205,16 @@ void TConfig_application::on_firm_change()
|
||||
void TConfig_application::set_config(int which)
|
||||
{
|
||||
_which_config= which;
|
||||
|
||||
}
|
||||
|
||||
bool TConfig_application::preprocess_config (TMask& mask, TConfig& config)
|
||||
{
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TConfig_application::postprocess_config (TMask& mask, TConfig& config)
|
||||
{
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
// @doc EXTERNAL
|
||||
@ -225,8 +224,8 @@ bool TConfig_application::postprocess_config (TMask& mask, TConfig& config)
|
||||
//
|
||||
// @rdesc Ritorna i seguenti valori:
|
||||
//
|
||||
// @flag TRUE | Se la modifica viene acettatta (dafault)
|
||||
// @flag FALSE | Se la modifica non viene accettata
|
||||
// @flag true | Se la modifica viene acettatta (dafault)
|
||||
// @flag false | Se la modifica non viene accettata
|
||||
bool TConfig_application::postprocess_config_changed(
|
||||
const char* par, // @parm Paragrafo in corso di editing
|
||||
const char* var, // @parm vedi <c TApplication>
|
||||
@ -237,7 +236,7 @@ bool TConfig_application::postprocess_config_changed(
|
||||
// in corso di editing. E' chiamata per ogni parametro modificato.
|
||||
|
||||
{
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
TConfig_application::TConfig_application(int which_config)
|
||||
|
@ -1,4 +1,4 @@
|
||||
#define XI_INTERNAL
|
||||
#define XI_INTERNAL
|
||||
#include <xinclude.h>
|
||||
|
||||
#ifndef STX_DATA
|
||||
@ -1277,15 +1277,10 @@ void TControl::set_caret_pos(int pos)
|
||||
}
|
||||
|
||||
const char* TControl::caption() const
|
||||
{
|
||||
const char* c = xi_get_text(_obj, NULL, 512);
|
||||
return c;
|
||||
}
|
||||
{ return xi_get_text(_obj, NULL, 512); }
|
||||
|
||||
void TControl::set_caption(const char* c)
|
||||
{
|
||||
xi_set_text(_obj, (char*)c);
|
||||
}
|
||||
{ xi_set_text(_obj, c); }
|
||||
|
||||
void TControl::destroy()
|
||||
{
|
||||
@ -1308,18 +1303,34 @@ TText_control::TText_control(WINDOW win, short cid,
|
||||
bool bold, big;
|
||||
COLOR color;
|
||||
TString t = parse_caption(text, bold, big, color);
|
||||
t.rtrim();
|
||||
if (width <= 0)
|
||||
width = t.len();
|
||||
if (left >= 0)
|
||||
{
|
||||
t.rtrim();
|
||||
if (width <= 0)
|
||||
width = t.len();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (width <= 0)
|
||||
width = t.len();
|
||||
t.rtrim();
|
||||
}
|
||||
|
||||
XI_OBJ* itf = get_interface(win);
|
||||
XI_RCT rct = coord2rct(itf, left, top, width, height);
|
||||
rct.right += bold ? (width*XI_FU_MULTIPLE/4) : XI_FU_MULTIPLE;
|
||||
if (big)
|
||||
if (left >= 0)
|
||||
rct.right += bold ? (width*XI_FU_MULTIPLE/4) : XI_FU_MULTIPLE;
|
||||
else
|
||||
rct.left -= bold ? (width*XI_FU_MULTIPLE/4) : XI_FU_MULTIPLE;
|
||||
|
||||
if (big)
|
||||
{
|
||||
rct.right += (rct.right - rct.left);
|
||||
if (left >= 0)
|
||||
rct.right += (rct.right - rct.left);
|
||||
else
|
||||
rct.left -= (rct.right - rct.left);
|
||||
rct.bottom += short(xvt_font_get_size(BIG_FONT) - xvt_font_get_size(DEF_FONT));
|
||||
}
|
||||
}
|
||||
|
||||
const unsigned long attrib = flags2attr(flags);
|
||||
XI_OBJ_DEF* def = xi_add_text_def(NULL, cid, &rct, attrib, t.get_buffer());
|
||||
@ -1355,7 +1366,10 @@ TGroupbox_control::TGroupbox_control(WINDOW win, short cid,
|
||||
{
|
||||
XI_OBJ* itf = get_interface(win);
|
||||
XI_RCT rct = coord2rct(itf, left, top, width, height);
|
||||
rct.top = _obj->v.text->xi_rct.bottom - 2;
|
||||
|
||||
//rct.top = _obj->v.text->xi_rct.bottom - 2;
|
||||
rct.top += XI_FU_MULTIPLE;
|
||||
|
||||
rct.bottom -= XI_FU_MULTIPLE / 2;
|
||||
|
||||
XI_OBJ_DEF* def = xi_add_rect_def(NULL, cid, &rct, XI_ATR_VISIBLE, 0, 0); // Ignore colors
|
||||
@ -1378,7 +1392,12 @@ TGroupbox_control::TGroupbox_control(WINDOW win, short cid,
|
||||
CHECKD(_rct, "Can't create Groupbox_control ", cid);
|
||||
|
||||
XI_RCT& rt = _obj->v.text->rct;
|
||||
rt.top--; rt.bottom--;
|
||||
//rt.top--; rt.bottom--;
|
||||
const int txt_height = rt.bottom-rt.top;
|
||||
rt.bottom = _rct->v.rect->rct.top - 1;
|
||||
rt.top = rt.bottom - txt_height + 2;
|
||||
rt.left = _rct->v.rect->rct.left;
|
||||
rt.right = _rct->v.rect->rct.right;
|
||||
|
||||
xi_dequeue();
|
||||
xi_tree_free(def);
|
||||
|
@ -138,7 +138,7 @@ int TDate::wday() const
|
||||
|
||||
if (m <= 2) // Gennaio e Febbraio sono gli ultimi mesi dell'anno scorso
|
||||
{
|
||||
y --;
|
||||
y--;
|
||||
m += 12;
|
||||
}
|
||||
|
||||
|
@ -1,3 +1,4 @@
|
||||
#pragma once
|
||||
#ifndef __DATE_H
|
||||
#define __DATE_H
|
||||
|
||||
|
@ -402,19 +402,17 @@ const TString& TDongle::short_name() const
|
||||
|
||||
const TString& TDongle::server_name() const
|
||||
{
|
||||
if (network())
|
||||
TString& tmp = get_tmp_string(50);
|
||||
if (network() && !xvt_sys_dongle_server_running())
|
||||
{
|
||||
const int sr = xvt_sys_dongle_server_running();
|
||||
if (sr == 0)
|
||||
{
|
||||
if (hardware() == _dongle_ssanet)
|
||||
return ini_get_string(CONFIG_SSA, NULL, "Port");
|
||||
return ini_get_string(CONFIG_INSTALL, "Server", "Dongle");
|
||||
}
|
||||
if (hardware() == _dongle_ssanet)
|
||||
tmp = ini_get_string(CONFIG_SSA, NULL, "Port");
|
||||
else
|
||||
tmp = ini_get_string(CONFIG_INSTALL, "Server", "Dongle");
|
||||
}
|
||||
|
||||
TString& tmp = get_tmp_string(50);
|
||||
xvt_sys_get_host_name(tmp.get_buffer(), tmp.size());
|
||||
if (tmp.blank())
|
||||
xvt_sys_get_host_name(tmp.get_buffer(), tmp.size());
|
||||
return tmp;
|
||||
}
|
||||
|
||||
@ -679,9 +677,14 @@ bool TEnigma_machine::init()
|
||||
{
|
||||
_scan = new TScanner(DNINST_PATH);
|
||||
::srand(883);
|
||||
TString4 l1; line(l1);
|
||||
_year_assist = atoi(l1);
|
||||
::srand(_year_assist);
|
||||
|
||||
const TString& first_line = _scan->line();
|
||||
if (first_line.len() == 4)
|
||||
{
|
||||
TString4 l1; decode_string(first_line, l1);
|
||||
_year_assist = atoi(l1);
|
||||
::srand(_year_assist);
|
||||
}
|
||||
}
|
||||
return _scan != NULL;
|
||||
}
|
||||
@ -987,8 +990,9 @@ int Tdninst::check_customer() const
|
||||
else
|
||||
{
|
||||
TEnigma_machine em;
|
||||
if (em.ok() && em.year_assist() > 2100 && em.find_serno(serno))
|
||||
if (em.ok() && em.year_assist() > 2150 && em.find_serno(serno))
|
||||
{
|
||||
const TDate oggi(TODAY);
|
||||
error = 0;
|
||||
TToken_string l(80, '=');
|
||||
while (em.line(l) && error == 0)
|
||||
@ -997,7 +1001,6 @@ int Tdninst::check_customer() const
|
||||
break;
|
||||
if (l[0]=='*' || l.starts_with("MustCall"))
|
||||
{
|
||||
const TDate oggi(TODAY);
|
||||
TString16 str;
|
||||
TDate ds;
|
||||
if (parse_date(l, str, ds) && oggi >= ds)
|
||||
|
@ -235,7 +235,7 @@ public:
|
||||
void backtrace(int step = 1)
|
||||
{ if (_ip > step) _ip -= step; else begin(); }
|
||||
// @cmember Costruttore. Crea un array di 50 elementi
|
||||
TCodearray(int size = 50) : TArray(size), _ip(0)
|
||||
TCodearray(int size = 64) : TArray(size), _ip(0)
|
||||
{}
|
||||
// @cmember Distruttore
|
||||
virtual ~TCodearray()
|
||||
|
@ -56,6 +56,8 @@ bool edit_url(const char* url)
|
||||
bool ok = xvt_sys_goto_url(url, "edit") != 0;
|
||||
if (!ok)
|
||||
ok = goto_url(url);
|
||||
if (ok)
|
||||
do_events();
|
||||
return ok;
|
||||
}
|
||||
|
||||
|
103
include/isam.cpp
103
include/isam.cpp
@ -1,4 +1,5 @@
|
||||
#define __ISAM_CPP
|
||||
#define _CRT_SECURE_NO_WARNINGS 1
|
||||
|
||||
#include <config.h>
|
||||
#include <execp.h>
|
||||
@ -11,7 +12,6 @@
|
||||
#include <prefix.h>
|
||||
#include <progind.h>
|
||||
#include <recarray.h>
|
||||
#include <relation.h>
|
||||
#include <scanner.h>
|
||||
#include <tabmod.h>
|
||||
#include <utility.h>
|
||||
@ -207,7 +207,7 @@ void __putfieldbuff(byte l, byte d, byte t, const char* s, char* recout)
|
||||
if (!__field_changed)
|
||||
return;
|
||||
}
|
||||
strncpy(&recout[l - len], s, len) ;
|
||||
strncpy(&recout[l-len], s, len) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -441,68 +441,6 @@ HIDDEN void browse_null(char *start, int nc)
|
||||
|
||||
// Traduce l'espressione chiave di CodeBase
|
||||
|
||||
/*HIDDEN const char * translate_key(const char* key)
|
||||
{
|
||||
// Trasforma l'espressione
|
||||
TToken_string t = key;
|
||||
TToken_string k(t.get(0),'+');
|
||||
TToken_string range("",',');
|
||||
TString ws;
|
||||
const bool is_dup = t.get(1)[0] == 'X';
|
||||
const int items = k.items();
|
||||
t = "";
|
||||
for (int i = 0; i<items; i++) // scorre i campi dell'espressione
|
||||
{
|
||||
ws = k.get(i); ws.upper(); // Primo campo
|
||||
const bool is_upper = ws.find("UPPER") >= 0;
|
||||
const bool is_sub = ws.find("SUBSTR") >= 0;
|
||||
int paren1 = ws.find('('); // Trova la prima parentesi aperta
|
||||
int paren2,last,from = 0,to = 0;
|
||||
|
||||
if (paren1 >= 0 && is_sub && is_upper)
|
||||
paren1 = ws.find('('); // Trova la seconda parentesi (in questo caso c'e' per forza)
|
||||
|
||||
if (paren1 >= 0) // Trova la prima virgola o parentesi chiusa (per qualsiasi espressione)
|
||||
{
|
||||
paren2 = ws.find(',');
|
||||
if (paren2 == -1) // se non ci sono virgole trova la parentesi chiusa
|
||||
paren2 = ws.find(')');
|
||||
CHECK(paren2 > paren1,"Something wrong happened translating CodeBase expressions.");
|
||||
if (is_sub) // Se e' una sottostringa estrae i campi DA e A
|
||||
{
|
||||
range = ws;
|
||||
last = ws.find(')');
|
||||
range.sub(paren2,last); // dalla virgola alla parentesi
|
||||
from = range.get_int(0);
|
||||
to = range.get_int(1);
|
||||
}
|
||||
ws = ws.sub(paren1+1,paren2); // Nome del campo pulito pulito
|
||||
ws.upper();
|
||||
}
|
||||
|
||||
if (is_upper)
|
||||
t << "UPPER(";
|
||||
|
||||
t << ws; // aggiunge il nome del campo
|
||||
|
||||
if (is_sub)
|
||||
{
|
||||
t << "[";
|
||||
t << from << ",";
|
||||
t << to << "]";
|
||||
}
|
||||
if (is_upper)
|
||||
t << ")";
|
||||
t << '+';
|
||||
}
|
||||
t.rtrim(1); // Toglie il + in piu'
|
||||
t.add(is_dup ? "X" : " ");
|
||||
|
||||
TString& tmp = get_tmp_string();
|
||||
tmp = t;
|
||||
return tmp;
|
||||
} */
|
||||
|
||||
HIDDEN int __build_key(const RecDes& recd, int numkey, const RecType recin, char *key, bool build_x_cb)
|
||||
/* *recd; descrittore record */
|
||||
/* numkey; numero chiave */
|
||||
@ -964,7 +902,7 @@ int TBaseisamfile::_readat(TRectype& rec, TRecnotype nrec, word lockop)
|
||||
if (_lasterr != NOERR)
|
||||
_lasterr = get_error(_lasterr);
|
||||
else
|
||||
rec = (const char *) DB_getrecord(fhnd);
|
||||
rec = (const char*)DB_getrecord(fhnd);
|
||||
_recno = DB_recno(fhnd);
|
||||
if (rec.has_memo())
|
||||
rec.init_memo(_recno, _isam_handle);
|
||||
@ -978,7 +916,7 @@ int TBaseisamfile::_write(const TRectype& rec)
|
||||
// Controlla che la chiave sia piena
|
||||
TString256 key;
|
||||
|
||||
__build_key(rec.rec_des(), 1, rec.string(), key.get_buffer(), TRUE);
|
||||
__build_key(rec.rec_des(), 1, rec.string(), key.get_buffer(), true);
|
||||
if (key.blank())
|
||||
return _iskeyerr;
|
||||
|
||||
@ -1359,7 +1297,8 @@ bool TBaseisamfile::is_changed_since(long& last) const
|
||||
bool yes = false;
|
||||
|
||||
#ifdef WIN32
|
||||
const int fh = ::_sopen(filename(), _O_RDONLY, _SH_DENYNO);
|
||||
int fh = 0;
|
||||
::_sopen_s(&fh, filename(), _O_RDONLY, _SH_DENYNO, _S_IREAD);
|
||||
if (fh > 0)
|
||||
{
|
||||
struct stat stat;
|
||||
@ -1625,7 +1564,7 @@ int TIsamtempfile::close()
|
||||
if (c & 8 || c & 2) // CLIPPER and DBIII format
|
||||
{
|
||||
f.ext("cgp");
|
||||
FILE *fp=fopen(f,"r");
|
||||
FILE* fp=NULL; fopen_s(&fp, f, "r");
|
||||
char in[16];
|
||||
while (fgets(in,16,fp)!=NULL)
|
||||
{
|
||||
@ -2175,7 +2114,7 @@ int TSystemisamfile::update(
|
||||
{
|
||||
tmpfname.ext("cgp");
|
||||
TFilename a;
|
||||
FILE *fp=fopen(tmpfname,"rb");
|
||||
FILE *fp=NULL; fopen_s(&fp, tmpfname,"rb");
|
||||
while (fgets(a.get_buffer(),16,fp) != NULL)
|
||||
{
|
||||
a.rtrim(1); // Cut \n
|
||||
@ -2572,7 +2511,7 @@ int TSystemisamfile::overwrite(
|
||||
|
||||
{
|
||||
int err=NOERR;
|
||||
FILE* fl = fopen(from, "r");
|
||||
FILE* fl = NULL; fopen_s(&fl, from, "r");
|
||||
if (fl == NULL)
|
||||
{
|
||||
error_box("Impossibile aprire il file %s",from);
|
||||
@ -2798,8 +2737,7 @@ int TSystemisamfile::dump(
|
||||
// @xref <mf TSystemisamfile::load>
|
||||
|
||||
{
|
||||
FILE* f = fopen(to, "w");
|
||||
|
||||
FILE* f = NULL; fopen_s(&f, to, "w");
|
||||
if (f == NULL)
|
||||
{
|
||||
setstatus(2);
|
||||
@ -3008,8 +2946,7 @@ int TSystemisamfile::dump(
|
||||
// @xref <mf TSystemisamfile::load>
|
||||
|
||||
{
|
||||
FILE* f = fopen(to, "w");
|
||||
|
||||
FILE* f = NULL; fopen_s(&f, to, "w");
|
||||
if (f == NULL)
|
||||
{
|
||||
setstatus(2);
|
||||
@ -3262,7 +3199,7 @@ TRectype::TRectype(const TRectype& r)
|
||||
*_memo_data = *r._memo_data;
|
||||
}
|
||||
memcpy(_rec, r._rec, _length);
|
||||
strcpy(_tab, r._tab);
|
||||
strcpy_s(_tab, sizeof(_tab), r._tab);
|
||||
setempty(r.empty());
|
||||
}
|
||||
|
||||
@ -3330,7 +3267,7 @@ void TRectype::init_memo(TRecnotype recno, TIsam_handle file)
|
||||
|
||||
void TRectype::settab(const char *tab)
|
||||
{
|
||||
strcpy(_tab, tab);
|
||||
strcpy_s(_tab, sizeof(_tab), tab);
|
||||
zero();
|
||||
}
|
||||
|
||||
@ -3818,7 +3755,7 @@ TRectype& TRectype::operator =(const TRectype& rec)
|
||||
init_memo(rec._memo_data->recno(), rec._memo_data->file());
|
||||
*_memo_data = *rec._memo_data;
|
||||
}
|
||||
strcpy(_tab, rec._tab);
|
||||
strcpy_s(_tab, sizeof(_tab), rec._tab);
|
||||
setempty(rec.empty()); // Copy emptiness status
|
||||
return *this;
|
||||
}
|
||||
@ -3919,10 +3856,10 @@ void TRectype::renum_key(const char* field, const char* val)
|
||||
// Certified 99%
|
||||
TRectype& TRectype::operator =(const char* rec)
|
||||
{
|
||||
if (rec && * rec)
|
||||
if (rec && *rec)
|
||||
{
|
||||
memcpy(_rec, rec, _length);
|
||||
setempty(FALSE);
|
||||
setempty(false);
|
||||
}
|
||||
else
|
||||
zero();
|
||||
@ -3932,7 +3869,7 @@ TRectype& TRectype::operator =(const char* rec)
|
||||
const char* TRectype::key(int numkey) const
|
||||
{
|
||||
TString& tmp = get_tmp_string(256);
|
||||
__build_key(rec_des(), numkey, _rec, tmp.get_buffer(), FALSE);
|
||||
__build_key(rec_des(), numkey, _rec, tmp.get_buffer(), false);
|
||||
return tmp;
|
||||
}
|
||||
|
||||
@ -3956,8 +3893,8 @@ bool TRectype::send_mail(const char* action) const
|
||||
bool ok = ::can_dispatch_transaction(*this);
|
||||
if (ok)
|
||||
{
|
||||
TFilename ininame; ininame.temp();
|
||||
if (ok) // Test qualunque per usare {}
|
||||
TFilename ininame; ininame.temp("msg", "ini");
|
||||
if (ok) // Dummy test per {}
|
||||
{
|
||||
TConfig ini(ininame, "Transaction");
|
||||
ini.set("Action", action);
|
||||
@ -3965,7 +3902,7 @@ bool TRectype::send_mail(const char* action) const
|
||||
fill_transaction(ini);
|
||||
}
|
||||
ok = ::dispatch_transaction(*this, ininame);
|
||||
::remove(ininame);
|
||||
ininame.fremove();
|
||||
}
|
||||
return ok;
|
||||
}
|
||||
|
@ -2207,15 +2207,48 @@ bool TEdit_field::parse_item(TScanner& scanner)
|
||||
}
|
||||
else scanner.push();
|
||||
|
||||
TString filter;
|
||||
TString filter;
|
||||
if (scanner.popkey() == "SE")
|
||||
filter = (const char*)scanner.line();
|
||||
else
|
||||
scanner.push();
|
||||
|
||||
TToken_string orderby;
|
||||
if (scanner.popkey() == "BY")
|
||||
{
|
||||
const char sep = orderby.separator();
|
||||
orderby.separator(' ');
|
||||
orderby = scanner.line();
|
||||
orderby.strip_double_spaces();
|
||||
orderby.replace(' ', sep);
|
||||
orderby.separator(sep);
|
||||
|
||||
// Trasforma i nomi dei files in numeri se necessario
|
||||
if (orderby.find('.') > 0)
|
||||
{
|
||||
TToken_string fld(16, '.');
|
||||
TString16 name;
|
||||
for (int i = 0; orderby.get(i, fld); i++)
|
||||
{
|
||||
if (!isdigit(fld[0]) && fld.find('.') > 0)
|
||||
{
|
||||
fld.get(0, name);
|
||||
const int num = ::table2logic(name);
|
||||
if (num != 0)
|
||||
{
|
||||
fld.add(num, 0);
|
||||
orderby.add(fld, i);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
scanner.push();
|
||||
|
||||
if (r != NULL)
|
||||
{
|
||||
_browse = new TBrowse(this, r, key, filter); // create browse with no filter ...
|
||||
_browse = new TBrowse(this, r, key, filter, orderby); // create browse
|
||||
|
||||
// ... complete relation by parsing all Join items ...
|
||||
while (scanner.popkey() == "JO")
|
||||
@ -2868,7 +2901,7 @@ void TDate_field::create(WINDOW w)
|
||||
TEdit_field::create(w);
|
||||
if (automagic())
|
||||
{
|
||||
TDate d(TODAY);
|
||||
const TDate d(TODAY);
|
||||
set(d.string());
|
||||
}
|
||||
}
|
||||
|
@ -6,7 +6,7 @@
|
||||
#define NPAUT 2
|
||||
#define FEAUT 3
|
||||
#define M77AUT 4
|
||||
// #define GIAUT 5 Obsoleta Gestione IVA implicita in CG (7)
|
||||
#define GDAUT 5
|
||||
#define SEAUT 6
|
||||
#define CGAUT 7
|
||||
#define CIAUT 8
|
||||
|
@ -547,9 +547,6 @@ TSpreadsheet::TSpreadsheet(
|
||||
l->active_back_color = FOCUS_BACK_COLOR;
|
||||
l->white_space_color = MASK_DARK_COLOR;
|
||||
l->rule_color = MASK_DARK_COLOR;
|
||||
#ifdef LINUX
|
||||
l->scroll_on_thumb_track = true;
|
||||
#endif
|
||||
|
||||
// Definizione della prima colonna (numero di riga)
|
||||
word attr = XI_ATR_RJUST;
|
||||
@ -759,9 +756,7 @@ void TSpreadsheet::update_rec(int rec)
|
||||
const bool has_focus = rec == selected() && mask().focus_field().dlg() == owner().dlg();
|
||||
|
||||
// if (has_focus) xi_set_focus(get_interface());
|
||||
|
||||
XI_OBJ row;
|
||||
XI_MAKE_ROW(&row, _obj, riga);
|
||||
XI_OBJ row; XI_MAKE_ROW(&row, _obj, riga);
|
||||
xi_cell_request(&row); // Update internal values
|
||||
|
||||
if (has_focus)
|
||||
|
@ -223,7 +223,8 @@ void TMultiple_rectype::renum_key()
|
||||
if (i==0)
|
||||
oldkey=b->key().build_key();
|
||||
// convertire al piu' presto le seguenti righe ...
|
||||
TRectype * rec = new TRectype(b->key());
|
||||
//TRectype * rec = new TRectype(b->key()); // Crea riga della classe base?
|
||||
TRectype* rec = new_body_record(logicnum); // Crea riga della classe giusta!
|
||||
set_body_key(*rec);
|
||||
b->set_key(rec); // Aggiorna righe
|
||||
// .. nella piu' economiche
|
||||
|
@ -24,26 +24,8 @@
|
||||
// [JCW 95-Dec-20] comments added for distribution 95a
|
||||
// [JCW 96-Jan-01] removed UDP capabilities from skstream
|
||||
|
||||
#ifdef INCSTR_H
|
||||
#include <incstr.h>
|
||||
#endif
|
||||
|
||||
#ifdef WIN32
|
||||
#include "winsock.h"
|
||||
#else
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <netdb.h>
|
||||
#include <unistd.h>
|
||||
#define SOCKET int
|
||||
#define INVALID_SOCKET -1
|
||||
#define SOCKET_ERROR -1
|
||||
#define SOCKADDR_IN sockaddr_in
|
||||
#define closesocket close
|
||||
#define BYTE byte
|
||||
#endif
|
||||
#pragma warning(disable:4005)
|
||||
#include "winsock2.h"
|
||||
|
||||
//
|
||||
// sockbuf
|
||||
@ -954,7 +936,7 @@ bool TSocketClient::HttpGetFile(CONNID id, const char* remote, const char* local
|
||||
return ok;
|
||||
}
|
||||
|
||||
HIDDEN int find_href(const TString& riga, int from, TString& filename)
|
||||
HIDDEN int find_href(const TString& riga, int from, TString& filename, const TString& pattern)
|
||||
{
|
||||
while (from >= 0)
|
||||
{
|
||||
@ -971,10 +953,10 @@ HIDDEN int find_href(const TString& riga, int from, TString& filename)
|
||||
else
|
||||
{
|
||||
filename = riga.mid(href);
|
||||
from = -1;
|
||||
from = riga.len();
|
||||
}
|
||||
filename.trim();
|
||||
if (filename.match("*.*"))
|
||||
if (filename.match(pattern, true))
|
||||
break;
|
||||
}
|
||||
else
|
||||
@ -988,9 +970,9 @@ HIDDEN int find_href(const TString& riga, int from, TString& filename)
|
||||
|
||||
bool TSocketClient::HttpGetDir(CONNID id, const char* remote, TString_array& list)
|
||||
{
|
||||
TFilename local; local.temp();
|
||||
TFilename local; local.temp("dir", "html");
|
||||
|
||||
TString server = remote, pattern;
|
||||
TString server = remote, pattern = "*.*";
|
||||
bool ok = false;
|
||||
if (server.find('*') > 0 || server.find('?') > 0)
|
||||
{
|
||||
@ -1005,18 +987,15 @@ bool TSocketClient::HttpGetDir(CONNID id, const char* remote, TString_array& lis
|
||||
ok = HttpGetFile(id, server, local);
|
||||
if (ok)
|
||||
{
|
||||
TString riga(512);
|
||||
TString riga(1024);
|
||||
TFilename name;
|
||||
ifstream s(local);
|
||||
while (!s.eof())
|
||||
{
|
||||
s.getline(riga.get_buffer(), riga.size());
|
||||
riga.lower();
|
||||
for (int href = find_href(riga, 0, name); href >= 0; href = find_href(riga, href, name))
|
||||
{
|
||||
if (pattern.blank() || name.match(pattern, true))
|
||||
list.add(name);
|
||||
}
|
||||
for (int href = find_href(riga, 0, name, pattern); href >= 0; href = find_href(riga, href, name, pattern))
|
||||
list.add(name);
|
||||
}
|
||||
s.close();
|
||||
xvt_fsys_remove_file(local);
|
||||
|
@ -1,3 +1,4 @@
|
||||
#pragma once
|
||||
#ifndef __OBJECT_H
|
||||
#define __OBJECT_H
|
||||
|
||||
|
@ -800,12 +800,15 @@ long TFile_manager::last_change(TIsam_handle name) const
|
||||
return i.last_change();
|
||||
}
|
||||
|
||||
int TFile_manager::close_closeable()
|
||||
int TFile_manager::close_closeable(bool firm_only)
|
||||
{
|
||||
_open_files = 0; // Ricalcolo per sicurezza
|
||||
for (TIsam_handle n = _fileinfo.last(); n > 0; n = _fileinfo.pred(n))
|
||||
{
|
||||
TFile_info& i = fileinfo(n);
|
||||
if (firm_only && i.dir_type() != _nordir)
|
||||
continue;
|
||||
|
||||
if (i.is_open())
|
||||
{
|
||||
_open_files++;
|
||||
@ -821,9 +824,9 @@ int TFile_manager::close_closeable()
|
||||
return _open_files;
|
||||
}
|
||||
|
||||
void TFile_manager::close_all()
|
||||
void TFile_manager::close_all(bool firm_only)
|
||||
{
|
||||
const int zoccolo_duro = close_closeable();
|
||||
const int zoccolo_duro = close_closeable(firm_only);
|
||||
#ifdef DBG
|
||||
if (zoccolo_duro > 0)
|
||||
NFCHECK("%d files refuse to be closed!", zoccolo_duro);
|
||||
@ -832,6 +835,8 @@ void TFile_manager::close_all()
|
||||
for (int n = _recinfo.last(); n > 0; n = _recinfo.pred(n))
|
||||
{
|
||||
const TRecord_info& r = recinfo(n);
|
||||
if (firm_only && r.dir_type() != _nordir)
|
||||
continue;
|
||||
if (r.mutable_dir())
|
||||
_recinfo.destroy(n);
|
||||
}
|
||||
@ -1016,14 +1021,15 @@ void TPrefix::set(
|
||||
return;
|
||||
if (_prefix != ".")
|
||||
{
|
||||
_manager.close_all();
|
||||
const bool firm_only = !xvt_str_same(name, "COM") && !xvt_str_same(name, "DEF");
|
||||
_manager.close_all(firm_only);
|
||||
CCloseDir(NORDIR);
|
||||
CCloseDir(COMDIR);
|
||||
CCloseRecDir(NORDIR);
|
||||
CCloseRecDir(COMDIR);
|
||||
}
|
||||
|
||||
if (strcmp(name, "DEF") == 0)
|
||||
if (xvt_str_same(name, "DEF"))
|
||||
{
|
||||
const char* prfx = CGetPref();
|
||||
xvt_fsys_parse_pathname(prfx, NULL, NULL, _prefix.get_buffer(), NULL, NULL);
|
||||
@ -1080,12 +1086,11 @@ bool TPrefix::exist(long codditta) const
|
||||
|
||||
bool TPrefix::test(const char* s) const
|
||||
{
|
||||
if (s && *s && strcmp(s, "DEF") != 0)
|
||||
if (s && *s && !xvt_str_same(s, "DEF"))
|
||||
{
|
||||
TFilename s1(__ptprf);
|
||||
s1.add(s);
|
||||
s1.add("dir.gen");
|
||||
|
||||
s1.add("dir.gen");
|
||||
if (s1.exist())
|
||||
{
|
||||
if (xvt_fsys_access(s1, 0x2) != 0)
|
||||
|
@ -54,8 +54,8 @@ public:
|
||||
void notify_change(TIsam_handle name);
|
||||
long last_change(TIsam_handle name) const;
|
||||
|
||||
int close_closeable();
|
||||
void close_all();
|
||||
int close_closeable(bool firm_only = false);
|
||||
void close_all(bool firm_only = false);
|
||||
void open_all();
|
||||
|
||||
TFile_manager();
|
||||
@ -138,19 +138,16 @@ public:
|
||||
// @cmember Setta lo studio corrente
|
||||
bool set_studio(const char* study, long firm = 0);
|
||||
// @cmember Ritorna il contenuto della variabile <p _prefix>
|
||||
const char* name() const
|
||||
{ return _prefix;}
|
||||
const char* name() const { return _prefix; }
|
||||
// @cmember Ritorna il livello degli archivi
|
||||
unsigned int filelevel() const
|
||||
{return _filelevel;}
|
||||
unsigned int filelevel() const { return _filelevel; }
|
||||
|
||||
// @cmember Ritorna il livello standard degli archivi
|
||||
unsigned int get_stdlevel() const { return _stdlevel; }
|
||||
void set_stdlevel(unsigned int sl) { _stdlevel = sl; }
|
||||
|
||||
// @cmember Ritorna il numero di archivi
|
||||
int items() const
|
||||
{ return _items; }
|
||||
int items() const { return _items; }
|
||||
// @cmember Ritorna la descrizione del file passato
|
||||
const char* description(const char* cod) const;
|
||||
// @cmember Ritorna la descrizione del file passato
|
||||
@ -166,7 +163,7 @@ public:
|
||||
// @cmember Riapre tutti gli archivi della ditta attiva
|
||||
void reopen() const ;
|
||||
|
||||
TIsam_handle open_isamfile(int& logicnum, TFilename& name, bool excl = FALSE, bool idx = TRUE)
|
||||
TIsam_handle open_isamfile(int& logicnum, TFilename& name, bool excl = false, bool idx = true)
|
||||
{ return _manager.open(logicnum, name, excl, idx); }
|
||||
|
||||
int close_isamfile(TIsam_handle& name)
|
||||
|
@ -55,11 +55,11 @@
|
||||
#define RDOC_DAPROVV "DAPROVV"
|
||||
#define RDOC_DANDOC "DANDOC"
|
||||
#define RDOC_DAIDRIGA "DAIDRIGA"
|
||||
#define RDOC_ACODNUM "DACODNUM"
|
||||
#define RDOC_AANNO "DAANNO"
|
||||
#define RDOC_APROVV "DAPROVV"
|
||||
#define RDOC_ANDOC "DANDOC"
|
||||
#define RDOC_AIDRIGA "DAIDRIGA"
|
||||
#define RDOC_ACODNUM "ACODNUM"
|
||||
#define RDOC_AANNO "AANNO"
|
||||
#define RDOC_APROVV "APROVV"
|
||||
#define RDOC_ANDOC "ANDOC"
|
||||
#define RDOC_AIDRIGA "AIDRIGA"
|
||||
#define RDOC_CODCMS "CODCMS"
|
||||
#define RDOC_FASCMS "FASCMS"
|
||||
#define RDOC_CODCOSTO "CODCOSTO"
|
||||
|
@ -5,16 +5,13 @@
|
||||
#include <colors.h>
|
||||
#include <dongle.h>
|
||||
#include <expr.h>
|
||||
#include <modaut.h>
|
||||
#include <progind.h>
|
||||
#include <recarray.h>
|
||||
#include <recset.h>
|
||||
#include <relation.h>
|
||||
#include <sheet.h>
|
||||
#include <utility.h>
|
||||
#include <xml.h>
|
||||
|
||||
#include <statbar.h>
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// Utility
|
||||
///////////////////////////////////////////////////////////
|
||||
@ -105,7 +102,7 @@ bool TRecordset::save_as_html(const char* path)
|
||||
if (out.fail())
|
||||
return false;
|
||||
|
||||
TProgind pi(items(), TR("Esportazione in corso..."), true, true);
|
||||
TProgress_monitor pi(items(), TR("Esportazione in corso..."), true);
|
||||
|
||||
out << "<html>" << endl;
|
||||
save_html_head(out, main_app().title());
|
||||
@ -177,7 +174,7 @@ bool TRecordset::save_as_html(const char* path)
|
||||
TString val;
|
||||
for (bool ok = move_first(); ok; ok = move_next())
|
||||
{
|
||||
if (!pi.addstatus(1))
|
||||
if (!pi.add_status())
|
||||
break;
|
||||
|
||||
out << " <tr>" << endl;
|
||||
@ -235,7 +232,7 @@ bool TRecordset::save_as_html(const char* path)
|
||||
out << "</body>" << endl;
|
||||
out << "</html>" << endl;
|
||||
|
||||
return !pi.iscancelled();
|
||||
return !pi.is_cancelled();
|
||||
}
|
||||
|
||||
bool TRecordset::save_as_text(const char* path)
|
||||
@ -244,7 +241,7 @@ bool TRecordset::save_as_text(const char* path)
|
||||
if (out.fail())
|
||||
return false;
|
||||
|
||||
TProgind pi(items(), TR("Esportazione in corso..."), true, true);
|
||||
TProgress_monitor pi(items(), TR("Esportazione in corso..."), true);
|
||||
|
||||
TString val;
|
||||
const char sep = text_separator();
|
||||
@ -291,11 +288,11 @@ bool TRecordset::save_as_text(const char* path)
|
||||
}
|
||||
}
|
||||
out << endl;
|
||||
if (!pi.addstatus(1))
|
||||
if (!pi.add_status())
|
||||
break;
|
||||
}
|
||||
|
||||
return !pi.iscancelled();
|
||||
return !pi.is_cancelled();
|
||||
}
|
||||
|
||||
bool TRecordset::save_as_campo(const char* path)
|
||||
@ -304,7 +301,7 @@ bool TRecordset::save_as_campo(const char* path)
|
||||
if (out.fail())
|
||||
return false;
|
||||
|
||||
TProgind pi(items(), TR("Esportazione in corso..."), true, true);
|
||||
TProgress_monitor pi(items(), TR("Esportazione in corso..."), true);
|
||||
|
||||
out << "[Head]" << endl;
|
||||
out << "Version=0";
|
||||
@ -349,10 +346,10 @@ bool TRecordset::save_as_campo(const char* path)
|
||||
}
|
||||
}
|
||||
out << endl;
|
||||
if (!pi.addstatus(1))
|
||||
if (!pi.add_status())
|
||||
break;
|
||||
}
|
||||
return !pi.iscancelled();
|
||||
return !pi.is_cancelled();
|
||||
}
|
||||
|
||||
bool TRecordset::save_as_dbf(const char* table, int mode)
|
||||
@ -1647,7 +1644,7 @@ void TISAM_recordset::set(const char* use)
|
||||
|
||||
const TString& TISAM_recordset::driver_version() const
|
||||
{
|
||||
TString& tmp = get_tmp_string(20);
|
||||
TString& tmp = get_tmp_string();
|
||||
DB_version(tmp.get_buffer(), tmp.size());
|
||||
return tmp;
|
||||
}
|
||||
|
@ -1,22 +1,18 @@
|
||||
#ifndef __RECORDSET_H
|
||||
#define __RECORDSET_H
|
||||
|
||||
#ifndef __ASSOC_H
|
||||
#include <assoc.h>
|
||||
#ifndef XVT_INCL_XVT
|
||||
#include <xvt.h>
|
||||
#endif
|
||||
|
||||
#ifndef __SHEET_H
|
||||
#include <sheet.h>
|
||||
#ifndef __RELATION_H
|
||||
#include <relation.h>
|
||||
#endif
|
||||
|
||||
#ifndef __VARIANT_H
|
||||
#include <variant.h>
|
||||
#endif
|
||||
|
||||
#ifndef __XVT_H
|
||||
#include <xvt.h>
|
||||
#endif
|
||||
|
||||
struct TRecordset_column_info : public TObject
|
||||
{
|
||||
TString _name; // Table.Column
|
||||
@ -40,16 +36,16 @@ struct TAttributes : public TObject
|
||||
COLOR _back;
|
||||
COLOR _fore;
|
||||
|
||||
public:
|
||||
XVT_FNTID get_font() const{ return _font; }
|
||||
COLOR get_background() const { return _back; }
|
||||
COLOR get_foreground() const { return _fore; }
|
||||
void set_font(XVT_FNTID font) { _font = font; }
|
||||
void set_background(COLOR back) { _back = back; }
|
||||
void set_foreground(COLOR fore) { _fore = fore; }
|
||||
public:
|
||||
XVT_FNTID get_font() const{ return _font; }
|
||||
COLOR get_background() const { return _back; }
|
||||
COLOR get_foreground() const { return _fore; }
|
||||
void set_font(XVT_FNTID font) { _font = font; }
|
||||
void set_background(COLOR back) { _back = back; }
|
||||
void set_foreground(COLOR fore) { _fore = fore; }
|
||||
|
||||
TAttributes() : _font(NULL), _back(COLOR_INVALID), _fore(COLOR_INVALID) {}
|
||||
virtual ~TAttributes() {}
|
||||
TAttributes() : _font(NULL), _back(COLOR_INVALID), _fore(COLOR_INVALID) {}
|
||||
virtual ~TAttributes() {}
|
||||
};
|
||||
|
||||
|
||||
@ -163,22 +159,6 @@ public:
|
||||
virtual ~TISAM_recordset();
|
||||
};
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// TRecordset_sheet
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
class TRecordset_sheet : public TSheet
|
||||
{
|
||||
TRecordset& _query;
|
||||
|
||||
protected:
|
||||
virtual void get_row(long r, TToken_string& row);
|
||||
virtual long get_items() const;
|
||||
|
||||
public:
|
||||
TRecordset_sheet(TRecordset& sql, const char* title = "Query", byte buttons = 0);
|
||||
};
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// Utility
|
||||
///////////////////////////////////////////////////////////
|
||||
|
@ -2039,7 +2039,7 @@ bool TRelation_application::mask2mail(const TMask& m)
|
||||
bool ok = _curr_trans_from.empty() && ::can_dispatch_transaction(get_relation()->curr());
|
||||
if (ok)
|
||||
{
|
||||
TFilename ininame; ininame.temp();
|
||||
TFilename ininame; ininame.temp("msg", "ini");
|
||||
if (ok) // Test qualunque per usare {}
|
||||
{
|
||||
TConfig ini(ininame, "Transaction");
|
||||
|
@ -1,9 +1,9 @@
|
||||
#include <colors.h>
|
||||
#include <defmask.h>
|
||||
#include <expr.h>
|
||||
#include <mask.h>
|
||||
#include <printer.h>
|
||||
#include <recarray.h>
|
||||
#include <relation.h>
|
||||
#include <reprint.h>
|
||||
#include <utility.h>
|
||||
#include <xml.h>
|
||||
@ -2989,9 +2989,9 @@ void TReport::msg_isam_read(TVariant_stack& stack)
|
||||
else
|
||||
{
|
||||
TLocalisamfile file(logicnum);
|
||||
file.setkey(fkey);
|
||||
TRectype& rec = file.curr();
|
||||
rec = keyrec;
|
||||
file.setkey(fkey);
|
||||
if (file.read() != NOERR)
|
||||
rec.zero();
|
||||
do_isam_read_output(rec, out); // Se rec e' vuoto azzera gli outputs
|
||||
|
@ -1907,7 +1907,7 @@ void TBook::split_file(int colonne)
|
||||
{
|
||||
TProgind pi(pages(), TR("Rigenerazione pagine"), true, true);
|
||||
|
||||
TFilename temp; temp.temp();
|
||||
TFilename temp; temp.temp("bck");
|
||||
ofstream out(temp);
|
||||
TPointer_array index;
|
||||
|
||||
@ -1979,7 +1979,7 @@ void TBook::join_file(int pps)
|
||||
{
|
||||
TProgind pi(pages(), TR("Rigenerazione pagine"), true, true);
|
||||
|
||||
TFilename temp; temp.temp();
|
||||
TFilename temp; temp.temp("bck");
|
||||
ofstream out(temp);
|
||||
|
||||
close_output(); // Chiudo file di stampa eventualmente aperto
|
||||
@ -2178,7 +2178,7 @@ bool TBook::export_pdf(TFilename& filename, bool signature)
|
||||
{
|
||||
// Evita problemi di aggiornamento del pdf: deve sempre rigenerarlo!
|
||||
if (filename.exist() && !filename.fremove())
|
||||
return error_box(FR("Impossibile riscrivere %s"), (const char*)filename);
|
||||
return cantwrite_box(filename);
|
||||
|
||||
_pdf_file = filename;
|
||||
_pagefrom = 1;
|
||||
|
@ -1,10 +1,6 @@
|
||||
#ifndef __SCANNER_H
|
||||
#define __SCANNER_H
|
||||
|
||||
#ifndef INCSTR_H
|
||||
#include <incstr.h>
|
||||
#endif
|
||||
|
||||
#ifndef __STRINGS_H
|
||||
#include <strings.h>
|
||||
#endif
|
||||
|
@ -78,7 +78,7 @@ public:
|
||||
|
||||
void enable_row(long r, bool on);
|
||||
void disable_row(long r);
|
||||
bool row_enabled(long n) const { return _disabled[n] == FALSE; }
|
||||
bool row_enabled(long n) const { return !_disabled[n]; }
|
||||
bool one_enabled() const { return _disabled.ones() < _sheet->items(); }
|
||||
|
||||
byte column_type(int c) const { CHECKD(c >= 0 && c < MAX_COL, "Bad column ", c); return _type[c]; }
|
||||
@ -106,8 +106,8 @@ TSheet_control::TSheet_control(
|
||||
short dy, // @parm Lunghezza (in caratteri) dello spreasheet
|
||||
const char* flags, // @parm Flags di abilitazione
|
||||
const char* head) // @parm Titolo delle colonne
|
||||
: _sheet(NULL), _cur_rec(0), _check_enabled(FALSE),
|
||||
_save_columns_order(FALSE)
|
||||
: _sheet(NULL), _cur_rec(0), _check_enabled(false),
|
||||
_save_columns_order(false)
|
||||
|
||||
{
|
||||
const int NUMBER_WIDTH = 7;
|
||||
@ -173,7 +173,7 @@ TSheet_control::TSheet_control(
|
||||
if (i == 0 && v <= 1)
|
||||
{
|
||||
_type[i] = 'C';
|
||||
_check_enabled = TRUE;
|
||||
_check_enabled = true;
|
||||
fixed_columns++;
|
||||
f_width += v+1;
|
||||
}
|
||||
@ -221,15 +221,15 @@ TSheet_control::TSheet_control(
|
||||
XI_LIST_DEF* l = listdef->v.list;
|
||||
l->min_heading_height = xi_button_calc_height_font(xi_get_system_font()) * lines_in_header;
|
||||
l->max_lines_in_cell = lines_in_cell;
|
||||
l->sizable_columns = TRUE;
|
||||
l->movable_columns = TRUE;
|
||||
l->sizable_columns = true;
|
||||
l->movable_columns = true;
|
||||
l->fixed_columns = fixed_columns;
|
||||
l->scroll_bar = TRUE;
|
||||
l->scroll_bar_button = TRUE;
|
||||
l->scroll_bar = true;
|
||||
l->scroll_bar_button = true;
|
||||
l->white_space_color = MASK_DARK_COLOR;
|
||||
l->rule_color = MASK_DARK_COLOR;
|
||||
#ifdef LINUX
|
||||
l->scroll_on_thumb_track = TRUE;
|
||||
l->scroll_on_thumb_track = true;
|
||||
#endif
|
||||
|
||||
// Definizione della prima colonna (numero di riga)
|
||||
@ -238,9 +238,9 @@ TSheet_control::TSheet_control(
|
||||
2 * XI_FU_MULTIPLE, NUMBER_WIDTH , "");
|
||||
|
||||
coldef->app_data = (long)this;
|
||||
coldef->v.column->heading_platform = TRUE;
|
||||
coldef->v.column->column_platform = TRUE;
|
||||
coldef->v.column->center_heading = TRUE;
|
||||
coldef->v.column->heading_platform = true;
|
||||
coldef->v.column->column_platform = true;
|
||||
coldef->v.column->center_heading = true;
|
||||
|
||||
for (h = new_header.get(0), i = 0; h && i < MAX_COL; h = new_header.get(), i++)
|
||||
{
|
||||
@ -253,10 +253,10 @@ TSheet_control::TSheet_control(
|
||||
v_width[i] * XI_FU_MULTIPLE, m_width[i], (char*)h);
|
||||
|
||||
coldef->app_data = (long)this;
|
||||
coldef->v.column->heading_platform = TRUE;
|
||||
coldef->v.column->center_heading = TRUE;
|
||||
coldef->v.column->heading_platform = true;
|
||||
coldef->v.column->center_heading = true;
|
||||
if (m_width[i] > 64)
|
||||
coldef->v.column->wrap_text = TRUE;
|
||||
coldef->v.column->wrap_text = true;
|
||||
|
||||
if (i == 0 && _type[i] == 'C')
|
||||
{
|
||||
@ -395,6 +395,7 @@ void TSheet_control::make_current(long rec)
|
||||
{
|
||||
XI_MAKE_ROW(&o, _obj, newrow);
|
||||
xi_cell_request(&o);
|
||||
_obj->v.list->focus_cell->v.cell.row = newrow;
|
||||
}
|
||||
}
|
||||
|
||||
@ -493,7 +494,7 @@ void TSheet_control::enable_check(bool on)
|
||||
|
||||
bool TSheet_control::one_checked() const
|
||||
{
|
||||
bool yes = FALSE;
|
||||
bool yes = false;
|
||||
if (check_enabled())
|
||||
{
|
||||
const long first = _checked.first_one();
|
||||
@ -507,8 +508,8 @@ void TSheet_control::check(
|
||||
long n, // @parm Numero della riga da attivare/disattivare
|
||||
bool on) // @parm Operazione da effettuare sulla riga:
|
||||
//
|
||||
// @flag TRUE | Attiva la riga <p n>.esima (default)
|
||||
// @flag FALSE | Disattiva la riga <p n>.esima
|
||||
// @flag true | Attiva la riga <p n>.esima (default)
|
||||
// @flag false | Disattiva la riga <p n>.esima
|
||||
{
|
||||
if (n < 0)
|
||||
{
|
||||
@ -566,8 +567,8 @@ void TSheet_control::enable_row(
|
||||
long n, // @parm Numero della riga da abilitare/diabilitare (default -1)
|
||||
bool on) // @parm Operazione da svolgere sulla riga
|
||||
//
|
||||
// @flag TRUE | Abilita la riga <p n>-esima (default)
|
||||
// @flag FALSE | Disabilita la riga <p n>-esima
|
||||
// @flag true | Abilita la riga <p n>-esima (default)
|
||||
// @flag false | Disabilita la riga <p n>-esima
|
||||
|
||||
// @comm Se <p n> e' minore di 0 allora vengono abilitate/disabilitate tutte le righe
|
||||
{
|
||||
@ -603,7 +604,7 @@ void TSheet_control::save_columns_order(const TEdit_field& field) const
|
||||
TConfig config(CONFIG_USER, parag); // Apre il file di configurazione
|
||||
|
||||
TToken_string order(127); // Nuovo ordine delle colonne
|
||||
if (_save_columns_order == TRUE) // Se vale 3 devo solo resettare
|
||||
if (_save_columns_order == 1) // Se vale 3 devo solo resettare
|
||||
{
|
||||
int num;
|
||||
XI_OBJ** column = xi_get_member_list(_obj, &num);
|
||||
@ -624,7 +625,7 @@ void TSheet_control::save_columns_order(const TEdit_field& field) const
|
||||
RCT rct; xi_get_rect(column[i], (XinRect *) &rct);
|
||||
order << ',' << rct.right - rct.left;
|
||||
}
|
||||
config.set("Browse", order, NULL, TRUE, field.dlg());
|
||||
config.set("Browse", order, NULL, true, field.dlg());
|
||||
}
|
||||
else
|
||||
config.remove("Browse", field.dlg());
|
||||
@ -645,7 +646,7 @@ void TSheet_control::load_columns_order(const TEdit_field& field)
|
||||
else
|
||||
set_columns_order(&order);
|
||||
}
|
||||
_save_columns_order = FALSE;
|
||||
_save_columns_order = false;
|
||||
}
|
||||
|
||||
void TSheet_control::align_column(int c, bool right)
|
||||
@ -713,7 +714,8 @@ void TSheet_control::set_columns_order(TToken_string* order)
|
||||
xi_set_focus(focus);
|
||||
}
|
||||
|
||||
HIDDEN long _rec_to_select = -1;
|
||||
// HIDDEN long _rec_to_select = -1;
|
||||
|
||||
// Certified 75%
|
||||
bool TSheet_control::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
|
||||
{
|
||||
@ -729,7 +731,7 @@ bool TSheet_control::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
|
||||
xiev->v.rec_request.data_rec = n;
|
||||
}
|
||||
else
|
||||
refused = TRUE;
|
||||
refused = true;
|
||||
break;
|
||||
case XIE_GET_LAST:
|
||||
xiev->v.rec_request.data_rec = items()-1;
|
||||
@ -739,7 +741,7 @@ bool TSheet_control::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
|
||||
{
|
||||
const long n = xiev->v.rec_request.spec_rec + (xiev->type == XIE_GET_NEXT ? +1 : -1) ;
|
||||
if (n < 0 || n >= items())
|
||||
refused = TRUE;
|
||||
refused = true;
|
||||
else
|
||||
xiev->v.rec_request.data_rec = n;
|
||||
}
|
||||
@ -803,7 +805,7 @@ bool TSheet_control::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
|
||||
_sheet->get_cell_colors(rec, col, xiev->v.cell_request.color, xiev->v.cell_request.back_color);
|
||||
}
|
||||
else
|
||||
refused = TRUE;
|
||||
refused = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -831,7 +833,7 @@ bool TSheet_control::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
|
||||
_sheet->stop_run(K_ENTER);
|
||||
}
|
||||
else
|
||||
refused = TRUE;
|
||||
refused = true;
|
||||
}
|
||||
break;
|
||||
case XIE_ON_LIST:
|
||||
@ -842,7 +844,7 @@ bool TSheet_control::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
|
||||
const long rec = row2rec(xiev->v.xi_obj->v.row);
|
||||
if (_disabled[rec])
|
||||
{
|
||||
refused = TRUE;
|
||||
refused = true;
|
||||
// Cerca la prossima riga abilitata e valida
|
||||
const int dir = rec > selected() ? +1: -1;
|
||||
const long max = items();
|
||||
@ -854,10 +856,13 @@ bool TSheet_control::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
if (_sheet->_select_row < 0)
|
||||
make_current(rec);
|
||||
else
|
||||
_rec_to_select = rec;
|
||||
*/
|
||||
_sheet->post_select(rec);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -896,21 +901,21 @@ bool TSheet_control::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
|
||||
make_current(rec);
|
||||
}
|
||||
}
|
||||
refused = TRUE;
|
||||
refused = true;
|
||||
break;
|
||||
case XIE_COL_MOVE:
|
||||
if (xiev->v.column.in_fixed ||
|
||||
xiev->v.column.col_nbr < xi_get_fixed_columns(xiev->v.column.list))
|
||||
refused = TRUE;
|
||||
refused = true;
|
||||
else
|
||||
_save_columns_order = TRUE;
|
||||
_save_columns_order = true;
|
||||
break;
|
||||
case XIE_COL_SIZE:
|
||||
{
|
||||
if (_obj->v.list->hsb_win)
|
||||
_save_columns_order = TRUE;
|
||||
_save_columns_order = true;
|
||||
else
|
||||
refused = TRUE; // Non permetto il resize in assenza di scroll bar orizzontale
|
||||
refused = true; // Non permetto il resize in assenza di scroll bar orizzontale
|
||||
}
|
||||
break;
|
||||
case XIE_BUTTON:
|
||||
@ -956,7 +961,7 @@ bool TSheet_control::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
|
||||
if (rec >= 0)
|
||||
{
|
||||
_sheet->post_select(rec);
|
||||
refused = TRUE;
|
||||
refused = true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -1025,6 +1030,12 @@ TSheet::TSheet(short x, short y, short dx, short dy,
|
||||
|
||||
add_button(DLG_EXPORT, TR("~Excel"), 0, TOOL_EXCEL);
|
||||
set_handler(DLG_EXPORT, export_handler);
|
||||
|
||||
if (buttons & 0x20)
|
||||
{
|
||||
add_button(DLG_EDIT, TR("~Filtro"), K_CTRL+'F', TOOL_ELABORA);
|
||||
set_handler(DLG_EDIT, filtro_handler);
|
||||
}
|
||||
|
||||
if (buttons & 0x08) add_button(DLG_QUIT, "Fine", K_ESC, TOOL_QUIT);
|
||||
else add_button(DLG_CANCEL, "Annulla", K_ESC, TOOL_CANCEL);
|
||||
@ -1151,7 +1162,8 @@ void TSheet::force_update(int r)
|
||||
|
||||
void TSheet::start_run()
|
||||
{
|
||||
const bool on = items() > 0 && _sheet->one_enabled();
|
||||
const long imax = items();
|
||||
const bool on = imax > 0 && _sheet->one_enabled();
|
||||
|
||||
// Abilita selezione se c'e' almeno un elemento
|
||||
int pos = id2pos(DLG_SELECT);
|
||||
@ -1170,11 +1182,11 @@ void TSheet::start_run()
|
||||
if (on)
|
||||
{
|
||||
long i = selected();
|
||||
if (i < 0 || i >= items())
|
||||
if (i < 0 || i >= imax)
|
||||
i = 0;
|
||||
if (row_disabled(i))
|
||||
for (i = 0; row_disabled(i); i++);
|
||||
post_select(i);
|
||||
for (; i < imax && row_disabled(i); i++);
|
||||
if (i >= 0 && i < imax && i != selected())
|
||||
post_select(i);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1247,7 +1259,7 @@ bool TSheet::on_key(KEY key)
|
||||
f.on_key(K_SPACE);
|
||||
if (b.exit_key() > 0)
|
||||
stop_run(b.exit_key());
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1294,10 +1306,13 @@ void TSheet::on_idle()
|
||||
{
|
||||
if (_select_row >= 0)
|
||||
{
|
||||
const short focus_id = low_get_focus_id(curr_win());
|
||||
_sheet->select(_select_row);
|
||||
if (focus_id == _sheet->id())
|
||||
_sheet->set_focus_rec(-1);
|
||||
if (_select_row < items())
|
||||
{
|
||||
const short focus_id = low_get_focus_id(curr_win());
|
||||
_sheet->select(_select_row);
|
||||
if (focus_id == _sheet->id())
|
||||
_sheet->set_focus_rec(-1);
|
||||
}
|
||||
_select_row = -1;
|
||||
}
|
||||
TMask::on_idle();
|
||||
@ -1462,6 +1477,20 @@ bool TSheet::export_handler(TMask_field& f, KEY k)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TSheet::filter_dialog()
|
||||
{ return sorry_box("Filtro non attivabile"); }
|
||||
|
||||
bool TSheet::filtro_handler(TMask_field& f, KEY k)
|
||||
{
|
||||
if (k == K_SPACE)
|
||||
{
|
||||
TSheet& s = (TSheet&)f.mask();
|
||||
s.filter_dialog();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void TSheet::save_columns_order(const TEdit_field& field)
|
||||
{ sheet().save_columns_order(field); }
|
||||
|
||||
@ -1583,7 +1612,7 @@ TCursor_sheet::TCursor_sheet(TCursor* cursor, const char* fields,
|
||||
{
|
||||
const byte c = sheet().column_type(campo);
|
||||
if (c == ' ')
|
||||
sheet().align_column(campo, TRUE);
|
||||
sheet().align_column(campo, true);
|
||||
}
|
||||
|
||||
_key_cols.set(campo, in_key(fr));
|
||||
@ -1591,17 +1620,17 @@ TCursor_sheet::TCursor_sheet(TCursor* cursor, const char* fields,
|
||||
}
|
||||
}
|
||||
|
||||
HIDDEN bool _can_post = FALSE;
|
||||
HIDDEN bool _can_post = false;
|
||||
|
||||
KEY TCursor_sheet::run()
|
||||
{
|
||||
_cursor->freeze(TRUE);
|
||||
_cursor->freeze(true);
|
||||
|
||||
select(_cursor->pos());
|
||||
_can_post = TRUE;
|
||||
_can_post = true;
|
||||
|
||||
const KEY k = TSheet::run();
|
||||
_cursor->freeze(FALSE);
|
||||
_cursor->freeze(false);
|
||||
return k;
|
||||
}
|
||||
|
||||
@ -1632,6 +1661,75 @@ bool TCursor_sheet::get_cell_colors(int row, int col, COLOR& fore, COLOR& back)
|
||||
return TSheet::get_cell_colors(row, col, fore, back);
|
||||
}
|
||||
|
||||
bool TCursor_sheet::filter_dialog()
|
||||
{
|
||||
TRectype rec = _cursor->curr();
|
||||
const RecDes& rd = rec.rec_des();
|
||||
const KeyDes& k0 = rd.Ky[0];
|
||||
const int kfields = k0.NkFields;
|
||||
|
||||
TMask m(TR("Filtro"), 1, 78, kfields+5);
|
||||
m.add_button_tool(DLG_OK, "", TOOL_OK);
|
||||
m.add_button_tool(DLG_CANCEL, "", TOOL_CANCEL);
|
||||
for (int i = 0; i < kfields; i++)
|
||||
{
|
||||
const int nf = k0.FieldSeq[i] % MaxFields;
|
||||
const char* fname = rec.fieldname(nf);
|
||||
const TFieldtypes ft = rec.type(fname);
|
||||
TString16 prompt = fname; prompt.left_just(12);
|
||||
TString4 flags;
|
||||
switch (ft)
|
||||
{
|
||||
case _alfafld:
|
||||
case _charfld:
|
||||
m.add_string(101+i, 0, prompt, 1, i+1, rec.length(fname), flags).set_field(fname);
|
||||
break;
|
||||
case _intzerofld:
|
||||
case _longzerofld:
|
||||
flags << "Z";
|
||||
case _wordfld:
|
||||
case _intfld:
|
||||
case _longfld:
|
||||
m.add_number(101+i, 0, prompt, 1, i+1, rec.length(fname), flags).set_field(fname);
|
||||
break;
|
||||
case _datefld:
|
||||
m.add_date(101+i, 0, prompt, 1, i+1, flags).set_field(fname);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < kfields-1; i++)
|
||||
{
|
||||
const int nf = k0.FieldSeq[i] % MaxFields;
|
||||
const char* fname = rec.fieldname(nf);
|
||||
TMask_field* f = m.find_by_fieldname(fname);
|
||||
if (f)
|
||||
f->set(rec.get(fname));
|
||||
}
|
||||
|
||||
if (m.run() == K_ENTER)
|
||||
{
|
||||
rec.zero();
|
||||
for (int i = 0; i < kfields; i++)
|
||||
{
|
||||
const int nf = k0.FieldSeq[i] % MaxFields;
|
||||
const char* fname = rec.fieldname(nf);
|
||||
const TMask_field* f = m.find_by_fieldname(fname);
|
||||
if (f) rec.put(fname, f->get());
|
||||
}
|
||||
|
||||
TWait_cursor hourglass;
|
||||
_cursor->freeze(false);
|
||||
_cursor->setregion(rec, rec);
|
||||
_cursor->items();
|
||||
_cursor->freeze(true);
|
||||
force_update();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// TBrowse_sheet
|
||||
///////////////////////////////////////////////////////////
|
||||
@ -1708,12 +1806,12 @@ bool TBrowse_sheet::browse_field_handler(TMask_field& f, KEY k)
|
||||
if (rec >= 0 && rec != _cur_browse->selected())
|
||||
{
|
||||
_cur_browse->select(rec); // Non mettere post_select
|
||||
_can_post = TRUE;
|
||||
_can_post = true;
|
||||
|
||||
RCT r; f.get_rect(r);
|
||||
xvt_dwin_invalidate_rect(f.parent(), &r); // Non ricordo a cosa serva aggiornare il campo di testo
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TBrowse_sheet::last_browse_field_handler(TMask_field& f, KEY k)
|
||||
@ -1724,7 +1822,7 @@ bool TBrowse_sheet::last_browse_field_handler(TMask_field& f, KEY k)
|
||||
if (k == K_TAB && _can_post)
|
||||
{
|
||||
_cur_browse->post_select(_cur_browse->selected());
|
||||
_can_post = FALSE;
|
||||
_can_post = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1797,6 +1895,7 @@ long TBrowse_sheet::handler(
|
||||
}
|
||||
break;
|
||||
default:
|
||||
/*
|
||||
{
|
||||
RCT r; sheet().get_rect(r);
|
||||
if (xvt_rect_has_point(&r, ep->v.mouse.where) && _rec_to_select >= 0)
|
||||
@ -1805,6 +1904,7 @@ long TBrowse_sheet::handler(
|
||||
_rec_to_select = -1;
|
||||
}
|
||||
}
|
||||
*/
|
||||
break;
|
||||
}
|
||||
break;
|
||||
@ -1834,7 +1934,7 @@ long TBrowse_sheet::handler(
|
||||
return TCursor_sheet::handler(win, ep);
|
||||
}
|
||||
|
||||
bool lst_handler(TMask_field& lst, KEY k)
|
||||
static bool keysel_handler(TMask_field& lst, KEY k)
|
||||
{
|
||||
if (k == K_SPACE)
|
||||
{
|
||||
@ -1848,24 +1948,26 @@ bool lst_handler(TMask_field& lst, KEY k)
|
||||
return true;
|
||||
}
|
||||
|
||||
#define DLG_KEY_SELECTOR 69
|
||||
|
||||
void TBrowse_sheet::create_key_selector(TToken_string& ca)
|
||||
{
|
||||
const int items = ca.items();
|
||||
if (items > 1)
|
||||
{
|
||||
TToken_string co;
|
||||
TToken_string co(3*items);
|
||||
for (int i = 0; i < items; i++)
|
||||
co.add(i);
|
||||
|
||||
TList_field& lst = add_list(69, 0, PR("Ordinamento per "), 1, 0, 16, "", co, ca);
|
||||
lst.set_handler(lst_handler);
|
||||
TList_field& lst = add_list(DLG_KEY_SELECTOR, 0, PR("Ordinamento per "), 1, 0, 16, "", co, ca);
|
||||
lst.set_handler(keysel_handler);
|
||||
}
|
||||
}
|
||||
|
||||
void TBrowse_sheet::update_key_selector(int sel)
|
||||
{
|
||||
if (id2pos(69) >= 0) // Has been created?
|
||||
set(69, sel, 0); // Don't fire any events!
|
||||
TMask_field* ks = find_by_id(DLG_KEY_SELECTOR);
|
||||
if (ks != NULL) // Has been created?
|
||||
ks->set(sel); // Don't fire any events!
|
||||
}
|
||||
|
||||
TBrowse_sheet::TBrowse_sheet(TCursor* cursor, const char* fields,
|
||||
@ -2020,6 +2122,10 @@ KEY TBrowse_sheet::run()
|
||||
{
|
||||
_cur_browse = this;
|
||||
update_key_selector(_sel);
|
||||
|
||||
TMask_field* f = find_by_id(field().dlg());
|
||||
if (f && !f->empty())
|
||||
browse_field_handler(*f, K_SPACE); // Posizione iniziale
|
||||
const KEY key = TCursor_sheet::run();
|
||||
_cur_browse = NULL;
|
||||
return key;
|
||||
|
@ -31,13 +31,15 @@ protected: // TMask
|
||||
|
||||
static bool tutti_handler(TMask_field& f, KEY k);
|
||||
static bool export_handler(TMask_field& f, KEY k);
|
||||
static bool filtro_handler(TMask_field& f, KEY k);
|
||||
|
||||
protected:
|
||||
void reset_parked() { _parked = -1; }
|
||||
virtual void get_row(long r, TToken_string& row) { row.cut(0); }
|
||||
virtual long get_items() const { return 0L; }
|
||||
virtual bool get_ini_paragraph(const TEdit_field& owner, TString& parag) const;
|
||||
|
||||
virtual bool filter_dialog();
|
||||
|
||||
TSheet_control& sheet();
|
||||
|
||||
// @cmember Permette di riposizionare i bottoni all'interno della pagina
|
||||
@ -191,6 +193,7 @@ protected: // TSheet
|
||||
|
||||
bool in_key(const TFieldref& fr) const;
|
||||
virtual bool get_cell_colors(int row, int col, COLOR& fore, COLOR& back) const;
|
||||
virtual bool filter_dialog();
|
||||
|
||||
// @access Public Member
|
||||
public: // TSheet
|
||||
@ -259,7 +262,6 @@ public:
|
||||
void add_custom_filter(const char* regexp);
|
||||
void set_custom_filter_handler(CONTROL_HANDLER custom_filter_handler) { _custom_filter_handler = custom_filter_handler;}
|
||||
|
||||
|
||||
// @cmember Costruttore
|
||||
TBrowse_sheet(TCursor* cursor, const char* fields, const char* title, const char* head, byte buttons, TEdit_field& f, TToken_string& siblings,CONTROL_HANDLER custom_filter_handler = NULL);
|
||||
// @cmember Distruttore
|
||||
@ -269,6 +271,26 @@ public:
|
||||
virtual KEY run();
|
||||
};
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// TRecordset_sheet
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef __RECORDSET_H
|
||||
class TRecordset;
|
||||
#endif
|
||||
|
||||
class TRecordset_sheet : public TSheet
|
||||
{
|
||||
TRecordset& _query;
|
||||
|
||||
protected:
|
||||
virtual void get_row(long r, TToken_string& row);
|
||||
virtual long get_items() const;
|
||||
|
||||
public:
|
||||
TRecordset_sheet(TRecordset& sql, const char* title = "Query", byte buttons = 0);
|
||||
};
|
||||
|
||||
#define FOR_EACH_CHECKED_ROW(__sheet, __r, __riga) \
|
||||
TToken_string* __riga = NULL; if ((__sheet).one_checked()) \
|
||||
for(long __r=0; __r < (__sheet).items() && (__riga = &(__sheet).row(__r))->not_empty(); __r++) \
|
||||
|
@ -72,12 +72,26 @@ sqlite3* TSQLite::open(const char* fname)
|
||||
|
||||
if (err == SQLITE_OK)
|
||||
{
|
||||
if (xvt_fsys_is_fixed_drive(_currdb.path()) &&
|
||||
ini_get_int(CONFIG_INSTALL, "Main", "Type") == 1) // Single user scenario
|
||||
{
|
||||
sqlite3_exec(_handle, "PRAGMA locking_mode=EXCLUSIVE", NULL, NULL, NULL);
|
||||
sqlite3_exec(_handle, "PRAGMA synchronous=OFF", NULL, NULL, NULL);
|
||||
sqlite3_exec(_handle, "PRAGMA journal_mode=WAL", NULL, NULL, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
sqlite3_exec(_handle, "PRAGMA locking_mode=NORMAL", NULL, NULL, NULL);
|
||||
sqlite3_exec(_handle, "PRAGMA synchronous=NORMAL", NULL, NULL, NULL);
|
||||
sqlite3_exec(_handle, "PRAGMA journal_mode=DELETE", NULL, NULL, NULL);
|
||||
}
|
||||
create_dbf_times();
|
||||
}
|
||||
else
|
||||
{
|
||||
const char* errmsg = sqlite3_errmsg(_handle); // Stringa di sitema: inutile sqlite3_free(errmsg)
|
||||
error_box(errmsg);
|
||||
_handle = NULL;
|
||||
}
|
||||
|
||||
return _handle;
|
||||
@ -224,27 +238,30 @@ bool TSQLite::bind_record(const TRectype& rec, const RecDes& rd, sqlite3_stmt* p
|
||||
bool TSQLite::import(int logicnum)
|
||||
{
|
||||
const TString& table = logic2table(logicnum);
|
||||
const bool already = exists(table);
|
||||
|
||||
long last = get_dbf_time(table);
|
||||
if (logicnum >= LF_USER) // Dummy test, 'last' should be updated ALWAYS!
|
||||
{
|
||||
TBaseisamfile file(logicnum);
|
||||
if (!file.is_changed_since(last))
|
||||
if (!file.is_changed_since(last) && already)
|
||||
return true;
|
||||
}
|
||||
else
|
||||
return false;
|
||||
|
||||
const RecDes& rd = prefix().get_recdes(logicnum);
|
||||
|
||||
TString sql;
|
||||
if (exists(table))
|
||||
if (already)
|
||||
{
|
||||
// Drop old table (and associated indexes?)
|
||||
sql.cut(0) << "DROP TABLE "<< table << ';';
|
||||
sql.cut(0) << "DROP TABLE " << table << ';';
|
||||
exec(sql);
|
||||
}
|
||||
|
||||
// Create new table
|
||||
sql.cut(0) << "CREATE TABLE "<< table << "\n(";
|
||||
sql.cut(0) << "CREATE TABLE " << table << "\n(";
|
||||
int i;
|
||||
for (i = 0; i < rd.NFields; i++)
|
||||
{
|
||||
@ -271,8 +288,7 @@ bool TSQLite::import(int logicnum)
|
||||
{
|
||||
cur.freeze();
|
||||
|
||||
msg << TR("Importazione tabella") << ' ' << table;
|
||||
msg << ": " << items << ' ' << TR("righe");
|
||||
msg << TR("Importazione ") << table << ": " << items << ' ' << TR("righe");
|
||||
TProgress_monitor pi(items, msg);
|
||||
|
||||
// Creo il comando INSERT INTO table VALUES(?,?,?,?,?,?);
|
||||
@ -284,6 +300,7 @@ bool TSQLite::import(int logicnum)
|
||||
}
|
||||
sql << ");";
|
||||
|
||||
TPerformance_profiler pp(msg);
|
||||
exec("BEGIN"); // Inizio transazione
|
||||
|
||||
sqlite3_stmt* pStatement = NULL;
|
||||
@ -292,11 +309,11 @@ bool TSQLite::import(int logicnum)
|
||||
const TRectype& curr = rel.curr();
|
||||
for (cur = 0; cur.pos() < items; ++cur)
|
||||
{
|
||||
if (!pi.add_status())
|
||||
break;
|
||||
bind_record(curr, rd, pStatement); // Sostituisce i ? coi veri valori
|
||||
rc = sqlite3_step(pStatement); // Ritorna sempre 101 (SQLITE_DONE)
|
||||
rc = sqlite3_reset(pStatement); // Azzero lo statement per ricominciare
|
||||
if (!pi.add_status())
|
||||
break;
|
||||
}
|
||||
rc = sqlite3_finalize(pStatement);
|
||||
|
||||
@ -306,13 +323,11 @@ bool TSQLite::import(int logicnum)
|
||||
if (rd.NKeys > 0)
|
||||
{
|
||||
// Creo gli indici DOPO l'importazione per maggiore velocita'
|
||||
msg.format("Creazione di %d indici sulla tabella %s", rd.NKeys, (const char*)table);
|
||||
TProgress_monitor pi(rd.NKeys, msg);
|
||||
|
||||
msg.format("Creazione di %d indici su %s", rd.NKeys, (const char*)table);
|
||||
TProgress_monitor pi(rd.NKeys, msg, false);
|
||||
exec("BEGIN"); // Inizio transazione
|
||||
for (int index = 0; index < rd.NKeys; index++)
|
||||
{
|
||||
if (!pi.addstatus(1))
|
||||
break;
|
||||
const KeyDes& kd = rd.Ky[index];
|
||||
sql = "CREATE ";
|
||||
if (!kd.DupKeys) sql << "UNIQUE ";
|
||||
@ -324,10 +339,10 @@ bool TSQLite::import(int logicnum)
|
||||
sql << rd.Fd[ndx].Name;
|
||||
}
|
||||
sql << ");";
|
||||
exec("BEGIN"); // Inizio transazione
|
||||
exec(sql);
|
||||
exec("COMMIT"); // Fine transazione
|
||||
pi.add_status();
|
||||
}
|
||||
exec("COMMIT"); // Fine transazione
|
||||
}
|
||||
|
||||
set_dbf_time(table, last); // Aggiorna ora di ultima modifica
|
||||
@ -341,22 +356,20 @@ bool TSQLite::parse_select_from(const char* szSql)
|
||||
|
||||
TString sql(szSql);
|
||||
sql.trim(); sql.upper();
|
||||
if (!sql.starts_with("SELECT"))
|
||||
if (!sql.starts_with("SELECT "))
|
||||
return false;
|
||||
|
||||
const int from = sql.find("FROM");
|
||||
const int from = sql.find("FROM ");
|
||||
if (from < 0)
|
||||
return false;
|
||||
|
||||
const int where_pos = sql.find("WHERE", from);
|
||||
const int where_pos = sql.find("WHERE ", from);
|
||||
TToken_string tables(sql.sub(from+5, where_pos), ',');
|
||||
TString table;
|
||||
|
||||
TProgress_monitor pi(tables.items(), TR("Importazione tabelle"));
|
||||
FOR_EACH_TOKEN(tables, tok)
|
||||
{
|
||||
if (!pi.add_status())
|
||||
break;
|
||||
table = tok;
|
||||
const int join_pos = table.find("JOIN ");
|
||||
if (join_pos > 0)
|
||||
@ -378,6 +391,8 @@ bool TSQLite::parse_select_from(const char* szSql)
|
||||
pi.set_text(table);
|
||||
import(logicnum);
|
||||
}
|
||||
if (!pi.add_status())
|
||||
break;
|
||||
}
|
||||
|
||||
return true;
|
||||
@ -486,9 +501,9 @@ TRecnotype TSQL_recordset::items() const
|
||||
{
|
||||
TString sql; parsed_text(sql);
|
||||
TPerformance_profiler prof("SQL query");
|
||||
_TheDataBase.exec("PRAGMA show_datatypes = ON;", NULL, NULL);
|
||||
_TheDataBase.exec("PRAGMA show_datatypes=ON;", NULL, NULL);
|
||||
_TheDataBase.exec(sql, query_get_items, (TSQL_recordset*)this);
|
||||
_TheDataBase.exec("PRAGMA show_datatypes = OFF;", NULL, NULL);
|
||||
_TheDataBase.exec("PRAGMA show_datatypes=OFF;", NULL, NULL);
|
||||
}
|
||||
return _items;
|
||||
}
|
||||
|
@ -1,3 +1,4 @@
|
||||
#pragma once
|
||||
#ifndef __STDTYPES_H
|
||||
#define __STDTYPES_H
|
||||
|
||||
@ -65,10 +66,6 @@ bool test_assistance_year();
|
||||
void init_global_vars();
|
||||
void free_global_vars();
|
||||
|
||||
#ifdef LINUX
|
||||
#define __int64 long long //verificare
|
||||
#endif
|
||||
|
||||
#endif // __STDTYPES_H
|
||||
|
||||
|
||||
|
@ -29,6 +29,9 @@ const int MAX_SIZE = 65535;
|
||||
inline bool is_space(char c)
|
||||
{ return c >= '\t' && c <= ' '; }
|
||||
|
||||
inline int round16(int n)
|
||||
{ const int k = (n/16 + 1) * 16; CHECKD(k>=n,"Round16 failed ", k); return k; }
|
||||
|
||||
// Certified 99%
|
||||
// @doc EXTERNAL
|
||||
//
|
||||
@ -41,17 +44,19 @@ void TString::resize(
|
||||
// @comm Non funziona con le stringhe static e per valori negativi di <p size>
|
||||
{
|
||||
CHECKD(size >= 0, "Invalid string resize ", size);
|
||||
char* s = new char[size+1];
|
||||
if (cpy && _str) strcpy(s, _str);
|
||||
else *s = '\0';
|
||||
|
||||
char* s = (char*)calloc(round16(size+1), 1);
|
||||
if (_str)
|
||||
delete _str;
|
||||
{
|
||||
if (cpy && *_str)
|
||||
strcpy_s(s, size+1, _str);
|
||||
free(_str);
|
||||
}
|
||||
|
||||
_str = s;
|
||||
_size = size;
|
||||
}
|
||||
|
||||
|
||||
// Certified 99% (uses resize)
|
||||
// @doc EXTERNAL
|
||||
//
|
||||
@ -65,8 +70,7 @@ TString& TString::set(
|
||||
if (s && *s)
|
||||
{
|
||||
const int sz = strlen(s);
|
||||
if (sz > size()) resize(sz, false);
|
||||
strncpy(s, size());
|
||||
strncpy(s, sz);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -93,12 +97,12 @@ int TString::make_room(
|
||||
if (spare < s)
|
||||
{
|
||||
const int min_size = lun + s;
|
||||
int new_size = 3 * min_size / 2;
|
||||
int new_size = round16(3 * min_size / 2);
|
||||
if (new_size > MAX_SIZE)
|
||||
new_size = MAX_SIZE;
|
||||
if (new_size < min_size)
|
||||
fatal_box("Stringa di lunghezza eccessiva (%d)", min_size);
|
||||
resize(int(new_size), true);
|
||||
fatal_box("Stringa di lunghezza superiore a %d)", min_size);
|
||||
resize(new_size, true);
|
||||
}
|
||||
return lun;
|
||||
}
|
||||
@ -124,7 +128,7 @@ TString::~TString()
|
||||
{
|
||||
if (_str)
|
||||
{
|
||||
delete _str;
|
||||
free(_str);
|
||||
#ifdef DBG
|
||||
_str = NULL;
|
||||
_size = -883;
|
||||
@ -136,7 +140,7 @@ char TString::shift(int n)
|
||||
{
|
||||
CHECK(n>0 && n<=len(),"Errore di scorrimento");
|
||||
const char r=*(_str+n-1);
|
||||
strcpy(_str, _str+n);
|
||||
strcpy_s(_str, _size+1, _str+n);
|
||||
return r;
|
||||
}
|
||||
|
||||
@ -145,7 +149,7 @@ TString& TString::operator <<(const char* s)
|
||||
if (s && *s)
|
||||
{
|
||||
const int pos = make_room(strlen(s));
|
||||
strcpy(&_str[pos], s);
|
||||
strcpy_s(&_str[pos], _size-pos+1, s);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
@ -569,7 +573,7 @@ TString& TString::ltrim(
|
||||
for (s = _str; *s && is_space(*s); s++);
|
||||
|
||||
if (s != _str)
|
||||
strcpy(_str, s);
|
||||
strcpy_s(_str, _size+1, s);
|
||||
|
||||
return *this;
|
||||
}
|
||||
@ -838,8 +842,9 @@ int TString::strncpy(const char* s, int n)
|
||||
{
|
||||
if (n > size())
|
||||
resize(n, false);
|
||||
for (; *s && i < n; i++)
|
||||
_str[i] = *s++;
|
||||
strncpy_s(_str, _size+1, s, n);
|
||||
i = strlen(s);
|
||||
if (n < i) i = n;
|
||||
}
|
||||
_str[i] = '\0';
|
||||
return i;
|
||||
@ -859,7 +864,7 @@ TString& TString::format(
|
||||
char spark[512] = { 0 };
|
||||
va_list pars;
|
||||
va_start(pars, fmt);
|
||||
const unsigned int tot = _vsnprintf(spark, sizeof(spark)-1, fmt, pars);
|
||||
const unsigned int tot = _vsnprintf(spark, sizeof(spark), fmt, pars);
|
||||
va_end(pars);
|
||||
|
||||
CHECK(tot < sizeof(spark), "Ue'! Quanto scrivi?");
|
||||
@ -981,7 +986,7 @@ TString& TString::insert(
|
||||
make_room(l);
|
||||
const TString& spark = mid(pos); // Scrivi in spark la stringa da pos in poi
|
||||
overwrite(s, pos); // Aggiungi s
|
||||
strcpy(&_str[pos+l], spark); // Aggiungi spark
|
||||
strcpy_s(&_str[pos+l], _size-(pos+l)+1, spark); // Aggiungi spark
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
@ -1010,9 +1015,11 @@ word TString::hash() const
|
||||
// TFixed_string
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
// Certified 100%
|
||||
// Certified 99%
|
||||
// Se la size del buffer str è di 16, allora la size stringa è di 15 (15 + '\0' = 16)
|
||||
// es: char buf[16]; TFixed_string str(buf, sizeof(buf));
|
||||
TFixed_string::TFixed_string(const char* str, int size)
|
||||
: TString((char*)str, (size <= 0) ? strlen(str) : size-1)
|
||||
: TString((char*)str, (size <= 0) ? strlen(str) : size-1)
|
||||
{
|
||||
CHECK(str, "NULL buffer for fixed string");
|
||||
if (size > 0 && memchr(str, '\0', size) == NULL)
|
||||
@ -1245,28 +1252,23 @@ bool TFilename::ok() const
|
||||
}
|
||||
|
||||
// Certified 70%
|
||||
const TFilename& TFilename::tempdir()
|
||||
TFilename& TFilename::tempdir()
|
||||
{
|
||||
static TFilename _tempdir;
|
||||
const bool create = _tempdir.empty() || !_tempdir.ends_with(user(), true);
|
||||
|
||||
if (create)
|
||||
{
|
||||
_tempdir.cut(0);
|
||||
xvt_sys_get_profile_string(NULL, "Main", "Temp", "", _tempdir.get_buffer(), _tempdir.size());
|
||||
if (_tempdir.blank())
|
||||
const int maxlen = 28; // Lunghezza max nome file temporaneo = 42 -> lunghezza max cartella 42-14 = 28
|
||||
DIRECTORY tmp = { 0 }; xvt_fsys_get_temp_dir(&tmp);
|
||||
xvt_fsys_convert_dir_to_str(&tmp, _tempdir.get_buffer(), _tempdir.size());
|
||||
if (_tempdir.len() > maxlen) // troppo lunga!
|
||||
{
|
||||
xvt_sys_get_env("TEMP", _tempdir.get_buffer(), _tempdir.size());
|
||||
if (_tempdir.blank())
|
||||
xvt_sys_get_env("TMP", _tempdir.get_buffer(), _tempdir.size());
|
||||
if (_tempdir.len() > 28) // troppo lunga!
|
||||
{
|
||||
_tempdir.currdir();
|
||||
_tempdir.add("temp");
|
||||
xvt_sys_set_profile_string(NULL, "Main", "Temp", _tempdir);
|
||||
}
|
||||
_tempdir.currdir().add("temp");
|
||||
if (_tempdir.len() > maxlen) // ancora troppo lunga!
|
||||
_tempdir = "c:\\temp";
|
||||
xvt_sys_set_profile_string(NULL, "Main", "Temp", _tempdir);
|
||||
}
|
||||
|
||||
bool ok = dexist(_tempdir);
|
||||
if (!ok) // Codebase NON funziona senza una temp esistente!
|
||||
{
|
||||
@ -1276,19 +1278,17 @@ const TFilename& TFilename::tempdir()
|
||||
}
|
||||
|
||||
const int last = len()-1;
|
||||
if (!is_not_slash(_str[last]))
|
||||
if (is_slash(_str[last]))
|
||||
_tempdir.cut(last);
|
||||
_tempdir.lower();
|
||||
|
||||
TString theuser(user());
|
||||
if (theuser.empty())
|
||||
TString theuser = user();
|
||||
if (theuser.blank())
|
||||
theuser = ::dongle().administrator();
|
||||
theuser.lower();
|
||||
const int f = _tempdir.find(theuser);
|
||||
if (f < 0 || f != _tempdir.len() - theuser.len())
|
||||
if (!_tempdir.ends_with(user(), true))
|
||||
_tempdir.add(theuser);
|
||||
_tempdir.lower();
|
||||
|
||||
|
||||
ok = dexist(_tempdir);
|
||||
if (!ok)
|
||||
{
|
||||
@ -1304,62 +1304,58 @@ const TFilename& TFilename::tempdir()
|
||||
return *this;
|
||||
}
|
||||
|
||||
const TFilename& TFilename::currdir()
|
||||
TFilename& TFilename::currdir()
|
||||
{
|
||||
DIRECTORY d; xvt_fsys_get_dir(&d);
|
||||
xvt_fsys_convert_dir_to_str(&d, get_buffer(), size());
|
||||
return *this;
|
||||
}
|
||||
// Certified 50%
|
||||
// @doc EXTERNAL
|
||||
|
||||
TFilename& TFilename::slash_terminate()
|
||||
{
|
||||
if (empty())
|
||||
operator<<(SLASH);
|
||||
else
|
||||
{
|
||||
if (!is_slash(_str[len()-1]))
|
||||
operator<<(find("/") >= 0 ? '/' : '\\');
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
// @mfunc Genera il nome di un file temporaneo
|
||||
const TFilename& TFilename::temp(
|
||||
TFilename& TFilename::temp(
|
||||
const char* prefix, // @parm Eventuale prefisso da assegnare al file temporaneo
|
||||
const char* extension) // @parm Eventuale estensione da assegnare al file temporaneo
|
||||
|
||||
// @comm Nel generare il nome del file controlla se esistono dei caratteri jolly e li elimina.
|
||||
{
|
||||
if (extension && *extension)
|
||||
{
|
||||
TFilename root; root.tempdir();
|
||||
if (prefix && *prefix)
|
||||
{
|
||||
bool has_path = false;
|
||||
for (const char *s = prefix; !has_path && *s; s++)
|
||||
has_path = *s ==':' || is_slash(*s);
|
||||
if (has_path)
|
||||
root = prefix;
|
||||
else
|
||||
root.add(prefix);
|
||||
}
|
||||
for (unsigned int n = (unsigned int)clock(); ; n++)
|
||||
{
|
||||
TString8 name; name.format("%05lu", n % 100000);
|
||||
set(root); operator<<(name);
|
||||
ext(extension);
|
||||
if (!exist())
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
TFilename root; root.tempdir();
|
||||
root.slash_terminate();
|
||||
if (prefix && *prefix)
|
||||
{
|
||||
tempdir();
|
||||
if (prefix && *prefix)
|
||||
bool has_path = false;
|
||||
for (const char *s = prefix; !has_path && *s; s++)
|
||||
has_path = *s ==':' || is_slash(*s);
|
||||
if (has_path)
|
||||
{
|
||||
set(prefix); // Copia prefisso e ...
|
||||
strip("$#*?."); // ... toglie caratteri jolly
|
||||
root = prefix;
|
||||
if (xvt_fsys_dir_exists(root))
|
||||
root.slash_terminate();
|
||||
}
|
||||
else
|
||||
cut(0);
|
||||
|
||||
char* t = _tempnam(NULL, _str);
|
||||
CHECK(t != NULL, "Can't execute tempnam");
|
||||
set(t);
|
||||
free(t);
|
||||
else
|
||||
root.add(prefix);
|
||||
}
|
||||
|
||||
CHECKS(!exist(), "Il file temporaneo esiste già: ", _str);
|
||||
for (unsigned int n = (unsigned int)clock(); ; n++)
|
||||
{
|
||||
TString8 name; name.format("%05lu", n % 100000);
|
||||
set(root); operator<<(name);
|
||||
if (extension && *extension)
|
||||
ext(extension);
|
||||
if (!exist())
|
||||
break;
|
||||
}
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
@ -1372,7 +1368,7 @@ bool TFilename::is_absolute_path() const
|
||||
return is_slash(*s);
|
||||
}
|
||||
|
||||
const TFilename& TFilename::make_absolute_path()
|
||||
TFilename& TFilename::make_absolute_path()
|
||||
{
|
||||
if (is_relative_path())
|
||||
{
|
||||
|
@ -483,30 +483,24 @@ public:
|
||||
// @class TFilename | Classe per la gestione dei nome dei file
|
||||
//
|
||||
// @base public | TString
|
||||
class TFilename : public TString
|
||||
class TFilename : public TString256
|
||||
// @author:(INTERNAL) Guido
|
||||
{
|
||||
// @access Public Member
|
||||
public:
|
||||
// @cmember Costruttore
|
||||
TFilename(const char* n = "") : TString(260)
|
||||
{ set(n); }
|
||||
TFilename(const char* n = "") : TString256(n) { }
|
||||
// @cmember Costruttore
|
||||
TFilename(const TString& n) : TString(260)
|
||||
{ set(n); }
|
||||
TFilename(const TString& n) : TString256(n) { }
|
||||
// @cmember Costruttore
|
||||
TFilename(const TFilename& n) : TString(260)
|
||||
{ set(n); }
|
||||
TFilename(const TFilename& n) : TString256(n) { }
|
||||
|
||||
// @cmember Assegnazione tra TFilename e stringa
|
||||
const TString& operator =(const char* s)
|
||||
{ return set(s); }
|
||||
const TString& operator =(const char* s) { return set(s); }
|
||||
// @cmember Assegnazione tra TFilename e TString
|
||||
const TString& operator =(const TString& s)
|
||||
{ return set((const char*)s); }
|
||||
const TString& operator =(const TString& s) { return set((const char*)s); }
|
||||
// @cmember Assegnazione tra TFilename e TFilename
|
||||
const TString& operator =(const TFilename& s)
|
||||
{ return set((const char*)s); }
|
||||
const TString& operator =(const TFilename& s) { return set((const char*)s); }
|
||||
|
||||
// @cmember Controlla il formato del nome del file
|
||||
virtual bool ok() const;
|
||||
@ -524,7 +518,9 @@ public:
|
||||
// @cmember Controlla se si tratta di un path relativo
|
||||
bool is_relative_path() const { return !is_absolute_path(); }
|
||||
// @cmember Trasforma un path da relativo ad assoluto
|
||||
const TFilename& make_absolute_path();
|
||||
TFilename& make_absolute_path();
|
||||
// @cmember aggiunge uno slash finale
|
||||
TFilename& TFilename::slash_terminate();
|
||||
// @cmember Testa se il file esiste
|
||||
bool exist() const;
|
||||
// @cmember Cancella il file
|
||||
@ -542,11 +538,11 @@ public:
|
||||
// @cmember Ritorna il nome della cartella del file
|
||||
const char* path() const;
|
||||
// @cmember Genera il nome di un file temporaneo
|
||||
const TFilename& temp(const char* prefix = NULL, const char* extension = NULL);
|
||||
TFilename& temp(const char* prefix = NULL, const char* extension = NULL);
|
||||
// @cmember Genera il nome della directory temporanea
|
||||
const TFilename& tempdir();
|
||||
TFilename& tempdir();
|
||||
// @cmember Genera il nome della directory corrente
|
||||
const TFilename& currdir();
|
||||
TFilename& currdir();
|
||||
// @cmember Prepone il nome della dir custom
|
||||
bool custom_path(const char* path_list = NULL);
|
||||
};
|
||||
|
@ -291,7 +291,7 @@ HIDDEN bool _cf_val(TMask_field& f, KEY key)
|
||||
if (cf.empty()) return true;
|
||||
if (cf.len() == 11 && isdigit(cf[0]))
|
||||
{
|
||||
const TString& stato = f.mask().get(atoi(get_val_param(0)));
|
||||
const TString& stato = get_fld_val_param(f, 0);
|
||||
if (stato.full() && stato != "IT")
|
||||
return true;
|
||||
ok = pi_check (stato, cf);
|
||||
@ -302,7 +302,7 @@ HIDDEN bool _cf_val(TMask_field& f, KEY key)
|
||||
{
|
||||
if(f.dirty())
|
||||
{
|
||||
ok = f.yesno_box(TR("Codice fiscale errato: lo accetto ugualmente?"));
|
||||
ok = f.noyes_box(TR("Codice fiscale errato: si desidera accettarlo ugualmente?"));
|
||||
if (ok) f.set_dirty(false);
|
||||
}
|
||||
else
|
||||
@ -345,7 +345,7 @@ HIDDEN bool _xt_pi_val(TMask_field& f, KEY key)
|
||||
if (pi != s1 && pi != s2 && pi != s3)
|
||||
{
|
||||
TString16 ui; ui.format("%03d", s1);
|
||||
if (f.yesno_box(FR("Ufficio IVA della partita IVA non congruente: correggere in %s?"),
|
||||
if (f.yesno_box(FR("Ufficio IVA non congruente con la partita IVA:\nsi desidera correggerlo in %s?"),
|
||||
(const char*)ui))
|
||||
{
|
||||
value.overwrite(ui, 7);
|
||||
@ -378,12 +378,7 @@ HIDDEN bool _xt_cf_val(TMask_field& f, KEY key)
|
||||
return false;
|
||||
|
||||
if (cf.len() == 11 && real::is_natural(cf))
|
||||
{
|
||||
// if (!_xt_pi_val(f, key)) return false;
|
||||
// TString16 stato(f.mask().get(atoi(get_val_param(0))));
|
||||
// if ((stato.not_empty()) && (stato != "IT")) return true;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool passed = __cf_check(cf);
|
||||
if (!passed) return true;
|
||||
@ -398,15 +393,16 @@ HIDDEN bool _xt_cf_val(TMask_field& f, KEY key)
|
||||
TString16 data = fld_dat.get();
|
||||
TString4 com = fld_com.get();
|
||||
|
||||
TString16 wm("LMNPQRSTUV");
|
||||
int p;
|
||||
if ((p = wm.find(cf[ 6])) >= 0) cf[ 6] = '0' + p;
|
||||
if ((p = wm.find(cf[ 7])) >= 0) cf[ 7] = '0' + p;
|
||||
if ((p = wm.find(cf[ 9])) >= 0) cf[ 9] = '0' + p;
|
||||
if ((p = wm.find(cf[10])) >= 0) cf[10] = '0' + p;
|
||||
if ((p = wm.find(cf[12])) >= 0) cf[12] = '0' + p;
|
||||
if ((p = wm.find(cf[13])) >= 0) cf[13] = '0' + p;
|
||||
if ((p = wm.find(cf[14])) >= 0) cf[14] = '0' + p;
|
||||
const TFixed_string nm("LMNPQRSTUV");
|
||||
int p = 0;
|
||||
if ((p = nm.find(cf[ 6])) >= 0) cf[ 6] = '0' + p;
|
||||
if ((p = nm.find(cf[ 7])) >= 0) cf[ 7] = '0' + p;
|
||||
if ((p = nm.find(cf[ 9])) >= 0) cf[ 9] = '0' + p;
|
||||
if ((p = nm.find(cf[10])) >= 0) cf[10] = '0' + p;
|
||||
if ((p = nm.find(cf[12])) >= 0) cf[12] = '0' + p;
|
||||
if ((p = nm.find(cf[13])) >= 0) cf[13] = '0' + p;
|
||||
if ((p = nm.find(cf[14])) >= 0) cf[14] = '0' + p;
|
||||
|
||||
int gn = atoi(cf.mid(9,2));
|
||||
|
||||
if ((sesso == 'F' && gn < 40) || (sesso == 'M' && gn > 40))
|
||||
@ -420,7 +416,9 @@ HIDDEN bool _xt_cf_val(TMask_field& f, KEY key)
|
||||
if (gn > 40) gn -= 40; // Aggiusta giorno di nascita delle donne
|
||||
|
||||
// Controllo data di nascita
|
||||
wm = "ABCDEHLMPRST";
|
||||
|
||||
const TFixed_string wm = "ABCDEHLMPRST";
|
||||
|
||||
if (data.full())
|
||||
{
|
||||
const TDate d(data);
|
||||
@ -447,7 +445,7 @@ HIDDEN bool _xt_cf_val(TMask_field& f, KEY key)
|
||||
if (mn > 0)
|
||||
{
|
||||
int anno = atoi(cf.mid(6, 2));
|
||||
anno += anno < 10 ? 2000 : 1900;
|
||||
anno += anno < 25 ? 2000 : 1900;
|
||||
const TDate d(gn, mn, anno);
|
||||
fld_dat.set(d.string());
|
||||
}
|
||||
@ -470,7 +468,6 @@ HIDDEN bool _xt_cf_val(TMask_field& f, KEY key)
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
HIDDEN bool _xtz_cf_val(TMask_field& f, KEY key)
|
||||
{
|
||||
return f.empty() || _xt_cf_val(f, key);
|
||||
@ -513,7 +510,8 @@ HIDDEN bool _fixlen_val(TMask_field& f, KEY)
|
||||
const int length = get_int_val_param(0);
|
||||
const bool ok = s.len() == length;
|
||||
if (!ok)
|
||||
f.error_box(FR("La lunghezza del campo deve essere %d caratteri"), length);
|
||||
f.error_box(FR("La lunghezza del campo deve essere %d %s"),
|
||||
length, f.is_kind_of(CLASS_REAL_FIELD) ? TR("cifre") : TR("caratteri"));
|
||||
return ok;
|
||||
}
|
||||
|
||||
|
@ -272,7 +272,7 @@ bool TVariable_rectype::exist(const char* fieldname) const
|
||||
return TRectype::exist(fieldname);
|
||||
}
|
||||
|
||||
const TString & TVariable_rectype::get_str(const char* fieldname) const
|
||||
const TString& TVariable_rectype::get_str(const char* fieldname) const
|
||||
{
|
||||
TVariable_field* f = (TVariable_field*) _virtual_fields.objptr(fieldname);
|
||||
|
||||
|
@ -206,7 +206,7 @@ public:
|
||||
virtual word class_id() const { return CLASS_AUTO_VARIABLE_RECTYPE; }
|
||||
virtual bool is_kind_of(word id) const { return id == class_id() || TVariable_rectype::is_kind_of(id); }
|
||||
// @cmember Indica se esiste il campo <p fieldname>
|
||||
virtual bool exist(const char* fieldname) const { return fieldname && *fieldname;}
|
||||
virtual bool exist(const char* fieldname) const { return fieldname && *fieldname; }
|
||||
|
||||
// @cmember Distruttore
|
||||
virtual ~TAuto_variable_rectype() {}
|
||||
|
1672
include/xvtility.cpp
1672
include/xvtility.cpp
File diff suppressed because it is too large
Load Diff
@ -38,11 +38,12 @@ WINDOW xvtil_create_statbar();
|
||||
void xvtil_statbar_set(const char* text, bool def = FALSE);
|
||||
void xvtil_statbar_refresh();
|
||||
void xvtil_statbar_destroy();
|
||||
int xvtil_statbar_height();
|
||||
int xvtil_statbar_height();
|
||||
|
||||
bool xvtil_popup_message(const char* msg);
|
||||
bool xvtil_popup_warning(const char* msg);
|
||||
bool xvtil_popup_error(const char* msg);
|
||||
bool xvtil_system_error(unsigned long lasterror, ...);
|
||||
|
||||
void beep(int severity = 0);
|
||||
void do_events();
|
||||
|
Loading…
x
Reference in New Issue
Block a user