///////////////////////////////////////////////////////////////////////////////// // // Copyright (C) 2018- Equinor ASA // // ResInsight is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY // WARRANTY; without even the implied warranty of MERCHANTABILITY or // FITNESS FOR A PARTICULAR PURPOSE. // // See the GNU General Public License at // for more details. // ///////////////////////////////////////////////////////////////////////////////// #include "RiuMainWindowTools.h" #include "RiaGuiApplication.h" #include "RimViewWindow.h" #include "Rim3dView.h" #include "RimCase.h" #include "RimProject.h" #include "RiuInterfaceToViewWindow.h" #include "RiuMainWindow.h" #include "RiuMainWindowBase.h" #include "RiuPlotMainWindow.h" #include "RiuViewer.h" #include "cafPdmUiTreeOrdering.h" #include "cafPdmUiTreeView.h" #include #include #include //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RiuMainWindowTools::collapseSiblings( const caf::PdmUiItem* sourceUiItem ) { if ( !sourceUiItem ) return; if ( !RiaGuiApplication::isRunning() ) return; caf::PdmUiTreeView* sourceTreeView = nullptr; if ( RiuMainWindow::instance() ) { sourceTreeView = RiuMainWindow::instance()->getTreeViewWithItem( sourceUiItem ); } if ( !sourceTreeView ) { RiuPlotMainWindow* mpw = RiaGuiApplication::instance()->mainPlotWindow(); if ( mpw ) { sourceTreeView = mpw->getTreeViewWithItem( sourceUiItem ); } } if ( !sourceTreeView ) return; caf::PdmUiTreeOrdering* sourceTreeOrderingItem = nullptr; QModelIndex modIndex = sourceTreeView->findModelIndex( sourceUiItem ); if ( !modIndex.isValid() ) return; sourceTreeOrderingItem = sourceTreeView->uiTreeOrderingFromModelIndex( modIndex ); if ( sourceTreeOrderingItem == nullptr ) return; if ( sourceTreeOrderingItem && sourceTreeOrderingItem->parent() ) { for ( int i = 0; i < sourceTreeOrderingItem->parent()->childCount(); i++ ) { auto siblingTreeOrderingItem = sourceTreeOrderingItem->parent()->child( i ); if ( siblingTreeOrderingItem != sourceTreeOrderingItem ) { sourceTreeView->setExpanded( siblingTreeOrderingItem->activeItem(), false ); } } } } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RiuMainWindowTools::setWindowSizeOnWidgetsInMdiWindows( RiuMainWindowBase* mainWindow, int width, int height ) { if ( !mainWindow ) return; auto widgets = mainWindow->findChildren(); for ( auto w : widgets ) { if ( !w ) continue; w->showNormal(); } // Process events before resize to make sure the widget is ready for resize // If not, a maximized window with not get the prescribed window size QApplication::processEvents(); for ( auto w : widgets ) { if ( !w ) continue; auto viewWindow = RiuInterfaceToViewWindow::viewWindowFromWidget( w->widget() ); if ( viewWindow && viewWindow->viewWidget() ) { QWidget* viewWidget = viewWindow->viewWidget(); viewWidget->resize( width, height ); } } } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RiuMainWindowTools::setFixedWindowSizeFor3dViews( RiuMainWindowBase* mainWindow, int width, int height ) { if ( !mainWindow ) return; RimProject* proj = RimProject::current(); if ( !proj ) return; std::vector projectCases; proj->allCases( projectCases ); for ( RimCase* cas : projectCases ) { if ( !cas ) continue; std::vector views = cas->views(); for ( Rim3dView* riv : views ) { if ( riv && riv->viewer() ) { // Make sure all views are maximized for snapshotting QMdiSubWindow* subWnd = mainWindow->findMdiSubWindow( riv->viewer()->layoutWidget() ); if ( subWnd ) { subWnd->showMaximized(); } // This size is set to match the regression test reference images QSize windowSize( width, height ); riv->viewer()->setFixedSize( windowSize ); } } } }