Registered widgets limit removed (#3899)

This commit is contained in:
Bertrand Songis
2016-10-12 17:36:37 +02:00
committed by GitHub
parent 7e8bebfaac
commit f0608f4837
3 changed files with 22 additions and 26 deletions
+15 -15
View File
@@ -210,28 +210,26 @@ bool menuWidgetSettings(event_t event)
bool menuWidgetChoice(event_t event)
{
static Widget * previousWidget;
static Widget * currentWidget;
static std::list<const WidgetFactory *>::iterator iterator;
static Widget::PersistentData tempData;
switch (event) {
case EVT_ENTRY:
{
const WidgetFactory * factory;
previousWidget = currentContainer->getWidget(currentZone);
currentContainer->setWidget(currentZone, NULL);
menuHorizontalPosition = 0;
iterator = registeredWidgets.begin();
if (previousWidget) {
factory = previousWidget->getFactory();
for (unsigned int i=0; i<countRegisteredWidgets; i++) {
if (factory->getName() == registeredWidgets[i]->getName()) {
menuHorizontalPosition = i;
const WidgetFactory * factory = previousWidget->getFactory();
for (std::list<const WidgetFactory *>::iterator it = registeredWidgets.begin(); it != registeredWidgets.end(); ++it) {
if (factory->getName() == (*it)->getName()) {
iterator = it;
break;
}
}
}
else {
factory = registeredWidgets[0];
}
currentWidget = factory->create(currentContainer->getZone(currentZone), &tempData);
currentWidget = (*iterator)->create(currentContainer->getZone(currentZone), &tempData);
break;
}
@@ -243,22 +241,24 @@ bool menuWidgetChoice(event_t event)
case EVT_KEY_FIRST(KEY_ENTER):
delete previousWidget;
currentContainer->createWidget(currentZone, registeredWidgets[menuHorizontalPosition]);
currentContainer->createWidget(currentZone, *iterator);
storageDirty(EE_MODEL);
popMenu();
return false;
case EVT_ROTARY_RIGHT:
if (menuHorizontalPosition < int(countRegisteredWidgets-1)) {
if (iterator != registeredWidgets.end() && iterator != --registeredWidgets.end()) {
++iterator;
delete currentWidget;
currentWidget = registeredWidgets[++menuHorizontalPosition]->create(currentContainer->getZone(currentZone), &tempData);
currentWidget = (*iterator)->create(currentContainer->getZone(currentZone), &tempData);
}
break;
case EVT_ROTARY_LEFT:
if (menuHorizontalPosition > 0) {
if (iterator != registeredWidgets.begin()) {
--iterator;
delete currentWidget;
currentWidget = registeredWidgets[--menuHorizontalPosition]->create(currentContainer->getZone(currentZone), &tempData);
currentWidget = (*iterator)->create(currentContainer->getZone(currentZone), &tempData);
}
break;
}
+5 -8
View File
@@ -20,20 +20,17 @@
#include "opentx.h"
const WidgetFactory * registeredWidgets[MAX_REGISTERED_WIDGETS]; // TODO dynamic
unsigned int countRegisteredWidgets = 0;
std::list<const WidgetFactory *> registeredWidgets;
void registerWidget(const WidgetFactory * factory)
{
if (countRegisteredWidgets < MAX_REGISTERED_WIDGETS) {
TRACE("register widget %s", factory->getName());
registeredWidgets[countRegisteredWidgets++] = factory;
}
TRACE("register widget %s", factory->getName());
registeredWidgets.push_back(factory);
}
const WidgetFactory * getWidgetFactory(const char * name)
{
for (unsigned int i=0; i<countRegisteredWidgets; i++) {
const WidgetFactory * factory = registeredWidgets[i];
for (std::list<const WidgetFactory *>::iterator it = registeredWidgets.begin(); it != registeredWidgets.end();++it) {
const WidgetFactory * factory = *it;
if (!strcmp(name, factory->getName())) {
return factory;
}
+2 -3
View File
@@ -23,6 +23,7 @@
#include <inttypes.h>
#include <string.h>
#include <list>
#define MAX_WIDGET_OPTIONS 5
@@ -185,9 +186,7 @@ inline const ZoneOption * Widget::getOptions() const
return getFactory()->getOptions();
}
#define MAX_REGISTERED_WIDGETS 10
extern unsigned int countRegisteredWidgets;
extern const WidgetFactory * registeredWidgets[MAX_REGISTERED_WIDGETS];
extern std::list<const WidgetFactory *> registeredWidgets;
Widget * loadWidget(const char * name, const Zone & zone, Widget::PersistentData * persistentData);
#endif // _WIDGET_H_