Patch level : 10.0
Files correlati : librerie Ricompilazione Demo : [ ] Commento : Eliminato uso funzione localtime sostituendolo con xvt_time_now() Eliminato uso funzione localtime sostituendolo con xvt_time_now() Rese opzionali le griglie a lettura facilitata git-svn-id: svn://10.65.10.50/trunk@16626 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
f50b877cb6
commit
45cc4b2e20
@ -1237,8 +1237,7 @@ bool TAlex_virtual_machine::get_usr_val(const TString& name, TVariant& var) cons
|
|||||||
}
|
}
|
||||||
if (n == "TIME")
|
if (n == "TIME")
|
||||||
{
|
{
|
||||||
time_t lt; time(<);
|
const struct tm* t = xvt_time_now();
|
||||||
struct tm* t = localtime(<);
|
|
||||||
TString16 str;
|
TString16 str;
|
||||||
str.format("%02d:%02d:%02d", t->tm_hour, t->tm_min, t->tm_sec);
|
str.format("%02d:%02d:%02d", t->tm_hour, t->tm_min, t->tm_sec);
|
||||||
var.set(str);
|
var.set(str);
|
||||||
|
@ -916,8 +916,7 @@ bool TApplication::get_next_pdf(int anno, long ditta, const char* codnum,
|
|||||||
|
|
||||||
if (numdoc <= 0)
|
if (numdoc <= 0)
|
||||||
{
|
{
|
||||||
time_t lt; time(<);
|
const struct tm& loc = *xvt_time_now();
|
||||||
struct tm& loc = *localtime(<);
|
|
||||||
pdf << format("_%02d%02d%02d%02d%02d",
|
pdf << format("_%02d%02d%02d%02d%02d",
|
||||||
loc.tm_mon, loc.tm_mday, loc.tm_hour, loc.tm_min, loc.tm_sec);
|
loc.tm_mon, loc.tm_mday, loc.tm_hour, loc.tm_min, loc.tm_sec);
|
||||||
}
|
}
|
||||||
|
@ -68,13 +68,9 @@ TField_event TAutomask::key2event(TMask_field& f, KEY key) const
|
|||||||
fe = f.focusdirty() ? fe_modify : fe_init;
|
fe = f.focusdirty() ? fe_modify : fe_init;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case K_SHIFT+K_SPACE:
|
|
||||||
if (f.is_kind_of(CLASS_TREE_FIELD))
|
|
||||||
fe = fe_button;
|
|
||||||
break;
|
|
||||||
case K_CTRL+K_SPACE:
|
case K_CTRL+K_SPACE:
|
||||||
if (f.is_kind_of(CLASS_TREE_FIELD))
|
if (f.is_kind_of(CLASS_TREE_FIELD))
|
||||||
fe = fe_select;
|
fe = fe_button;
|
||||||
break;
|
break;
|
||||||
case K_ENTER:
|
case K_ENTER:
|
||||||
fe = fe_close;
|
fe = fe_close;
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
#include <msksheet.h>
|
#include <msksheet.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
enum TField_event { fe_null, fe_init, fe_modify, fe_button, fe_close, fe_select,
|
enum TField_event { fe_null, fe_init, fe_modify, fe_button, fe_close,
|
||||||
se_enter, se_leave,
|
se_enter, se_leave,
|
||||||
se_query_modify, se_notify_modify,
|
se_query_modify, se_notify_modify,
|
||||||
se_query_add, se_notify_add,
|
se_query_add, se_notify_add,
|
||||||
|
@ -53,6 +53,7 @@
|
|||||||
#define CLASS_TREE_FIELD 251
|
#define CLASS_TREE_FIELD 251
|
||||||
#define CLASS_GOLEM_CLIENT_FIELD 252
|
#define CLASS_GOLEM_CLIENT_FIELD 252
|
||||||
#define CLASS_OUTLOOK_FIELD 253
|
#define CLASS_OUTLOOK_FIELD 253
|
||||||
|
#define CLASS_SLIDER_FIELD 254
|
||||||
|
|
||||||
#define CLASS_TOOL_FIELD 280
|
#define CLASS_TOOL_FIELD 280
|
||||||
#define CLASS_BUTTON_TOOL 281
|
#define CLASS_BUTTON_TOOL 281
|
||||||
|
@ -37,6 +37,7 @@ extern bool AUTOSELECT;
|
|||||||
extern bool AUTOZOOM;
|
extern bool AUTOZOOM;
|
||||||
extern bool AUTOEND;
|
extern bool AUTOEND;
|
||||||
extern int TOOL_SIZE;
|
extern int TOOL_SIZE;
|
||||||
|
extern bool EASY_RIDER;
|
||||||
|
|
||||||
const COLOR COLOR_DKCYAN = MAKE_COLOR(0,128,128);
|
const COLOR COLOR_DKCYAN = MAKE_COLOR(0,128,128);
|
||||||
const COLOR COLOR_DKYELLOW = MAKE_COLOR(128,128, 0);
|
const COLOR COLOR_DKYELLOW = MAKE_COLOR(128,128, 0);
|
||||||
|
@ -23,8 +23,7 @@ bool TConfig::add_line(const TString& l)
|
|||||||
{
|
{
|
||||||
if (val == "%yr%")
|
if (val == "%yr%")
|
||||||
{
|
{
|
||||||
time_t ora; time(&ora);
|
struct tm * oggi = xvt_time_now();
|
||||||
struct tm * oggi = localtime(&ora);
|
|
||||||
if (oggi != NULL)
|
if (oggi != NULL)
|
||||||
val.format("%04d", 1900 + oggi->tm_year);
|
val.format("%04d", 1900 + oggi->tm_year);
|
||||||
else
|
else
|
||||||
|
@ -41,6 +41,7 @@ bool AUTOZOOM = false;
|
|||||||
bool AUTOEND = false;
|
bool AUTOEND = false;
|
||||||
bool NATIVE_CONTROLS = false;
|
bool NATIVE_CONTROLS = false;
|
||||||
int TOOL_SIZE = 24;
|
int TOOL_SIZE = 24;
|
||||||
|
bool EASY_RIDER = true;
|
||||||
|
|
||||||
HIDDEN bool _button_blocked = false;
|
HIDDEN bool _button_blocked = false;
|
||||||
HIDDEN int _last_mouse_button = 0;
|
HIDDEN int _last_mouse_button = 0;
|
||||||
@ -315,6 +316,7 @@ void customize_colors()
|
|||||||
AUTOSELECT = colors.get_bool("AutoSelect", NULL, -1, AUTOSELECT);
|
AUTOSELECT = colors.get_bool("AutoSelect", NULL, -1, AUTOSELECT);
|
||||||
AUTOZOOM = colors.get_bool("AutoZoom", NULL, -1, AUTOZOOM);
|
AUTOZOOM = colors.get_bool("AutoZoom", NULL, -1, AUTOZOOM);
|
||||||
ADVANCED_GRAPHICS = colors.get_bool("AdvancedGraphics", NULL, -1, ADVANCED_GRAPHICS);
|
ADVANCED_GRAPHICS = colors.get_bool("AdvancedGraphics", NULL, -1, ADVANCED_GRAPHICS);
|
||||||
|
EASY_RIDER = colors.get_bool("EasyRider", NULL, -1, EASY_RIDER);
|
||||||
if (ADVANCED_GRAPHICS)
|
if (ADVANCED_GRAPHICS)
|
||||||
{
|
{
|
||||||
const long dt = xvt_vobj_get_attr(NULL_WIN, ATTR_DISPLAY_TYPE);
|
const long dt = xvt_vobj_get_attr(NULL_WIN, ATTR_DISPLAY_TYPE);
|
||||||
@ -357,17 +359,12 @@ void init_controls()
|
|||||||
xi_set_pref(XI_PREF_NATIVE_CTRLS, NATIVE_CONTROLS);
|
xi_set_pref(XI_PREF_NATIVE_CTRLS, NATIVE_CONTROLS);
|
||||||
xi_set_pref(XI_PREF_3D_LOOK, CAMPI_SCAVATI);
|
xi_set_pref(XI_PREF_3D_LOOK, CAMPI_SCAVATI);
|
||||||
xi_set_pref(XI_PREF_CARET_WIDTH, 2);
|
xi_set_pref(XI_PREF_CARET_WIDTH, 2);
|
||||||
//#ifdef XI_R4
|
xi_set_pref(XI_PREF_COMBO_ICON, ICO_COMBO);
|
||||||
xi_set_pref(XI_PREF_COMBO_ICON, ICO_COMBO);
|
|
||||||
xi_set_pref(XI_PREF_OPTIMIZE_CELL_REQUESTS, true);
|
xi_set_pref(XI_PREF_OPTIMIZE_CELL_REQUESTS, true);
|
||||||
/*
|
|
||||||
#else
|
|
||||||
xi_set_pref(XI_PREF_COMBO_ICON, COMBO_ICON);
|
|
||||||
#endif
|
|
||||||
*/
|
|
||||||
|
|
||||||
xi_init();
|
xi_init();
|
||||||
|
|
||||||
|
memset(event_map, a_ignore, sizeof(event_map));
|
||||||
event_map[XIE_CHAR_FIELD] = a_obj;
|
event_map[XIE_CHAR_FIELD] = a_obj;
|
||||||
event_map[XIE_DBL_FIELD] = a_obj;
|
event_map[XIE_DBL_FIELD] = a_obj;
|
||||||
event_map[XIE_CHG_FIELD] = a_obj;
|
event_map[XIE_CHG_FIELD] = a_obj;
|
||||||
@ -686,9 +683,29 @@ HIDDEN void xi_event_handler(XI_OBJ* itf, XI_EVENT* xiev)
|
|||||||
{
|
{
|
||||||
TWindow* w = (TWindow*)xi_get_app_data(itf);
|
TWindow* w = (TWindow*)xi_get_app_data(itf);
|
||||||
if (w != NULL && w->win() != NULL_WIN)
|
if (w != NULL && w->win() != NULL_WIN)
|
||||||
w->handler(w->win(), &xiev->v.xvte);
|
{
|
||||||
if (xiev->v.xvte.type == E_MOUSE_UP)
|
switch (xiev->v.xvte.type)
|
||||||
_button_blocked = false;
|
{
|
||||||
|
case E_CONTROL:
|
||||||
|
switch (xiev->v.xvte.v.ctl.ci.type)
|
||||||
|
{
|
||||||
|
case WC_PUSHBUTTON:
|
||||||
|
case WC_RADIOBUTTON:
|
||||||
|
case WC_CHECKBOX:
|
||||||
|
break; // Ignora i bottoni altrimenti li preme due volte se nativi
|
||||||
|
default:
|
||||||
|
w->handler(w->win(), &xiev->v.xvte);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case E_MOUSE_UP:
|
||||||
|
_button_blocked = false;
|
||||||
|
// fall down
|
||||||
|
default:
|
||||||
|
w->handler(w->win(), &xiev->v.xvte);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
notify_xvt = true;
|
notify_xvt = true;
|
||||||
@ -719,7 +736,7 @@ HIDDEN void xi_event_handler(XI_OBJ* itf, XI_EVENT* xiev)
|
|||||||
{
|
{
|
||||||
xiev->refused = true;
|
xiev->refused = true;
|
||||||
if (xiev->type == XIE_CHAR_FIELD || xiev->type == XIE_CHAR_CELL ||
|
if (xiev->type == XIE_CHAR_FIELD || xiev->type == XIE_CHAR_CELL ||
|
||||||
xiev->type == XIE_XVT_EVENT)
|
xiev->type == XIE_XVT_EVENT || xiev->type == XIE_BUTTON)
|
||||||
notify_xvt = false;
|
notify_xvt = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1379,7 +1396,6 @@ void TField_control::create(WINDOW win, short cid,
|
|||||||
{
|
{
|
||||||
f->button = true;
|
f->button = true;
|
||||||
f->pixel_button_distance = 1;
|
f->pixel_button_distance = 1;
|
||||||
f->button_width = 18;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else // E' un multiline, quindi setto il rettangolo
|
else // E' un multiline, quindi setto il rettangolo
|
||||||
@ -1908,7 +1924,6 @@ byte TRadiobutton_control::get_checked() const
|
|||||||
int children;
|
int children;
|
||||||
XI_OBJ** child = xi_get_member_list(_obj, &children);
|
XI_OBJ** child = xi_get_member_list(_obj, &children);
|
||||||
int c;
|
int c;
|
||||||
|
|
||||||
for (c = children-1; c > 0; c--)
|
for (c = children-1; c > 0; c--)
|
||||||
if (xi_is_checked(child[c])) break;
|
if (xi_is_checked(child[c])) break;
|
||||||
return (byte)c;
|
return (byte)c;
|
||||||
@ -1918,17 +1933,20 @@ void TRadiobutton_control::check_button(byte c)
|
|||||||
{
|
{
|
||||||
int children;
|
int children;
|
||||||
XI_OBJ** child = xi_get_member_list(_obj, &children);
|
XI_OBJ** child = xi_get_member_list(_obj, &children);
|
||||||
CHECKD(c < children, "This radio is rather old, it doesn't have button ", c);
|
if (child != NULL && c < children)
|
||||||
if (!xi_is_checked(child[c]) || NATIVE_CONTROLS)
|
|
||||||
xi_check(child[c], true);
|
xi_check(child[c], true);
|
||||||
|
else
|
||||||
|
NFCHECK("This radio is rather old, it doesn't have a button");
|
||||||
}
|
}
|
||||||
|
|
||||||
void TRadiobutton_control::show_button(byte c, bool on)
|
void TRadiobutton_control::show_button(byte c, bool on)
|
||||||
{
|
{
|
||||||
int children;
|
int children;
|
||||||
XI_OBJ** child = xi_get_member_list(_obj, &children);
|
XI_OBJ** child = xi_get_member_list(_obj, &children);
|
||||||
CHECKD(c < children, "This radio is rather old, it doesn't have button ", c);
|
if (child != NULL && c < children)
|
||||||
change_attrib(XI_ATR_VISIBLE, on, child[c]);
|
change_attrib(XI_ATR_VISIBLE, on, child[c]);
|
||||||
|
else
|
||||||
|
NFCHECK("This radio is rather old, it doesn't have a button");
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TRadiobutton_control::event_handler(XI_OBJ* itf, XI_EVENT* xiev)
|
bool TRadiobutton_control::event_handler(XI_OBJ* itf, XI_EVENT* xiev)
|
||||||
@ -1939,8 +1957,8 @@ bool TRadiobutton_control::event_handler(XI_OBJ* itf, XI_EVENT* xiev)
|
|||||||
XI_OBJ* obj = xiev->v.xi_obj; // Elemento del gruppo di radio buttons da premere
|
XI_OBJ* obj = xiev->v.xi_obj; // Elemento del gruppo di radio buttons da premere
|
||||||
if (xi_move_focus(obj)) // Tenta di dargli il focus
|
if (xi_move_focus(obj)) // Tenta di dargli il focus
|
||||||
{
|
{
|
||||||
if (!xi_is_checked(obj)) // Se non e' gia' premuto ...
|
if (!xi_is_checked(obj) || xi_get_native_controls(obj))
|
||||||
{
|
{ // Se non e' gia' premuto ...
|
||||||
xi_check(obj, true); // ... allora premilo e ...
|
xi_check(obj, true); // ... allora premilo e ...
|
||||||
ok = notify_key(K_SPACE); // ... avverti il mask_field proprietario
|
ok = notify_key(K_SPACE); // ... avverti il mask_field proprietario
|
||||||
}
|
}
|
||||||
@ -1958,9 +1976,9 @@ void TRadiobutton_control::set_focus() const
|
|||||||
int children;
|
int children;
|
||||||
XI_OBJ** child = xi_get_member_list(_obj, &children);
|
XI_OBJ** child = xi_get_member_list(_obj, &children);
|
||||||
int c;
|
int c;
|
||||||
|
|
||||||
for (c = children-1; c > 0; c--)
|
for (c = children-1; c > 0; c--)
|
||||||
if (xi_is_checked(child[c])) break;
|
if (xi_is_checked(child[c]))
|
||||||
|
break;
|
||||||
xi_set_focus(child[c]);
|
xi_set_focus(child[c]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -172,7 +172,7 @@ static void prep_merge()
|
|||||||
strcpy(fdname, f2name);
|
strcpy(fdname, f2name);
|
||||||
strcpy(f2name, wname);
|
strcpy(f2name, wname);
|
||||||
fclose(fp2);
|
fclose(fp2);
|
||||||
xvt_fsys_removefile(f2name);
|
xvt_fsys_remove_file(f2name);
|
||||||
fp2 = NULL;
|
fp2 = NULL;
|
||||||
/* @(:) 2.3.00.112 */
|
/* @(:) 2.3.00.112 */
|
||||||
nrcds *= 2;
|
nrcds *= 2;
|
||||||
@ -471,7 +471,7 @@ static FILE *wopen(char* name) /* nome del file temporaneo */
|
|||||||
if (!j)
|
if (!j)
|
||||||
{
|
{
|
||||||
fclose(fp1); /* none left */
|
fclose(fp1); /* none left */
|
||||||
xvt_fsys_removefile(fdname);
|
xvt_fsys_remove_file(fdname);
|
||||||
/* @(!) 2.3.00.112 eliminata if (fp2) */
|
/* @(!) 2.3.00.112 eliminata if (fp2) */
|
||||||
/* @(!) 2.3.00.112 eliminata { */
|
/* @(!) 2.3.00.112 eliminata { */
|
||||||
/* @(!) 2.3.00.112 eliminata fclose(fp2); */
|
/* @(!) 2.3.00.112 eliminata fclose(fp2); */
|
||||||
|
@ -27,14 +27,8 @@ TDate::TDate(long l) : _val(l)
|
|||||||
{
|
{
|
||||||
if (_val == TODAY)
|
if (_val == TODAY)
|
||||||
{
|
{
|
||||||
_val = NULLDATE;
|
const struct tm * timeloc = xvt_time_now();
|
||||||
time_t lt;
|
_val = makedata(timeloc->tm_mday, timeloc->tm_mon+1, timeloc->tm_year + 1900);
|
||||||
if (time(<) != -1)
|
|
||||||
{
|
|
||||||
struct tm * timeloc = localtime(<);
|
|
||||||
if (timeloc != NULL)
|
|
||||||
_val = makedata(timeloc->tm_mday, timeloc->tm_mon+1, timeloc->tm_year + 1900);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -205,9 +205,7 @@ bool TGolem_mask::sheet_notify(TSheet_field& s, int r, KEY k)
|
|||||||
{
|
{
|
||||||
TToken_string row = s.row(r);
|
TToken_string row = s.row(r);
|
||||||
if (row.get_char(2)<=' ')
|
if (row.get_char(2)<=' ')
|
||||||
{
|
xvt_fsys_remove_file(row.get(0));
|
||||||
xvt_fsys_removefile(row.get(0));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -826,7 +826,7 @@ TBaseisamfile::TBaseisamfile(
|
|||||||
}
|
}
|
||||||
_lasterr = NOERR;
|
_lasterr = NOERR;
|
||||||
TFilename filename(name);
|
TFilename filename(name);
|
||||||
CHECK(filename.not_empty(),"Must define the file to open!");
|
CHECK(filename.full(),"Must define the file to open!");
|
||||||
_logicnum = prefix().get_handle(filename);
|
_logicnum = prefix().get_handle(filename);
|
||||||
_current = new TRectype(this);
|
_current = new TRectype(this);
|
||||||
|
|
||||||
@ -3477,12 +3477,12 @@ int TRectype::compare_key(
|
|||||||
|
|
||||||
HIDDEN bool fld_empty(const char* s, int len, bool number)
|
HIDDEN bool fld_empty(const char* s, int len, bool number)
|
||||||
{
|
{
|
||||||
if (*s)
|
if (s && *s)
|
||||||
{
|
{
|
||||||
for (; len; s++, len--)
|
for (; len; s++, len--)
|
||||||
if (*s != ' ') return FALSE;
|
if (*s != ' ') return false;
|
||||||
}
|
}
|
||||||
return TRUE;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -3515,7 +3515,6 @@ int TRectype::items() const
|
|||||||
return rec_des()->NFields;
|
return rec_des()->NFields;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const char* TRectype::start(int nf) const
|
const char* TRectype::start(int nf) const
|
||||||
{
|
{
|
||||||
return string() + rec_des()->Fd[nf].RecOff;
|
return string() + rec_des()->Fd[nf].RecOff;
|
||||||
@ -3585,53 +3584,35 @@ bool TRectype::is_equal(const TRectype& r) const
|
|||||||
return yes;
|
return yes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
TFieldtypes TRectype::type(const char* fieldname) const
|
TFieldtypes TRectype::type(const char* fieldname) const
|
||||||
{
|
{
|
||||||
const RecDes* recd = rec_des();
|
const RecDes* recd = rec_des();
|
||||||
int p = findfld(recd, fieldname);
|
const int p = findfld(recd, fieldname);
|
||||||
|
return p != FIELDERR ? (TFieldtypes)recd->Fd[p].TypeF : _nullfld;
|
||||||
if (p != FIELDERR)
|
|
||||||
return (TFieldtypes) recd->Fd[p].TypeF;
|
|
||||||
else
|
|
||||||
return _nullfld;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int TRectype::length(const char* fieldname) const
|
int TRectype::length(const char* fieldname) const
|
||||||
{
|
{
|
||||||
const RecDes * recd = rec_des();
|
const RecDes * recd = rec_des();
|
||||||
int p = findfld(recd, fieldname);
|
const int p = findfld(recd, fieldname);
|
||||||
|
return p != FIELDERR ? recd->Fd[p].Len : 0;
|
||||||
if (p != FIELDERR)
|
|
||||||
return(recd->Fd[p].Len);
|
|
||||||
else
|
|
||||||
return(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int TRectype::ndec(const char* fieldname) const
|
int TRectype::ndec(const char* fieldname) const
|
||||||
|
|
||||||
{
|
{
|
||||||
const RecDes * recd = rec_des();
|
const RecDes* recd = rec_des();
|
||||||
int p = findfld(recd, fieldname);
|
const int p = findfld(recd, fieldname);
|
||||||
|
return p != FIELDERR ? recd->Fd[p].Dec : 0;
|
||||||
if (p != FIELDERR)
|
|
||||||
return(recd->Fd[p].Dec);
|
|
||||||
else
|
|
||||||
return(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool TRectype::exist(const char* fieldname) const
|
bool TRectype::exist(const char* fieldname) const
|
||||||
{
|
{
|
||||||
const bool ok = findfld(rec_des(), fieldname) != FIELDERR;
|
return findfld(rec_des(), fieldname) != FIELDERR;
|
||||||
return ok;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const char* TRectype::fieldname(int i) const
|
const char* TRectype::fieldname(int i) const
|
||||||
{
|
{
|
||||||
const RecDes * recd = rec_des();
|
const RecDes* recd = rec_des();
|
||||||
return i >= 0 && i < recd->NFields ? recd->Fd[i].Name : NULL;
|
return i >= 0 && i < recd->NFields ? recd->Fd[i].Name : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3639,9 +3620,9 @@ const TString& TRectype::get_str(const char* fieldname) const
|
|||||||
{
|
{
|
||||||
const RecDes* recd = rec_des();
|
const RecDes* recd = rec_des();
|
||||||
const int nf = findfld(recd, fieldname);
|
const int nf = findfld(recd, fieldname);
|
||||||
const RecFieldDes& fd = recd->Fd[nf];
|
|
||||||
if (nf != FIELDERR)
|
if (nf != FIELDERR)
|
||||||
{
|
{
|
||||||
|
const RecFieldDes& fd = recd->Fd[nf];
|
||||||
TString& tmp = get_tmp_string(fd.Len + (fd.TypeF == _datefld ? 2 : 0));
|
TString& tmp = get_tmp_string(fd.Len + (fd.TypeF == _datefld ? 2 : 0));
|
||||||
__getfieldbuff(fd.Len, fd.TypeF, _rec + fd.RecOff, tmp, __file_is_crypted(num()));
|
__getfieldbuff(fd.Len, fd.TypeF, _rec + fd.RecOff, tmp, __file_is_crypted(num()));
|
||||||
return tmp;
|
return tmp;
|
||||||
@ -4097,7 +4078,7 @@ bool TRectype::edit(int logicnum, const char* alternate_key_fields, const char*
|
|||||||
ok = result == "OK";
|
ok = result == "OK";
|
||||||
}
|
}
|
||||||
|
|
||||||
xvt_fsys_removefile(ininame);
|
xvt_fsys_remove_file(ininame);
|
||||||
|
|
||||||
if (ok)
|
if (ok)
|
||||||
rec_cache(logicnum).notify_change();
|
rec_cache(logicnum).notify_change();
|
||||||
|
@ -217,9 +217,7 @@ static unsigned int CreatePassword(TString& pass)
|
|||||||
{
|
{
|
||||||
const int BASE = 19;
|
const int BASE = 19;
|
||||||
unsigned int num = 0;
|
unsigned int num = 0;
|
||||||
time_t lt; time(<);
|
const struct tm* t = xvt_time_now();
|
||||||
struct tm* t = localtime(<);
|
|
||||||
|
|
||||||
srand(t->tm_hour * 10000 + t->tm_min *100 + t->tm_sec);
|
srand(t->tm_hour * 10000 + t->tm_min *100 + t->tm_sec);
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
|
@ -831,7 +831,7 @@ void TMask::handler(WINDOW win, EVENT* ep)
|
|||||||
|
|
||||||
if (ep->type == E_CONTROL)
|
if (ep->type == E_CONTROL)
|
||||||
{
|
{
|
||||||
if (is_running())
|
if (is_running()) // Scarto a priori gli eventi di inizializzazione
|
||||||
{
|
{
|
||||||
switch (ep->v.ctl.ci.type)
|
switch (ep->v.ctl.ci.type)
|
||||||
{
|
{
|
||||||
@ -839,13 +839,22 @@ void TMask::handler(WINDOW win, EVENT* ep)
|
|||||||
if (ep->v.ctl.ci.win == _notebook)
|
if (ep->v.ctl.ci.win == _notebook)
|
||||||
{
|
{
|
||||||
const int new_page = ep->v.ctl.ci.v.notebk.tab_no;
|
const int new_page = ep->v.ctl.ci.v.notebk.tab_no;
|
||||||
if (new_page != _page && new_page < _pages)
|
if (new_page != _page && new_page < _pages) // Cambio pagina effettivo
|
||||||
show_page(new_page);
|
show_page(new_page);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case WC_PUSHBUTTON:
|
case WC_ICON: // In realta' trattasi di bottone di toolbar
|
||||||
if (ep->v.ctl.ci.win == _toolbar)
|
if (ep->v.ctl.ci.win == toolbar()) // Test di sicurezza semi-inutile
|
||||||
field(ep->v.ctl.id).on_key(K_SPACE);
|
field(ep->v.ctl.id).on_key(K_SPACE); // Gestisco l'evento di pressione del bottone
|
||||||
|
break;
|
||||||
|
case WC_HSCROLL:
|
||||||
|
case WC_VSCROLL:
|
||||||
|
if (id2pos(ep->v.ctl.id) >= 0) // potrebbero non avere un controllo associato
|
||||||
|
field(ep->v.ctl.id).on_key(K_SPACE);
|
||||||
|
break;
|
||||||
|
case WC_HSLIDER:
|
||||||
|
case WC_VSLIDER:
|
||||||
|
field(ep->v.ctl.id).on_key(K_SPACE);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@ -1010,6 +1019,8 @@ TMask_field* TMask::parse_field(TScanner& scanner)
|
|||||||
if (k == "SP") return new TSheet_field(this);
|
if (k == "SP") return new TSheet_field(this);
|
||||||
if (k == "TR") return new TTree_field(this);
|
if (k == "TR") return new TTree_field(this);
|
||||||
if (k == "CL") return new TGolem_client_field(this);
|
if (k == "CL") return new TGolem_client_field(this);
|
||||||
|
if (k == "SL") return new TSlider_field(this);
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1464,8 +1475,8 @@ void TMask::set(
|
|||||||
|
|
||||||
void TMask::set(short fld_id, long n, byte hit)
|
void TMask::set(short fld_id, long n, byte hit)
|
||||||
{
|
{
|
||||||
char s[16];
|
TString16 s;
|
||||||
sprintf(s, "%ld", n);
|
s << n;
|
||||||
set(fld_id, s, hit);
|
set(fld_id, s, hit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1058,9 +1058,7 @@ void TLoadable_field::set_default(const char* def)
|
|||||||
|
|
||||||
TButton_field::TButton_field(TMask* m)
|
TButton_field::TButton_field(TMask* m)
|
||||||
: TOperable_field(m)
|
: TOperable_field(m)
|
||||||
{
|
{ }
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
word TButton_field::class_id() const
|
word TButton_field::class_id() const
|
||||||
{ return CLASS_BUTTON_FIELD; }
|
{ return CLASS_BUTTON_FIELD; }
|
||||||
@ -1076,7 +1074,6 @@ void TButton_field::parse_head(TScanner& scanner)
|
|||||||
if (_ctl_data._height <= 0) _ctl_data._height = 1;
|
if (_ctl_data._height <= 0) _ctl_data._height = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool TButton_field::parse_item(TScanner& scanner)
|
bool TButton_field::parse_item(TScanner& scanner)
|
||||||
{
|
{
|
||||||
if (scanner.key() == "PI")
|
if (scanner.key() == "PI")
|
||||||
@ -1091,7 +1088,6 @@ bool TButton_field::parse_item(TScanner& scanner)
|
|||||||
return TOperable_field::parse_item(scanner);
|
return TOperable_field::parse_item(scanner);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void TButton_field::create(WINDOW parent)
|
void TButton_field::create(WINDOW parent)
|
||||||
{
|
{
|
||||||
_exit_key = 0;
|
_exit_key = 0;
|
||||||
@ -1702,7 +1698,7 @@ void TBoolean_field::set_window_data(const char* data)
|
|||||||
|
|
||||||
TString& TBoolean_field::get_window_data()
|
TString& TBoolean_field::get_window_data()
|
||||||
{
|
{
|
||||||
const bool on = _ctl ? ((TCheckbox_control*)_ctl)->checked() : FALSE;
|
const bool on = _ctl != NULL && ((TCheckbox_control*)_ctl)->checked();
|
||||||
_str = on ? "X" : "";
|
_str = on ? "X" : "";
|
||||||
return _str;
|
return _str;
|
||||||
}
|
}
|
||||||
@ -1711,10 +1707,10 @@ bool TBoolean_field::parse_item(TScanner& scanner)
|
|||||||
{
|
{
|
||||||
if (scanner.key() == "ME")
|
if (scanner.key() == "ME")
|
||||||
{
|
{
|
||||||
const bool tf = scanner.integer() ? TRUE : FALSE; // Message TRUE or FALSE
|
const bool tf = scanner.integer() != 0; // Message TRUE or FALSE
|
||||||
TToken_string* ts = message(tf, TRUE);
|
TToken_string* ts = message(tf, TRUE);
|
||||||
ts->add(scanner.line().strip_spaces());
|
ts->add(scanner.line().strip_spaces());
|
||||||
return TRUE;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return TEditable_field::parse_item(scanner);
|
return TEditable_field::parse_item(scanner);
|
||||||
@ -4595,7 +4591,7 @@ bool TList_field::parse_item(TScanner& scanner)
|
|||||||
if (scanner.key() == "IT") // ITEM
|
if (scanner.key() == "IT") // ITEM
|
||||||
{
|
{
|
||||||
read_item(scanner);
|
read_item(scanner);
|
||||||
return TRUE;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return TEditable_field::parse_item(scanner);
|
return TEditable_field::parse_item(scanner);
|
||||||
|
@ -1653,7 +1653,8 @@ class TField_window : public TScroll_window
|
|||||||
protected:
|
protected:
|
||||||
virtual void update();
|
virtual void update();
|
||||||
virtual void handler(WINDOW win, EVENT* ep);
|
virtual void handler(WINDOW win, EVENT* ep);
|
||||||
|
void set_owner(TWindowed_field* o);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
virtual bool on_key(KEY k);
|
virtual bool on_key(KEY k);
|
||||||
TWindowed_field& owner() const { return *_owner; }
|
TWindowed_field& owner() const { return *_owner; }
|
||||||
|
@ -326,8 +326,7 @@ bool TPostman::dispatch_transaction(const TRectype& rec,
|
|||||||
if (file_dest.items() > 0)
|
if (file_dest.items() > 0)
|
||||||
{
|
{
|
||||||
TString16 basename;
|
TString16 basename;
|
||||||
time_t lt; time(<);
|
const struct tm * tl = xvt_time_now();
|
||||||
struct tm * tl = localtime(<);
|
|
||||||
basename.format("%02d%02d%02d_%02d%02d%02d_0",
|
basename.format("%02d%02d%02d_%02d%02d%02d_0",
|
||||||
tl->tm_year%100, tl->tm_mon+1, tl->tm_mday,
|
tl->tm_year%100, tl->tm_mon+1, tl->tm_mday,
|
||||||
tl->tm_hour, tl->tm_min, tl->tm_sec);
|
tl->tm_hour, tl->tm_min, tl->tm_sec);
|
||||||
|
@ -155,7 +155,7 @@ void TIndwin::update_bar()
|
|||||||
{
|
{
|
||||||
const unsigned long elapsed_time = (clock() - _start_time)/CLOCKS_PER_SEC;
|
const unsigned long elapsed_time = (clock() - _start_time)/CLOCKS_PER_SEC;
|
||||||
const unsigned long total_time = (unsigned long)(elapsed_time / prc + 0.5);
|
const unsigned long total_time = (unsigned long)(elapsed_time / prc + 0.5);
|
||||||
TString8 str_res, str_tot;
|
TString16 str_res, str_tot;
|
||||||
sec2str(total_time - elapsed_time, str_res);
|
sec2str(total_time - elapsed_time, str_res);
|
||||||
sec2str(total_time, str_tot);
|
sec2str(total_time, str_tot);
|
||||||
|
|
||||||
|
@ -317,7 +317,7 @@ bool TRecordset::save_as_dbf(const char* table, int mode)
|
|||||||
n = volume; n.add(dirname); n.add(name); n.ext("*");
|
n = volume; n.add(dirname); n.add(name); n.ext("*");
|
||||||
TString_array files; list_files(n, files);
|
TString_array files; list_files(n, files);
|
||||||
FOR_EACH_ARRAY_ROW(files, f, row)
|
FOR_EACH_ARRAY_ROW(files, f, row)
|
||||||
xvt_fsys_removefile(*row);
|
xvt_fsys_remove_file(*row);
|
||||||
}
|
}
|
||||||
mode = 0x1;
|
mode = 0x1;
|
||||||
}
|
}
|
||||||
|
@ -1719,7 +1719,7 @@ void TBook::split_file(int colonne)
|
|||||||
|
|
||||||
// Sostituisce il file di stampa con quello splittato ed aggiorna l'indice delle pagine
|
// Sostituisce il file di stampa con quello splittato ed aggiorna l'indice delle pagine
|
||||||
fcopy(temp, _file);
|
fcopy(temp, _file);
|
||||||
xvt_fsys_removefile(temp);
|
xvt_fsys_remove_file(temp);
|
||||||
_index = index;
|
_index = index;
|
||||||
_pages = _index.last();
|
_pages = _index.last();
|
||||||
}
|
}
|
||||||
@ -1806,7 +1806,7 @@ void TBook::join_file(int pps)
|
|||||||
|
|
||||||
// Sostituisce il file di stampa con quello joinato
|
// Sostituisce il file di stampa con quello joinato
|
||||||
fcopy(temp, _file);
|
fcopy(temp, _file);
|
||||||
xvt_fsys_removefile(temp);
|
xvt_fsys_remove_file(temp);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TBook::can_split(int pages) const
|
bool TBook::can_split(int pages) const
|
||||||
|
@ -191,9 +191,10 @@ TSheet_control::TSheet_control(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Calcola rettangolo massimo per lo sheet
|
// Calcola rettangolo massimo per lo sheet
|
||||||
RCT rct; coord2rct(parent, x, y, dx, dy, rct);
|
// RCT rct; coord2rct(parent, x, y, dx, dy, rct);
|
||||||
rct.right -= 2*XI_FU_MULTIPLE; // toglie scroll-bar
|
// rct.right -= 2*XI_FU_MULTIPLE; // toglie scroll-bar
|
||||||
|
RCT rct; coord2rct(parent, x, y, -2, -2, rct);
|
||||||
|
|
||||||
// Controlla se ci sono troppe colonne fisse
|
// Controlla se ci sono troppe colonne fisse
|
||||||
if ((f_width+max_width)*XI_FU_MULTIPLE > rct.right)
|
if ((f_width+max_width)*XI_FU_MULTIPLE > rct.right)
|
||||||
fixed_columns = 1;
|
fixed_columns = 1;
|
||||||
@ -1020,7 +1021,7 @@ TSheet::TSheet(short x, short y, short dx, short dy,
|
|||||||
if (buttons & 0x01) add_button(DLG_LINK, TR("Colle~ga"), K_CTRL+'G', BMP_LINK);
|
if (buttons & 0x01) add_button(DLG_LINK, TR("Colle~ga"), K_CTRL+'G', BMP_LINK);
|
||||||
if (buttons & 0x02) add_button(DLG_NEWREC, TR("~Nuovo"), K_INS, BMP_NEWREC);
|
if (buttons & 0x02) add_button(DLG_NEWREC, TR("~Nuovo"), K_INS, BMP_NEWREC);
|
||||||
if (buttons & 0x04) add_button(DLG_DELREC, "~Elimina", K_DEL, BMP_DELREC);
|
if (buttons & 0x04) add_button(DLG_DELREC, "~Elimina", K_DEL, BMP_DELREC);
|
||||||
if (!check_enabled())
|
//if (!check_enabled())
|
||||||
{
|
{
|
||||||
add_button(DLG_SAVEREC, TR("~Esporta"), 0, BMP_SAVEREC);
|
add_button(DLG_SAVEREC, TR("~Esporta"), 0, BMP_SAVEREC);
|
||||||
set_handler(DLG_SAVEREC, export_handler);
|
set_handler(DLG_SAVEREC, export_handler);
|
||||||
@ -1029,7 +1030,7 @@ TSheet::TSheet(short x, short y, short dx, short dy,
|
|||||||
else add_button(DLG_CANCEL, "Annulla", K_ESC, BMP_CANCEL);
|
else add_button(DLG_CANCEL, "Annulla", K_ESC, BMP_CANCEL);
|
||||||
|
|
||||||
xvt_toolbar_realize(toolbar()); // Necessario per calcolare dimensioni corrette dello sheet
|
xvt_toolbar_realize(toolbar()); // Necessario per calcolare dimensioni corrette dello sheet
|
||||||
}
|
}
|
||||||
|
|
||||||
TSheet::~TSheet()
|
TSheet::~TSheet()
|
||||||
{
|
{
|
||||||
@ -1075,8 +1076,6 @@ void TSheet::add_button(
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (toolbar() == NULL_WIN)
|
|
||||||
create_bar(1); // Forza la creazione della top bar
|
|
||||||
TButton_tool& butt = add_button_tool(id, caption, bmp_up);
|
TButton_tool& butt = add_button_tool(id, caption, bmp_up);
|
||||||
butt.set_exit_key(key);
|
butt.set_exit_key(key);
|
||||||
}
|
}
|
||||||
@ -1085,7 +1084,7 @@ void TSheet::add_button(
|
|||||||
bool TSheet::get_cell_colors(int row, int col, COLOR& fore, COLOR& back) const
|
bool TSheet::get_cell_colors(int row, int col, COLOR& fore, COLOR& back) const
|
||||||
{
|
{
|
||||||
fore = back = 0; // Default colors
|
fore = back = 0; // Default colors
|
||||||
if (row & 1)
|
if (EASY_RIDER && (row & 1))
|
||||||
back = REQUIRED_BACK_COLOR;
|
back = REQUIRED_BACK_COLOR;
|
||||||
return false; // Not assigned
|
return false; // Not assigned
|
||||||
}
|
}
|
||||||
@ -1132,13 +1131,15 @@ void TSheet::repos_buttons() const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Aggiusta anche lo spreadsheet
|
// Aggiusta anche lo spreadsheet se necessario
|
||||||
TMask_field& s = field(DLG_QUERY);
|
TMask_field& s = field(DLG_QUERY);
|
||||||
xvt_vobj_get_client_rect(s.parent(), &wr);
|
xvt_vobj_get_client_rect(s.parent(), &wr);
|
||||||
s.get_rect(br);
|
s.get_rect(br);
|
||||||
// br.right = wr.right - br.left + 2*CHARX;
|
if (br.bottom > wr.bottom || (wr.bottom-br.bottom) > 48)
|
||||||
br.bottom = wr.bottom - br.left;
|
{
|
||||||
s.set_rect(br);
|
br.bottom = wr.bottom - br.left; // Lascio uno spazio in fondo pari al bordo sinistro
|
||||||
|
s.set_rect(br);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TSheet::force_update(int r)
|
void TSheet::force_update(int r)
|
||||||
@ -1863,7 +1864,7 @@ TBrowse_sheet::TBrowse_sheet(TCursor* cursor, const char* fields,
|
|||||||
e = &add_number(c.dlg(), 0, p, 1, y++, csize, flags);
|
e = &add_number(c.dlg(), 0, p, 1, y++, csize, flags);
|
||||||
break;
|
break;
|
||||||
case CLASS_DATE_FIELD:
|
case CLASS_DATE_FIELD:
|
||||||
e = &add_date (c.dlg(), 0, p, 1, y++, flags);
|
e = &add_date(c.dlg(), 0, p, 1, y++, flags);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
e = NULL;
|
e = NULL;
|
||||||
|
@ -67,7 +67,7 @@ sqlite3* TSQLite::open(const char* fname)
|
|||||||
if (err = SQLITE_CORRUPT)
|
if (err = SQLITE_CORRUPT)
|
||||||
{
|
{
|
||||||
close();
|
close();
|
||||||
xvt_fsys_removefile(_currdb);
|
xvt_fsys_remove_file(_currdb);
|
||||||
err = sqlite3_open(_currdb, &_handle);
|
err = sqlite3_open(_currdb, &_handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -404,7 +404,7 @@ int TString::find(const char* s, int from) const
|
|||||||
|
|
||||||
bool TString::match(const char* pat, bool ignore_case) const
|
bool TString::match(const char* pat, bool ignore_case) const
|
||||||
{
|
{
|
||||||
return (pat && *pat) ? xvt_str_match(_str, pat, TRUE) != 0 : empty();
|
return (pat && *pat) ? xvt_str_match(_str, pat, !ignore_case) != 0 : empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
int TString::replace(char find_char, char replace_char)
|
int TString::replace(char find_char, char replace_char)
|
||||||
|
@ -73,18 +73,23 @@ void TField_window::update()
|
|||||||
const WINDOW pa = parent();
|
const WINDOW pa = parent();
|
||||||
RCT rct; xvt_vobj_get_outer_rect(me, &rct);
|
RCT rct; xvt_vobj_get_outer_rect(me, &rct);
|
||||||
rct.left -= 2; rct.top -= 2; rct.right += 2; rct.bottom += 2;
|
rct.left -= 2; rct.top -= 2; rct.right += 2; rct.bottom += 2;
|
||||||
xi_draw_3d_rect((XinWindow)pa, (XinRect *) &rct, TRUE, 2, // qui
|
xi_draw_3d_rect((XinWindow)pa, (XinRect *) &rct, TRUE, 2,
|
||||||
MASK_LIGHT_COLOR, MASK_BACK_COLOR, MASK_DARK_COLOR);
|
MASK_LIGHT_COLOR, MASK_BACK_COLOR, MASK_DARK_COLOR);
|
||||||
}
|
}
|
||||||
xvt_dwin_clear(me, NORMAL_BACK_COLOR);
|
xvt_dwin_clear(me, NORMAL_BACK_COLOR);
|
||||||
set_font();
|
set_font();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Serve quando si chiama il costruttore senza owner
|
||||||
|
void TField_window::set_owner(TWindowed_field* o)
|
||||||
|
{ _owner = o; }
|
||||||
|
|
||||||
TField_window::TField_window(int x, int y, int dx, int dy, WINDOW parent, TWindowed_field* owner)
|
TField_window::TField_window(int x, int y, int dx, int dy, WINDOW parent, TWindowed_field* owner)
|
||||||
: _owner(owner)
|
: _owner(owner)
|
||||||
{
|
{
|
||||||
if (owner != NULL)
|
if (owner != NULL)
|
||||||
{
|
{
|
||||||
|
CHECK(parent, "Null control parent");
|
||||||
create(x, y, dx, dy, "", WSF_HSCROLL | WSF_VSCROLL, W_PLAIN, parent);
|
create(x, y, dx, dy, "", WSF_HSCROLL | WSF_VSCROLL, W_PLAIN, parent);
|
||||||
activate(owner->enabled());
|
activate(owner->enabled());
|
||||||
if (owner->shown())
|
if (owner->shown())
|
||||||
@ -1371,3 +1376,181 @@ bool TOutlook_field::on_key(KEY key)
|
|||||||
}
|
}
|
||||||
return TWindowed_field::on_key(key);
|
return TWindowed_field::on_key(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// TSlider_window
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
class TSlider_window : public TField_window
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void set(int pos);
|
||||||
|
int get() const;
|
||||||
|
void set_range(int mi, int ma);
|
||||||
|
TSlider_window(int x, int y, int dx, int dy, WINDOW parent, TSlider_field* owner);
|
||||||
|
};
|
||||||
|
|
||||||
|
void TSlider_window::set_range(int mi, int ma)
|
||||||
|
{
|
||||||
|
if (mi != 0)
|
||||||
|
{
|
||||||
|
ma -= mi;
|
||||||
|
mi = 0;
|
||||||
|
}
|
||||||
|
if (ma < mi)
|
||||||
|
ma = 100;
|
||||||
|
xvt_sbar_set_range(win(), HVSLIDER, mi, ma);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TSlider_window::set(int pos)
|
||||||
|
{ xvt_sbar_set_pos(win(), HVSLIDER, pos); }
|
||||||
|
|
||||||
|
int TSlider_window::get() const
|
||||||
|
{ return xvt_sbar_get_pos(win(), HVSLIDER); }
|
||||||
|
|
||||||
|
TSlider_window::TSlider_window(int x, int y, int dx, int dy, WINDOW parent, TSlider_field* owner)
|
||||||
|
: TField_window(0, 0, 0, 0, NULL, NULL)
|
||||||
|
{
|
||||||
|
set_owner(owner);
|
||||||
|
WIN_DEF wd; memset(&wd, 0, sizeof(wd));
|
||||||
|
wd.rct = resize_rect(x, y, dx, dy, wd.wtype, parent);
|
||||||
|
wd.wtype = (wd.rct.right-wd.rct.left) > (wd.rct.bottom-wd.rct.top) ? WC_HSLIDER : WC_VSLIDER;
|
||||||
|
wd.v.ctl.ctrl_id = owner->dlg();
|
||||||
|
|
||||||
|
real mi, ma; owner->range(mi, ma);
|
||||||
|
const long limit = ma.integer() - mi.integer();
|
||||||
|
set_win(xvt_ctl_create_def(&wd, parent, limit));
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// TSlider_field
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
void TSlider_field::set_window_data(const char* data)
|
||||||
|
{
|
||||||
|
TSlider_window& sw = (TSlider_window&)win();
|
||||||
|
const int sel = atoi(data);
|
||||||
|
sw.set(sel);
|
||||||
|
}
|
||||||
|
|
||||||
|
const TString& TSlider_field::get_window_data()
|
||||||
|
{
|
||||||
|
TSlider_window& sw = (TSlider_window&)win();
|
||||||
|
TString& tmp = get_tmp_string();
|
||||||
|
tmp << sw.get();
|
||||||
|
return tmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TSlider_field::set(const char* data)
|
||||||
|
{
|
||||||
|
if (!_range_min.is_zero())
|
||||||
|
{
|
||||||
|
real n(data);
|
||||||
|
n -= _range_min;
|
||||||
|
data = n.string();
|
||||||
|
}
|
||||||
|
set_window_data(data);
|
||||||
|
set_dirty();
|
||||||
|
}
|
||||||
|
|
||||||
|
const TString& TSlider_field::get() const
|
||||||
|
{
|
||||||
|
TString& str = (TString&)((TSlider_field*)this)->get_window_data();
|
||||||
|
if (!_range_min.is_zero())
|
||||||
|
{
|
||||||
|
real n(str);
|
||||||
|
n += _range_min;
|
||||||
|
str = n.string();
|
||||||
|
}
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* TSlider_field::get_buddy() const
|
||||||
|
{
|
||||||
|
if (_buddy > 0)
|
||||||
|
{
|
||||||
|
const int pos = mask().id2pos(_buddy);
|
||||||
|
if (pos > 0)
|
||||||
|
{
|
||||||
|
real n = mask().fld(pos).get();
|
||||||
|
if (n < _range_min) n = _range_min;
|
||||||
|
if (n > _range_max) n = _range_max;
|
||||||
|
return n.string();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return EMPTY_STRING;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TSlider_field::set_buddy(const char* b) const
|
||||||
|
{
|
||||||
|
if (_buddy > 0)
|
||||||
|
{
|
||||||
|
const int pos = mask().id2pos(_buddy);
|
||||||
|
if (pos > 0)
|
||||||
|
mask().fld(pos).set(b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TSlider_field::on_hit()
|
||||||
|
{
|
||||||
|
if (!mask().is_running())
|
||||||
|
{
|
||||||
|
set_range(_range_min, _range_max); // Imposto range dello slider
|
||||||
|
const char* b = get_buddy();
|
||||||
|
if (b && *b)
|
||||||
|
set(b);
|
||||||
|
}
|
||||||
|
return TWindowed_field::on_hit();
|
||||||
|
}
|
||||||
|
|
||||||
|
word TSlider_field::class_id() const
|
||||||
|
{ return CLASS_SLIDER_FIELD; }
|
||||||
|
|
||||||
|
bool TSlider_field::is_kind_of(word cid) const
|
||||||
|
{ return cid == CLASS_SLIDER_FIELD || TWindowed_field::is_kind_of(cid); }
|
||||||
|
|
||||||
|
TField_window* TSlider_field::create_window(int x, int y, int dx, int dy, WINDOW parent)
|
||||||
|
{ return new TSlider_window(x, y, dx, dy, parent, this); }
|
||||||
|
|
||||||
|
void TSlider_field::set_range(const real& mi, const real& ma)
|
||||||
|
{
|
||||||
|
_range_min = mi;
|
||||||
|
_range_max = ma;
|
||||||
|
set_range(mi.integer(), ma.integer());
|
||||||
|
}
|
||||||
|
|
||||||
|
void TSlider_field::set_range(int mi, int ma)
|
||||||
|
{
|
||||||
|
_range_min = mi;
|
||||||
|
_range_max = ma;
|
||||||
|
if (_win != NULL_WIN)
|
||||||
|
{
|
||||||
|
TSlider_window& sw = (TSlider_window&)win();
|
||||||
|
sw.set_range(mi, ma);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TSlider_field::range(real& mi, real& ma)
|
||||||
|
{ mi = _range_min; ma = _range_max; }
|
||||||
|
|
||||||
|
bool TSlider_field::parse_item(TScanner& scanner)
|
||||||
|
{
|
||||||
|
if (scanner.key() == "DR") // DRIVENBY id
|
||||||
|
{
|
||||||
|
_buddy = scanner.integer();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (scanner.key() == "RA") // RANGE min max
|
||||||
|
{
|
||||||
|
const int mi = scanner.integer();
|
||||||
|
const int ma = scanner.integer();
|
||||||
|
set_range(mi, ma);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return TWindowed_field::parse_item(scanner);
|
||||||
|
}
|
||||||
|
|
||||||
|
TSlider_field::TSlider_field(TMask* m)
|
||||||
|
: TWindowed_field(m), _buddy(0), _range_min(ZERO), _range_max(CENTO)
|
||||||
|
{ }
|
||||||
|
@ -91,4 +91,36 @@ public:
|
|||||||
virtual ~TOutlook_field() { }
|
virtual ~TOutlook_field() { }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class TSlider_field : public TWindowed_field
|
||||||
|
{
|
||||||
|
short _buddy;
|
||||||
|
real _range_min, _range_max;
|
||||||
|
|
||||||
|
protected: // TMask_field
|
||||||
|
virtual word class_id() const;
|
||||||
|
virtual bool is_kind_of(word cid) const;
|
||||||
|
|
||||||
|
virtual const TString& get_window_data();
|
||||||
|
virtual void set_window_data(const char* data);
|
||||||
|
|
||||||
|
protected: // TWindowed_field
|
||||||
|
virtual TField_window* create_window(int x, int y, int dx, int dy, WINDOW parent);
|
||||||
|
virtual bool parse_item(TScanner& scanner);
|
||||||
|
|
||||||
|
const char* get_buddy() const;
|
||||||
|
void set_buddy(const char* b) const;
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual void set(const char* data);
|
||||||
|
virtual const TString& get() const;
|
||||||
|
virtual bool on_hit();
|
||||||
|
|
||||||
|
void set_range(const real& mi, const real& ma);
|
||||||
|
void set_range(int mi, int ma);
|
||||||
|
void range(real& mi, real& ma);
|
||||||
|
|
||||||
|
TSlider_field(TMask* m);
|
||||||
|
virtual ~TSlider_field() { }
|
||||||
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -124,6 +124,7 @@
|
|||||||
#define TOOL_LASTREC 125
|
#define TOOL_LASTREC 125
|
||||||
#define TOOL_FINDREC 126
|
#define TOOL_FINDREC 126
|
||||||
#define TOOL_EMAIL 139
|
#define TOOL_EMAIL 139
|
||||||
|
#define TOOL_CONVERT 156
|
||||||
#define TOOL_INFO 162
|
#define TOOL_INFO 162
|
||||||
#define TOOL_HELP 163
|
#define TOOL_HELP 163
|
||||||
#define TOOL_SETPRINT 165
|
#define TOOL_SETPRINT 165
|
||||||
|
@ -585,15 +585,8 @@ const TString & get_hostname()
|
|||||||
|
|
||||||
long daytime()
|
long daytime()
|
||||||
{
|
{
|
||||||
long t = 0L;
|
const struct tm * timeloc = xvt_time_now();
|
||||||
time_t lt;
|
return timeloc->tm_sec + timeloc->tm_min * 100L + timeloc->tm_hour * 10000L;
|
||||||
if (time(<) != -1)
|
|
||||||
{
|
|
||||||
struct tm * timeloc = localtime(<);
|
|
||||||
if (timeloc != NULL)
|
|
||||||
t = timeloc->tm_sec + timeloc->tm_min * 100L + timeloc->tm_hour * 10000L;
|
|
||||||
}
|
|
||||||
return t;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool is_power_station()
|
bool is_power_station()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user