mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
Project Tree updates (#8490)
Split project tree into multiple dockable tree views for plots, keeping one for 3d views.
This commit is contained in:
@@ -45,7 +45,6 @@
|
||||
#include "SummaryPlotCommands/RicSummaryPlotEditorDialog.h"
|
||||
|
||||
#include "RiuDockWidgetTools.h"
|
||||
#include "RiuDragDrop.h"
|
||||
#include "RiuMdiSubWindow.h"
|
||||
#include "RiuMessagePanel.h"
|
||||
#include "RiuMultiPlotPage.h"
|
||||
@@ -59,7 +58,6 @@
|
||||
#include "cafPdmUiPropertyView.h"
|
||||
#include "cafPdmUiToolBarEditor.h"
|
||||
#include "cafPdmUiTreeView.h"
|
||||
#include "cafQTreeViewStateSerializer.h"
|
||||
#include "cafSelectionManager.h"
|
||||
|
||||
#include <QCloseEvent>
|
||||
@@ -90,8 +88,6 @@ RiuPlotMainWindow::RiuPlotMainWindow()
|
||||
// Store the layout so we can offer reset option
|
||||
m_initialDockAndToolbarLayout = saveState( 0 );
|
||||
|
||||
m_dragDropInterface = std::unique_ptr<caf::PdmUiDragDropInterface>( new RiuDragDrop() );
|
||||
|
||||
if ( m_undoView )
|
||||
{
|
||||
m_undoView->setStack( caf::CmdExecCommandManager::instance()->undoStack() );
|
||||
@@ -455,40 +451,64 @@ void RiuPlotMainWindow::refreshToolbars()
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RiuPlotMainWindow::createDockPanels()
|
||||
{
|
||||
const int nTreeViews = 3;
|
||||
const std::vector<QString> treeViewTitles = { "Plots", "Data Sources", "Scripts" };
|
||||
const std::vector<QString> treeViewConfigs = { "PlotWindow.Plots", "PlotWindow.DataSources", "PlotWindow.Scripts" };
|
||||
const std::vector<QString> treeViewDockNames = { RiuDockWidgetTools::plotMainWindowPlotsTreeName(),
|
||||
RiuDockWidgetTools::plotMainWindowDataSourceTreeName(),
|
||||
RiuDockWidgetTools::plotMainWindowScriptsTreeName() };
|
||||
|
||||
createTreeViews( nTreeViews );
|
||||
|
||||
QDockWidget* dockOntopOfWidget = nullptr;
|
||||
|
||||
for ( int i = 0; i < nTreeViews; i++ )
|
||||
{
|
||||
QDockWidget* dockWidget = new QDockWidget( "Plot Project Tree", this );
|
||||
dockWidget->setObjectName( RiuDockWidgetTools::plotMainWindowProjectTreeName() );
|
||||
QDockWidget* dockWidget = new QDockWidget( treeViewTitles[i], this );
|
||||
dockWidget->setObjectName( treeViewDockNames[i] );
|
||||
dockWidget->setAllowedAreas( Qt::AllDockWidgetAreas );
|
||||
|
||||
m_projectTreeView = new caf::PdmUiTreeView( this );
|
||||
m_projectTreeView->enableSelectionManagerUpdating( true );
|
||||
caf::PdmUiTreeView* projectTree = projectTreeView( i );
|
||||
projectTree->enableSelectionManagerUpdating( true );
|
||||
|
||||
m_projectTreeView->enableAppendOfClassNameToUiItemText( RiaPreferencesSystem::current()->appendClassNameToUiText() );
|
||||
projectTree->enableAppendOfClassNameToUiItemText( RiaPreferencesSystem::current()->appendClassNameToUiText() );
|
||||
|
||||
dockWidget->setWidget( m_projectTreeView );
|
||||
dockWidget->setWidget( projectTree );
|
||||
|
||||
m_projectTreeView->treeView()->setHeaderHidden( true );
|
||||
m_projectTreeView->treeView()->setSelectionMode( QAbstractItemView::ExtendedSelection );
|
||||
projectTree->treeView()->setHeaderHidden( true );
|
||||
projectTree->treeView()->setSelectionMode( QAbstractItemView::ExtendedSelection );
|
||||
|
||||
// Drag and drop configuration
|
||||
m_projectTreeView->treeView()->setDragEnabled( true );
|
||||
m_projectTreeView->treeView()->viewport()->setAcceptDrops( true );
|
||||
m_projectTreeView->treeView()->setDropIndicatorShown( true );
|
||||
m_projectTreeView->treeView()->setDragDropMode( QAbstractItemView::DragDrop );
|
||||
projectTree->treeView()->setDragEnabled( true );
|
||||
projectTree->treeView()->viewport()->setAcceptDrops( true );
|
||||
projectTree->treeView()->setDropIndicatorShown( true );
|
||||
projectTree->treeView()->setDragDropMode( QAbstractItemView::DragDrop );
|
||||
|
||||
// Install event filter used to handle key press events
|
||||
RiuTreeViewEventFilter* treeViewEventFilter = new RiuTreeViewEventFilter( this );
|
||||
m_projectTreeView->treeView()->installEventFilter( treeViewEventFilter );
|
||||
RiuTreeViewEventFilter* treeViewEventFilter = new RiuTreeViewEventFilter( this, projectTree );
|
||||
projectTree->treeView()->installEventFilter( treeViewEventFilter );
|
||||
|
||||
addDockWidget( Qt::LeftDockWidgetArea, dockWidget );
|
||||
|
||||
connect( m_projectTreeView, SIGNAL( selectionChanged() ), this, SLOT( selectedObjectsChanged() ) );
|
||||
m_projectTreeView->treeView()->setContextMenuPolicy( Qt::CustomContextMenu );
|
||||
connect( m_projectTreeView->treeView(),
|
||||
if ( dockOntopOfWidget )
|
||||
{
|
||||
tabifyDockWidget( dockOntopOfWidget, dockWidget );
|
||||
}
|
||||
else
|
||||
{
|
||||
dockOntopOfWidget = dockWidget;
|
||||
}
|
||||
|
||||
connect( dockWidget, SIGNAL( visibilityChanged( bool ) ), projectTree, SLOT( treeVisibilityChanged( bool ) ) );
|
||||
|
||||
connect( projectTree, SIGNAL( selectionChanged() ), this, SLOT( selectedObjectsChanged() ) );
|
||||
|
||||
projectTree->treeView()->setContextMenuPolicy( Qt::CustomContextMenu );
|
||||
connect( projectTree->treeView(),
|
||||
SIGNAL( customContextMenuRequested( const QPoint& ) ),
|
||||
SLOT( customMenuRequested( const QPoint& ) ) );
|
||||
|
||||
m_projectTreeView->setUiConfigurationName( "PlotWindow" );
|
||||
projectTree->setUiConfigurationName( treeViewConfigs[i] );
|
||||
}
|
||||
|
||||
{
|
||||
@@ -813,13 +833,14 @@ void RiuPlotMainWindow::initializeViewer( QMdiSubWindow* subWindow, QWidget* vie
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
/// This method needs to handle memory deallocation !!!
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RiuPlotMainWindow::setPdmRoot( caf::PdmObject* pdmRoot )
|
||||
{
|
||||
m_projectTreeView->setPdmItem( pdmRoot );
|
||||
// For debug only : m_projectTreeView->treeView()->expandAll();
|
||||
m_projectTreeView->setDragDropInterface( m_dragDropInterface.get() );
|
||||
for ( auto tv : projectTreeViews() )
|
||||
{
|
||||
tv->setPdmItem( pdmRoot );
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -836,28 +857,32 @@ void RiuPlotMainWindow::slotSubWindowActivated( QMdiSubWindow* subWindow )
|
||||
|
||||
if ( !isBlockingViewSelectionOnSubWindowActivated() )
|
||||
{
|
||||
std::vector<caf::PdmUiItem*> currentSelection;
|
||||
m_projectTreeView->selectedUiItems( currentSelection );
|
||||
bool childSelected = false;
|
||||
for ( caf::PdmUiItem* uiItem : currentSelection )
|
||||
caf::PdmUiTreeView* projectTree = getTreeViewWithItem( activatedView );
|
||||
if ( projectTree )
|
||||
{
|
||||
caf::PdmObject* pdmObject = dynamic_cast<caf::PdmObject*>( uiItem );
|
||||
if ( pdmObject )
|
||||
std::vector<caf::PdmUiItem*> currentSelection;
|
||||
projectTree->selectedUiItems( currentSelection );
|
||||
bool childSelected = false;
|
||||
for ( caf::PdmUiItem* uiItem : currentSelection )
|
||||
{
|
||||
std::vector<RimViewWindow*> ancestralViews;
|
||||
pdmObject->allAncestorsOrThisOfType( ancestralViews );
|
||||
for ( auto ancestralView : ancestralViews )
|
||||
caf::PdmObject* pdmObject = dynamic_cast<caf::PdmObject*>( uiItem );
|
||||
if ( pdmObject )
|
||||
{
|
||||
if ( ancestralView == activatedView )
|
||||
std::vector<RimViewWindow*> ancestralViews;
|
||||
pdmObject->allAncestorsOrThisOfType( ancestralViews );
|
||||
for ( auto ancestralView : ancestralViews )
|
||||
{
|
||||
childSelected = true;
|
||||
if ( ancestralView == activatedView )
|
||||
{
|
||||
childSelected = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if ( !childSelected )
|
||||
{
|
||||
selectAsCurrentItem( activatedView );
|
||||
if ( !childSelected )
|
||||
{
|
||||
selectAsCurrentItem( activatedView );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -911,8 +936,11 @@ void RiuPlotMainWindow::slotBuildWindowActions()
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RiuPlotMainWindow::selectedObjectsChanged()
|
||||
{
|
||||
caf::PdmUiTreeView* projectTree = dynamic_cast<caf::PdmUiTreeView*>( sender() );
|
||||
if ( !projectTree ) return;
|
||||
|
||||
std::vector<caf::PdmUiItem*> uiItems;
|
||||
m_projectTreeView->selectedUiItems( uiItems );
|
||||
projectTree->selectedUiItems( uiItems );
|
||||
|
||||
caf::PdmObjectHandle* firstSelectedObject = nullptr;
|
||||
if ( !uiItems.empty() )
|
||||
@@ -974,7 +1002,8 @@ void RiuPlotMainWindow::selectedObjectsChanged()
|
||||
// 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
|
||||
// Set focus back to the tree view to be able to continue keyboard tree view navigation
|
||||
m_projectTreeView->treeView()->setFocus();
|
||||
projectTree->raise();
|
||||
projectTree->treeView()->setFocus();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -984,24 +1013,8 @@ void RiuPlotMainWindow::selectedObjectsChanged()
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RiuPlotMainWindow::restoreTreeViewState()
|
||||
{
|
||||
if ( m_projectTreeView )
|
||||
{
|
||||
QString stateString = RimProject::current()->plotWindowTreeViewState;
|
||||
if ( !stateString.isEmpty() )
|
||||
{
|
||||
m_projectTreeView->treeView()->collapseAll();
|
||||
caf::QTreeViewStateSerializer::applyTreeViewStateFromString( m_projectTreeView->treeView(), stateString );
|
||||
}
|
||||
|
||||
QString currentIndexString = RimProject::current()->plotWindowCurrentModelIndexPath;
|
||||
if ( !currentIndexString.isEmpty() )
|
||||
{
|
||||
QModelIndex mi =
|
||||
caf::QTreeViewStateSerializer::getModelIndexFromString( m_projectTreeView->treeView()->model(),
|
||||
currentIndexString );
|
||||
m_projectTreeView->treeView()->setCurrentIndex( mi );
|
||||
}
|
||||
}
|
||||
restoreTreeViewStates( RimProject::current()->plotWindowTreeViewStates(),
|
||||
RimProject::current()->plotWindowCurrentModelIndexPaths() );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user