From d091759f3b045929d3f2c45b44ea1d161018bfc7 Mon Sep 17 00:00:00 2001 From: dogmaphobic Date: Sat, 2 Jan 2016 14:43:41 -0500 Subject: [PATCH] Fixing crash bug. --- src/ui/MainWindow.cc | 69 +++++++++++++++++++++++--------------------- src/ui/MainWindow.h | 2 +- 2 files changed, 37 insertions(+), 34 deletions(-) diff --git a/src/ui/MainWindow.cc b/src/ui/MainWindow.cc index da85df9c8..961775833 100644 --- a/src/ui/MainWindow.cc +++ b/src/ui/MainWindow.cc @@ -329,53 +329,56 @@ void MainWindow::_showDockWidget(const QString& name, bool show) { // Create the inner widget if we need to if (!_mapName2DockWidget.contains(name)) { - _createInnerDockWidget(name); + if(!_createInnerDockWidget(name)) { + qWarning() << "Trying to load non existing widget:" << name; + return; + } } - Q_ASSERT(_mapName2DockWidget.contains(name)); QGCDockWidget* dockWidget = _mapName2DockWidget[name]; Q_ASSERT(dockWidget); - dockWidget->setVisible(show); - Q_ASSERT(_mapName2Action.contains(name)); _mapName2Action[name]->setChecked(show); } /// Creates the specified inner dock widget and adds to the QDockWidget -void MainWindow::_createInnerDockWidget(const QString& widgetName) +bool MainWindow::_createInnerDockWidget(const QString& widgetName) { QGCDockWidget* widget = NULL; QAction *action = _mapName2Action[widgetName]; - - switch(action->data().toInt()) { - case MAVLINK_INSPECTOR: - widget = new QGCMAVLinkInspector(widgetName, action, qgcApp()->toolbox()->mavlinkProtocol(),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); + if(action) { + switch(action->data().toInt()) { + case MAVLINK_INSPECTOR: + widget = new QGCMAVLinkInspector(widgetName, action, qgcApp()->toolbox()->mavlinkProtocol(),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); + } + if(widget) { + _mapName2DockWidget[widgetName] = widget; + } } - _mapName2DockWidget[widgetName] = widget; + return widget != NULL; } void MainWindow::_hideAllDockWidgets(void) diff --git a/src/ui/MainWindow.h b/src/ui/MainWindow.h index a6e02b72b..ca0d4ef2f 100644 --- a/src/ui/MainWindow.h +++ b/src/ui/MainWindow.h @@ -221,7 +221,7 @@ private: void _loadCurrentViewState(void); #ifndef __mobile__ - void _createInnerDockWidget(const QString& widgetName); + bool _createInnerDockWidget(const QString& widgetName); void _buildCommonWidgets(void); void _hideAllDockWidgets(void); void _showDockWidget(const QString &name, bool show); -- 2.22.0