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:
parent
6e3ca6b9f5
commit
57247704fa
@ -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;
|
||||||
|
|
||||||
|
134
ba/ba0101.cpp
134
ba/ba0101.cpp
@ -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)
|
||||||
|
13
ba/ba0101.h
13
ba/ba0101.h
@ -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);
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user