diff --git a/ba/ba0101.cpp b/ba/ba0101.cpp index 2ccaaaf7a..ef51f56ee 100755 --- a/ba/ba0101.cpp +++ b/ba/ba0101.cpp @@ -189,8 +189,8 @@ bool TMenuitem::create(const char* t) _exist = _enabled = false; // Controlla lo stato di aggiornamento - if (_enabled && is_program()) - _enabled = !menu().is_dangerous(_action) && !menu().is_vanished(_action); + //if (_enabled && is_program()) + // _enabled = !menu().is_dangerous(_action) && !menu().is_vanished(_action); return visible; } @@ -221,7 +221,8 @@ bool TMenuitem::enabled() const } else { - yes = !menu().is_dangerous(_action); + // Controlla lo stato di aggiornamento + yes = !menu().is_dangerous(_action) && !menu().is_vanished(_action); if (yes) { const int endname = _action.find(' '); @@ -337,6 +338,12 @@ bool TMenuitem::perform_program() const { TCurrency::force_cache_update(); // Chiude cache valute TExternal_app a(_action); + if (!a.can_run()) + { + ((TMenuitem*)this)->_enabled = false; // Controllo sfuggito al caricamento del menu + return error_box(FR("L'utente %s non è abilitato all'uso del programma\n%s"), + (const char*)user(), (const char*)caption()); + } const bool install_app = _action.starts_with("ba1 -6", true); if (install_app) diff --git a/ba/ba1.cpp b/ba/ba1.cpp index d2fd512cc..1f5ae0518 100755 --- a/ba/ba1.cpp +++ b/ba/ba1.cpp @@ -10,24 +10,15 @@ int main(int argc,char** argv) switch (r) { - case 1: - ba1200(argc,argv); break; // Test file - case 2: - ba1300(argc,argv); break; // Compattazione files - case 3: - ba1400(argc,argv); break; // Configurazione utenti - case 4: - ba1500(argc,argv); break; // Attivazione moduli - case 5: - ba1600(argc,argv); break; // Creazione dischi e fascicolatore - case 6: - ba1700(argc,argv); break; // Installazione moduli - case 7: - ba1800(argc,argv); break; // Utility(?) - case 8: - ba1900(argc,argv); break; // Dizionario - default: - ba1100(argc,argv); break; // Manutenzione + case 1: ba1200(argc,argv); break; // Test file + case 2: ba1300(argc,argv); break; // Compattazione files + case 3: ba1400(argc,argv); break; // Configurazione utenti + case 4: ba1500(argc,argv); break; // Attivazione moduli + case 5: ba1600(argc,argv); break; // Creazione dischi e fascicolatore + case 6: ba1700(argc,argv); break; // Installazione moduli + case 7: ba1800(argc,argv); break; // Utility(?) + case 8: ba1900(argc,argv); break; // Dizionario + default: ba1100(argc,argv); break; // Manutenzione } return 0; } diff --git a/ba/ba1400.cpp b/ba/ba1400.cpp index 28eaa4df8..b54104efd 100755 --- a/ba/ba1400.cpp +++ b/ba/ba1400.cpp @@ -20,6 +20,9 @@ class TMenu_item : public TString { TString _cmd; + +protected: + int get_next_string(const char* s, int from, TString& str, char& brace) const; public: virtual TObject* dup() const { return new TMenu_item(*this); } @@ -31,20 +34,65 @@ public: virtual ~TMenu_item() { } }; +int TMenu_item::get_next_string(const char* s, int from, TString& str, char& brace) const +{ + if (from < 0) + return -1; + + char closing = '\0'; + int start = 0; + + for (int i = from; s[i]; i++) + { + if (s[i] == closing) + { + char* fine = (char*)(s + i); + const char old = *fine; + *fine = '\0'; + str = s + start; + *fine = old; + return i+1; + } + + if (!closing) + { + switch(s[i]) + { + case '\'': + case '"' : closing = s[i]; break; + case '<' : closing = '>' ; break; + case '[' : closing = ']' ; break; + default : break; + } + if (closing) + { + start = i+1; + brace = s[i]; + } + } + } + + return -1; +} + TMenu_item::TMenu_item(const TMenu_item& mi) : _cmd(mi._cmd) { set(*this); } TMenu_item::TMenu_item(const char* line) { - TToken_string ts(line, ','); - set(ts.get(0)); trim(); - if (operator[](0) == '"') - { ltrim(1); rtrim(1); } - - _cmd = ts.get(); _cmd.trim(); - if (_cmd[0] == '"') - { _cmd.ltrim(1); _cmd.rtrim(1); } + char brace; + int start = 0; + start = get_next_string(line, start, *this, brace); + start = get_next_string(line, start, _cmd, brace); + if (brace == '[') // Preserva il tipo submenu + { + _cmd.insert("["); + _cmd << ']'; + } + + if (_cmd.starts_with("ve0 -1 ")) + int cazzone = 1; } /////////////////////////////////////////////////////////// @@ -535,7 +583,7 @@ bool TSet_users::p_notify(TSheet_field& f, int r, KEY k) case K_INS: { TMask& m = f.mask(); - if (m.get(F_APPLICAT).empty()) + if (m.field(F_APPLICAT).empty()) return error_box(TR("Nessun programma selezionato")); } default: @@ -774,7 +822,7 @@ int TSet_user_passwd::rewrite(const TMask& m) bool TSet_users::remove() { - const TString16 u = get_relation()->curr().get(USR_USERNAME); + const TString u = get_relation()->curr().get(USR_USERNAME); const bool ok = TRelation_application::remove(); if (ok && u.full()) { diff --git a/ba/ba1700.cpp b/ba/ba1700.cpp index 3d50a57f5..b7ae22ba5 100755 --- a/ba/ba1700.cpp +++ b/ba/ba1700.cpp @@ -1781,7 +1781,7 @@ TInstaller_mask::TInstaller_mask() 0x18, 4) { add_button(F_INSTALL, TR("Installa"), '\0', TOOL_ELABORA); // NON mettere 'I' - add_button(F_UPDATE, TR("Rileggi"), '\0', TOOL_CONVERT); + add_button(F_UPDATE, TR("Aggiorna Lista"), '\0', TOOL_CONVERT); add_button(DLG_NULL, "", '\0'); add_button(DLG_INFO, TR("Info"), K_F2, TOOL_INFO); add_button(DLG_HELP, TR("Help"), K_F1, TOOL_HELP); diff --git a/ba/ba8300.cpp b/ba/ba8300.cpp index d4b313e50..522ba8fb7 100755 --- a/ba/ba8300.cpp +++ b/ba/ba8300.cpp @@ -923,12 +923,14 @@ void TReport_mask::section_properties() { TReport_section& rs = curr_section(); TSection_properties_mask m(rs); + bool dirty = false; switch (m.run()) { case K_ENTER: m.get_section(rs); _tree.goto_node(rs.type(), rs.level()); _is_dirty = true; + select_section(true); break; case K_DEL: if (yesno_box(TR("Confermare l'eliminazione della sezione"))) @@ -938,13 +940,12 @@ void TReport_mask::section_properties() rs.report().kill_section(t, l); _tree.goto_node(t, l-1); _is_dirty = true; + select_section(true); } break; default: break; } - if (_is_dirty) - select_section(); } void TReport_mask::report_properties()