diff --git a/src/ui/MainWindow.cc b/src/ui/MainWindow.cc index cf5e46b73c72fa3e864fc4d6dd36ac9a5b9c2889..2ec5d95fc6acdfaea2acaaabd8f82a8729fa67ad 100644 --- a/src/ui/MainWindow.cc +++ b/src/ui/MainWindow.cc @@ -84,15 +84,29 @@ This file is part of the QGROUNDCONTROL project const char* MAIN_SETTINGS_GROUP = "QGC_MAINWINDOW"; #ifndef __mobile__ -const char* MainWindow::_mavlinkDockWidgetName = "MAVLink Inspector"; -const char* MainWindow::_customCommandWidgetName = "Custom Command"; -const char* MainWindow::_filesDockWidgetName = "Onboard Files"; -const char* MainWindow::_uasStatusDetailsDockWidgetName = "Status Details"; -const char* MainWindow::_uasInfoViewDockWidgetName = "Info View"; -const char* MainWindow::_hilDockWidgetName = "HIL Config"; -const char* MainWindow::_analyzeDockWidgetName = "Analyze"; - -const char* MainWindow::_visibleWidgetsKey = "VisibleWidgets"; +enum DockWidgetTypes { + MAVLINK_INSPECTOR, + CUSTOM_COMMAND, + ONBOARD_FILES, + STATUS_DETAILS, + INFO_VIEW, + HIL_CONFIG, + ANALYZE +}; + +static const char *rgDockWidgetNames[] = { + "MAVLink Inspector", + "Custom Command", + "Onboard Files", + "Status Details", + "Info View", + "HIL Config", + "Analyze" +}; + +#define ARRAY_SIZE(ARRAY) (sizeof(ARRAY) / sizeof(ARRAY[0])) + +static const char* _visibleWidgetsKey = "VisibleWidgets"; #endif static MainWindow* _instance = NULL; ///< @brief MainWindow singleton @@ -318,27 +332,16 @@ void MainWindow::_buildCommonWidgets(void) logPlayer = new QGCMAVLinkLogPlayer(statusBar()); statusBar()->addPermanentWidget(logPlayer); - static const char* rgDockWidgetNames[] = { - _mavlinkDockWidgetName, - _customCommandWidgetName, - _filesDockWidgetName, - _uasStatusDetailsDockWidgetName, - _uasInfoViewDockWidgetName, - _hilDockWidgetName, - _analyzeDockWidgetName, - }; - static const size_t cDockWidgetNames = sizeof(rgDockWidgetNames) / sizeof(rgDockWidgetNames[0]); - - for (size_t i=0; isetCheckable(true); - action->setData(pDockWidgetName); + action->setData(i); connect(action, &QAction::triggered, this, &MainWindow::_showDockWidgetAction); _ui.menuWidgets->addAction(action); - _mapName2Action[pDockWidgetName] = action; } } @@ -365,28 +368,35 @@ void MainWindow::_showDockWidget(const QString& name, bool show) void MainWindow::_createInnerDockWidget(const QString& widgetName) { QGCDockWidget* widget = NULL; - - if (widgetName == _mavlinkDockWidgetName) { - widget = new QGCMAVLinkInspector(widgetName, _mapName2Action[widgetName], MAVLinkProtocol::instance(),this); - } else if (widgetName == _customCommandWidgetName) { - widget = new CustomCommandWidget(widgetName, _mapName2Action[widgetName], this); - } else if (widgetName == _filesDockWidgetName) { - widget = new QGCUASFileViewMulti(widgetName, _mapName2Action[widgetName], this); - } else if (widgetName == _uasStatusDetailsDockWidgetName) { - widget = new UASInfoWidget(widgetName, _mapName2Action[widgetName], this); - } else if (widgetName == _hilDockWidgetName) { - widget = new HILDockWidget(widgetName, _mapName2Action[widgetName], this); - } else if (widgetName == _analyzeDockWidgetName) { - widget = new Linecharts(widgetName, _mapName2Action[widgetName], mavlinkDecoder, this); - } else if (widgetName == _uasInfoViewDockWidgetName) { - QGCTabbedInfoView* pInfoView = new QGCTabbedInfoView(widgetName, _mapName2Action[widgetName], this); - pInfoView->addSource(mavlinkDecoder); - widget = pInfoView; - } else { - qWarning() << "Attempt to create unknown Inner Dock Widget" << widgetName; - return; + QAction *action = _mapName2Action[widgetName]; + + switch(action->data().toInt()) { + case MAVLINK_INSPECTOR: + widget = new QGCMAVLinkInspector(widgetName, action, MAVLinkProtocol::instance(),this); + break; + case CUSTOM_COMMAND: + widget = new CustomCommandWidget(widgetName, action, this); + break; + case ONBOARD_FILES: + widget = new QGCUASFileViewMulti(widgetName, action, this); + break; + case STATUS_DETAILS: + widget = new UASInfoWidget(widgetName, action, this); + break; + case HIL_CONFIG: + widget = new HILDockWidget(widgetName, action, this); + break; + case ANALYZE: + widget = new Linecharts(widgetName, action, mavlinkDecoder, this); + break; + case INFO_VIEW: + widget= new QGCTabbedInfoView(widgetName, action, this); + break; } + if(action->data().toInt() == INFO_VIEW) { + qobject_cast(widget)->addSource(mavlinkDecoder); + } _mapName2DockWidget[widgetName] = widget; } @@ -399,19 +409,23 @@ void MainWindow::_hideAllDockWidgets(void) void MainWindow::_showDockWidgetAction(bool show) { - QAction* action = dynamic_cast(QObject::sender()); + QAction* action = qobject_cast(QObject::sender()); Q_ASSERT(action); - _showDockWidget(action->text(), show); + _showDockWidget(rgDockWidgetNames[action->data().toInt()], show); } #endif void MainWindow::fullScreenActionItemCallback(bool) { + if (!_ui.actionFullscreen->isChecked()) + _ui.actionFullscreen->setChecked(true); _ui.actionNormal->setChecked(false); } void MainWindow::normalActionItemCallback(bool) { + if (!_ui.actionNormal->isChecked()) + _ui.actionNormal->setChecked(true); _ui.actionFullscreen->setChecked(false); } diff --git a/src/ui/MainWindow.h b/src/ui/MainWindow.h index 5f767decd36b4913bf51c8f390ae47d396b5757a..6f8c9cba95cfa7263675a3ff114daedee5551d7c 100644 --- a/src/ui/MainWindow.h +++ b/src/ui/MainWindow.h @@ -227,15 +227,6 @@ private: QPointer _missionEditorView; #ifndef __mobile__ - // Dock widget names - static const char* _mavlinkDockWidgetName; - static const char* _customCommandWidgetName; - static const char* _filesDockWidgetName; - static const char* _uasStatusDetailsDockWidgetName; - static const char* _uasInfoViewDockWidgetName; - static const char* _hilDockWidgetName; - static const char* _analyzeDockWidgetName; - QMap _mapName2DockWidget; QMap _mapName2Action; #endif @@ -250,8 +241,6 @@ private: void _showDockWidget(const QString &name, bool show); void _loadVisibleWidgetsSettings(void); void _storeVisibleWidgetsSettings(void); - - static const char* _visibleWidgetsKey; #endif bool _autoReconnect;