source / switch choices: new toolbar implementation
This commit is contained in:
committed by
Raphael Coeffic
parent
4c8bb99e73
commit
77f53e8457
@@ -29,11 +29,11 @@
|
||||
#include "draw_functions.h"
|
||||
#include "opentx.h"
|
||||
|
||||
class SourceChoiceMenuToolbar : public MenuToolbar<SourceChoice>
|
||||
class SourceChoiceMenuToolbar : public MenuToolbar
|
||||
{
|
||||
public:
|
||||
SourceChoiceMenuToolbar(SourceChoice * choice, Menu * menu):
|
||||
MenuToolbar<SourceChoice>(choice, menu)
|
||||
MenuToolbar(choice, menu)
|
||||
{
|
||||
addButton(STR_CHAR_INPUT, MIXSRC_FIRST_INPUT, MIXSRC_LAST_INPUT);
|
||||
#if defined(LUA_MODEL_SCRIPTS)
|
||||
@@ -71,7 +71,9 @@ SourceChoice::SourceChoice(Window* parent, const rect_t &rect, int16_t vmin,
|
||||
menu->setWaitHandler([=]() {
|
||||
int16_t val = getMovedSource(vmin);
|
||||
if (val) {
|
||||
fillMenu(menu, val);
|
||||
fillMenu(menu);
|
||||
menu->select(getIndexFromValue(val));
|
||||
// TODO: reset toolbar
|
||||
}
|
||||
#if defined(AUTOSWITCH)
|
||||
else {
|
||||
@@ -79,7 +81,9 @@ SourceChoice::SourceChoice(Window* parent, const rect_t &rect, int16_t vmin,
|
||||
if (swtch && !IS_SWITCH_MULTIPOS(swtch)) {
|
||||
val = switchToMix(swtch);
|
||||
if (val && (val >= vmin) && (val <= vmax)) {
|
||||
fillMenu(menu, val);
|
||||
fillMenu(menu);
|
||||
menu->select(getIndexFromValue(val));
|
||||
// TODO: reset toolbar
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -97,24 +101,3 @@ SourceChoice::SourceChoice(Window* parent, const rect_t &rect, int16_t vmin,
|
||||
|
||||
setAvailableHandler([](int v){ return isSourceAvailable(v); });
|
||||
}
|
||||
|
||||
void SourceChoice::fillMenu(Menu *menu, int16_t value, const FilterFct& filter)
|
||||
{
|
||||
int count = 0;
|
||||
int current = 0;
|
||||
|
||||
menu->removeLines();
|
||||
for (int i = vmin; i <= vmax; ++i) {
|
||||
if (filter && !filter(i)) continue;
|
||||
if (isValueAvailable && !isValueAvailable(i)) continue;
|
||||
menu->addLine(getSourceString(i), [=]() { setValue(i); });
|
||||
if (value == i) {
|
||||
current = count;
|
||||
}
|
||||
++count;
|
||||
}
|
||||
|
||||
if (current >= 0) {
|
||||
menu->select(current);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,9 +29,6 @@ bool isSourceAvailable(int source);
|
||||
|
||||
class SourceChoice : public ChoiceEx
|
||||
{
|
||||
template <class T>
|
||||
friend class MenuToolbar;
|
||||
|
||||
public:
|
||||
SourceChoice(Window* parent, const rect_t& rect, int16_t vmin,
|
||||
int16_t vmax, std::function<int16_t()> getValue,
|
||||
@@ -41,10 +38,6 @@ class SourceChoice : public ChoiceEx
|
||||
#if defined(DEBUG_WINDOWS)
|
||||
std::string getName() const override { return "SourceChoice"; }
|
||||
#endif
|
||||
|
||||
protected:
|
||||
typedef std::function<bool(int16_t)> FilterFct;
|
||||
void fillMenu(Menu* menu, int16_t value, const FilterFct& condition = nullptr);
|
||||
};
|
||||
|
||||
#endif // _SOURCECHOICE_H_
|
||||
|
||||
@@ -28,11 +28,11 @@
|
||||
#include "opentx.h"
|
||||
#include "strhelpers.h"
|
||||
|
||||
class SwitchChoiceMenuToolbar : public MenuToolbar<SwitchChoice>
|
||||
class SwitchChoiceMenuToolbar : public MenuToolbar
|
||||
{
|
||||
public:
|
||||
SwitchChoiceMenuToolbar(SwitchChoice* choice, Menu* menu) :
|
||||
MenuToolbar<SwitchChoice>(choice, menu)
|
||||
MenuToolbar(choice, menu)
|
||||
{
|
||||
addButton(STR_CHAR_SWITCH, SWSRC_FIRST_SWITCH, SWSRC_LAST_SWITCH);
|
||||
addButton(STR_CHAR_TRIM, SWSRC_FIRST_TRIM, SWSRC_LAST_TRIM);
|
||||
@@ -62,7 +62,9 @@ SwitchChoice::SwitchChoice(Window* parent, const rect_t& rect, int vmin,
|
||||
val = swtch;
|
||||
}
|
||||
if (val && (!isValueAvailable || isValueAvailable(val))) {
|
||||
fillMenu(menu, val);
|
||||
fillMenu(menu);
|
||||
menu->select(getIndexFromValue(val));
|
||||
// TODO: reset toolbar
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -86,26 +88,3 @@ SwitchChoice::SwitchChoice(Window* parent, const rect_t& rect, int vmin,
|
||||
|
||||
setAvailableHandler(isSwitchAvailableInMixes);
|
||||
}
|
||||
|
||||
void SwitchChoice::fillMenu(Menu* menu, int16_t value, const FilterFct& filter)
|
||||
{
|
||||
int count = 0;
|
||||
int current = 0;
|
||||
|
||||
menu->removeLines();
|
||||
|
||||
for (int i = vmin; i <= vmax; ++i) {
|
||||
if (filter && !filter(i)) continue;
|
||||
if (isValueAvailable && !isValueAvailable(i)) continue;
|
||||
|
||||
menu->addLine(getSwitchPositionName(i), [=]() { setValue(i); });
|
||||
if (value == i) {
|
||||
current = count;
|
||||
}
|
||||
++count;
|
||||
}
|
||||
|
||||
if (current >= 0) {
|
||||
menu->select(current);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,8 +27,6 @@
|
||||
|
||||
class SwitchChoice : public ChoiceEx
|
||||
{
|
||||
template <class T> friend class MenuToolbar;
|
||||
|
||||
public:
|
||||
SwitchChoice(Window* parent, const rect_t& rect, int vmin, int vmax,
|
||||
std::function<int16_t()> getValue,
|
||||
@@ -37,10 +35,6 @@ class SwitchChoice : public ChoiceEx
|
||||
#if defined(DEBUG_WINDOWS)
|
||||
std::string getName() const override { return "SwitchChoice"; }
|
||||
#endif
|
||||
|
||||
protected:
|
||||
typedef std::function<bool(int16_t)> FilterFct;
|
||||
void fillMenu(Menu* menu, int16_t value, const FilterFct& filter = nullptr);
|
||||
};
|
||||
|
||||
#endif // _SWITCHCHOICE_H_
|
||||
|
||||
Vendored
+1
-1
Submodule radio/src/thirdparty/libopenui updated: f11d4cd48a...373d0bbaeb
Reference in New Issue
Block a user