Patch level : 2.2

Files correlati     : maschere customizzate
Ricompilazione Demo : [ ]
Commento            :
Scrive in maniera evidenziata, sul fondo della maschera, se e' personalizzata
(e' contenuta nella dir custom)


git-svn-id: svn://10.65.10.50/trunk@13396 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2005-10-06 15:23:02 +00:00
parent a206a24738
commit e02a130b5e
3 changed files with 103 additions and 79 deletions

View File

@ -583,6 +583,33 @@ HIDDEN void xi_event_handler(XI_OBJ* itf, XI_EVENT* xiev)
} }
} }
} }
TWindow* msk = (TWindow*)xi_get_app_data(itf);
if (msk != NULL && msk->is_kind_of(CLASS_MASK))
{
const TMask& m = (const TMask&)*msk;
WINDOW win = m.win();
if ((WINDOW)xi_get_window(itf) == win)
{
if (m.number() == 0 && m.source_file().find("custom") > 0)
{
RCT rct; xvt_vobj_get_client_rect(win, &rct);
rct.left += 2; rct.right -= 2; rct.bottom -= 2;
DRAW_CTOOLS dct;
xvt_dwin_get_draw_ctools(win, &dct);
dct.fore_color = FOCUS_COLOR;
dct.back_color = FOCUS_BACK_COLOR;
dct.opaque_text = TRUE;
xvt_dwin_set_draw_ctools(win, &dct);
xvt_dwin_set_font(win, DEF_FONT);
const char* text = "Custom";
const int tw = xvt_dwin_get_text_width(win, text, -1);
xvt_dwin_draw_text(win, rct.left, rct.bottom, text, -1);
xvt_dwin_draw_text(win, (rct.right-rct.left-tw)/2, rct.bottom, text, -1);
xvt_dwin_draw_text(win, rct.right-tw, rct.bottom, text, -1);
}
}
}
} }
break; break;
case a_select: case a_select:
@ -1624,19 +1651,17 @@ void TPushbutton_control::update()
if (attrib & XI_ATR_VISIBLE) if (attrib & XI_ATR_VISIBLE)
{ {
RCT rct = (RCT&) _obj->v.btn->rct; XI_RCT rct = _obj->v.btn->rct;
rct.left += 5; rct.top += 5; rct.right -= 5; rct.bottom -= 5; rct.left += 5; rct.top += 5; rct.right -= 5; rct.bottom -= 5;
#ifdef XI_R4
XinWindow xiwin = xi_get_window(_obj->itf); WINDOW win = parent();
xi_set_clip(xiwin, (XinRect *) &rct ); xi_set_clip((XinWindow)win, &rct);
#endif
// Cancello il testo sottostante // Cancello il testo sottostante
const WINDOW win = parent();
CBRUSH brush = { PAT_SOLID, BTN_BACK_COLOR }; CBRUSH brush = { PAT_SOLID, BTN_BACK_COLOR };
xvt_dwin_set_cbrush(win, &brush); xvt_dwin_set_cbrush(win, &brush);
xvt_dwin_set_std_cpen(win, TL_PEN_HOLLOW); xvt_dwin_set_std_cpen(win, TL_PEN_HOLLOW);
xvt_dwin_draw_rect(win, &rct); xi_draw_rect((XinWindow)win, &rct);
const short bmp = (_bmp_dn > 0 && _obj->v.btn->down) ? _bmp_dn : _bmp_up; const short bmp = (_bmp_dn > 0 && _obj->v.btn->down) ? _bmp_dn : _bmp_up;
if (bmp > 0) if (bmp > 0)
@ -1699,9 +1724,7 @@ void TPushbutton_control::update()
} }
} }
} }
#ifdef XI_R4 xi_set_clip((XinWindow)win, NULL);
xi_set_clip(xiwin, NULL);
#endif
} }
} }

View File

@ -66,7 +66,7 @@ void TMask::init_mask()
_enabled.set(MAX_PAGES); _enabled.set(MAX_PAGES);
_enabled.set(); // Abilita tutte le pagine _enabled.set(); // Abilita tutte le pagine
_should_check = TRUE; _should_check = true;
_focus = _first_focus = 0; // Il primo ha il focus _focus = _first_focus = 0; // Il primo ha il focus
_page = -1; // Nessuna pagina corrente _page = -1; // Nessuna pagina corrente
@ -160,7 +160,7 @@ void TMask::read_mask(
if (scanner.key() == "PA") if (scanner.key() == "PA")
{ {
CHECKD(_pages < MAX_PAGES, "Maschera con troppe pagine: ", _pages); CHECKD(_pages < MAX_PAGES, "Maschera con troppe pagine: ", _pages);
WINDOW w = read_page(scanner, FALSE); WINDOW w = read_page(scanner, false);
TString80 title; TString80 title;
xvt_vobj_get_title(w, title.get_buffer(), title.size()); xvt_vobj_get_title(w, title.get_buffer(), title.size());
@ -173,7 +173,7 @@ void TMask::read_mask(
if (scanner.key() == "TO") if (scanner.key() == "TO")
{ {
CHECK(toolwin() == NULL_WIN, "La maschera puo' avere una sola TOOLBAR"); CHECK(toolwin() == NULL_WIN, "La maschera puo' avere una sola TOOLBAR");
_pagewin[MAX_PAGES] = read_page(scanner, TRUE); _pagewin[MAX_PAGES] = read_page(scanner, true);
} }
} }
@ -282,7 +282,7 @@ word TMask::class_id() const
bool TMask::is_kind_of(word c) const bool TMask::is_kind_of(word c) const
{ {
if (c == CLASS_MASK) if (c == CLASS_MASK)
return TRUE; return true;
return TWindow::is_kind_of(c); return TWindow::is_kind_of(c);
} }
@ -290,9 +290,9 @@ void TMask::open()
{ {
if (!_open || _page != 0) if (!_open || _page != 0)
{ {
_open = TRUE; _open = true;
if (toolwin()) if (toolwin())
xvt_vobj_set_visible(toolwin(), TRUE); xvt_vobj_set_visible(toolwin(), true);
} }
_focus = first_focus(0); _focus = first_focus(0);
set_focus_field(fld(_focus).dlg()); set_focus_field(fld(_focus).dlg());
@ -320,7 +320,7 @@ int TMask::first_focus(short id)
if (tempfirstfocus >= 0) if (tempfirstfocus >= 0)
{ {
f = tempfirstfocus; f = tempfirstfocus;
if (fld(f).dirty() == FALSE) if (fld(f).dirty() == false)
fld(f).set_dirty(); fld(f).set_dirty();
tempfirstfocus = -1; tempfirstfocus = -1;
} }
@ -387,22 +387,22 @@ bool TMask::can_be_closed() const
{ {
if (is_running()) if (is_running())
{ {
bool ok = TRUE; bool ok = true;
if ((edit_mode() || insert_mode()) && dirty() && id2pos(DLG_QUIT) < 0) if ((edit_mode() || insert_mode()) && dirty() && id2pos(DLG_QUIT) < 0)
ok = yesno_box(TR("Annullare i dati inseriti?")); ok = yesno_box(TR("Annullare i dati inseriti?"));
if (ok) if (ok)
((TMask*)this)->stop_run(K_FORCE_CLOSE); ((TMask*)this)->stop_run(K_FORCE_CLOSE);
return FALSE; return false;
} }
return TRUE; // Should never happen! return true; // Should never happen!
} }
void TMask::close() void TMask::close()
{ {
_open = FALSE; _open = false;
_page = -1; _page = -1;
for (int p = 0; p <= MAX_PAGES; p++) for (int p = 0; p <= MAX_PAGES; p++)
if (_pagewin[p]) xvt_vobj_set_visible(_pagewin[p], FALSE); if (_pagewin[p]) xvt_vobj_set_visible(_pagewin[p], false);
} }
short TMask::dirty() const short TMask::dirty() const
@ -435,8 +435,8 @@ void TMask::enable_page(
byte page, // @parm Pagina da abilitare/disabilitare byte page, // @parm Pagina da abilitare/disabilitare
bool on) // @parm Operazione da svolgere: bool on) // @parm Operazione da svolgere:
// //
// @flag TRUE | Abilita la pagina <p p> (default) // @flag true | Abilita la pagina <p p> (default)
// @flag FALSE | Disabilita la pagina <p p> // @flag false | Disabilita la pagina <p p>
{ {
CHECK(page > 0, "Can't enable/disable first page"); CHECK(page > 0, "Can't enable/disable first page");
@ -480,21 +480,21 @@ void TMask::start_run()
TMask_field& f = fld(i); TMask_field& f = fld(i);
if (f.dirty() <= 1) // Attenzione puo' valere anche 3 per i very dirty! if (f.dirty() <= 1) // Attenzione puo' valere anche 3 per i very dirty!
{ {
f.set_dirty(FALSE); f.set_dirty(false);
const bool op = f.is_operable() && !f.is_kind_of(CLASS_BUTTON_FIELD); const bool op = f.is_operable() && !f.is_kind_of(CLASS_BUTTON_FIELD);
if (op && (f.active() || f.ghost())) if (op && (f.active() || f.ghost()))
f.on_hit(); // Lancia messaggio di inizializzazione f.on_hit(); // Lancia messaggio di inizializzazione
} }
} }
} }
_should_check = TRUE; _should_check = true;
// Make sure that "nearly" all fields are clean! // Make sure that "nearly" all fields are clean!
for (int i = 0; i < max; i++) for (int i = 0; i < max; i++)
{ {
TMask_field& f = fld(i); TMask_field& f = fld(i);
if (f.dirty() == 1) // Attenzione puo' valere anche 3 per i very dirty! if (f.dirty() == 1) // Attenzione puo' valere anche 3 per i very dirty!
f.set_dirty(FALSE); f.set_dirty(false);
} }
_init_time = clock()-start; _init_time = clock()-start;
@ -523,15 +523,15 @@ bool TMask::check_fields()
} }
if (sheet) f.set_dirty(); // Force check in sheet masks if (sheet) f.set_dirty(); // Force check in sheet masks
if (f.on_key(K_ENTER) == FALSE) if (f.on_key(K_ENTER) == false)
{ {
if (is_open()) if (is_open())
set_focus_field(f.dlg()); set_focus_field(f.dlg());
return FALSE; return false;
} }
} }
} }
return TRUE; return true;
} }
void TMask::check_field( short fld_id ) void TMask::check_field( short fld_id )
@ -648,13 +648,13 @@ int TMask::find_parent_page(const TMask_field& f) const
// //
// @rdesc Ritorna il risultato dell'operazione: // @rdesc Ritorna il risultato dell'operazione:
// //
// @flag TRUE | E' riuscita a chiudere la maschera // @flag true | E' riuscita a chiudere la maschera
// @flag FALSE | Non e' riuscita a chiudere la maschera // @flag false | Non e' riuscita a chiudere la maschera
bool TMask::stop_run( bool TMask::stop_run(
KEY key) // @parm Tasto che deve provocare la chiusura KEY key) // @parm Tasto che deve provocare la chiusura
// @comm Permette di chiudere la maschera come se l'utente avesse premuto il tasto <p key>. // @comm Permette di chiudere la maschera come se l'utente avesse premuto il tasto <p key>.
// Nel caso la maschera non si chiuda (es. un check fallito), ritorna FALSE. // Nel caso la maschera non si chiuda (es. un check fallito), ritorna false.
{ {
if (key != K_AUTO_ENTER && key != K_FORCE_CLOSE) if (key != K_AUTO_ENTER && key != K_FORCE_CLOSE)
{ {
@ -672,7 +672,7 @@ bool TMask::stop_run(
} }
} }
if (i >= last) if (i >= last)
return FALSE; return false;
} }
if (key == K_CTRL_ENTER || key == K_AUTO_ENTER) if (key == K_CTRL_ENTER || key == K_AUTO_ENTER)
@ -694,7 +694,7 @@ bool TMask::stop_run(
save_profile(); save_profile();
} }
else else
return FALSE; return false;
} }
return TWindow::stop_run(key); return TWindow::stop_run(key);
@ -781,8 +781,8 @@ void TMask::handler(WINDOW win, EVENT* ep)
// //
// @rdesc Ritrna se e' stto effetuato una azione: // @rdesc Ritrna se e' stto effetuato una azione:
// //
// @flag TRUE | Era prevista una azione collegata al tasto ed e' stata eseguita // @flag true | Era prevista una azione collegata al tasto ed e' stata eseguita
// @flag FALSE | Non era prevista nessuna azione collegata al tasto // @flag false | Non era prevista nessuna azione collegata al tasto
bool TMask::on_key( bool TMask::on_key(
KEY key) // @parm Tasto premuto sulla maschera KEY key) // @parm Tasto premuto sulla maschera
@ -792,7 +792,8 @@ bool TMask::on_key(
if (_handler) if (_handler)
{ {
const bool cont = _handler(*this, key); const bool cont = _handler(*this, key);
if (!cont) return FALSE; if (!cont)
return false;
} }
switch(key) switch(key)
@ -855,7 +856,7 @@ bool TMask::on_key(
TSheet_field& s = (TSheet_field&)f; TSheet_field& s = (TSheet_field&)f;
const int newrow = s.append() ? -1 : 0; const int newrow = s.append() ? -1 : 0;
notify_focus_field(s.dlg()); notify_focus_field(s.dlg());
s.insert(newrow, TRUE, TRUE); s.insert(newrow, true, true);
} }
} }
} }
@ -889,12 +890,12 @@ bool TMask::on_key(
} }
} }
return TRUE; return true;
} }
bool TMask::on_dirty(TMask_field&) bool TMask::on_dirty(TMask_field&)
{ {
return TRUE; return true;
} }
int TMask::win2page(WINDOW w) const int TMask::win2page(WINDOW w) const
@ -949,7 +950,7 @@ WINDOW TMask::read_page(
bool toolbar) // @parm Indica se e' la toolbar bool toolbar) // @parm Indica se e' la toolbar
// @comm Il parametro <p toolbar> e' utilizzato per indicare se la pagina deve essere visualizzata // @comm Il parametro <p toolbar> e' utilizzato per indicare se la pagina deve essere visualizzata
// a tutto schermo (TRUE) oppure no // a tutto schermo (true) oppure no
{ {
static int tooly; static int tooly;
static RCT rect; static RCT rect;
@ -987,16 +988,16 @@ WINDOW TMask::read_page(
if (!orecchie && !toolbar) // Controlla se la maschera ha piu' di una pagina if (!orecchie && !toolbar) // Controlla se la maschera ha piu' di una pagina
{ {
const streampos pos = scanner.tellg(); // Memorizza posizione dello scanner const streampos pos = scanner.tellg(); // Memorizza posizione dello scanner
while (TRUE) while (true)
{ {
const TString& l = scanner.line(); const TString& l = scanner.line();
if (l.empty() || l == "ENDMASK") // Fine maschera if (l.empty() || l == "ENDMASK") // Fine maschera
break; break;
if (l.compare("PA", 2, TRUE) == 0) // Ho trovato un'altra pagina! if (l.compare("PA", 2, true) == 0) // Ho trovato un'altra pagina!
{ {
orecchie = TRUE; // Quindi devo metterci le orecchie orecchie = true; // Quindi devo metterci le orecchie
break; break;
} }
} }
@ -1007,7 +1008,7 @@ WINDOW TMask::read_page(
if (toolbar || toolwin()) if (toolbar || toolwin())
{ {
if (toolbar) if (toolbar)
w = create_interface(NULL_WIN, 0, r.top, 0, 0, title, this, FALSE); w = create_interface(NULL_WIN, 0, r.top, 0, 0, title, this, false);
else else
w = create_interface(NULL_WIN, 0, r.top, 0, tooly, title, this, orecchie); w = create_interface(NULL_WIN, 0, r.top, 0, tooly, title, this, orecchie);
} }
@ -1044,7 +1045,7 @@ WINDOW TMask::read_page(
bool TMask::check_current_field() const bool TMask::check_current_field() const
{ {
bool ok = TRUE; bool ok = true;
if (_focus >= 0) if (_focus >= 0)
{ {
TMask_field& ff = fld(_focus); TMask_field& ff = fld(_focus);
@ -1132,9 +1133,9 @@ void TMask::next_page(
} }
if (_page != prev) if (_page != prev)
{ {
xvt_vobj_set_visible(win(), TRUE); xvt_vobj_set_visible(win(), true);
if (prev >= 0) if (prev >= 0)
xvt_vobj_set_visible(_pagewin[prev], FALSE); xvt_vobj_set_visible(_pagewin[prev], false);
} }
TMask_field& ff = fld(_focus); TMask_field& ff = fld(_focus);
@ -1171,7 +1172,7 @@ void TMask::reset(short fld_id)
TMask_field& c = fld(f); TMask_field& c = fld(f);
if (gr == 0 || c.in_group(gr)) if (gr == 0 || c.in_group(gr))
{ {
c._flags.dirty = c._flags.focusdirty = FALSE; c._flags.dirty = c._flags.focusdirty = false;
c.reset(); c.reset();
} }
} }
@ -1253,7 +1254,7 @@ void TMask::set(
short fld_id, // @parm Identificatore del campo da settare short fld_id, // @parm Identificatore del campo da settare
const char* s, // @parm Stringa da assegnare al campo const char* s, // @parm Stringa da assegnare al campo
byte hit) // @parm Indica se occorre rifare i controlli una volta settato il campo byte hit) // @parm Indica se occorre rifare i controlli una volta settato il campo
// con il nuovo valore (default FALSE) // con il nuovo valore (default false)
// @parm long | n | Numero da asegnare al campo // @parm long | n | Numero da asegnare al campo
// @syntax set(short fld_id, const char *s, bool hit); // @syntax set(short fld_id, const char *s, bool hit);
@ -1275,7 +1276,7 @@ void TMask::set(
const char * fld_id, // @parm FIELD del campo da settare const char * fld_id, // @parm FIELD del campo da settare
const char* str, // @parm Stringa da assegnare al campo const char* str, // @parm Stringa da assegnare al campo
byte hit) // @parm Indica se occorre rifare i controlli una volta settato il campo byte hit) // @parm Indica se occorre rifare i controlli una volta settato il campo
// con il nuovo valore (default FALSE) // con il nuovo valore (default false)
// @parm long | n | Numero da asegnare al campo // @parm long | n | Numero da asegnare al campo
// @syntax set(short fld_id, const char *s, bool hit); // @syntax set(short fld_id, const char *s, bool hit);
@ -1322,8 +1323,8 @@ void TMask::set(short fld_id, const TCurrency& n, byte hit)
void TMask::activate( void TMask::activate(
bool on) // @parm Indica l'operazione da svolgere sul campo: bool on) // @parm Indica l'operazione da svolgere sul campo:
// //
// @flag TRUE | Attiva la pagina(default) // @flag true | Attiva la pagina(default)
// @flag FALSE | Disattiva la pagina // @flag false | Disattiva la pagina
{ {
TWindow::activate(on); TWindow::activate(on);
if (toolwin() != NULL_WIN) if (toolwin() != NULL_WIN)
@ -1337,8 +1338,8 @@ void TMask::enable(
short fld_id, // @parm Identificatore del campo da abilitare (0 tutti i campi, <0 id gruppo) short fld_id, // @parm Identificatore del campo da abilitare (0 tutti i campi, <0 id gruppo)
bool on) // @parm Indica l'operazione da svolgere sul campo: bool on) // @parm Indica l'operazione da svolgere sul campo:
// //
// @flag TRUE | Abilita il campo (default) // @flag true | Abilita il campo (default)
// @flag FALSE | Disabilita il campo // @flag false | Disabilita il campo
{ {
if (fld_id <= 0) if (fld_id <= 0)
{ {
@ -1394,8 +1395,8 @@ void TMask::enable_key(
word key, // @parm Chiave di cui abilitare il campo word key, // @parm Chiave di cui abilitare il campo
bool on) // @parm Indica l'operazione da svolgere sul tasto: bool on) // @parm Indica l'operazione da svolgere sul tasto:
// //
// @flag TRUE | Abilita il campo (default) // @flag true | Abilita il campo (default)
// @flag FALSE | Disabilita il campo // @flag false | Disabilita il campo
{ {
for (int i = fields()-1; i >= 0; i--) for (int i = fields()-1; i >= 0; i--)
@ -1424,8 +1425,8 @@ TEditable_field* TMask::get_key_field(
word key, // @parm Chiave di cui controllare l'esistenza word key, // @parm Chiave di cui controllare l'esistenza
bool first) const // @parm Indica se la ricerca dev partire dell'inizio. Assume i valori: bool first) const // @parm Indica se la ricerca dev partire dell'inizio. Assume i valori:
// //
// @flag TRUE | Comincia la ricerca dal primo campo della maschera // @flag true | Comincia la ricerca dal primo campo della maschera
// @flag FALSE | Comincia la ricerca dal campo attuale nella maschera // @flag false | Comincia la ricerca dal campo attuale nella maschera
{ {
static int last = 0; static int last = 0;
@ -1473,8 +1474,8 @@ void TMask::show(
short fld_id, // @parm Campo da mostrare/nascondere (default -1) short fld_id, // @parm Campo da mostrare/nascondere (default -1)
bool on) // @parm Indica l'operazione da svolgere sul campo: bool on) // @parm Indica l'operazione da svolgere sul campo:
// //
// @flag TRUE | Mostra il campo(default) // @flag true | Mostra il campo(default)
// @flag FALSE | Nasconde il campo // @flag false | Nasconde il campo
// @comm Se <p fld_id> e' -1 allora permette di operare su tutti i campi della maschera // @comm Se <p fld_id> e' -1 allora permette di operare su tutti i campi della maschera
@ -1603,7 +1604,7 @@ void TMask::on_idle()
if (!f.in_key(0) || !e.has_a_common_key(f)) if (!f.in_key(0) || !e.has_a_common_key(f))
{ {
e.test_key_complete(FALSE); e.test_key_complete(false);
_test_fld = -1; _test_fld = -1;
} }
_last_test = f.dlg(); _last_test = f.dlg();
@ -2022,11 +2023,11 @@ TGroup_field& TMask::add_groupbox (
// //
// @rdesc Ritorna il risultato dell'operazione: // @rdesc Ritorna il risultato dell'operazione:
// //
// @flag TRUE | Se l'operazione e' avvenuta corretamente // @flag true | Se l'operazione e' avvenuta corretamente
// @flag FALSE | Se non si riesce a creare il file di salvataggio // @flag false | Se non si riesce a creare il file di salvataggio
bool TMask::save( bool TMask::save(
bool append) const // @parm Indica se creare il file o appendere (TRUE) le informazioni bool append) const // @parm Indica se creare il file o appendere (true) le informazioni
// ad uno gia' esistente (FALSE, default). // ad uno gia' esistente (false, default).
{ {
FILE* f = fopen(_workfile, append ? "a" : "w"); FILE* f = fopen(_workfile, append ? "a" : "w");
@ -2043,7 +2044,7 @@ bool TMask::save(
} }
fprintf(f, "[EOM]\n"); fprintf(f, "[EOM]\n");
fclose(f); fclose(f);
return TRUE; return true;
} }
@ -2053,18 +2054,18 @@ bool TMask::save(
// //
// @rdesc Ritorna il risultato dell'operazione: // @rdesc Ritorna il risultato dell'operazione:
// //
// @flag TRUE | Se l'operazione e' avvenuta corretamente // @flag true | Se l'operazione e' avvenuta corretamente
// @flag FALSE | Se non si riesce a leggere il file di salvataggio // @flag false | Se non si riesce a leggere il file di salvataggio
bool TMask::load( bool TMask::load(
bool reset) // @parm Indica la posizione di lettura del file: bool reset) // @parm Indica la posizione di lettura del file:
// //
// @flag TRUE | Comincia la lettura dell'inizio // @flag true | Comincia la lettura dell'inizio
// @flag FALSE | Comincia la lettura dalla posizione corrente dell'offset // @flag false | Comincia la lettura dalla posizione corrente dell'offset
{ {
FILE* f = fopen(_workfile, "r"); FILE* f = fopen(_workfile, "r");
if (f == NULL) return FALSE; if (f == NULL) return false;
if (reset) _lastpos = 0; if (reset) _lastpos = 0;
fseek(f, _lastpos, SEEK_SET); fseek(f, _lastpos, SEEK_SET);
TToken_string t(256); TToken_string t(256);
@ -2080,7 +2081,7 @@ bool TMask::load(
} }
_lastpos = ftell(f); _lastpos = ftell(f);
fclose(f); fclose(f);
return TRUE; return true;
} }
// @doc EXTERNAL // @doc EXTERNAL
@ -2169,7 +2170,7 @@ int TMask::save_profile(int num, const char* desc) const
{ {
TSheet_field& s = (TSheet_field&)f; TSheet_field& s = (TSheet_field&)f;
FOR_EACH_SHEET_ROW(s, r, row) FOR_EACH_SHEET_ROW(s, r, row)
ini.set(name, *row, NULL, TRUE, r); ini.set(name, *row, NULL, true, r);
} }
else else
{ {

View File

@ -199,7 +199,7 @@ TString& TString::operator <<(double n)
} }
// Appends an object to the string // Appends an object to the string
// Certified 50% // Certified 99%
// The object should be completely storable in spark // The object should be completely storable in spark
TString& TString::operator <<(const TObject& obj) TString& TString::operator <<(const TObject& obj)
{ {
@ -355,7 +355,7 @@ int TString::find(
// un messaggio di errore // un messaggio di errore
{ {
int pos = -1; int pos = -1;
if (from < len()) if (from == 0 || from < len())
{ {
const char* p = strchr(_str + from, c); const char* p = strchr(_str + from, c);
if (p) if (p)
@ -393,10 +393,10 @@ HIDDEN const char* strstr(const char* string1, const char* string2)
int TString::find(const char* s, int from) const int TString::find(const char* s, int from) const
{ {
int pos = -1; int pos = -1;
if (from < len()) if (from == 0 || from < len())
{ {
const char* p = strstr(_str + from, s); const char* p = strstr(_str + from, s);
if (p) if (p != NULL)
pos = int(p - _str); pos = int(p - _str);
} }
return pos; return pos;