//====================================================================== // menu.h //====================================================================== #ifndef __menu_h__ #define __menu_h__ #include "rig.h" // 16 characters on display #define MAX_TEXT_LEN 16 #define MENU_SELECTED_CHAR '>' class MenuItem { public: virtual ~MenuItem() {} virtual void update() = 0; virtual MenuItem* select() = 0; virtual MenuItem* altSelect() = 0; virtual MenuItem* exit() = 0; virtual MenuItem* prev() = 0; virtual MenuItem* next() = 0; }; class TopMenu : public MenuItem { public: TopMenu(Rig& rig): _rig(rig), _visible(false), _adjust_tx(false) {} virtual void update() { strcpy(_buffer, _rig.modeText()); if (_adjust_tx) { _buffer[2] = MENU_SELECTED_CHAR; } else { _buffer[9] = MENU_SELECTED_CHAR; } if (_visible) { sendIOPMenuDisplay(_buffer, 0); } else { sendIOPMenuDisplay(_buffer, -1); } } virtual MenuItem* select() { if (!_visible) { _visible = true; } else { _adjust_tx = !_adjust_tx; } return this; } virtual MenuItem* altSelect() { if (_visible) { _visible = false; } return this; } virtual MenuItem* exit() { if (_visible) { _visible = false; } return this; } virtual MenuItem* prev() { if (_adjust_tx) { } else { _rig.switchRxFilter(true); } return this; } virtual MenuItem* next() { if (_adjust_tx) { } else { _rig.switchRxFilter(); } return this; } private: Rig& _rig; bool _visible; bool _adjust_tx; char _buffer[MAX_TEXT_LEN+1]; }; /* public class MenuItem { public: MenuItem(bool active = true, int timeout = 0): _active(active), _timeout(timeout), _elapsed(0) {} void update() { if ((_timeout > 0) && (_elapsed > _timeout)) { _active = false; } } inline void activate() { _active = true; _elapsed = 0; } inline void deactivate() { _active = false; } virtual MenuItem* accept(); virtual MenuItem* reject(); virtual MenuItem* next(); virtual MenuItem* prev(); private: bool _active; int _timeout; elapsedMillis _elapsed; }; public class SSBMenu { public: private: }; public class DigiMenu { public: private: } public class CWMenu { public: private: }; */ #endif //====================================================================== // EOF //======================================================================