diff options
| author | Tannin <devnull@localhost> | 2015-05-11 18:05:01 +0200 |
|---|---|---|
| committer | Tannin <devnull@localhost> | 2015-05-11 18:05:01 +0200 |
| commit | 328244692b9e4bd216be95edbb0d0f944dbcb34a (patch) | |
| tree | da3f8ef1d9b183914539544a06abd49a8efb0b01 /src | |
| parent | f32b4c3ce1311607cf1b01c4d53d42141a546657 (diff) | |
better type safety in accessing tool plugins
Diffstat (limited to 'src')
| -rw-r--r-- | src/mainwindow.cpp | 30 |
1 files changed, 17 insertions, 13 deletions
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<QAction*>(sender());
- IPluginTool *plugin = (IPluginTool*)triggeredAction->data().value<void*>();
- 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<IPluginTool*>(triggeredAction->data().value<QObject*>());
+ 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<QAction*>(sender());
IPluginModPage *plugin = qobject_cast<IPluginModPage*>(triggeredAction->data().value<QObject*>());
- 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<QToolButton*>(ui->toolBar->widgetForAction(ui->actionTool));
toolBtn->menu()->addAction(action);
|
