#ifndef __BA0101_H #define __BA0101_H #ifndef __ASSOC_H #include #endif #ifndef __COLORS_H #include #endif #ifndef __IMAGE_H #include #endif #ifndef __SCANNER_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; protected: bool perform_submenu() const; bool perform_program() const; public: virtual bool ok() { return _caption.not_empty(); } const TString& caption() const { return _caption; } int icon() const; const TString& action() const { return _action; } bool enabled() const; bool disabled() const { return !enabled(); } bool is_submenu() const { return _type == '[' && _action.not_empty(); } bool is_program() const { return _type != '[' && _action.not_empty(); } bool perform() const; TSubmenu& submenu() const { return *_submenu; } 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; bool _enabled : 2; bool _firm : 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; } bool enabled() const { return _enabled; } bool disabled() const { return !enabled(); } 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; TString _last_search; TAssoc_array _ignore_list; protected: bool can_be_transparent(const TImage& i) const; 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); void set_dangerous_modules(const TToken_string& mod) { _dangerous = mod; } TMenu(); virtual ~TMenu(); }; bool sys_dll_changed(); void set_installing_flag(); bool installing(); #endif