New dockingsystem (#9116)

* Use Qt Advanced Docking as forked submodule
* Use new docking system in code
This commit is contained in:
jonjenssen 2022-07-07 12:03:02 +02:00 committed by GitHub
parent be8c796bb0
commit d5269abc6e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
26 changed files with 408 additions and 348 deletions

2
.gitmodules vendored
View File

@ -9,4 +9,4 @@
url = https://github.com/fastfloat/fast_float
[submodule "ThirdParty/qtadvanceddocking"]
path = ThirdParty/qtadvanceddocking
url = https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System.git
url = https://github.com/CeetronSolutions/qtadvanceddocking.git

View File

@ -287,6 +287,10 @@ endif()
target_link_libraries(ResInsight ${LINK_LIBRARIES})
if(UNIX AND NOT APPLE)
target_link_libraries(ResInsight xcb)
endif()
# ##############################################################################
# Unity builds
# ##############################################################################

View File

@ -989,7 +989,6 @@ void RiaGuiApplication::createMainPlotWindow()
m_mainPlotWindow->setWindowTitle( "Plots - ResInsight" );
m_mainPlotWindow->setDefaultWindowSize();
m_mainPlotWindow->loadWinGeoAndDockToolBarLayout();
m_mainPlotWindow->hideAllDockWidgets();
}
//--------------------------------------------------------------------------------------------------

View File

@ -62,9 +62,11 @@ add_library(
target_include_directories(
${PROJECT_NAME}
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/ThirdParty
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_SOURCE_DIR}/ThirdParty
${CMAKE_SOURCE_DIR}/ThirdParty/custom-opm-common/generated-opm-common
${CMAKE_SOURCE_DIR}/ThirdParty/custom-opm-common/opm-common
${CMAKE_SOURCE_DIR}/ThirdParty/qtadvanceddocking/src
)
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")

View File

@ -23,7 +23,6 @@
#include "cafPdmField.h"
#include "cafPdmObject.h"
#include <QDockWidget>
#include <QPointer>
class RimAnalysisPlotCollection;

View File

@ -61,7 +61,7 @@ private:
void onSelectionManagerSelectionChanged( const std::set<int>& changedSelectionLevels ) override;
// Override eventFilter to be able to track key events from QDockWidget
// Override eventFilter to be able to track key events from QWidget
bool eventFilter( QObject* obj, QEvent* event ) override;
void updateCurveCandidates();

View File

@ -25,7 +25,9 @@
#include "cvfAssert.h"
#include <QDockWidget>
#include "DockManager.h"
#include "DockWidget.h"
#include <QSettings>
//--------------------------------------------------------------------------------------------------
@ -243,27 +245,17 @@ QMap<QString, QVariant> RiuDockWidgetTools::widgetVisibilitiesForGeoMech()
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QDockWidget* RiuDockWidgetTools::findDockWidget( const QObject* parent, const QString& dockWidgetName )
ads::CDockWidget* RiuDockWidgetTools::findDockWidget( const ads::CDockManager* dockManager, const QString& dockWidgetName )
{
QList<QDockWidget*> dockWidgets = parent->findChildren<QDockWidget*>();
for ( QDockWidget* dock : dockWidgets )
{
if ( dock->objectName() == dockWidgetName )
{
return dock;
}
}
return nullptr;
return dockManager->findDockWidget( dockWidgetName );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QAction* RiuDockWidgetTools::toggleActionForWidget( const QObject* parent, const QString& dockWidgetName )
QAction* RiuDockWidgetTools::toggleActionForWidget( const ads::CDockManager* dockManager, const QString& dockWidgetName )
{
auto w = RiuDockWidgetTools::findDockWidget( parent, dockWidgetName );
auto w = findDockWidget( dockManager, dockWidgetName );
if ( w )
{
return w->toggleViewAction();
@ -282,7 +274,7 @@ void RiuDockWidgetTools::setVisibleDockingWindowsForEclipse()
RiuMainWindow* mainWindow = RiuMainWindow::instance();
auto widgetVisibilities = widgetVisibilitiesForEclipse();
applyDockWidgetVisibilities( mainWindow, widgetVisibilities );
applyDockWidgetVisibilities( mainWindow->dockManager(), widgetVisibilities );
}
//--------------------------------------------------------------------------------------------------
@ -295,15 +287,17 @@ void RiuDockWidgetTools::setVisibleDockingWindowsForGeoMech()
RiuMainWindow* mainWindow = RiuMainWindow::instance();
auto widgetVisibilities = widgetVisibilitiesForGeoMech();
applyDockWidgetVisibilities( mainWindow, widgetVisibilities );
applyDockWidgetVisibilities( mainWindow->dockManager(), widgetVisibilities );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuDockWidgetTools::setDockWidgetVisibility( const QObject* parent, const QString& dockWidgetName, bool isVisible )
void RiuDockWidgetTools::setDockWidgetVisibility( const ads::CDockManager* dockManager,
const QString& dockWidgetName,
bool isVisible )
{
QDockWidget* dockWidget = findDockWidget( parent, dockWidgetName );
ads::CDockWidget* dockWidget = findDockWidget( dockManager, dockWidgetName );
if ( dockWidget )
{
dockWidget->setVisible( isVisible );
@ -313,20 +307,18 @@ void RiuDockWidgetTools::setDockWidgetVisibility( const QObject* parent, const Q
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QVariant RiuDockWidgetTools::dockWidgetsVisibility( const QObject* parent )
QVariant RiuDockWidgetTools::dockWidgetsVisibility( const ads::CDockManager* dockManager )
{
QMap<QString, QVariant> widgetVisibility;
QList<QDockWidget*> dockWidgets = parent->findChildren<QDockWidget*>();
auto dockWidgets = dockManager->dockWidgetsMap();
for ( QDockWidget* dock : dockWidgets )
for ( auto dock : dockWidgets )
{
if ( dock )
{
bool isVisible = dock->isVisible();
widgetVisibility[dock->objectName()] = isVisible;
// qDebug() << "Store " << dock->objectName() << " : " << (isVisible ? "visible" : "not visible");
}
}
@ -356,17 +348,16 @@ void RiuDockWidgetTools::workaroundForQwtDockWidgets()
RiuMainWindow* mainWindow = RiuMainWindow::instance();
QList<QDockWidget*> dockWidgets = mainWindow->findChildren<QDockWidget*>();
dockWidgets.removeAll( nullptr );
auto dockWidgets = mainWindow->dockManager()->dockWidgetsMap();
for ( QDockWidget* dock : dockWidgets )
for ( auto dock : dockWidgets )
{
dock->setVisible( false );
if ( dock ) dock->setVisible( false );
}
QApplication::processEvents();
{
auto dock = findDockWidget( mainWindow, relPermPlotName() );
auto dock = mainWindow->dockManager()->findDockWidget( relPermPlotName() );
if ( dock )
{
dock->setVisible( true );
@ -374,7 +365,7 @@ void RiuDockWidgetTools::workaroundForQwtDockWidgets()
}
{
auto dock = findDockWidget( mainWindow, pvtPlotName() );
auto dock = mainWindow->dockManager()->findDockWidget( pvtPlotName() );
if ( dock )
{
dock->setVisible( true );
@ -383,19 +374,19 @@ void RiuDockWidgetTools::workaroundForQwtDockWidgets()
QApplication::processEvents();
mainWindow->restoreDockWidgetVisibilities();
mainWindow->loadWinGeoAndDockToolBarLayout();
mainWindow->restoreDockWidgetVisibilities();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuDockWidgetTools::applyDockWidgetVisibilities( const QObject* parent,
void RiuDockWidgetTools::applyDockWidgetVisibilities( const ads::CDockManager* dockManager,
const QMap<QString, QVariant>& widgetVisibilities )
{
QList<QDockWidget*> dockWidgets = parent->findChildren<QDockWidget*>();
auto dockWidgets = dockManager->dockWidgetsMap();
for ( QDockWidget* dock : dockWidgets )
for ( auto dock : dockWidgets )
{
if ( dock )
{
@ -408,8 +399,6 @@ void RiuDockWidgetTools::applyDockWidgetVisibilities( const QObject*
}
dock->setVisible( isVisible );
// qDebug() << "Restore " << dock->objectName() << " : " << (isVisible ? "visible" : "not visible");
}
}
}

View File

@ -22,12 +22,17 @@
#include <QString>
#include <QVariant>
class QDockWidget;
class QObject;
class QAction;
class Rim3dView;
namespace ads
{
class CDockWidget;
class CDockManager;
}; // namespace ads
//==================================================================================================
//
//
@ -61,9 +66,9 @@ public:
static QString plotMainWindowMessagesName();
static QString plotMainWindowUndoStackName();
static QAction* toggleActionForWidget( const QObject* parent, const QString& dockWidgetName );
static QAction* toggleActionForWidget( const ads::CDockManager* dockManager, const QString& dockWidgetName );
static QVariant dockWidgetsVisibility( const QObject* parent );
static QVariant dockWidgetsVisibility( const ads::CDockManager* dockManager );
static QVariant defaultDockWidgetVisibilities();
static void workaroundForQwtDockWidgets();
@ -71,10 +76,12 @@ public:
static void setVisibleDockingWindowsForEclipse();
static void setVisibleDockingWindowsForGeoMech();
static void setDockWidgetVisibility( const QObject* parent, const QString& dockWidgetName, bool isVisible );
static void applyDockWidgetVisibilities( const QObject* parent, const QMap<QString, QVariant>& visibilityMap );
static void
setDockWidgetVisibility( const ads::CDockManager* dockManager, const QString& dockWidgetName, bool isVisible );
static void applyDockWidgetVisibilities( const ads::CDockManager* dockManager,
const QMap<QString, QVariant>& visibilityMap );
static QDockWidget* findDockWidget( const QObject* parent, const QString& dockWidgetName );
static ads::CDockWidget* findDockWidget( const ads::CDockManager*, const QString& dockWidgetName );
private:
static QMap<QString, QVariant> widgetVisibilitiesForEclipse();

View File

@ -82,11 +82,12 @@
#include "cvfTimer.h"
#include "DockAreaWidget.h"
#include <QAction>
#include <QCloseEvent>
#include <QComboBox>
#include <QDir>
#include <QDockWidget>
#include <QLabel>
#include <QLayout>
#include <QMdiSubWindow>
@ -120,16 +121,16 @@ RiuMainWindow::RiuMainWindow()
, m_relPermPlotPanel( nullptr )
, m_pvtPlotPanel( nullptr )
, m_mohrsCirclePlot( nullptr )
, m_windowMenu( nullptr )
, m_holoLensToolBar( nullptr )
{
setAttribute( Qt::WA_DeleteOnClose );
m_mdiArea = new RiuMdiArea( this );
connect( m_mdiArea, SIGNAL( subWindowActivated( QMdiSubWindow* ) ), SLOT( slotSubWindowActivated( QMdiSubWindow* ) ) );
setCentralWidget( m_mdiArea );
// m_mainViewer = createViewer();
ads::CDockWidget* widget = new ads::CDockWidget( "3D Views", this );
widget->setWidget( m_mdiArea );
dockManager()->setCentralWidget( widget );
createActions();
createMenus();
@ -741,22 +742,27 @@ void RiuMainWindow::createDockPanels()
RiuDockWidgetTools::mainWindowDataSourceTreeName(),
RiuDockWidgetTools::mainWindowScriptsTreeName() };
const std::vector<ads::DockWidgetArea> defaultDockWidgetArea{ ads::DockWidgetArea::LeftDockWidgetArea,
ads::DockWidgetArea::LeftDockWidgetArea,
ads::DockWidgetArea::LeftDockWidgetArea };
createTreeViews( nTreeViews );
QDockWidget* dockOntopOfWidget = nullptr;
std::vector<ads::CDockWidget*> rightWidgets;
std::vector<ads::CDockWidget*> leftWidgets;
std::vector<ads::CDockWidget*> bottomWidgets;
for ( int i = 0; i < nTreeViews; i++ )
{
QDockWidget* dockWidget = new QDockWidget( treeViewTitles[i], this );
ads::CDockWidget* dockWidget = new ads::CDockWidget( treeViewTitles[i], this );
dockWidget->setObjectName( treeViewDockNames[i] );
dockWidget->setAllowedAreas( Qt::AllDockWidgetAreas );
caf::PdmUiTreeView* projectTree = projectTreeView( i );
projectTree->enableSelectionManagerUpdating( true );
projectTree->enableAppendOfClassNameToUiItemText( RiaPreferencesSystem::current()->appendClassNameToUiText() );
dockWidget->setWidget( projectTree );
dockWidget->hide();
projectTree->treeView()->setHeaderHidden( true );
projectTree->treeView()->setSelectionMode( QAbstractItemView::ExtendedSelection );
@ -771,19 +777,11 @@ void RiuMainWindow::createDockPanels()
RiuTreeViewEventFilter* treeViewEventFilter = new RiuTreeViewEventFilter( this, projectTree );
projectTree->treeView()->installEventFilter( treeViewEventFilter );
addDockWidget( Qt::LeftDockWidgetArea, dockWidget );
if ( dockOntopOfWidget )
{
tabifyDockWidget( dockOntopOfWidget, dockWidget );
}
else
{
dockOntopOfWidget = dockWidget;
}
if ( defaultDockWidgetArea[i] == ads::DockWidgetArea::LeftDockWidgetArea ) leftWidgets.push_back( dockWidget );
if ( defaultDockWidgetArea[i] == ads::DockWidgetArea::RightDockWidgetArea )
rightWidgets.push_back( dockWidget );
connect( dockWidget, SIGNAL( visibilityChanged( bool ) ), projectTree, SLOT( treeVisibilityChanged( bool ) ) );
connect( projectTree, SIGNAL( selectionChanged() ), this, SLOT( selectedObjectsChanged() ) );
projectTree->treeView()->setContextMenuPolicy( Qt::CustomContextMenu );
@ -794,129 +792,102 @@ void RiuMainWindow::createDockPanels()
projectTree->setUiConfigurationName( treeViewConfigs[i] );
}
QDockWidget* resultPlotDock = nullptr;
QDockWidget* relPermPlotDock = nullptr;
QDockWidget* pvtPlotDock = nullptr;
#ifdef USE_ODB_API
QDockWidget* mohrsCirclePlotDock = nullptr;
#endif
// undo/redo view
if ( m_undoView && RiaPreferences::current()->useUndoRedo() )
{
ads::CDockWidget* dockWidget = new ads::CDockWidget( "Undo Stack", this );
dockWidget->setObjectName( RiuDockWidgetTools::undoStackName() );
dockWidget->setWidget( m_undoView );
rightWidgets.push_back( dockWidget );
}
{
QDockWidget* dockWidget = new QDockWidget( "Property Editor", this );
ads::CDockWidget* dockWidget = new ads::CDockWidget( "Result Plot", this );
dockWidget->setObjectName( RiuDockWidgetTools::resultPlotName() );
m_resultQwtPlot = new RiuResultQwtPlot( dockWidget );
dockWidget->setWidget( m_resultQwtPlot );
bottomWidgets.push_back( dockWidget );
}
ads::CDockAreaWidget* leftArea = addTabbedWidgets( leftWidgets, ads::DockWidgetArea::LeftDockWidgetArea );
ads::CDockAreaWidget* rightArea = addTabbedWidgets( rightWidgets, ads::DockWidgetArea::RightDockWidgetArea );
ads::CDockAreaWidget* bottomArea = addTabbedWidgets( bottomWidgets,
ads::DockWidgetArea::BottomDockWidgetArea,
dockManager()->centralWidget()->dockAreaWidget() );
{
ads::CDockWidget* dockWidget = new ads::CDockWidget( "Property Editor", this );
dockWidget->setObjectName( RiuDockWidgetTools::propertyEditorName() );
dockWidget->setAllowedAreas( Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea );
m_pdmUiPropertyView = new caf::PdmUiPropertyView( dockWidget );
dockWidget->setWidget( m_pdmUiPropertyView );
addDockWidget( Qt::LeftDockWidgetArea, dockWidget );
}
{
QDockWidget* dockWidget = new QDockWidget( "Result Info", this );
dockWidget->setObjectName( RiuDockWidgetTools::resultInfoName() );
dockWidget->setAllowedAreas( Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::BottomDockWidgetArea );
m_resultInfoPanel = new RiuResultInfoPanel( dockWidget );
dockWidget->setWidget( m_resultInfoPanel );
addDockWidget( Qt::BottomDockWidgetArea, dockWidget );
}
{
QDockWidget* dockWidget = new QDockWidget( "Process Monitor", this );
dockWidget->setObjectName( RiuDockWidgetTools::processMonitorName() );
dockWidget->setAllowedAreas( Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::BottomDockWidgetArea );
m_processMonitor = new RiuProcessMonitor( dockWidget );
dockWidget->setWidget( m_processMonitor );
addDockWidget( Qt::BottomDockWidgetArea, dockWidget );
dockWidget->hide();
}
{
QDockWidget* dockWidget = new QDockWidget( "Result Plot", this );
dockWidget->setObjectName( RiuDockWidgetTools::resultPlotName() );
dockWidget->setAllowedAreas( Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::BottomDockWidgetArea );
m_resultQwtPlot = new RiuResultQwtPlot( dockWidget );
dockWidget->setWidget( m_resultQwtPlot );
addDockWidget( Qt::BottomDockWidgetArea, dockWidget );
resultPlotDock = dockWidget;
dockManager()->addDockWidget( ads::DockWidgetArea::BottomDockWidgetArea, dockWidget, leftArea );
}
#ifdef USE_ODB_API
{
QDockWidget* dockWidget = new QDockWidget( "Mohr's Circle Plot", this );
ads::CDockWidget* dockWidget = new ads::CDockWidget( "Mohr's Circle Plot", this );
dockWidget->setObjectName( RiuDockWidgetTools::mohrsCirclePlotName() );
dockWidget->setAllowedAreas( Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::BottomDockWidgetArea );
m_mohrsCirclePlot = new RiuMohrsCirclePlot( dockWidget );
dockWidget->setWidget( m_mohrsCirclePlot );
addDockWidget( Qt::BottomDockWidgetArea, dockWidget );
mohrsCirclePlotDock = dockWidget;
dockWidget->hide();
dockManager()->addDockWidgetTabToArea( dockWidget, bottomArea );
}
#endif
{
QDockWidget* dockWidget = new QDockWidget( "Relative Permeability Plot", this );
ads::CDockWidget* dockWidget = new ads::CDockWidget( "Relative Permeability Plot", this );
dockWidget->setObjectName( RiuDockWidgetTools::relPermPlotName() );
dockWidget->setAllowedAreas( Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::BottomDockWidgetArea );
m_relPermPlotPanel = new RiuRelativePermeabilityPlotPanel( dockWidget );
dockWidget->setWidget( m_relPermPlotPanel );
addDockWidget( Qt::BottomDockWidgetArea, dockWidget );
relPermPlotDock = dockWidget;
dockManager()->addDockWidgetTabToArea( dockWidget, bottomArea );
}
{
QDockWidget* dockWidget = new QDockWidget( "PVT Plot", this );
ads::CDockWidget* dockWidget = new ads::CDockWidget( "PVT Plot", this );
dockWidget->setObjectName( RiuDockWidgetTools::pvtPlotName() );
dockWidget->setAllowedAreas( Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::BottomDockWidgetArea );
m_pvtPlotPanel = new RiuPvtPlotPanel( dockWidget );
dockWidget->setWidget( m_pvtPlotPanel );
dockManager()->addDockWidgetTabToArea( dockWidget, bottomArea );
}
addDockWidget( Qt::BottomDockWidgetArea, dockWidget );
pvtPlotDock = dockWidget;
// result info
{
ads::CDockWidget* dockWidget = new ads::CDockWidget( "Result Info", this );
dockWidget->setObjectName( RiuDockWidgetTools::resultInfoName() );
m_resultInfoPanel = new RiuResultInfoPanel( dockWidget );
dockWidget->setWidget( m_resultInfoPanel );
dockManager()->addDockWidget( ads::DockWidgetArea::LeftDockWidgetArea, dockWidget, bottomArea );
}
ads::CDockAreaWidget* procAndMsgTabs = nullptr;
// process monitor
{
ads::CDockWidget* dockWidget = new ads::CDockWidget( "Process Monitor", this );
dockWidget->setObjectName( RiuDockWidgetTools::processMonitorName() );
m_processMonitor = new RiuProcessMonitor( dockWidget );
dockWidget->setWidget( m_processMonitor );
procAndMsgTabs = dockManager()->addDockWidget( ads::DockWidgetArea::RightDockWidgetArea, dockWidget, bottomArea );
}
{
QDockWidget* dockWidget = new QDockWidget( "Messages", this );
ads::CDockWidget* dockWidget = new ads::CDockWidget( "Messages", this );
dockWidget->setObjectName( RiuDockWidgetTools::messagesName() );
m_messagePanel = new RiuMessagePanel( dockWidget );
dockWidget->setWidget( m_messagePanel );
addDockWidget( Qt::BottomDockWidgetArea, dockWidget );
dockWidget->hide();
dockManager()->addDockWidgetTabToArea( dockWidget, procAndMsgTabs );
}
if ( m_undoView && RiaPreferences::current()->useUndoRedo() )
{
QDockWidget* dockWidget = new QDockWidget( "Undo Stack", this );
dockWidget->setObjectName( RiuDockWidgetTools::undoStackName() );
dockWidget->setAllowedAreas( Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea );
dockWidget->setWidget( m_undoView );
if ( leftArea ) leftArea->setCurrentIndex( 0 );
if ( rightArea ) rightArea->setCurrentIndex( 0 );
if ( bottomArea ) bottomArea->setCurrentIndex( 0 );
addDockWidget( Qt::RightDockWidgetArea, dockWidget );
dockWidget->hide();
}
setCorner( Qt::BottomLeftCorner, Qt::LeftDockWidgetArea );
setCorner( Qt::BottomRightCorner, Qt::BottomDockWidgetArea );
// Tabify docks
tabifyDockWidget( pvtPlotDock, relPermPlotDock );
#ifdef USE_ODB_API
tabifyDockWidget( relPermPlotDock, mohrsCirclePlotDock );
tabifyDockWidget( mohrsCirclePlotDock, resultPlotDock );
#else
tabifyDockWidget( relPermPlotDock, resultPlotDock );
#endif
QList<QDockWidget*> dockWidgets = findChildren<QDockWidget*>();
for ( QDockWidget* dock : dockWidgets )
auto widgets = dockManager()->dockWidgetsMap().values();
std::reverse( widgets.begin(), widgets.end() );
for ( ads::CDockWidget* dock : widgets )
{
connect( dock->toggleViewAction(), SIGNAL( triggered() ), SLOT( slotDockWidgetToggleViewActionTriggered() ) );
dock->setVisible( true );
dock->raise();
}
}
@ -1423,22 +1394,6 @@ RiuProcessMonitor* RiuMainWindow::processMonitor()
return m_processMonitor;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void appendToggleActionForDockingWidget( QMenu* menu, QWidget* parent, const QString& dockWidgetName )
{
if ( menu )
{
QAction* action = RiuDockWidgetTools::toggleActionForWidget( parent, dockWidgetName );
if ( action )
{
// Some dock windows are depending on configuration (mohrs circle plot), so do not assert they exist
menu->addAction( action );
}
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@ -1451,38 +1406,10 @@ void RiuMainWindow::slotBuildWindowActions()
m_windowMenu->addAction( cmdFeatureMgr->action( "RicShowPlotWindowFeature" ) );
m_windowMenu->addSeparator();
m_windowMenu->addAction( cmdFeatureMgr->action( "RicDefaultDockConfigEclipseFeature" ) );
#ifdef USE_ODB_API
m_windowMenu->addAction( cmdFeatureMgr->action( "RicDefaultDockConfigGeoMechFeature" ) );
#endif
m_windowMenu->addSeparator();
}
appendToggleActionForDockingWidget( m_windowMenu, this, RiuDockWidgetTools::projectTreeName() );
appendToggleActionForDockingWidget( m_windowMenu, this, RiuDockWidgetTools::propertyEditorName() );
appendToggleActionForDockingWidget( m_windowMenu, this, RiuDockWidgetTools::messagesName() );
appendToggleActionForDockingWidget( m_windowMenu, this, RiuDockWidgetTools::processMonitorName() );
appendToggleActionForDockingWidget( m_windowMenu, this, RiuDockWidgetTools::undoStackName() );
m_windowMenu->addSeparator();
appendToggleActionForDockingWidget( m_windowMenu, this, RiuDockWidgetTools::resultInfoName() );
appendToggleActionForDockingWidget( m_windowMenu, this, RiuDockWidgetTools::resultPlotName() );
appendToggleActionForDockingWidget( m_windowMenu, this, RiuDockWidgetTools::relPermPlotName() );
appendToggleActionForDockingWidget( m_windowMenu, this, RiuDockWidgetTools::pvtPlotName() );
appendToggleActionForDockingWidget( m_windowMenu, this, RiuDockWidgetTools::mohrsCirclePlotName() );
m_windowMenu->addSeparator();
QAction* cascadeWindowsAction = new QAction( "Cascade Windows", this );
cascadeWindowsAction->setIcon( QIcon( ":/CascadeWindows.svg" ) );
connect( cascadeWindowsAction, SIGNAL( triggered() ), m_mdiArea, SLOT( cascadeSubWindows() ) );
QAction* closeAllSubWindowsAction = new QAction( "Close All Windows", this );
connect( closeAllSubWindowsAction, SIGNAL( triggered() ), m_mdiArea, SLOT( closeAllSubWindows() ) );
m_windowMenu->addAction( caf::CmdFeatureManager::instance()->action( "RicTileWindowsFeature" ) );
m_windowMenu->addAction( cascadeWindowsAction );
m_windowMenu->addAction( closeAllSubWindowsAction );
addDefaultEntriesToWindowsMenu();
m_windowMenu->addSeparator();
m_windowMenu->addAction( m_newPropertyView );
@ -1565,16 +1492,15 @@ void RiuMainWindow::selectedObjectsChanged()
//--------------------------------------------------------------------------------------------------
void RiuMainWindow::slotNewObjectPropertyView()
{
QDockWidget* dockWidget =
new QDockWidget( QString( "Additional Project Tree (%1)" ).arg( m_additionalProjectViews.size() + 1 ), this );
dockWidget->setObjectName( "dockWidget" );
dockWidget->setAllowedAreas( Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea );
ads::CDockWidget* dockWidget =
new ads::CDockWidget( QString( "Additional Project Tree (%1)" ).arg( m_additionalProjectViews.size() + 1 ), this );
dockWidget->setObjectName( "AdditionalDockWidget" );
RiuProjectAndPropertyView* projPropView = new RiuProjectAndPropertyView( dockWidget );
dockWidget->setWidget( projPropView );
projPropView->setPdmItem( m_pdmRoot );
addDockWidget( Qt::RightDockWidgetArea, dockWidget );
dockManager()->addDockWidget( ads::DockWidgetArea::RightDockWidgetArea, dockWidget );
m_additionalProjectViews.push_back( dockWidget );
}
@ -1835,7 +1761,7 @@ void RiuMainWindow::updateMemoryUsage()
//--------------------------------------------------------------------------------------------------
void RiuMainWindow::showProcessMonitorDockPanel()
{
RiuDockWidgetTools::setDockWidgetVisibility( this, RiuDockWidgetTools::processMonitorName(), true );
RiuDockWidgetTools::setDockWidgetVisibility( this->dockManager(), RiuDockWidgetTools::processMonitorName(), true );
}
//--------------------------------------------------------------------------------------------------

View File

@ -28,6 +28,7 @@
#include <QEvent>
#include <QLabel>
#include <QPointer>
#include <QString>
#include <memory>
#include <vector>
@ -69,6 +70,11 @@ namespace ssihub
class Interface;
}
namespace ads
{
class CDockWidget;
};
//==================================================================================================
//
//
@ -171,7 +177,6 @@ private:
caf::AnimationToolBar* m_animationToolBar;
RiuMdiArea* m_mdiArea;
RiuResultInfoPanel* m_resultInfoPanel;
RiuProcessMonitor* m_processMonitor;
QPointer<RiuMessagePanel> m_messagePanel;
@ -182,7 +187,6 @@ private:
RiuPvtPlotPanel* m_pvtPlotPanel;
std::unique_ptr<RicGridCalculatorDialog> m_gridCalculatorDialog;
QMenu* m_windowMenu;
QLabel* m_memoryCriticalWarning;
QToolButton* m_memoryUsedButton;
QLabel* m_memoryTotalStatus;
@ -269,5 +273,5 @@ private:
QToolBar* m_holoLensToolBar;
std::vector<QPointer<QDockWidget>> m_additionalProjectViews;
std::vector<QPointer<ads::CDockWidget>> m_additionalProjectViews;
};

View File

@ -25,6 +25,7 @@
#include "RiuDockWidgetTools.h"
#include "RiuDragDrop.h"
#include "RiuMdiArea.h"
#include "RiuMdiSubWindow.h"
#include "RimProject.h"
@ -35,10 +36,14 @@
#include "cafPdmUiTreeView.h"
#include "cafQTreeViewStateSerializer.h"
#include "DockWidget.h"
#include <QAction>
#include <QDockWidget>
#include <QInputDialog>
#include <QMdiArea>
#include <QMdiSubWindow>
#include <QMenu>
#include <QMessageBox>
#include <QSettings>
#include <QTreeView>
#include <QUndoStack>
@ -52,8 +57,10 @@ RiuMainWindowBase::RiuMainWindowBase()
, m_showFirstVisibleWindowMaximized( true )
, m_blockSubWindowActivation( false )
, m_blockSubWindowProjectTreeSelection( false )
, m_windowMenu( nullptr )
, m_mdiArea( nullptr )
{
setDockNestingEnabled( true );
m_dockManager = new ads::CDockManager( this );
if ( RiaPreferences::current()->useUndoRedo() && RiaApplication::enableDevelopmentFeatures() )
{
@ -86,6 +93,14 @@ RiuMainWindowBase::~RiuMainWindowBase()
m_projectTreeViews.clear();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
ads::CDockManager* RiuMainWindowBase::dockManager() const
{
return m_dockManager;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@ -122,8 +137,9 @@ void RiuMainWindowBase::loadWinGeoAndDockToolBarLayout()
// Company and appname set through QCoreApplication
QSettings settings;
QVariant winGeo = settings.value( QString( "%1/winGeometry" ).arg( registryFolderName() ) );
QVariant layout = settings.value( QString( "%1/dockAndToolBarLayout" ).arg( registryFolderName() ) );
QVariant winGeo = settings.value( QString( "%1/winGeometry" ).arg( registryFolderName() ) );
QVariant layout = settings.value( QString( "%1/toolBarLayout" ).arg( registryFolderName() ) );
QVariant dockState = settings.value( QString( "%1/dockLayout" ).arg( registryFolderName() ) );
if ( winGeo.isValid() )
{
@ -135,6 +151,13 @@ void RiuMainWindowBase::loadWinGeoAndDockToolBarLayout()
}
}
}
if ( dockState.isValid() )
{
m_dockManager->restoreState( dockState.toByteArray(), 1 );
}
settings.beginGroup( registryFolderName() );
m_dockManager->loadPerspectives( settings );
restoreDockWidgetVisibilities();
}
@ -161,13 +184,15 @@ void RiuMainWindowBase::saveWinGeoAndDockToolBarLayout()
settings.setValue( QString( "%1/winGeometry" ).arg( registryFolderName() ), winGeo );
QByteArray layout = saveState( 0 );
settings.setValue( QString( "%1/dockAndToolBarLayout" ).arg( registryFolderName() ), layout );
settings.setValue( QString( "%1/toolBarLayout" ).arg( registryFolderName() ), layout );
settings.setValue( QString( "%1/isMaximized" ).arg( registryFolderName() ), isMaximized() );
settings.setValue( QString( "%1/dockLayout" ).arg( registryFolderName() ), m_dockManager->saveState( 1 ) );
if ( this->isVisible() )
{
QVariant dockWindowVisibilities = RiuDockWidgetTools::dockWidgetsVisibility( this );
QVariant dockWindowVisibilities = RiuDockWidgetTools::dockWidgetsVisibility( this->dockManager() );
QString key = mainWindowDockWidgetSettingsKey( registryFolderName() );
settings.setValue( key, dockWindowVisibilities );
@ -201,7 +226,7 @@ void RiuMainWindowBase::restoreDockWidgetVisibilities()
QString key = mainWindowDockWidgetSettingsKey( registryFolderName() );
QVariant dockWindowVisibilities = settings.value( key );
RiuDockWidgetTools::applyDockWidgetVisibilities( this, dockWindowVisibilities.toMap() );
RiuDockWidgetTools::applyDockWidgetVisibilities( this->dockManager(), dockWindowVisibilities.toMap() );
}
//--------------------------------------------------------------------------------------------------
@ -226,9 +251,7 @@ void RiuMainWindowBase::showWindow()
//--------------------------------------------------------------------------------------------------
void RiuMainWindowBase::hideAllDockWidgets()
{
QList<QDockWidget*> dockWidgets = findChildren<QDockWidget*>();
for ( QDockWidget* dock : dockWidgets )
for ( auto dock : dockManager()->dockWidgetsMap() )
{
if ( dock )
{
@ -258,7 +281,7 @@ void RiuMainWindowBase::selectAsCurrentItem( const caf::PdmObject* object, bool
if ( tv )
{
tv->selectAsCurrentItem( object );
QDockWidget* dw = dynamic_cast<QDockWidget*>( tv->parentWidget() );
ads::CDockWidget* dw = dynamic_cast<ads::CDockWidget*>( tv->parentWidget() );
if ( dw )
{
dw->show();
@ -405,7 +428,7 @@ void RiuMainWindowBase::slotDockWidgetToggleViewActionTriggered()
{
if ( !sender() ) return;
auto dockWidget = dynamic_cast<QDockWidget*>( sender()->parent() );
auto dockWidget = dynamic_cast<ads::CDockWidget*>( sender()->parent() );
if ( dockWidget )
{
if ( dockWidget->isVisible() )
@ -585,3 +608,125 @@ void RiuMainWindowBase::restoreTreeViewStates( QString treeStateString, QString
}
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
ads::CDockAreaWidget* RiuMainWindowBase::addTabbedWidgets( std::vector<ads::CDockWidget*> widgets,
ads::DockWidgetArea whereToDock,
ads::CDockAreaWidget* dockInside )
{
ads::CDockAreaWidget* areaToDockIn = nullptr;
for ( auto widget : widgets )
{
if ( areaToDockIn )
{
m_dockManager->addDockWidgetTabToArea( widget, areaToDockIn );
}
else
{
areaToDockIn = m_dockManager->addDockWidget( whereToDock, widget, dockInside );
}
}
return areaToDockIn;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuMainWindowBase::setDockLayout()
{
QAction* action = dynamic_cast<QAction*>( this->sender() );
if ( action )
{
QString layoutName = action->text();
dockManager()->openPerspective( layoutName );
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuMainWindowBase::deleteDockLayout()
{
QAction* action = dynamic_cast<QAction*>( this->sender() );
if ( action )
{
QString name = action->text();
QString questionStr = "Are you sure you want to delete the window layout \"" + name + "\"?";
auto reply = QMessageBox::question( this,
"Delete Window Layout",
questionStr,
QMessageBox::Yes | QMessageBox::No,
QMessageBox::No );
if ( reply == QMessageBox::Yes )
{
dockManager()->removePerspective( name );
QSettings settings;
settings.beginGroup( registryFolderName() );
dockManager()->savePerspectives( settings );
}
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuMainWindowBase::saveDockLayout()
{
bool ok = false;
QString name =
QInputDialog::getText( this, "Save Window Layout", "Give the window layout a name:", QLineEdit::Normal, "", &ok );
if ( ok && !name.isEmpty() )
{
dockManager()->addPerspective( name );
QSettings settings;
settings.beginGroup( registryFolderName() );
dockManager()->savePerspectives( settings );
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuMainWindowBase::addDefaultEntriesToWindowsMenu()
{
QMenu* showHideMenu = m_windowMenu->addMenu( "Show/Hide Windows" );
for ( auto dock : dockManager()->dockWidgetsMap() )
{
showHideMenu->addAction( dock->toggleViewAction() );
}
m_windowMenu->addSeparator();
QAction* saveLayoutAction = m_windowMenu->addAction( "Save Window Layout..." );
connect( saveLayoutAction, SIGNAL( triggered() ), this, SLOT( saveDockLayout() ) );
QStringList names = dockManager()->perspectiveNames();
if ( names.size() > 0 )
{
QMenu* layoutsMenu = m_windowMenu->addMenu( "Use Window Layout" );
QMenu* deleteLayoutMenu = m_windowMenu->addMenu( "Delete Window Layout" );
for ( auto& layout : names )
{
QAction* chooseLayoutAction = layoutsMenu->addAction( layout );
connect( chooseLayoutAction, SIGNAL( triggered() ), this, SLOT( setDockLayout() ) );
QAction* deleteLayoutAction = deleteLayoutMenu->addAction( layout );
connect( deleteLayoutAction, SIGNAL( triggered() ), this, SLOT( deleteDockLayout() ) );
}
}
m_windowMenu->addSeparator();
QAction* cascadeWindowsAction = new QAction( "Cascade Windows", this );
connect( cascadeWindowsAction, SIGNAL( triggered() ), m_mdiArea, SLOT( cascadeSubWindows() ) );
QAction* closeAllSubWindowsAction = new QAction( "Close All Windows", this );
connect( closeAllSubWindowsAction, SIGNAL( triggered() ), m_mdiArea, SLOT( closeAllSubWindows() ) );
m_windowMenu->addAction( caf::CmdFeatureManager::instance()->action( "RicTilePlotWindowsFeature" ) );
m_windowMenu->addAction( cascadeWindowsAction );
m_windowMenu->addAction( closeAllSubWindowsAction );
}

View File

@ -22,12 +22,16 @@
#include "cafPdmUiDragDropInterface.h"
#include "DockManager.h"
#include <memory>
#include <vector>
class QMdiArea;
struct RimMdiWindowGeometry;
class RiuMdiArea;
namespace caf
{
class PdmObject;
@ -47,8 +51,8 @@ class RiuMainWindowBase : public QMainWindow
Q_OBJECT
public:
RiuMainWindowBase();
~RiuMainWindowBase() override;
RiuMainWindowBase();
~RiuMainWindowBase() override;
virtual QString mainWindowName() = 0;
@ -93,6 +97,8 @@ public:
void setBlockViewSelectionOnSubWindowActivated( bool block );
bool isBlockingViewSelectionOnSubWindowActivated() const;
ads::CDockManager* dockManager() const;
protected:
void createTreeViews( int numberOfTrees );
void removeViewerFromMdiArea( QMdiArea* mdiArea, QWidget* viewer );
@ -103,6 +109,12 @@ protected:
void restoreTreeViewStates( QString treeStateString, QString treeIndexString );
ads::CDockAreaWidget* addTabbedWidgets( std::vector<ads::CDockWidget*> widgets,
ads::DockWidgetArea whereToDock,
ads::CDockAreaWidget* dockInside = nullptr );
void addDefaultEntriesToWindowsMenu();
protected slots:
void slotDockWidgetToggleViewActionTriggered();
void slotRefreshHelpActions();
@ -111,6 +123,10 @@ protected slots:
void slotUndo();
void slotRefreshUndoRedoActions();
void setDockLayout();
void deleteDockLayout();
void saveDockLayout();
protected:
bool m_allowActiveViewChangeFromSelection; // To be used in selectedObjectsChanged() to control
// whether to select the corresponding active view or not
@ -119,6 +135,9 @@ protected:
QAction* m_redoAction;
QUndoView* m_undoView;
RiuMdiArea* m_mdiArea;
QMenu* m_windowMenu;
private:
QString registryFolderName();
@ -129,4 +148,6 @@ private:
bool m_showFirstVisibleWindowMaximized;
bool m_blockSubWindowActivation;
bool m_blockSubWindowProjectTreeSelection;
ads::CDockManager* m_dockManager;
};

View File

@ -22,7 +22,8 @@
#include "RiuGuiTheme.h"
#include <QDockWidget>
#include "DockWidget.h"
#include <QMenu>
#include <QPlainTextEdit>
#include <QThread>
@ -37,7 +38,7 @@
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RiuMessagePanel::RiuMessagePanel( QDockWidget* parent )
RiuMessagePanel::RiuMessagePanel( QWidget* parent )
: QWidget( parent )
{
QVBoxLayout* layout = new QVBoxLayout( this );
@ -80,7 +81,7 @@ void RiuMessagePanel::addMessage( RILogLevel messageLevel, const QString& msg )
{
if ( messageLevel == RILogLevel::RI_LL_ERROR || messageLevel == RILogLevel::RI_LL_WARNING )
{
QDockWidget* parentDockWidget = dynamic_cast<QDockWidget*>( this->parent() );
ads::CDockWidget* parentDockWidget = dynamic_cast<ads::CDockWidget*>( this->parent() );
if ( parentDockWidget && !parentDockWidget->isVisible() )
{
parentDockWidget->toggleViewAction()->trigger();
@ -104,7 +105,7 @@ void RiuMessagePanel::slotShowContextMenu( const QPoint& pos )
{
QMenu menu;
// Reworked from implemenmtation in QTextControl::createStandardContextMenu()
// Reworked from implementation in QTextControl::createStandardContextMenu()
{
QAction* a = menu.addAction( "&Copy", m_textEdit, SLOT( copy() ), QKeySequence::Copy );
a->setEnabled( m_textEdit->textCursor().hasSelection() );
@ -211,7 +212,7 @@ void RiuMessagePanelLogger::writeToMessagePanel( RILogLevel messageLevel, const
return;
}
for ( auto panel : m_messagePanel )
for ( auto& panel : m_messagePanel )
{
if ( panel )
{

View File

@ -23,7 +23,6 @@
#include <QPointer>
#include <QWidget>
class QDockWidget;
class QPlainTextEdit;
//==================================================================================================
@ -36,7 +35,7 @@ class RiuMessagePanel : public QWidget
Q_OBJECT
public:
explicit RiuMessagePanel( QDockWidget* parent );
explicit RiuMessagePanel( QWidget* parent );
void addMessage( RILogLevel messageLevel, const QString& msg );
QSize sizeHint() const override;

View File

@ -65,11 +65,14 @@
#include "cafPdmUiTreeView.h"
#include "cafSelectionManager.h"
#include "DockAreaWidget.h"
#include <QCloseEvent>
#include <QDockWidget>
#include <QLayout>
#include <QMdiSubWindow>
#include <QMenuBar>
#include <QMessageBox>
#include <QSettings>
#include <QToolBar>
#include <QTreeView>
#include <QUndoStack>
@ -80,11 +83,14 @@
//--------------------------------------------------------------------------------------------------
RiuPlotMainWindow::RiuPlotMainWindow()
: m_activePlotViewWindow( nullptr )
, m_windowMenu( nullptr )
{
m_mdiArea = new RiuMdiArea( this );
connect( m_mdiArea, SIGNAL( subWindowActivated( QMdiSubWindow* ) ), SLOT( slotSubWindowActivated( QMdiSubWindow* ) ) );
setCentralWidget( m_mdiArea );
ads::CDockWidget* widget = new ads::CDockWidget( "Plots", this );
widget->setWidget( m_mdiArea );
auto dockArea = dockManager()->setCentralWidget( widget );
dockArea->setVisible( true );
createMenus();
createToolBars();
@ -483,21 +489,22 @@ void RiuPlotMainWindow::createDockPanels()
RiuDockWidgetTools::plotMainWindowTemplateTreeName(),
RiuDockWidgetTools::plotMainWindowScriptsTreeName() };
const std::vector<Qt::DockWidgetArea> defaultDockWidgetArea{ Qt::LeftDockWidgetArea,
Qt::RightDockWidgetArea,
Qt::LeftDockWidgetArea,
Qt::LeftDockWidgetArea };
const std::vector<ads::DockWidgetArea> defaultDockWidgetArea{ ads::DockWidgetArea::LeftDockWidgetArea,
ads::DockWidgetArea::RightDockWidgetArea,
ads::DockWidgetArea::LeftDockWidgetArea,
ads::DockWidgetArea::LeftDockWidgetArea };
createTreeViews( nTreeViews );
std::vector<QDockWidget*> rightTabbedWidgets;
std::vector<QDockWidget*> leftTabbedWidgets;
std::vector<ads::CDockWidget*> rightWidgets;
std::vector<ads::CDockWidget*> leftWidgets;
std::vector<ads::CDockWidget*> bottomWidgets;
// the project trees
for ( int i = 0; i < nTreeViews; i++ )
{
QDockWidget* dockWidget = new QDockWidget( treeViewTitles[i], this );
ads::CDockWidget* dockWidget = new ads::CDockWidget( treeViewTitles[i], this );
dockWidget->setObjectName( treeViewDockNames[i] );
dockWidget->setAllowedAreas( Qt::AllDockWidgetAreas );
caf::PdmUiTreeView* projectTree = projectTreeView( i );
projectTree->enableSelectionManagerUpdating( true );
@ -519,10 +526,9 @@ void RiuPlotMainWindow::createDockPanels()
RiuTreeViewEventFilter* treeViewEventFilter = new RiuTreeViewEventFilter( this, projectTree );
projectTree->treeView()->installEventFilter( treeViewEventFilter );
addDockWidget( defaultDockWidgetArea[i], dockWidget );
if ( defaultDockWidgetArea[i] == Qt::LeftDockWidgetArea ) leftTabbedWidgets.push_back( dockWidget );
if ( defaultDockWidgetArea[i] == Qt::RightDockWidgetArea ) rightTabbedWidgets.push_back( dockWidget );
if ( defaultDockWidgetArea[i] == ads::DockWidgetArea::LeftDockWidgetArea ) leftWidgets.push_back( dockWidget );
if ( defaultDockWidgetArea[i] == ads::DockWidgetArea::RightDockWidgetArea )
rightWidgets.push_back( dockWidget );
connect( dockWidget, SIGNAL( visibilityChanged( bool ) ), projectTree, SLOT( treeVisibilityChanged( bool ) ) );
connect( projectTree, SIGNAL( selectionChanged() ), this, SLOT( selectedObjectsChanged() ) );
@ -535,28 +541,9 @@ void RiuPlotMainWindow::createDockPanels()
projectTree->setUiConfigurationName( treeViewConfigs[i] );
}
// the plot manager
{
QDockWidget* dockWidget = new QDockWidget( "Property Editor", this );
dockWidget->setObjectName( RiuDockWidgetTools::plotMainWindowPropertyEditorName() );
dockWidget->setAllowedAreas( Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea );
m_pdmUiPropertyView = std::make_unique<caf::PdmUiPropertyView>( dockWidget );
dockWidget->setWidget( m_pdmUiPropertyView.get() );
addDockWidget( Qt::LeftDockWidgetArea, dockWidget );
}
{
QDockWidget* dockWidget = new QDockWidget( "Messages", this );
dockWidget->setObjectName( RiuDockWidgetTools::plotMainWindowMessagesName() );
m_messagePanel = new RiuMessagePanel( dockWidget );
dockWidget->setWidget( m_messagePanel );
splitDockWidget( rightTabbedWidgets.front(), dockWidget, Qt::Vertical );
dockWidget->hide();
}
{
QDockWidget* dockWidget = new QDockWidget( "Plot Manager", this );
ads::CDockWidget* dockWidget = new ads::CDockWidget( "Plot Manager", this );
dockWidget->setObjectName( RiuDockWidgetTools::summaryPlotManagerName() );
m_summaryPlotManagerView = std::make_unique<caf::PdmUiPropertyView>( dockWidget );
@ -567,54 +554,56 @@ void RiuPlotMainWindow::createDockPanels()
m_summaryPlotManager = std::move( plotManager );
dockWidget->setWidget( m_summaryPlotManagerView.get() );
addDockWidget( Qt::RightDockWidgetArea, dockWidget );
rightTabbedWidgets.push_back( dockWidget );
dockWidget->hide();
rightWidgets.push_back( dockWidget );
}
// the undo stack
if ( m_undoView && RiaPreferences::current()->useUndoRedo() )
{
QDockWidget* dockWidget = new QDockWidget( "Undo Stack", this );
ads::CDockWidget* dockWidget = new ads::CDockWidget( "Undo Stack", this );
dockWidget->setObjectName( RiuDockWidgetTools::plotMainWindowUndoStackName() );
dockWidget->setAllowedAreas( Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea );
dockWidget->setWidget( m_undoView );
addDockWidget( Qt::RightDockWidgetArea, dockWidget );
rightTabbedWidgets.push_back( dockWidget );
dockWidget->hide();
rightWidgets.push_back( dockWidget );
}
ads::CDockAreaWidget* leftArea = addTabbedWidgets( leftWidgets, ads::DockWidgetArea::LeftDockWidgetArea );
ads::CDockAreaWidget* rightArea = addTabbedWidgets( rightWidgets, ads::DockWidgetArea::RightDockWidgetArea );
ads::CDockAreaWidget* bottomArea = addTabbedWidgets( bottomWidgets,
ads::DockWidgetArea::BottomDockWidgetArea,
dockManager()->centralWidget()->dockAreaWidget() );
// the property editor
{
QDockWidget* topDock = nullptr;
for ( auto d : leftTabbedWidgets )
{
if ( !topDock )
topDock = d;
else
tabifyDockWidget( topDock, d );
}
ads::CDockWidget* dockWidget = new ads::CDockWidget( "Property Editor", this );
dockWidget->setObjectName( RiuDockWidgetTools::plotMainWindowPropertyEditorName() );
m_pdmUiPropertyView = std::make_unique<caf::PdmUiPropertyView>( dockWidget );
dockWidget->setWidget( m_pdmUiPropertyView.get() );
dockManager()->addDockWidget( ads::DockWidgetArea::BottomDockWidgetArea, dockWidget, leftArea );
}
// the log message view
{
QDockWidget* topDock = nullptr;
for ( auto d : rightTabbedWidgets )
{
if ( !topDock )
topDock = d;
else
tabifyDockWidget( topDock, d );
}
ads::CDockWidget* dockWidget = new ads::CDockWidget( "Messages", this );
dockWidget->setObjectName( RiuDockWidgetTools::plotMainWindowMessagesName() );
m_messagePanel = new RiuMessagePanel( dockWidget );
dockWidget->setWidget( m_messagePanel );
dockManager()->addDockWidget( ads::DockWidgetArea::BottomDockWidgetArea, dockWidget, rightArea );
}
setCorner( Qt::BottomLeftCorner, Qt::LeftDockWidgetArea );
setCorner( Qt::BottomRightCorner, Qt::BottomDockWidgetArea );
if ( leftArea ) leftArea->setCurrentIndex( 0 );
if ( rightArea ) rightArea->setCurrentIndex( 0 );
if ( bottomArea ) bottomArea->setCurrentIndex( 0 );
QList<QDockWidget*> dockWidgets = findChildren<QDockWidget*>();
for ( QDockWidget* dock : dockWidgets )
auto widgets = dockManager()->dockWidgetsMap().values();
std::reverse( widgets.begin(), widgets.end() );
for ( ads::CDockWidget* dock : widgets )
{
connect( dock->toggleViewAction(), SIGNAL( triggered() ), SLOT( slotDockWidgetToggleViewActionTriggered() ) );
dock->setVisible( true );
dock->raise();
}
}
@ -799,7 +788,8 @@ RiuMessagePanel* RiuPlotMainWindow::messagePanel()
//--------------------------------------------------------------------------------------------------
void RiuPlotMainWindow::showAndSetKeyboardFocusToSummaryPlotManager()
{
auto dockWidget = RiuDockWidgetTools::findDockWidget( this, RiuDockWidgetTools::summaryPlotManagerName() );
auto dockWidget =
RiuDockWidgetTools::findDockWidget( this->dockManager(), RiuDockWidgetTools::summaryPlotManagerName() );
if ( dockWidget )
{
dockWidget->setVisible( true );
@ -919,28 +909,11 @@ void RiuPlotMainWindow::slotBuildWindowActions()
{
m_windowMenu->clear();
{
caf::CmdFeatureManager* cmdFeatureMgr = caf::CmdFeatureManager::instance();
m_windowMenu->addAction( cmdFeatureMgr->action( "RicShowMainWindowFeature" ) );
m_windowMenu->addSeparator();
}
QList<QDockWidget*> dockWidgets = findChildren<QDockWidget*>();
for ( QDockWidget* dock : dockWidgets )
{
m_windowMenu->addAction( dock->toggleViewAction() );
}
caf::CmdFeatureManager* cmdFeatureMgr = caf::CmdFeatureManager::instance();
m_windowMenu->addAction( cmdFeatureMgr->action( "RicShowMainWindowFeature" ) );
m_windowMenu->addSeparator();
QAction* cascadeWindowsAction = new QAction( "Cascade Windows", this );
connect( cascadeWindowsAction, SIGNAL( triggered() ), m_mdiArea, SLOT( cascadeSubWindows() ) );
QAction* closeAllSubWindowsAction = new QAction( "Close All Windows", this );
connect( closeAllSubWindowsAction, SIGNAL( triggered() ), m_mdiArea, SLOT( closeAllSubWindows() ) );
m_windowMenu->addAction( caf::CmdFeatureManager::instance()->action( "RicTilePlotWindowsFeature" ) );
m_windowMenu->addAction( cascadeWindowsAction );
m_windowMenu->addAction( closeAllSubWindowsAction );
addDefaultEntriesToWindowsMenu();
}
//--------------------------------------------------------------------------------------------------

View File

@ -24,6 +24,7 @@
#include "cafPdmPointer.h"
#include <QPointer>
#include <QString>
#include <memory>
@ -128,12 +129,9 @@ private slots:
private:
QByteArray m_initialDockAndToolbarLayout; // Initial dock window and toolbar layout, used to reset GUI
RiuMdiArea* m_mdiArea;
caf::PdmPointer<RimViewWindow> m_activePlotViewWindow;
QPointer<RiuMessagePanel> m_messagePanel;
QMenu* m_windowMenu;
std::unique_ptr<caf::PdmUiToolBarEditor> m_wellLogPlotToolBarEditor;
std::unique_ptr<caf::PdmUiToolBarEditor> m_multiPlotToolBarEditor;
std::unique_ptr<caf::PdmUiToolBarEditor> m_multiPlotLayoutToolBarEditor;

View File

@ -35,7 +35,7 @@
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RiuProcessMonitor::RiuProcessMonitor( QDockWidget* pParent )
RiuProcessMonitor::RiuProcessMonitor( QWidget* pParent )
: QWidget( pParent )
{
m_monitoredProcess = nullptr;

View File

@ -20,7 +20,6 @@
#include <QWidget>
class QDockWidget;
class QLabel;
class QPlainTextEdit;
class QPushButton;
@ -45,7 +44,7 @@ private:
caf::UiProcess* m_monitoredProcess; // Pointer to the process we're monitoring. Needed to fetch text
public:
explicit RiuProcessMonitor( QDockWidget* pParent );
explicit RiuProcessMonitor( QWidget* pParent );
~RiuProcessMonitor() override;
void startMonitorWorkProcess( caf::UiProcess* process );

View File

@ -41,10 +41,10 @@
#include "qwt_text.h"
#include <QComboBox>
#include <QDockWidget>
#include <QHBoxLayout>
#include <QLabel>
#include <QVBoxLayout>
#include <QWidget>
//==================================================================================================
//
@ -511,7 +511,7 @@ void RiuPvtPlotWidget::slotPickerActivated( bool on )
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RiuPvtPlotPanel::RiuPvtPlotPanel( QDockWidget* parent )
RiuPvtPlotPanel::RiuPvtPlotPanel( QWidget* parent )
: QWidget( parent )
, m_unitSystem( RiaDefines::EclipseUnitSystem::UNITS_UNKNOWN )
, m_plotUpdater( new RiuPvtPlotUpdater( this ) )

View File

@ -32,7 +32,6 @@ class RiuPvtPlotUpdater;
class RiuPvtQwtPicker;
class RiuPvtPlotPanel;
class QDockWidget;
class QComboBox;
class QLabel;
@ -121,7 +120,7 @@ public:
};
public:
RiuPvtPlotPanel( QDockWidget* parent );
RiuPvtPlotPanel( QWidget* parent );
~RiuPvtPlotPanel() override;
void setPlotData( RiaDefines::EclipseUnitSystem unitSystem,

View File

@ -46,7 +46,6 @@
#include <QButtonGroup>
#include <QCheckBox>
#include <QContextMenuEvent>
#include <QDockWidget>
#include <QGridLayout>
#include <QGroupBox>
#include <QHBoxLayout>
@ -84,7 +83,7 @@ public:
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RiuRelativePermeabilityPlotPanel::RiuRelativePermeabilityPlotPanel( QDockWidget* parent )
RiuRelativePermeabilityPlotPanel::RiuRelativePermeabilityPlotPanel( QWidget* parent )
: QWidget( parent )
, m_unitSystem( RiaDefines::EclipseUnitSystem::UNITS_UNKNOWN )
, m_swat( HUGE_VAL )

View File

@ -28,7 +28,6 @@
class RiuDockedQwtPlot;
class RiuRelativePermeabilityPlotUpdater;
class QDockWidget;
class QButtonGroup;
class QCheckBox;
class QwtPlot;
@ -46,7 +45,7 @@ class RiuRelativePermeabilityPlotPanel : public QWidget
Q_OBJECT
public:
RiuRelativePermeabilityPlotPanel( QDockWidget* parent );
RiuRelativePermeabilityPlotPanel( QWidget* parent );
~RiuRelativePermeabilityPlotPanel() override;
void setPlotData( RiaDefines::EclipseUnitSystem unitSystem,

View File

@ -18,10 +18,8 @@
#include "RiuResultInfoPanel.h"
#include <QDockWidget>
#include <QTextEdit>
#include <QVBoxLayout>
#include <QWidget>
//==================================================================================================
///
@ -35,7 +33,7 @@
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RiuResultInfoPanel::RiuResultInfoPanel( QDockWidget* parent )
RiuResultInfoPanel::RiuResultInfoPanel( QWidget* parent )
: QWidget( parent )
{
m_textEdit = new QTextEdit( this );

View File

@ -20,7 +20,6 @@
#include <QWidget>
class QDockWidget;
class QTextEdit;
//==================================================================================================
@ -33,7 +32,7 @@ class RiuResultInfoPanel : public QWidget
Q_OBJECT
public:
explicit RiuResultInfoPanel( QDockWidget* parent );
explicit RiuResultInfoPanel( QWidget* parent );
void setInfo( const QString& info );

View File

@ -444,15 +444,6 @@ elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
target_compile_options(qwt PRIVATE -Wno-deprecated)
endif()
if(RESINSIGHT_ENABLE_UNITY_BUILD)
message("Cmake Unity build is enabled on : qwt")
set_property(TARGET qwt PROPERTY UNITY_BUILD true)
message("Cmake Unity build is enabled on : custom-opm-flowdiagnostics")
set_property(TARGET custom-opm-flowdiagnostics PROPERTY UNITY_BUILD true)
message("Cmake Unity build is enabled on : custom-opm-common")
set_property(TARGET custom-opm-common PROPERTY UNITY_BUILD true)
endif()
list(APPEND THIRD_PARTY_LIBRARIES qwt)
# ##############################################################################
@ -470,11 +461,6 @@ elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
target_compile_options(qtadvanceddocking PRIVATE -Wno-deprecated)
endif()
if(RESINSIGHT_ENABLE_UNITY_BUILD)
message("Cmake Unity build is enabled on : QtADS")
set_property(TARGET qtadvanceddocking PROPERTY UNITY_BUILD true)
endif()
list(APPEND THIRD_PARTY_LIBRARIES qtadvanceddocking)
# ##############################################################################
@ -519,6 +505,20 @@ list(APPEND THIRD_PARTY_LIBRARIES clipper)
# ##############################################################################
set_property(TARGET ${THIRD_PARTY_LIBRARIES} PROPERTY FOLDER "Thirdparty")
# ##############################################################################
# Unity Build
# ##############################################################################
if(RESINSIGHT_ENABLE_UNITY_BUILD)
message("Cmake Unity build is enabled on : qwt")
set_property(TARGET qwt PROPERTY UNITY_BUILD true)
message("Cmake Unity build is enabled on : custom-opm-flowdiagnostics")
set_property(TARGET custom-opm-flowdiagnostics PROPERTY UNITY_BUILD true)
message("Cmake Unity build is enabled on : custom-opm-common")
set_property(TARGET custom-opm-common PROPERTY UNITY_BUILD true)
message("Cmake Unity build is enabled on : qtadvanceddocking")
set_property(TARGET qtadvanceddocking PROPERTY UNITY_BUILD true)
endif()
# ##############################################################################
# Vizualization Framework
# ##############################################################################

@ -1 +1 @@
Subproject commit 75d58b3ea310a609ecaee695ef8d0f065413bc86
Subproject commit 3d365a0b84e4ae87481e5545c30abd002676812c