From cd7e2f6f72623ab1936e584aa3b079b169fa1b9d Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Wed, 8 Oct 2014 02:58:13 +0200 Subject: [PATCH] refs #335, findParentInfoAreas method to allow nested context menus --- src/blackgui/dockwidgetinfoarea.cpp | 23 ++++++++++++++++++----- src/blackgui/dockwidgetinfoarea.h | 3 +++ 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/blackgui/dockwidgetinfoarea.cpp b/src/blackgui/dockwidgetinfoarea.cpp index 777c23707..4309dd6e9 100644 --- a/src/blackgui/dockwidgetinfoarea.cpp +++ b/src/blackgui/dockwidgetinfoarea.cpp @@ -62,16 +62,16 @@ namespace BlackGui void CDockWidgetInfoArea::addToContextMenu(QMenu *contextMenu) const { - Components::CMainInfoAreaComponent *mainWidget = qobject_cast(parentWidget()); - Q_ASSERT(mainWidget); - if (!mainWidget) return; + QList parentInfoAreas = this->findParentInfoAreas(); + Q_ASSERT(!parentInfoAreas.isEmpty()); + if (parentInfoAreas.isEmpty()) return; // Dockable widget's context menu CDockWidget::addToContextMenu(contextMenu); // from main component (info area) contextMenu->addSeparator(); - mainWidget->addToContextMenu(contextMenu); + parentInfoAreas.last()->addToContextMenu(contextMenu); } void CDockWidgetInfoArea::initalFloating() @@ -122,4 +122,17 @@ namespace BlackGui QList nestedInfoAreas = this->findChildren(); return nestedInfoAreas; } -} + + const QList CDockWidgetInfoArea::findParentInfoAreas() const + { + QList parents; + QWidget *currentWidget = this->parentWidget(); + while (currentWidget) + { + const CInfoArea *ia = qobject_cast(currentWidget); + if (ia) { parents.append(ia); } + currentWidget = currentWidget->parentWidget(); + } + return parents; + } +} // namespace diff --git a/src/blackgui/dockwidgetinfoarea.h b/src/blackgui/dockwidgetinfoarea.h index 1e23e93fb..b90031b66 100644 --- a/src/blackgui/dockwidgetinfoarea.h +++ b/src/blackgui/dockwidgetinfoarea.h @@ -58,6 +58,9 @@ namespace BlackGui //! Nested info areas QList findNestedInfoAreas(); + //! The parent info areas + const QList findParentInfoAreas() const; + }; } // namespace