ubitx-v5d-xcvr/ubitx_iop/menu.h

131 lines
2.5 KiB
C++

//======================================================================
// 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
//======================================================================