131 lines
2.5 KiB
C++
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
|
|
//======================================================================
|