Patch level : 10.0 202

Files correlati     : ba0.exe
Ricompilazione Demo : [ ]
Commento            :
Corretta gestione abilitazione voci di menu dopo un cambio utente


git-svn-id: svn://10.65.10.50/trunk@18024 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2009-01-15 15:07:30 +00:00
parent 6e3ca6b9f5
commit 57247704fa
5 changed files with 141 additions and 94 deletions

View File

@ -225,19 +225,6 @@ bool TPicture_mask::on_key(KEY k)
case K_F8: case K_F8:
set(DLG_USER, app().main_menu().last_search_string(), true); set(DLG_USER, app().main_menu().last_search_string(), true);
return true; return true;
/* Obsoleto coi nuovi alberi
case K_ENTER:
case K_UP:
case K_DOWN:
case K_LEFT:
case K_RIGHT:
if (focus_field().is_kind_of(CLASS_TREE_FIELD))
{
TTree_field& tf = (TTree_field&)focus_field();
return tf.win().on_key(k);
}
break;
*/
default: default:
break; break;
} }
@ -1184,10 +1171,12 @@ bool TMenu_application::check_user()
if (ok) if (ok)
{ {
set_perms(); // Aggiorna permessi utente
customize_colors(); // Aggiorna set di colori customize_colors(); // Aggiorna set di colori
reload_images(); // Ritrasparentizza immagini reload_images(); // Ritrasparentizza immagini e abilitazioni alberi
xvt_dwin_invalidate_rect(TASK_WIN, NULL); // Ridisegna sfondo xvt_dwin_invalidate_rect(TASK_WIN, NULL); // Ridisegna sfondo
load_preferences(); load_preferences(); // Aggiorna menu preferiti
test_temp(); // Cancella file temporanei
} }
return ok; return ok;
@ -1398,9 +1387,6 @@ bool TMenu_application::user_create()
app.run(); app.run();
} }
set_perms();
test_temp();
if (!test_programs()) if (!test_programs())
return false; return false;

View File

@ -200,32 +200,36 @@ bool TMenuitem::create(const char* t)
int TMenuitem::icon() const int TMenuitem::icon() const
{ return _icon; } { return _icon; }
bool TMenuitem::enabled() const TSubmenu* TMenuitem::child_submenu() const
{
bool yes = false;
if (_exist)
{ {
TSubmenu* sm = NULL;
if (is_submenu()) if (is_submenu())
{ {
TSubmenu* mnu = menu().find(_action); sm = menu().find(_action);
yes = mnu && mnu->enabled() && mnu->items() > 0; if (sm->items() == 0)
sm = NULL;
} }
else return sm;
}
bool TMenuitem::enabled() const
{ {
if (_exist < 0) if (_exist < 0)
{ {
if (menu().is_dangerous(_action)) bool yes = false;
if (is_submenu())
{ {
yes = false; yes = child_submenu() != NULL;
} }
else else
{
yes = !menu().is_dangerous(_action);
if (yes)
{ {
const int endname = _action.find(' '); const int endname = _action.find(' ');
const TFilename name(endname > 0 ? _action.left(endname) : _action); const TFilename name(endname > 0 ? _action.left(endname) : _action);
TFilename n = name; TFilename n = name;
if (n.custom_path()) if (!n.custom_path())
yes = true;
else
{ {
const char* ext[] = { "exe", "pif", "com", "bat", NULL }; const char* ext[] = { "exe", "pif", "com", "bat", NULL };
int e; int e;
@ -239,23 +243,40 @@ bool TMenuitem::enabled() const
yes = ext[e] != NULL; yes = ext[e] != NULL;
} }
} }
}
((TMenuitem*)this)->_exist = yes; ((TMenuitem*)this)->_exist = yes;
} }
if (_exist)
bool yes = _exist != 0;
if (yes)
{ {
TExternal_app app(_action); if (is_submenu())
yes = app.can_run(); {
const TSubmenu* mnu = child_submenu();
yes = mnu != NULL && mnu->enabled();
} }
if (!yes) else
((TMenuitem*)this)->_enabled = false; {
if (_enabled < 0)
{
const TExternal_app app(_action);
yes = app.can_run();
((TMenuitem*)this)->_enabled = yes;
}
yes = _enabled != 0;
} }
} }
return yes; return yes;
} }
void TMenuitem::reset_permissions()
{
_enabled = -1;
}
bool TMenuitem::perform_submenu() const bool TMenuitem::perform_submenu() const
{ {
TSubmenu* mnu = menu().find(_action); TSubmenu* mnu = child_submenu();
bool ok = mnu != NULL && mnu->enabled(); bool ok = mnu != NULL && mnu->enabled();
if (ok) if (ok)
ok = menu().jumpto(mnu); ok = menu().jumpto(mnu);
@ -359,9 +380,8 @@ bool TMenuitem::perform() const
TSubmenu::TSubmenu(TMenu* menu, const char* name) TSubmenu::TSubmenu(TMenu* menu, const char* name)
: _menu(menu), _name(name), _items(12), : _menu(menu), _name(name), _items(12),
_enabled(true), _firm(false) _exist(true), _firm(false), _enabled(-1)
{ { }
}
void TSubmenu::read(TScanner& scanner) void TSubmenu::read(TScanner& scanner)
{ {
@ -387,21 +407,9 @@ void TSubmenu::read(TScanner& scanner)
const int equal = line.find('='); const int equal = line.find('=');
if (equal > 0) if (equal > 0)
{ {
bool disable = true;
TToken_string mod(line.after('='), ','); TToken_string mod(line.after('='), ',');
mod.strip_spaces(); mod.strip_spaces();
FOR_EACH_TOKEN(mod, cod) _modules = mod;
{
//const word code = dongle().module_name2code(cod);
//if (main_app().has_module(code))
if (_menu->has_module(cod))
{
disable = false;
break;
}
}
if (disable)
_enabled = false;
} }
} else } else
if (line.starts_with("Picture", true)) if (line.starts_with("Picture", true))
@ -416,7 +424,7 @@ void TSubmenu::read(TScanner& scanner)
TString16 flags; TString16 flags;
get_next_string(line, 6, flags, brace); get_next_string(line, 6, flags, brace);
if (flags.find('D') >= 0) if (flags.find('D') >= 0)
_enabled = false; _exist = false;
if (flags.find('F') >= 0) if (flags.find('F') >= 0)
_firm = true; _firm = true;
} else } else
@ -471,6 +479,55 @@ TImage& TSubmenu::image() const
return menu().image(picture()); return menu().image(picture());
} }
bool TSubmenu::enabled() const
{
if (_enabled < 0)
{
bool yes = _exist != 0;
if (yes)
{
if (_modules.full() && _modules != "0" && _modules != "ba")
{
yes = false;
TToken_string& mod = (TToken_string&)_modules;
FOR_EACH_TOKEN(mod, cod)
{
if (_menu->has_module(cod))
{
yes = true;
break;
}
}
}
if (yes)
{
yes = false;
for (int i = items()-1; i >= 0 && !yes; i--)
{
const TMenuitem& mi = item(i);
yes = mi.enabled();
}
}
}
((TSubmenu*)this)->_enabled = yes;
}
return _enabled != 0;
}
void TSubmenu::reset_permissions()
{
if (_enabled >= 0)
{
_enabled = -1;
for (int i = items()-1; i >= 0; i--)
{
TMenuitem& mi = item(i);
mi.reset_permissions();
}
}
}
bool TSubmenu::perform(int i) bool TSubmenu::perform(int i)
{ {
bool ok = i >= 0 && i < items(); bool ok = i >= 0 && i < items();
@ -519,7 +576,6 @@ bool TMenu::read(const char* name, TString& root)
// Menu // Menu
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
bool TMenu::read(const char* name) bool TMenu::read(const char* name)
{ {
TString root; TString root;
@ -616,7 +672,6 @@ TSubmenu* TMenu::find_string(const TString& str)
restart(); restart();
TSubmenu * sm; TSubmenu * sm;
for (sm = (TSubmenu*)get(); sm; sm = (TSubmenu*)get()) for (sm = (TSubmenu*)get(); sm; sm = (TSubmenu*)get())
{ {
if (sm->enabled() && !_ignore_list.is_key(sm->name())) if (sm->enabled() && !_ignore_list.is_key(sm->name()))
@ -721,6 +776,11 @@ TImage& TMenu::image(const char* name)
void TMenu::reload_images() void TMenu::reload_images()
{ {
_images.destroy(); _images.destroy();
// Reset permissions
restart();
for (TSubmenu* sm = (TSubmenu*)get(); sm; sm = (TSubmenu*)get())
sm->reset_permissions();
} }
bool TMenu::has_module(const char* mod) bool TMenu::has_module(const char* mod)

View File

@ -51,6 +51,7 @@ public:
const TString& action() const { return _action; } const TString& action() const { return _action; }
bool enabled() const; bool enabled() const;
bool disabled() const { return !enabled(); } bool disabled() const { return !enabled(); }
void reset_permissions();
bool is_submenu() const { return _type == '[' && _action.full(); } bool is_submenu() const { return _type == '[' && _action.full(); }
bool is_program() const { return _type != '[' && _action.full(); } bool is_program() const { return _type != '[' && _action.full(); }
@ -59,6 +60,7 @@ public:
bool run_fullscreen() const; bool run_fullscreen() const;
TSubmenu& submenu() const { return *_submenu; } TSubmenu& submenu() const { return *_submenu; }
TSubmenu* child_submenu() const;
TMenu& menu() const; TMenu& menu() const;
bool create(const char* t); bool create(const char* t);
@ -75,8 +77,10 @@ class TSubmenu : public TObject
TString _caption; TString _caption;
TFilename _picture; TFilename _picture;
TArray _items; TArray _items;
bool _enabled : 2; TToken_string _modules;
bool _firm : 2; char _enabled : 2;
char _firm : 2;
char _exist : 2;
public: public:
void read(TScanner& scanner); void read(TScanner& scanner);
@ -99,9 +103,10 @@ public:
TImage& image() const; TImage& image() const;
bool query_firm() const { return _firm; } bool query_firm() const { return _firm != 0; }
bool enabled() const { return _enabled; } bool enabled() const;
bool disabled() const { return !enabled(); } bool disabled() const { return !enabled(); }
void reset_permissions();
bool perform(int i); bool perform(int i);

View File

@ -148,17 +148,14 @@ bool TMenu_tree::goto_root()
bool TMenu_tree::goto_firstson() bool TMenu_tree::goto_firstson()
{ {
const TMenuitem& mi = curr_item(); const TMenuitem& mi = curr_item();
if (mi.is_submenu()) const TSubmenu* sm = mi.child_submenu();
{ if (sm != NULL)
const TSubmenu* sm = _menu->find(mi.action());
if (sm && sm->items() > 0)
{ {
_curr_id << '/' << mi.action() << ".0"; _curr_id << '/' << mi.action() << ".0";
_submenu = sm; _submenu = sm;
_menuitem = 0; _menuitem = 0;
return true; return true;
} }
}
return false; return false;
} }

View File

@ -407,15 +407,14 @@ void TOutlook_mask::load_perspective(int per)
bool TOutlook_mask::can_be_closed() const bool TOutlook_mask::can_be_closed() const
{ {
bool yes = true; const bool yes = !is_running();
if (is_running()) if (!yes)
{ {
TBook_field& bf = (TBook_field&)field(DLG_MAIN); TBook_field& bf = (TBook_field&)field(DLG_MAIN);
if (bf.pages() == 0) if (bf.pages() == 0)
((TOutlook_mask*)this)->send_key(K_FORCE_CLOSE, 0); ((TOutlook_mask*)this)->send_key(K_FORCE_CLOSE, 0);
else else
warning_box(TR("E' necessario chiudere tutte le applicazioni attive")); warning_box(TR("E' necessario chiudere tutte le applicazioni attive"));
yes = false;
} }
return yes; return yes;
} }