Registered widgets limit removed (#3899)
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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_
|
||||
|
||||
Reference in New Issue
Block a user