#ifndef __BA0101_H #define __BA0101_H #ifndef __COLORS_H #include #endif #ifndef __IMAGE_H #include #endif #ifndef __STACK_H #include #endif class TSubmenu; class TMenu; class TMenuitem : public TObject { TSubmenu* _submenu; TString _caption, _action; int _icon; char _type; char _exist : 2; char _enabled : 2; char _firm : 2; char _password : 2; char _reloadmenu : 2; char _fullscreen_43 : 2; static bool _fullscreen_always; protected: bool perform_submenu() const; bool perform_program() const; public: virtual bool ok() const { return _caption.full(); } const TString& caption() const { return _caption; } int icon() const; const TString& action() const { return _action; } bool enabled() const; bool disabled() const { return !enabled(); } void reset_permissions(); bool is_submenu() const { return _type == '[' && _action.full(); } bool is_program() const { return _type != '[' && _action.full(); } bool perform() const; bool run_modal() const; bool run_fullscreen() const; static void always_run_fullscreen(bool afs) { _fullscreen_always = afs; } static bool always_run_fullscreen() { return _fullscreen_always; } TSubmenu& submenu() const { return *_submenu; } TSubmenu* child_submenu() const; TMenu& menu() const; bool create(const char* t); TMenuitem(TSubmenu* sm); TMenuitem(const TMenuitem& mi); virtual ~TMenuitem() { } }; class TSubmenu : public TObject { TMenu* _menu; TString _name; TString _caption; TFilename _picture; TArray _items; TToken_string _modules; char _enabled : 2; char _firm : 2; char _exist : 2; public: void read(TScanner& scanner); TMenu& menu() const { return *_menu; } int find_string(const TString& str) const; TMenuitem& item(int i) { return (TMenuitem&)_items[i]; } const TMenuitem& item(int i) const { return (const TMenuitem&)_items[i]; } const TMenuitem& operator[](int i) const { return item(i); } int find(const TMenuitem& mi) const; void destroy_items() { _items.destroy(); } void add(TMenuitem* mi) { _items.add(mi); } const TString& name() const { return _name; } const TString& caption() const { return _caption; } const TString& picture() const { return _picture; } int items() const { return _items.items(); } TImage& image() const; bool query_firm() const { return _firm != 0; } bool enabled() const; bool disabled() const { return !enabled(); } int module() const { return ((TToken_string&)_modules).get_int(0); } void reset_permissions(); bool perform(int i); TSubmenu(TMenu* menu, const char* name); virtual ~TSubmenu() { } }; class TMenu : public TAssoc_array { TSubmenu* _current; int _item; TStack _stack; TFilename _default_bmp; TString _default_menu; TAssoc_array _images; TToken_string _dangerous, _vanished; TString _last_search; TAssoc_array _ignore_list; int _mask_mode; public: // TObject virtual bool ok() const { return _current != NULL; } public: bool read(const char* name); // First call bool read(const char* name, TString& root); TSubmenu& current() const { return *_current; } TSubmenu* find(const char* name) const { return (TSubmenu*)objptr(name); } bool set_firm(long firm) const; bool jumpto(TSubmenu *next); bool jumpto_root(); TSubmenu& pop(); bool at_top() const { return _stack.count() == 0; } void select(int i) { _item = i; } int selected() const { return _item; } TMenuitem& curr_item() { return _current->item(_item); } TSubmenu* find_parent(const TSubmenu& sub); bool perform(); TSubmenu* find_string(const TString& str); TString& last_search_string() { return _last_search; } TAssoc_array& search_ignore_list() { return _ignore_list; } TImage& image(const char* name); void reload_images(); bool has_module(const char* mod); bool is_dangerous(const char* mod); bool is_vanished(const TString& app); void set_dangerous_modules(const TToken_string& mod) { _dangerous = mod; } void set_mask_mode(int mm) { _mask_mode = mm; } int mask_mode() const { return _mask_mode; } TMenu(); virtual ~TMenu(); }; void set_installing_flag(); bool installing(); #endif