From 328244692b9e4bd216be95edbb0d0f944dbcb34a Mon Sep 17 00:00:00 2001 From: Tannin Date: Mon, 11 May 2015 18:05:01 +0200 Subject: better type safety in accessing tool plugins --- src/mainwindow.cpp | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) (limited to 'src/mainwindow.cpp') diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 7dba6c72..f8b57a2c 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -891,13 +891,15 @@ bool MainWindow::eventFilter(QObject *object, QEvent *event) void MainWindow::toolPluginInvoke() { QAction *triggeredAction = qobject_cast(sender()); - IPluginTool *plugin = (IPluginTool*)triggeredAction->data().value(); - try { - plugin->display(); - } catch (const std::exception &e) { - reportError(tr("Plugin \"%1\" failed: %2").arg(plugin->name()).arg(e.what())); - } catch (...) { - reportError(tr("Plugin \"%1\" failed").arg(plugin->name())); + IPluginTool *plugin = qobject_cast(triggeredAction->data().value()); + if (plugin != nullptr) { + try { + plugin->display(); + } catch (const std::exception &e) { + reportError(tr("Plugin \"%1\" failed: %2").arg(plugin->name()).arg(e.what())); + } catch (...) { + reportError(tr("Plugin \"%1\" failed").arg(plugin->name())); + } } } @@ -905,11 +907,13 @@ void MainWindow::modPagePluginInvoke() { QAction *triggeredAction = qobject_cast(sender()); IPluginModPage *plugin = qobject_cast(triggeredAction->data().value()); - if (plugin->useIntegratedBrowser()) { - m_IntegratedBrowser.setWindowTitle(plugin->displayName()); - m_IntegratedBrowser.openUrl(plugin->pageURL()); - } else { - ::ShellExecuteW(nullptr, L"open", ToWString(plugin->pageURL().toString()).c_str(), nullptr, nullptr, SW_SHOWNORMAL); + if (plugin != nullptr) { + if (plugin->useIntegratedBrowser()) { + m_IntegratedBrowser.setWindowTitle(plugin->displayName()); + m_IntegratedBrowser.openUrl(plugin->pageURL()); + } else { + ::ShellExecuteW(nullptr, L"open", ToWString(plugin->pageURL().toString()).c_str(), nullptr, nullptr, SW_SHOWNORMAL); + } } } @@ -918,7 +922,7 @@ void MainWindow::registerPluginTool(IPluginTool *tool) QAction *action = new QAction(tool->icon(), tool->displayName(), ui->toolBar); action->setToolTip(tool->tooltip()); tool->setParentWidget(this); - action->setData(qVariantFromValue((void*)tool)); + action->setData(qVariantFromValue((QObject*)tool)); connect(action, SIGNAL(triggered()), this, SLOT(toolPluginInvoke()), Qt::QueuedConnection); QToolButton *toolBtn = qobject_cast(ui->toolBar->widgetForAction(ui->actionTool)); toolBtn->menu()->addAction(action); -- cgit v1.3.1