mirror of
https://github.com/OPM/ResInsight.git
synced 2026-10-25 22:50:25 -05:00
Active view tracking for 3d window
This commit is contained in:
1 parent
ad73f8d26c
commit
7fd55a0b91
14 files changed
+145
-32
No files matched your search
@@ -1144,15 +1144,9 @@ RimViewWindow* RiaGuiApplication::activeViewWindow()
|
||||
{
|
||||
viewWindow = RiaGuiApplication::instance()->activeReservoirView();
|
||||
}
|
||||
else if ( dynamic_cast<RiuPlotMainWindow*>( mainWindowWidget ) )
|
||||
else if ( auto mainPlotWindow = dynamic_cast<RiuPlotMainWindow*>( mainWindowWidget ) )
|
||||
{
|
||||
RiuPlotMainWindow* mainPlotWindow = dynamic_cast<RiuPlotMainWindow*>( mainWindowWidget );
|
||||
|
||||
// QList<QMdiSubWindow*> subwindows = mainPlotWindow->subWindowList( QMdiArea::StackingOrder );
|
||||
// if ( !subwindows.empty() )
|
||||
//{
|
||||
// viewWindow = RiuInterfaceToViewWindow::viewWindowFromWidget( subwindows.back()->widget() );
|
||||
// }
|
||||
viewWindow = mainPlotWindow->activePlotView();
|
||||
}
|
||||
|
||||
return viewWindow;
|
||||
|
||||
@@ -19,9 +19,11 @@
|
||||
#include "RimDockWindowController.h"
|
||||
|
||||
#include "RiaGuiApplication.h"
|
||||
#include "Rim3dView.h"
|
||||
#include "RimProject.h"
|
||||
#include "RimViewWindow.h"
|
||||
|
||||
#include "RiuDockWidgetTools.h"
|
||||
#include "RiuMainWindowBase.h"
|
||||
#include "RiuViewer.h"
|
||||
|
||||
@@ -72,7 +74,7 @@ void RimDockWindowController::removeWindowFromDock()
|
||||
viewPdmObject()->deleteDockWidget();
|
||||
viewPdmObject()->deleteViewWidget();
|
||||
|
||||
mainWin->removeViewer( viewWidget() );
|
||||
mainWin->onViewerRemoved();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -129,6 +131,7 @@ void RimDockWindowController::updateViewerWidget()
|
||||
QWidget* viewWidget = viewPdmObject()->createViewWidget( dockWidget );
|
||||
dockWidget->setWidget( viewWidget );
|
||||
dockWidget->setObjectName( viewPdmObject()->dockWindowName() );
|
||||
viewWidget->setObjectName( viewPdmObject()->dockWindowName() );
|
||||
mainWindow->initializeViewer( dockWidget, viewWidget );
|
||||
|
||||
mainWindow->connect( dockWidget, SIGNAL( closed() ), mainWindow, SLOT( slotDockViewerClosed() ) );
|
||||
@@ -144,9 +147,8 @@ void RimDockWindowController::updateViewerWidget()
|
||||
if ( viewWidget() )
|
||||
{
|
||||
viewPdmObject()->deleteDockWidget();
|
||||
mainWindow->removeViewer( viewWidget() );
|
||||
|
||||
viewPdmObject()->deleteViewWidget();
|
||||
mainWindow->onViewerRemoved();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -178,11 +180,35 @@ int RimDockWindowController::mainWindowId() const
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimDockWindowController::setActiveViewer()
|
||||
void RimDockWindowController::setAsActiveViewer()
|
||||
{
|
||||
if ( getMainWindow() == nullptr ) return;
|
||||
|
||||
if ( auto pdmView = viewPdmObject() )
|
||||
{
|
||||
if ( pdmView->isActive() ) return;
|
||||
|
||||
for ( auto viewWin : getMainWindow()->viewWindows() )
|
||||
{
|
||||
if ( viewWin->isActive() )
|
||||
{
|
||||
viewWin->setActive( false );
|
||||
viewWin->updateWindowTitle();
|
||||
}
|
||||
}
|
||||
|
||||
pdmView->setActive( true );
|
||||
pdmView->updateWindowTitle();
|
||||
|
||||
if ( auto resView = dynamic_cast<Rim3dView*>( pdmView ) )
|
||||
{
|
||||
RiaApplication::instance()->setActiveReservoirView( resView );
|
||||
if ( auto mainWin = dynamic_cast<RiuMainWindow*>( getMainWindow() ) )
|
||||
{
|
||||
mainWin->refreshViewActions();
|
||||
mainWin->refreshAnimationActions();
|
||||
mainWin->refreshDrawStyleActions();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -42,7 +42,7 @@ public:
|
||||
void setViewToControl( RimViewWindow* view );
|
||||
int mainWindowId() const;
|
||||
|
||||
void setActiveViewer();
|
||||
void setAsActiveViewer();
|
||||
|
||||
void updateViewerWidget();
|
||||
void handleViewerDeletion();
|
||||
|
||||
@@ -29,6 +29,8 @@
|
||||
#include "RimDockWindowController.h"
|
||||
#include "RimProject.h"
|
||||
|
||||
#include "RiuDockWidgetTools.h"
|
||||
|
||||
#include "cafPdmUiTreeAttributes.h"
|
||||
#include "cafPdmUiTreeViewEditor.h"
|
||||
|
||||
@@ -275,8 +277,22 @@ void RimViewWindow::updateWindowTitle()
|
||||
if ( viewWidget() && dockWidget() )
|
||||
{
|
||||
viewWidget()->setWindowTitle( windowTitle() );
|
||||
dockWidget()->setWindowTitle( windowTitle() );
|
||||
dockWidget()->setIcon( QIcon( ":/ActiveWindow.svg" ) );
|
||||
if ( dockWidget()->isFloating() && isActive() )
|
||||
{
|
||||
dockWidget()->setWindowTitle( "* " + windowTitle() );
|
||||
}
|
||||
else
|
||||
{
|
||||
dockWidget()->setWindowTitle( windowTitle() );
|
||||
}
|
||||
if ( isActive() )
|
||||
{
|
||||
dockWidget()->setIcon( QIcon( ":/ActiveWindow.svg" ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
dockWidget()->setIcon( QIcon() );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -285,7 +301,7 @@ void RimViewWindow::updateWindowTitle()
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
QString RimViewWindow::dockWindowName() const
|
||||
{
|
||||
return QString( "DockViewWindow_%1" ).arg( m_dockWindowId );
|
||||
return QString( "%1_%2" ).arg( RiuDockWidgetTools::viewWindowPrefix() ).arg( m_dockWindowId );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -46,6 +46,7 @@ public:
|
||||
void setShowWindow( bool showWindow );
|
||||
|
||||
void setAsActiveViewer();
|
||||
bool isActive() const;
|
||||
|
||||
bool isMainDockedWindow() const;
|
||||
|
||||
@@ -87,7 +88,6 @@ protected:
|
||||
virtual bool isWindowVisible() const; // Virtual To allow special visibility control
|
||||
void deleteDockWidget();
|
||||
void setActive( bool active );
|
||||
bool isActive() const;
|
||||
////
|
||||
|
||||
// Derived classes are not supposed to override this function. The intention is to always use m_showWindow
|
||||
|
||||
@@ -320,6 +320,14 @@ QString RiuDockWidgetTools::dockStateHideAll3DWindowName()
|
||||
return "Hide All";
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
QString RiuDockWidgetTools::viewWindowPrefix()
|
||||
{
|
||||
return "DockViewWindow_";
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -91,6 +91,8 @@ public:
|
||||
static QString dockStateHideAllPlotWindowName();
|
||||
static QString dockStateHideAll3DWindowName();
|
||||
|
||||
static QString viewWindowPrefix();
|
||||
|
||||
static QAction* toggleActionForWidget( const ads::CDockManager* dockManager, const QString& dockWidgetName );
|
||||
|
||||
static ads::CDockWidget* findDockWidget( const ads::CDockManager* dockManager, const QString& dockWidgetName );
|
||||
|
||||
@@ -1189,9 +1189,11 @@ RiuMessagePanel* RiuMainWindow::messagePanel()
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RiuMainWindow::removeViewer( QWidget* viewer )
|
||||
void RiuMainWindow::onViewerRemoved()
|
||||
{
|
||||
slotRefreshViewActions();
|
||||
refreshAnimationActions();
|
||||
refreshDrawStyleActions();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -1204,6 +1206,21 @@ void RiuMainWindow::initializeViewer( ads::CDockWidget* dockWidget, QWidget* vie
|
||||
slotRefreshViewActions();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
std::vector<RimViewWindow*> RiuMainWindow::viewWindows()
|
||||
{
|
||||
std::vector<RimViewWindow*> views;
|
||||
|
||||
for ( auto v : RimProject::current()->allViews() )
|
||||
{
|
||||
views.push_back( v );
|
||||
}
|
||||
|
||||
return views;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
/// This method needs to handle memory deallocation !!!
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -1480,7 +1497,7 @@ void RiuMainWindow::selectedObjectsChanged()
|
||||
slotRefreshViewActions();
|
||||
|
||||
// The only way to get to this code is by selection change initiated from the project tree view
|
||||
// As we are activating an MDI-window, the focus is given to this MDI-window
|
||||
// As we are activating an view window, the focus might be given to this window
|
||||
// Set focus back to the tree view to be able to continue keyboard tree view navigation
|
||||
projectTree->treeView()->setFocus();
|
||||
}
|
||||
|
||||
@@ -92,9 +92,11 @@ public:
|
||||
void cleanupGuiCaseClose();
|
||||
void cleanupGuiBeforeProjectClose();
|
||||
|
||||
void removeViewer( QWidget* viewer ) override;
|
||||
void onViewerRemoved() override;
|
||||
void initializeViewer( ads::CDockWidget* dockWidget, QWidget* viewer ) override;
|
||||
|
||||
std::vector<RimViewWindow*> viewWindows() override;
|
||||
|
||||
void setResultInfo( const QString& info ) const;
|
||||
|
||||
void refreshViewActions();
|
||||
|
||||
@@ -120,9 +120,14 @@ ads::CDockManager* RiuMainWindowBase::dockManager() const
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RiuMainWindowBase::setActiveViewer( QString viewerName )
|
||||
{
|
||||
if ( auto dockWidget = dockManager()->findDockWidget( viewerName ) )
|
||||
for ( auto view : viewWindows() )
|
||||
{
|
||||
dockWidget->setAsCurrentTab();
|
||||
if ( view->dockWidget() && view->dockWidget()->objectName() == viewerName )
|
||||
{
|
||||
view->setAsActiveViewer();
|
||||
view->dockWidget()->setAsCurrentTab();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -363,8 +368,18 @@ void RiuMainWindowBase::slotDockWidgetToggleViewActionTriggered()
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RiuMainWindowBase::slotDockViewerVisibilityChanged( bool visible )
|
||||
{
|
||||
if ( !visible ) return;
|
||||
|
||||
if ( auto dockWidget = dynamic_cast<ads::CDockWidget*>( sender() ) )
|
||||
{
|
||||
for ( auto view : viewWindows() )
|
||||
{
|
||||
if ( view->dockWidget() == dockWidget )
|
||||
{
|
||||
view->setAsActiveViewer();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -48,6 +48,8 @@ class PdmUiPropertyView;
|
||||
class QAction;
|
||||
class QUndoView;
|
||||
|
||||
class RimViewWindow;
|
||||
|
||||
//==================================================================================================
|
||||
///
|
||||
//==================================================================================================
|
||||
@@ -61,9 +63,11 @@ public:
|
||||
|
||||
virtual QString mainWindowName() = 0;
|
||||
|
||||
virtual void removeViewer( QWidget* viewer ) = 0;
|
||||
virtual void initializeViewer( ads::CDockWidget* dockWidget, QWidget* viewer ) {};
|
||||
virtual void setActiveViewer( QString viewerName );
|
||||
virtual void onViewerRemoved() = 0;
|
||||
|
||||
virtual std::vector<RimViewWindow*> viewWindows() = 0;
|
||||
|
||||
void loadWinGeoAndDockToolBarLayout();
|
||||
void saveWinGeoAndDockToolBarLayout();
|
||||
|
||||
@@ -740,9 +740,8 @@ void RiuPlotMainWindow::showAndSetKeyboardFocusToSummaryPlotManager()
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RiuPlotMainWindow::removeViewer( QWidget* viewer )
|
||||
void RiuPlotMainWindow::onViewerRemoved()
|
||||
{
|
||||
// removeViewerFromMdiArea( m_mdiArea, viewer );
|
||||
refreshToolbars();
|
||||
}
|
||||
|
||||
@@ -755,6 +754,37 @@ void RiuPlotMainWindow::initializeViewer( ads::CDockWidget* dockWidget, QWidget*
|
||||
viewer->update();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
std::vector<RimViewWindow*> RiuPlotMainWindow::viewWindows()
|
||||
{
|
||||
std::vector<RimViewWindow*> views;
|
||||
|
||||
for ( auto v : RimProject::current()->descendantsOfType<RimPlotWindow>() )
|
||||
{
|
||||
views.push_back( v );
|
||||
}
|
||||
|
||||
return views;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RimViewWindow* RiuPlotMainWindow::activePlotView()
|
||||
{
|
||||
for ( auto view : viewWindows() )
|
||||
{
|
||||
if ( view->isActive() )
|
||||
{
|
||||
return view;
|
||||
}
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -68,8 +68,10 @@ public:
|
||||
void cleanupGuiBeforeProjectClose();
|
||||
void cleanUpTemporaryWidgets();
|
||||
|
||||
void removeViewer( QWidget* viewer ) override;
|
||||
void initializeViewer( ads::CDockWidget* dockWidget, QWidget* viewer ) override;
|
||||
void onViewerRemoved() override;
|
||||
void initializeViewer( ads::CDockWidget* dockWidget, QWidget* viewer ) override;
|
||||
std::vector<RimViewWindow*> viewWindows() override;
|
||||
RimViewWindow* activePlotView();
|
||||
|
||||
void setDefaultWindowSize();
|
||||
void enable3DSelectionLink( bool enable );
|
||||
|
||||
@@ -724,10 +724,7 @@ void RiuViewer::mousePressEvent( QMouseEvent* mouseEvent )
|
||||
{
|
||||
m_lastMousePressPosition = mouseEvent->pos();
|
||||
|
||||
if ( mouseEvent->button() == Qt::LeftButton )
|
||||
{
|
||||
if ( auto ownView = ownerViewWindow() ) ownView->setAsActiveViewer();
|
||||
}
|
||||
if ( auto ownView = ownerViewWindow() ) ownView->setAsActiveViewer();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user