campo-sirio/ba/ba0101.h

176 lines
4.2 KiB
C
Raw Normal View History

#ifndef __BA0101_H
#define __BA0101_H
#ifndef __ASSOC_H
#include <assoc.h>
#endif
#ifndef __COLORS_H
#include <colors.h>
#endif
#ifndef __IMAGE_H
#include <image.h>
#endif
#ifndef __SCANNER_H
#include <scanner.h>
#endif
#ifndef __STACK_H
#include <stack.h>
#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 : 2;
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(); }
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;
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;
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);
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();
bool is_tassan();
#endif