diff --git a/src/ui/MainWindow.cc b/src/ui/MainWindow.cc index 5c79f0456e393874f48dd5f841cdc7c71d4f6743..d7677a21c33316be90afed94ef95276766cf2745 100644 --- a/src/ui/MainWindow.cc +++ b/src/ui/MainWindow.cc @@ -784,7 +784,15 @@ void MainWindow::loadDockWidget(QString name) } else { - qDebug() << "Error loading window:" << name; + if (customWidgetNameToFilenameMap.contains(name)) + { + loadCustomWidget(customWidgetNameToFilenameMap[name],currentView); + //customWidgetNameToFilenameMap.remove(name); + } + else + { + qDebug() << "Error loading window:" << name; + } } } @@ -940,6 +948,45 @@ void MainWindow::loadCustomWidget() QString fileName = QFileDialog::getOpenFileName(this, tr("Specify Widget File Name"), QDesktopServices::storageLocation(QDesktopServices::DesktopLocation), tr("QGroundControl Widget (*%1);;").arg(widgetFileExtension)); if (fileName != "") loadCustomWidget(fileName); } +void MainWindow::loadCustomWidget(const QString& fileName, int view) +{ + QGCToolWidget* tool = new QGCToolWidget("", this); + if (tool->loadSettings(fileName, true)) + { + qDebug() << "Loading custom tool:" << tool->getTitle() << tool->objectName(); + switch ((VIEW_SECTIONS)view) + { + case VIEW_ENGINEER: + createDockWidget(dataView,tool,tool->getTitle(),tool->objectName()+"DOCK",(VIEW_SECTIONS)view,Qt::LeftDockWidgetArea); + break; + case VIEW_FLIGHT: + createDockWidget(pilotView,tool,tool->getTitle(),tool->objectName()+"DOCK",(VIEW_SECTIONS)view,Qt::LeftDockWidgetArea); + break; + case VIEW_SIMULATION: + createDockWidget(simView,tool,tool->getTitle(),tool->objectName()+"DOCK",(VIEW_SECTIONS)view,Qt::LeftDockWidgetArea); + break; + case VIEW_MISSION: + createDockWidget(plannerView,tool,tool->getTitle(),tool->objectName()+"DOCK",(VIEW_SECTIONS)view,Qt::LeftDockWidgetArea); + break; + default: + { + //Delete tool, create menu item to tie it to. + customWidgetNameToFilenameMap[tool->objectName()+"DOCK"] = fileName; + QAction* tempAction = ui.menuTools->addAction(tool->getTitle()); + menuToDockNameMap[tempAction] = tool->objectName()+"DOCK"; + tempAction->setCheckable(true); + connect(tempAction,SIGNAL(triggered(bool)),this, SLOT(showTool(bool))); + tool->deleteLater(); + //createDockWidget(centerStack->currentWidget(),tool,tool->getTitle(),tool->objectName()+"DOCK",(VIEW_SECTIONS)view,Qt::LeftDockWidgetArea); + } + break; + } + } + else + { + return; + } +} void MainWindow::loadCustomWidget(const QString& fileName, bool singleinstance) { @@ -967,7 +1014,16 @@ void MainWindow::loadCustomWidget(const QString& fileName, bool singleinstance) createDockWidget(plannerView,tool,tool->getTitle(),tool->objectName()+"DOCK",(VIEW_SECTIONS)view,Qt::LeftDockWidgetArea); break; default: - createDockWidget(centerStack->currentWidget(),tool,tool->getTitle(),tool->objectName()+"DOCK",(VIEW_SECTIONS)view,Qt::LeftDockWidgetArea); + { + //Delete tool, create menu item to tie it to. + customWidgetNameToFilenameMap[tool->objectName()+"DOCK"] = fileName; + QAction* tempAction = ui.menuTools->addAction(tool->getTitle()); + menuToDockNameMap[tempAction] = tool->objectName()+"DOCK"; + tempAction->setCheckable(true); + connect(tempAction,SIGNAL(triggered(bool)),this, SLOT(showTool(bool))); + tool->deleteLater(); + //createDockWidget(centerStack->currentWidget(),tool,tool->getTitle(),tool->objectName()+"DOCK",(VIEW_SECTIONS)view,Qt::LeftDockWidgetArea); + } break; } diff --git a/src/ui/MainWindow.h b/src/ui/MainWindow.h index a9f47593a2c9330da454daeb2c95414cb9c4ff0b..06264b9dc746007b49b4947660a90e0513f40f55 100644 --- a/src/ui/MainWindow.h +++ b/src/ui/MainWindow.h @@ -215,6 +215,7 @@ public slots: /** @brief Load a custom tool widget from a file */ void loadCustomWidget(const QString& fileName, bool singleinstance=false); + void loadCustomWidget(const QString& fileName, int view); /** @brief Load custom widgets from default file */ void loadCustomWidgetsFromDefaults(const QString& systemType, const QString& autopilotType); @@ -440,6 +441,7 @@ protected: QTimer windowNameUpdateTimer; private: + QMap customWidgetNameToFilenameMap; QMap menuToDockNameMap; QMap dockToTitleBarMap; QMap > centralWidgetToDockWidgetsMap;