diff --git a/src/include/maskfld.cpp b/src/include/maskfld.cpp index da54d81fe..603178eaa 100755 --- a/src/include/maskfld.cpp +++ b/src/include/maskfld.cpp @@ -1413,6 +1413,13 @@ void TButton_field::create(WINDOW parent) if (_ctl_data._bmp_up <= 0 && _ctl_data._prompt == BR("~Stampa", _ctl_data._width)) _ctl_data._bmp_up = BMP_PRINT; break; + case DLG_PREVIEW: + if (_ctl_data._prompt.empty() || _ctl_data._prompt == "Anteprima") + _ctl_data._prompt = BR("~Anteprima", _ctl_data._width); + _exit_key = K_ENTER; + if (_ctl_data._bmp_up <= 0 && _ctl_data._prompt == BR("~Anteprima", _ctl_data._width)) + _ctl_data._bmp_up = BMP_PREVIEW; + break; case DLG_QUIT: if (_ctl_data._prompt.empty()) _ctl_data._prompt = BR("Fine", _ctl_data._width); @@ -1445,6 +1452,7 @@ void TButton_field::create(WINDOW parent) _ctl_data._bmp_up, _ctl_data._bmp_dn); TToken_string* mess = message(0); + if (mess) { TToken_string msg(mess->get(0), ','); @@ -1465,6 +1473,7 @@ void TButton_field::create(WINDOW parent) if (_virtual_key == 0) { const char acc = ((TPushbutton_control*)_ctl)->mnemonic(); + _virtual_key = (acc > ' ') ? toupper(acc) : _exit_key; } } diff --git a/src/include/recset.cpp b/src/include/recset.cpp index 6c99bbdcb..65e28a144 100755 --- a/src/include/recset.cpp +++ b/src/include/recset.cpp @@ -394,14 +394,16 @@ bool TRecordset::save_as_dbf(const char* table, int mode) else { const TString & query = query_text(); + int posfield = query.find("SELECT"); int pos = query.find("FROM"); - TArray records; + TAssoc_array records; if (pos > 0) { TToken_string tables(query.mid(pos + 5), ','); const int len = tables.len(); int stop = 0; + bool first = true; tables.upper(); while (stop < len && ((tables[stop] >= 'A') && (tables[stop] <= 'Z') || tables[stop] == ',')) @@ -413,22 +415,44 @@ bool TRecordset::save_as_dbf(const char* table, int mode) int logic = table2logic(table); if (logic > LF_USER) - records.add(new TTrec(logic)); + { + if (first) + records.add("*", new TTrec(logic)); + records.add(table, new TTrec(logic)); + } + first = false; } } - + if (posfield >= 0) + { + posfield += 6; + while (isspace(query[posfield++])); + } + TToken_string fields(query.mid(posfield - 1, pos - posfield), ','); TTrec def(LF_EXTERNAL); TToken_string keydef("", '+'); int keylen = 0; + fields.trim(); for (unsigned int j = 0; j < columns(); j++) { TRecordset_column_info & c = (TRecordset_column_info &)column_info(j); - const TString& name = c._name; + const TString& colname = c._name; + const TString fld = fields.get(); + int dot = fld.find('.'); + TString table; + TString name(colname); - FOR_EACH_ARRAY_ITEM(records, r, obj) + if (dot > 0 && name == fld.mid(dot + 1)) + table = fld.left(dot); + + const TTrec * tr = (const TTrec *)records.objptr(table); + + if (tr == nullptr) + tr = (const TTrec *)records.objptr("*"); + if (tr != nullptr) { - TTrec & rec = (TTrec &)*obj; + TTrec & rec = (TTrec &)*tr; const int nfield = rec.field(name); if (nfield >= 0) diff --git a/src/include/toolfld.cpp b/src/include/toolfld.cpp index 24ff091ab..316896cbc 100755 --- a/src/include/toolfld.cpp +++ b/src/include/toolfld.cpp @@ -71,7 +71,7 @@ void TButton_tool::set_exit_key(KEY k) { case K_F1: _exit_key = M_HELP_ONCONTEXT; break; case K_F2: _exit_key = M_FILE_ABOUT; break; - default: _exit_key = k; break; + default: _exit_key = k; break; } } @@ -85,8 +85,8 @@ void TButton_tool::create(WINDOW toolbar) case DLG_OK: if (_ctl_data._prompt.blank()) _ctl_data._prompt = TR("~Conferma"); - set_exit_key(K_ENTER); - if (_ctl_data._bmp_up <= 0) + set_exit_key(K_ENTER); + if (_ctl_data._bmp_up <= 0) _ctl_data._bmp_up = TOOL_OK; break; case DLG_CANCEL: @@ -94,32 +94,39 @@ void TButton_tool::create(WINDOW toolbar) _ctl_data._prompt = TR("Annulla"); _virtual_key = K_ESC; set_exit_key(K_ESC); - if (_ctl_data._bmp_up <= 0) + if (_ctl_data._bmp_up <= 0) _ctl_data._bmp_up = TOOL_CANCEL; break; case DLG_DELREC: if (_ctl_data._prompt.blank()) _ctl_data._prompt = TR("~Elimina"); - set_exit_key(K_DEL); + set_exit_key(K_DEL); if (_ctl_data._bmp_up <= 0) _ctl_data._bmp_up = TOOL_DELREC; break; case DLG_PRINT: - if (_ctl_data._prompt.blank()) - _ctl_data._prompt = TR("~Stampa"); - set_exit_key(K_ENTER); + if (_ctl_data._prompt.blank() || _ctl_data._prompt == "Stampa") + _ctl_data._prompt = TR("~Stampa"); + set_exit_key(K_ENTER); if (_ctl_data._bmp_up <= 0) _ctl_data._bmp_up = TOOL_PRINT; break; + case DLG_PREVIEW: + if (_ctl_data._prompt.blank() || _ctl_data._prompt.starts_with("Antepr")) + _ctl_data._prompt = TR("~Anteprima"); + set_exit_key(M_FILE_PREVIEW); + if (_ctl_data._bmp_up <= 0) + _ctl_data._bmp_up = TOOL_PREVIEW; + break; case DLG_SETPRINT: - if (_ctl_data._prompt.blank()) - _ctl_data._prompt = TR("Imposta"); + if (_ctl_data._prompt.blank() || _ctl_data._prompt == "Imposta") + _ctl_data._prompt = TR("~Imposta"); set_exit_key(M_FILE_PG_SETUP); if (_ctl_data._bmp_up <= 0) _ctl_data._bmp_up = TOOL_SETPRINT; break; - case DLG_QUIT: - if (_ctl_data._prompt.blank()) + case DLG_QUIT: + if (_ctl_data._prompt.blank()) _ctl_data._prompt = TR("Fine"); _virtual_key = K_F4; // Alt+F4 set_exit_key(K_QUIT); @@ -136,7 +143,6 @@ void TButton_tool::create(WINDOW toolbar) _ctl_data._bmp_up = TOOL_MULTISEL; _virtual_key = K_CTRL + 'T'; break; - case DLG_HELP: if (_ctl_data._prompt.blank()) _ctl_data._prompt = TR("Help"); @@ -158,6 +164,7 @@ void TButton_tool::create(WINDOW toolbar) if (_virtual_key <= 0) { const char acc = _ctl_data._prompt.after("~")[0]; + if (acc >= 'A'&& acc <= 'z') _virtual_key = toupper(acc); } @@ -169,6 +176,7 @@ void TButton_tool::create(WINDOW toolbar) _ctl_data._bmp_up, _ctl_data._width, -1); TToken_string* mess = message(0); + if (mess != NULL) { TToken_string msg(mess->get(0), ',');