I noticed the gps viewer currently gets configured twice when the app starts.
Digging some deeper I found out that first the gadget is loaded, and a 'default' configuration (index 0) is set,
and then the actual stored state is loaded.
I tried a bit to see if I can do something about that, resulting in the changes below, which seem to work.
But I don't think I like it this way, I don't know enough of the internals yet either ;)
I'm guessing instead of the state, just the configuration name could be stored and used? sounds more efficient :)
What do people think? :)
Index: src/plugins/coreplugin/uavgadgetdecorator.cpp
===================================================================
--- src/plugins/coreplugin/uavgadgetdecorator.cpp (revision 1505)
+++ src/plugins/coreplugin/uavgadgetdecorator.cpp (working copy)
@@ -33,7 +33,7 @@
using namespace Core;
-UAVGadgetDecorator::UAVGadgetDecorator(IUAVGadget *gadget, QList<IUAVGadgetConfiguration*> *configurations) :
+UAVGadgetDecorator::UAVGadgetDecorator(IUAVGadget *gadget, QList<IUAVGadgetConfiguration*> *configurations, bool initialize) :
IUAVGadget(gadget->classId(), gadget->parent()),
m_gadget(gadget),
m_toolbar(new QComboBox),
@@ -45,8 +45,9 @@
foreach (IUAVGadgetConfiguration *config, *m_configurations)
m_toolbar->addItem(config->name());
connect(m_toolbar, SIGNAL(activated(int)), this, SLOT(loadConfiguration(int)));
- if (m_configurations->count() > 0)
+ if (initialize && m_configurations->count() > 0) {
loadConfiguration(0);
+ }
updateToolbar();
}
Index: src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.cpp
===================================================================
--- src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.cpp (revision 1505)
+++ src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.cpp (working copy)
@@ -228,10 +228,28 @@
m_activeToolBar = toolBar;
}
+void UAVGadgetView::bootstrap(QString classId, QByteArray state) {
+ if (indexOfClassId(classId) < 0) {
+ listSelectionActivated(m_defaultIndex);
+ return;
+ }
+
+ if (m_uavGadget && (m_uavGadget->classId() == classId)) {
+ return;
+ }
+
+ UAVGadgetInstanceManager *im = ICore::instance()->uavGadgetInstanceManager();
+ IUAVGadget *gadgetToRemove = m_uavGadget;
+ IUAVGadget *gadget = im->createGadget(classId, this, FALSE);
+ gadget->restoreState(state);
+ setGadget(gadget);
+ m_uavGadgetManager->setCurrentGadget(gadget);
+ im->removeGadget(gadgetToRemove);
+}
+
+
void UAVGadgetView::listSelectionActivated(int index)
{
- if (index < 0) // this could happen when called from SplitterOrView::restoreState()
- index = m_defaultIndex;
QString classId = m_uavGadgetList->itemData(index).toString();
if (m_uavGadget && (m_uavGadget->classId() == classId))
return;
@@ -612,8 +630,6 @@
QString classId;
QByteArray uavGadgetState;
stream >> classId >> uavGadgetState;
- int index = m_view->indexOfClassId(classId);
- m_view->listSelectionActivated(index);
- gadget()->restoreState(uavGadgetState);
+ m_view->bootstrap(classId,uavGadgetState);
}
}
Index: src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.h
===================================================================
--- src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.h (revision 1505)
+++ src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.h (working copy)
@@ -76,6 +76,7 @@
public slots:
void closeView();
+ void bootstrap(QString classId, QByteArray state);
void listSelectionActivated(int index);
private slots:
Index: src/plugins/coreplugin/uavgadgetinstancemanager.h
===================================================================
--- src/plugins/coreplugin/uavgadgetinstancemanager.h (revision 1505)
+++ src/plugins/coreplugin/uavgadgetinstancemanager.h (working copy)
@@ -59,7 +59,7 @@
~UAVGadgetInstanceManager();
void readConfigurations(QSettings *qs);
void writeConfigurations(QSettings *qs);
- IUAVGadget *createGadget(QString classId, QWidget *parent);
+ IUAVGadget *createGadget(QString classId, QWidget *parent, bool initialize = TRUE);
void removeGadget(IUAVGadget *gadget);
bool canDeleteConfiguration(IUAVGadgetConfiguration *config);
void deleteConfiguration(IUAVGadgetConfiguration *config);
Index: src/plugins/coreplugin/uavgadgetdecorator.h
===================================================================
--- src/plugins/coreplugin/uavgadgetdecorator.h (revision 1505)
+++ src/plugins/coreplugin/uavgadgetdecorator.h (working copy)
@@ -37,7 +37,7 @@
{
Q_OBJECT
public:
- explicit UAVGadgetDecorator(IUAVGadget *gadget, QList<IUAVGadgetConfiguration*> *configurations);
+ explicit UAVGadgetDecorator(IUAVGadget *gadget, QList<IUAVGadgetConfiguration*> *configurations, bool initialize = TRUE);
~UAVGadgetDecorator();
QWidget *widget() { return m_gadget->widget(); }
Index: src/plugins/coreplugin/uavgadgetinstancemanager.cpp
===================================================================
--- src/plugins/coreplugin/uavgadgetinstancemanager.cpp (revision 1505)
+++ src/plugins/coreplugin/uavgadgetinstancemanager.cpp (working copy)
@@ -158,13 +158,13 @@
}
-IUAVGadget *UAVGadgetInstanceManager::createGadget(QString classId, QWidget *parent)
+IUAVGadget *UAVGadgetInstanceManager::createGadget(QString classId, QWidget *parent, bool initialize)
{
IUAVGadgetFactory *f = factory(classId);
if (f) {
QList<IUAVGadgetConfiguration*> *configs = configurations(classId);
IUAVGadget *g = f->createGadget(parent);
- IUAVGadget *gadget = new UAVGadgetDecorator(g, configs);
+ IUAVGadget *gadget = new UAVGadgetDecorator(g, configs, initialize);
m_gadgetInstances.append(gadget);
connect(this, SIGNAL(configurationAdded(IUAVGadgetConfiguration*)), gadget, SLOT(configurationAdded(IUAVGadgetConfiguration*)));
connect(this, SIGNAL(configurationChanged(IUAVGadgetConfiguration*)), gadget, SLOT(configurationChanged(IUAVGadgetConfiguration*)));



Netherlands
Sweden








