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:
guy 2008-05-15 14:59:21 +00:00
parent f50b877cb6
commit 45cc4b2e20
27 changed files with 332 additions and 131 deletions

View File

@ -1237,8 +1237,7 @@ bool TAlex_virtual_machine::get_usr_val(const TString& name, TVariant& var) cons
}
if (n == "TIME")
{
time_t lt; time(&lt);
struct tm* t = localtime(&lt);
const struct tm* t = xvt_time_now();
TString16 str;
str.format("%02d:%02d:%02d", t->tm_hour, t->tm_min, t->tm_sec);
var.set(str);

View File

@ -916,8 +916,7 @@ bool TApplication::get_next_pdf(int anno, long ditta, const char* codnum,
if (numdoc <= 0)
{
time_t lt; time(&lt);
struct tm& loc = *localtime(&lt);
const struct tm& loc = *xvt_time_now();
pdf << format("_%02d%02d%02d%02d%02d",
loc.tm_mon, loc.tm_mday, loc.tm_hour, loc.tm_min, loc.tm_sec);
}

View File

@ -68,13 +68,9 @@ TField_event TAutomask::key2event(TMask_field& f, KEY key) const
fe = f.focusdirty() ? fe_modify : fe_init;
}
break;
case K_SHIFT+K_SPACE:
if (f.is_kind_of(CLASS_TREE_FIELD))
fe = fe_button;
break;
case K_CTRL+K_SPACE:
if (f.is_kind_of(CLASS_TREE_FIELD))
fe = fe_select;
fe = fe_button;
break;
case K_ENTER:
fe = fe_close;

View File

@ -5,7 +5,7 @@
#include <msksheet.h>
#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_query_modify, se_notify_modify,
se_query_add, se_notify_add,

View File

@ -53,6 +53,7 @@
#define CLASS_TREE_FIELD 251
#define CLASS_GOLEM_CLIENT_FIELD 252
#define CLASS_OUTLOOK_FIELD 253
#define CLASS_SLIDER_FIELD 254
#define CLASS_TOOL_FIELD 280
#define CLASS_BUTTON_TOOL 281

View File

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

View File

@ -23,8 +23,7 @@ bool TConfig::add_line(const TString& l)
{
if (val == "%yr%")
{
time_t ora; time(&ora);
struct tm * oggi = localtime(&ora);
struct tm * oggi = xvt_time_now();
if (oggi != NULL)
val.format("%04d", 1900 + oggi->tm_year);
else

View File

@ -41,6 +41,7 @@ bool AUTOZOOM = false;
bool AUTOEND = false;
bool NATIVE_CONTROLS = false;
int TOOL_SIZE = 24;
bool EASY_RIDER = true;
HIDDEN bool _button_blocked = false;
HIDDEN int _last_mouse_button = 0;
@ -315,6 +316,7 @@ void customize_colors()
AUTOSELECT = colors.get_bool("AutoSelect", NULL, -1, AUTOSELECT);
AUTOZOOM = colors.get_bool("AutoZoom", NULL, -1, AUTOZOOM);
ADVANCED_GRAPHICS = colors.get_bool("AdvancedGraphics", NULL, -1, ADVANCED_GRAPHICS);
EASY_RIDER = colors.get_bool("EasyRider", NULL, -1, EASY_RIDER);
if (ADVANCED_GRAPHICS)
{
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_3D_LOOK, CAMPI_SCAVATI);
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);
/*
#else
xi_set_pref(XI_PREF_COMBO_ICON, COMBO_ICON);
#endif
*/
xi_init();
memset(event_map, a_ignore, sizeof(event_map));
event_map[XIE_CHAR_FIELD] = a_obj;
event_map[XIE_DBL_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);
if (w != NULL && w->win() != NULL_WIN)
w->handler(w->win(), &xiev->v.xvte);
if (xiev->v.xvte.type == E_MOUSE_UP)
_button_blocked = false;
{
switch (xiev->v.xvte.type)
{
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
notify_xvt = true;
@ -719,7 +736,7 @@ HIDDEN void xi_event_handler(XI_OBJ* itf, XI_EVENT* xiev)
{
xiev->refused = true;
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;
}
}
@ -1379,7 +1396,6 @@ void TField_control::create(WINDOW win, short cid,
{
f->button = true;
f->pixel_button_distance = 1;
f->button_width = 18;
}
}
else // E' un multiline, quindi setto il rettangolo
@ -1908,7 +1924,6 @@ byte TRadiobutton_control::get_checked() const
int children;
XI_OBJ** child = xi_get_member_list(_obj, &children);
int c;
for (c = children-1; c > 0; c--)
if (xi_is_checked(child[c])) break;
return (byte)c;
@ -1918,17 +1933,20 @@ void TRadiobutton_control::check_button(byte c)
{
int 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 (!xi_is_checked(child[c]) || NATIVE_CONTROLS)
if (child != NULL && c < children)
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)
{
int children;
XI_OBJ** child = xi_get_member_list(_obj, &children);
CHECKD(c < children, "This radio is rather old, it doesn't have button ", c);
change_attrib(XI_ATR_VISIBLE, on, child[c]);
if (child != NULL && c < children)
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)
@ -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
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 ...
ok = notify_key(K_SPACE); // ... avverti il mask_field proprietario
}
@ -1958,9 +1976,9 @@ void TRadiobutton_control::set_focus() const
int children;
XI_OBJ** child = xi_get_member_list(_obj, &children);
int 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]);
}

View File

@ -172,7 +172,7 @@ static void prep_merge()
strcpy(fdname, f2name);
strcpy(f2name, wname);
fclose(fp2);
xvt_fsys_removefile(f2name);
xvt_fsys_remove_file(f2name);
fp2 = NULL;
/* @(:) 2.3.00.112 */
nrcds *= 2;
@ -471,7 +471,7 @@ static FILE *wopen(char* name) /* nome del file temporaneo */
if (!j)
{
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 { */
/* @(!) 2.3.00.112 eliminata fclose(fp2); */

View File

@ -27,14 +27,8 @@ TDate::TDate(long l) : _val(l)
{
if (_val == TODAY)
{
_val = NULLDATE;
time_t lt;
if (time(&lt) != -1)
{
struct tm * timeloc = localtime(&lt);
if (timeloc != NULL)
_val = makedata(timeloc->tm_mday, timeloc->tm_mon+1, timeloc->tm_year + 1900);
}
const struct tm * timeloc = xvt_time_now();
_val = makedata(timeloc->tm_mday, timeloc->tm_mon+1, timeloc->tm_year + 1900);
}
else
{

View File

@ -205,9 +205,7 @@ bool TGolem_mask::sheet_notify(TSheet_field& s, int r, KEY k)
{
TToken_string row = s.row(r);
if (row.get_char(2)<=' ')
{
xvt_fsys_removefile(row.get(0));
}
xvt_fsys_remove_file(row.get(0));
}
return true;
}

View File

@ -826,7 +826,7 @@ TBaseisamfile::TBaseisamfile(
}
_lasterr = NOERR;
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);
_current = new TRectype(this);
@ -3477,12 +3477,12 @@ int TRectype::compare_key(
HIDDEN bool fld_empty(const char* s, int len, bool number)
{
if (*s)
if (s && *s)
{
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;
}
const char* TRectype::start(int nf) const
{
return string() + rec_des()->Fd[nf].RecOff;
@ -3585,53 +3584,35 @@ bool TRectype::is_equal(const TRectype& r) const
return yes;
}
TFieldtypes TRectype::type(const char* fieldname) const
{
const RecDes* recd = rec_des();
int p = findfld(recd, fieldname);
if (p != FIELDERR)
return (TFieldtypes) recd->Fd[p].TypeF;
else
return _nullfld;
const int p = findfld(recd, fieldname);
return p != FIELDERR ? (TFieldtypes)recd->Fd[p].TypeF : _nullfld;
}
int TRectype::length(const char* fieldname) const
{
const RecDes * recd = rec_des();
int p = findfld(recd, fieldname);
if (p != FIELDERR)
return(recd->Fd[p].Len);
else
return(0);
const int p = findfld(recd, fieldname);
return p != FIELDERR ? recd->Fd[p].Len : 0;
}
int TRectype::ndec(const char* fieldname) const
{
const RecDes * recd = rec_des();
int p = findfld(recd, fieldname);
if (p != FIELDERR)
return(recd->Fd[p].Dec);
else
return(0);
const RecDes* recd = rec_des();
const int p = findfld(recd, fieldname);
return p != FIELDERR ? recd->Fd[p].Dec : 0;
}
bool TRectype::exist(const char* fieldname) const
{
const bool ok = findfld(rec_des(), fieldname) != FIELDERR;
return ok;
return findfld(rec_des(), fieldname) != FIELDERR;
}
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;
}
@ -3639,9 +3620,9 @@ const TString& TRectype::get_str(const char* fieldname) const
{
const RecDes* recd = rec_des();
const int nf = findfld(recd, fieldname);
const RecFieldDes& fd = recd->Fd[nf];
if (nf != FIELDERR)
{
const RecFieldDes& fd = recd->Fd[nf];
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()));
return tmp;
@ -4097,7 +4078,7 @@ bool TRectype::edit(int logicnum, const char* alternate_key_fields, const char*
ok = result == "OK";
}
xvt_fsys_removefile(ininame);
xvt_fsys_remove_file(ininame);
if (ok)
rec_cache(logicnum).notify_change();

View File

@ -217,9 +217,7 @@ static unsigned int CreatePassword(TString& pass)
{
const int BASE = 19;
unsigned int num = 0;
time_t lt; time(&lt);
struct tm* t = localtime(&lt);
const struct tm* t = xvt_time_now();
srand(t->tm_hour * 10000 + t->tm_min *100 + t->tm_sec);
do
{

View File

@ -831,7 +831,7 @@ void TMask::handler(WINDOW win, EVENT* ep)
if (ep->type == E_CONTROL)
{
if (is_running())
if (is_running()) // Scarto a priori gli eventi di inizializzazione
{
switch (ep->v.ctl.ci.type)
{
@ -839,13 +839,22 @@ void TMask::handler(WINDOW win, EVENT* ep)
if (ep->v.ctl.ci.win == _notebook)
{
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);
}
break;
case WC_PUSHBUTTON:
if (ep->v.ctl.ci.win == _toolbar)
field(ep->v.ctl.id).on_key(K_SPACE);
case WC_ICON: // In realta' trattasi di bottone di toolbar
if (ep->v.ctl.ci.win == toolbar()) // Test di sicurezza semi-inutile
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;
default:
break;
@ -1010,6 +1019,8 @@ TMask_field* TMask::parse_field(TScanner& scanner)
if (k == "SP") return new TSheet_field(this);
if (k == "TR") return new TTree_field(this);
if (k == "CL") return new TGolem_client_field(this);
if (k == "SL") return new TSlider_field(this);
return NULL;
}
@ -1464,8 +1475,8 @@ void TMask::set(
void TMask::set(short fld_id, long n, byte hit)
{
char s[16];
sprintf(s, "%ld", n);
TString16 s;
s << n;
set(fld_id, s, hit);
}

View File

@ -1058,9 +1058,7 @@ void TLoadable_field::set_default(const char* def)
TButton_field::TButton_field(TMask* m)
: TOperable_field(m)
{
}
{ }
word TButton_field::class_id() const
{ return CLASS_BUTTON_FIELD; }
@ -1076,7 +1074,6 @@ void TButton_field::parse_head(TScanner& scanner)
if (_ctl_data._height <= 0) _ctl_data._height = 1;
}
bool TButton_field::parse_item(TScanner& scanner)
{
if (scanner.key() == "PI")
@ -1091,7 +1088,6 @@ bool TButton_field::parse_item(TScanner& scanner)
return TOperable_field::parse_item(scanner);
}
void TButton_field::create(WINDOW parent)
{
_exit_key = 0;
@ -1702,7 +1698,7 @@ void TBoolean_field::set_window_data(const char* 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" : "";
return _str;
}
@ -1711,10 +1707,10 @@ bool TBoolean_field::parse_item(TScanner& scanner)
{
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);
ts->add(scanner.line().strip_spaces());
return TRUE;
return true;
}
return TEditable_field::parse_item(scanner);
@ -4595,7 +4591,7 @@ bool TList_field::parse_item(TScanner& scanner)
if (scanner.key() == "IT") // ITEM
{
read_item(scanner);
return TRUE;
return true;
}
return TEditable_field::parse_item(scanner);

View File

@ -1653,7 +1653,8 @@ class TField_window : public TScroll_window
protected:
virtual void update();
virtual void handler(WINDOW win, EVENT* ep);
void set_owner(TWindowed_field* o);
public:
virtual bool on_key(KEY k);
TWindowed_field& owner() const { return *_owner; }

View File

@ -326,8 +326,7 @@ bool TPostman::dispatch_transaction(const TRectype& rec,
if (file_dest.items() > 0)
{
TString16 basename;
time_t lt; time(&lt);
struct tm * tl = localtime(&lt);
const struct tm * tl = xvt_time_now();
basename.format("%02d%02d%02d_%02d%02d%02d_0",
tl->tm_year%100, tl->tm_mon+1, tl->tm_mday,
tl->tm_hour, tl->tm_min, tl->tm_sec);

View File

@ -155,7 +155,7 @@ void TIndwin::update_bar()
{
const unsigned long elapsed_time = (clock() - _start_time)/CLOCKS_PER_SEC;
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, str_tot);

View File

@ -317,7 +317,7 @@ bool TRecordset::save_as_dbf(const char* table, int mode)
n = volume; n.add(dirname); n.add(name); n.ext("*");
TString_array files; list_files(n, files);
FOR_EACH_ARRAY_ROW(files, f, row)
xvt_fsys_removefile(*row);
xvt_fsys_remove_file(*row);
}
mode = 0x1;
}

View File

@ -1719,7 +1719,7 @@ void TBook::split_file(int colonne)
// Sostituisce il file di stampa con quello splittato ed aggiorna l'indice delle pagine
fcopy(temp, _file);
xvt_fsys_removefile(temp);
xvt_fsys_remove_file(temp);
_index = index;
_pages = _index.last();
}
@ -1806,7 +1806,7 @@ void TBook::join_file(int pps)
// Sostituisce il file di stampa con quello joinato
fcopy(temp, _file);
xvt_fsys_removefile(temp);
xvt_fsys_remove_file(temp);
}
bool TBook::can_split(int pages) const

View File

@ -191,9 +191,10 @@ TSheet_control::TSheet_control(
}
// Calcola rettangolo massimo per lo sheet
RCT rct; coord2rct(parent, x, y, dx, dy, rct);
rct.right -= 2*XI_FU_MULTIPLE; // toglie scroll-bar
// RCT rct; coord2rct(parent, x, y, dx, dy, rct);
// 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
if ((f_width+max_width)*XI_FU_MULTIPLE > rct.right)
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 & 0x02) add_button(DLG_NEWREC, TR("~Nuovo"), K_INS, BMP_NEWREC);
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);
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);
xvt_toolbar_realize(toolbar()); // Necessario per calcolare dimensioni corrette dello sheet
}
}
TSheet::~TSheet()
{
@ -1075,8 +1076,6 @@ void TSheet::add_button(
}
else
{
if (toolbar() == NULL_WIN)
create_bar(1); // Forza la creazione della top bar
TButton_tool& butt = add_button_tool(id, caption, bmp_up);
butt.set_exit_key(key);
}
@ -1085,7 +1084,7 @@ void TSheet::add_button(
bool TSheet::get_cell_colors(int row, int col, COLOR& fore, COLOR& back) const
{
fore = back = 0; // Default colors
if (row & 1)
if (EASY_RIDER && (row & 1))
back = REQUIRED_BACK_COLOR;
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);
xvt_vobj_get_client_rect(s.parent(), &wr);
s.get_rect(br);
// br.right = wr.right - br.left + 2*CHARX;
br.bottom = wr.bottom - br.left;
s.set_rect(br);
if (br.bottom > wr.bottom || (wr.bottom-br.bottom) > 48)
{
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)
@ -1863,7 +1864,7 @@ TBrowse_sheet::TBrowse_sheet(TCursor* cursor, const char* fields,
e = &add_number(c.dlg(), 0, p, 1, y++, csize, flags);
break;
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;
default:
e = NULL;

View File

@ -67,7 +67,7 @@ sqlite3* TSQLite::open(const char* fname)
if (err = SQLITE_CORRUPT)
{
close();
xvt_fsys_removefile(_currdb);
xvt_fsys_remove_file(_currdb);
err = sqlite3_open(_currdb, &_handle);
}

View File

@ -404,7 +404,7 @@ int TString::find(const char* s, int from) 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)

View File

@ -73,18 +73,23 @@ void TField_window::update()
const WINDOW pa = parent();
RCT rct; xvt_vobj_get_outer_rect(me, &rct);
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);
}
xvt_dwin_clear(me, NORMAL_BACK_COLOR);
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)
: _owner(owner)
{
if (owner != NULL)
{
CHECK(parent, "Null control parent");
create(x, y, dx, dy, "", WSF_HSCROLL | WSF_VSCROLL, W_PLAIN, parent);
activate(owner->enabled());
if (owner->shown())
@ -1371,3 +1376,181 @@ bool TOutlook_field::on_key(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)
{ }

View File

@ -91,4 +91,36 @@ public:
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

View File

@ -124,6 +124,7 @@
#define TOOL_LASTREC 125
#define TOOL_FINDREC 126
#define TOOL_EMAIL 139
#define TOOL_CONVERT 156
#define TOOL_INFO 162
#define TOOL_HELP 163
#define TOOL_SETPRINT 165

View File

@ -585,15 +585,8 @@ const TString & get_hostname()
long daytime()
{
long t = 0L;
time_t lt;
if (time(&lt) != -1)
{
struct tm * timeloc = localtime(&lt);
if (timeloc != NULL)
t = timeloc->tm_sec + timeloc->tm_min * 100L + timeloc->tm_hour * 10000L;
}
return t;
const struct tm * timeloc = xvt_time_now();
return timeloc->tm_sec + timeloc->tm_min * 100L + timeloc->tm_hour * 10000L;
}
bool is_power_station()