diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp index a944c6b618..50aeac9d25 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp @@ -31,12 +31,12 @@ #include "RimSummaryCurve.h" #include "RimSummaryPlotControls.h" -#include "RimMultiPlot.h" #include "RimSummaryAddress.h" #include "RimSummaryPlot.h" #include "RimSummaryPlotNameHelper.h" #include "RimSummaryPlotSourceStepping.h" +#include "RiuSummaryMultiPlotBook.h" #include "RiuSummaryVectorSelectionUi.h" #include "cafPdmUiComboBoxEditor.h" @@ -619,3 +619,17 @@ void RimSummaryMultiPlot::onSubPlotAxisChanged( const caf::SignalEmitter* emitte } } } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QWidget* RimSummaryMultiPlot::createViewWidget( QWidget* mainWindowParent ) +{ + if ( m_viewer.isNull() ) + { + m_viewer = new RiuSummaryMultiPlotBook( this, mainWindowParent ); + } + recreatePlotWidgets(); + + return m_viewer; +} diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.h b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.h index c728fa3af5..f4828c29ee 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.h @@ -87,6 +87,8 @@ protected: void initAfterRead() override; + QWidget* createViewWidget( QWidget* mainWindowParent ) override; + private: void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override; void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override; diff --git a/ApplicationLibCode/UserInterface/CMakeLists_files.cmake b/ApplicationLibCode/UserInterface/CMakeLists_files.cmake index 891d30170a..1faccdfb4b 100644 --- a/ApplicationLibCode/UserInterface/CMakeLists_files.cmake +++ b/ApplicationLibCode/UserInterface/CMakeLists_files.cmake @@ -54,9 +54,10 @@ set(SOURCE_GROUP_HEADER_FILES ${CMAKE_CURRENT_LIST_DIR}/RiuPickItemInfo.h ${CMAKE_CURRENT_LIST_DIR}/RiuWellLogPlot.h ${CMAKE_CURRENT_LIST_DIR}/RiuWellLogTrack.h - ${CMAKE_CURRENT_LIST_DIR}/RiuSummaryMultiPlotPage.h ${CMAKE_CURRENT_LIST_DIR}/RiuMultiPlotPage.h ${CMAKE_CURRENT_LIST_DIR}/RiuMultiPlotBook.h + ${CMAKE_CURRENT_LIST_DIR}/RiuSummaryMultiPlotPage.h + ${CMAKE_CURRENT_LIST_DIR}/RiuSummaryMultiPlotBook.h ${CMAKE_CURRENT_LIST_DIR}/RiuPlotWidget.h ${CMAKE_CURRENT_LIST_DIR}/RiuPlotAxis.h ${CMAKE_CURRENT_LIST_DIR}/RiuQwtPlotWidget.h @@ -157,6 +158,7 @@ set(SOURCE_GROUP_SOURCE_FILES ${CMAKE_CURRENT_LIST_DIR}/RiuWellLogTrack.cpp ${CMAKE_CURRENT_LIST_DIR}/RiuWellLogPlot.cpp ${CMAKE_CURRENT_LIST_DIR}/RiuSummaryMultiPlotPage.cpp + ${CMAKE_CURRENT_LIST_DIR}/RiuSummaryMultiPlotBook.cpp ${CMAKE_CURRENT_LIST_DIR}/RiuMultiPlotPage.cpp ${CMAKE_CURRENT_LIST_DIR}/RiuMultiPlotBook.cpp ${CMAKE_CURRENT_LIST_DIR}/RiuPlotWidget.cpp @@ -259,6 +261,7 @@ list( ${CMAKE_CURRENT_LIST_DIR}/RiuTreeViewEventFilter.h ${CMAKE_CURRENT_LIST_DIR}/RiuWellLogPlot.h ${CMAKE_CURRENT_LIST_DIR}/RiuWellLogTrack.h + ${CMAKE_CURRENT_LIST_DIR}/RiuSummaryMultiPlotBook.h ${CMAKE_CURRENT_LIST_DIR}/RiuSummaryMultiPlotPage.h ${CMAKE_CURRENT_LIST_DIR}/RiuMultiPlotPage.h ${CMAKE_CURRENT_LIST_DIR}/RiuMultiPlotBook.h diff --git a/ApplicationLibCode/UserInterface/RiuMultiPlotBook.cpp b/ApplicationLibCode/UserInterface/RiuMultiPlotBook.cpp index ce118f82b4..f8874f35a5 100644 --- a/ApplicationLibCode/UserInterface/RiuMultiPlotBook.cpp +++ b/ApplicationLibCode/UserInterface/RiuMultiPlotBook.cpp @@ -594,8 +594,9 @@ void RiuMultiPlotBook::createPages() m_pages[i]->setPlotTitle( QString( "%1 %2/%3" ).arg( m_plotTitle ).arg( pageNumber ).arg( m_pages.size() ) ); } } - m_book->adjustSize(); + adjustBookFrame(); } + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -609,20 +610,24 @@ const QList>& RiuMultiPlotBook::pages() const //-------------------------------------------------------------------------------------------------- RiuMultiPlotPage* RiuMultiPlotBook::createPage() { - RiuMultiPlotPage* page; + RiuMultiPlotPage* page = new RiuMultiPlotPage( m_plotDefinition, this ); - RimSummaryMultiPlot* sumMultPlot = dynamic_cast( m_plotDefinition.p() ); + applyPageSettings( page ); - if ( sumMultPlot ) - { - page = new RiuSummaryMultiPlotPage( sumMultPlot, this ); - } - else - { - page = new RiuMultiPlotPage( m_plotDefinition, this ); - } + m_pages.push_back( page ); + m_bookLayout->addWidget( page ); + + page->setVisible( true ); + return page; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuMultiPlotBook::applyPageSettings( RiuMultiPlotPage* page ) +{ + if ( !page ) return; - // Reapply plot settings page->setPlotTitle( m_plotTitle ); page->setTitleFontSizes( m_plotDefinition->titleFontSize(), m_plotDefinition->subTitleFontSize() ); page->setLegendFontSize( m_plotDefinition->legendFontSize() ); @@ -630,12 +635,6 @@ RiuMultiPlotPage* RiuMultiPlotBook::createPage() page->setTitleVisible( m_titleVisible ); page->setSubTitlesVisible( m_subTitlesVisible ); page->setPagePreviewModeEnabled( m_previewMode ); - - m_pages.push_back( page ); - m_bookLayout->addWidget( page ); - - page->setVisible( true ); - return page; } //-------------------------------------------------------------------------------------------------- @@ -748,3 +747,11 @@ bool RiuMultiPlotBook::eventFilter( QObject* obj, QEvent* event ) } return QWidget::eventFilter( obj, event ); } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuMultiPlotBook::adjustBookFrame() +{ + m_book->adjustSize(); +} diff --git a/ApplicationLibCode/UserInterface/RiuMultiPlotBook.h b/ApplicationLibCode/UserInterface/RiuMultiPlotBook.h index ff25420e97..99708e362d 100644 --- a/ApplicationLibCode/UserInterface/RiuMultiPlotBook.h +++ b/ApplicationLibCode/UserInterface/RiuMultiPlotBook.h @@ -113,12 +113,17 @@ protected: bool eventFilter( QObject* obj, QEvent* ev ) override; -private: - void deleteAllPages(); - void createPages(); + virtual void createPages(); + + void adjustBookFrame(); + void applyPageSettings( RiuMultiPlotPage* page ); + const QList>& pages() const; - RiuMultiPlotPage* createPage(); - void applyLook(); + +private: + RiuMultiPlotPage* createPage(); + void deleteAllPages(); + void applyLook(); void changeCurrentPage( int pageNumber ); diff --git a/ApplicationLibCode/UserInterface/RiuMultiPlotPage.h b/ApplicationLibCode/UserInterface/RiuMultiPlotPage.h index e50cdb6dde..40cf4a2c3b 100644 --- a/ApplicationLibCode/UserInterface/RiuMultiPlotPage.h +++ b/ApplicationLibCode/UserInterface/RiuMultiPlotPage.h @@ -90,6 +90,11 @@ public: QSize minimumSizeHint() const override; int heightForWidth( int width ) const override; + std::pair findAvailableRowAndColumn( int startRow, int startColumn, int columnSpan, int columnCount ) const; + +public slots: + virtual void performUpdate( RiaDefines::MultiPlotPageUpdateType whatToUpdate ); + protected: void contextMenuEvent( QContextMenuEvent* ) override; QLabel* createTitleLabel() const; @@ -117,17 +122,12 @@ protected: QList> legendsForVisiblePlots() const; QList> subTitlesForVisiblePlots() const; - std::pair findAvailableRowAndColumn( int startRow, int startColumn, int columnSpan, int columnCount ) const; - void applyLook(); private slots: - virtual void performUpdate( RiaDefines::MultiPlotPageUpdateType whatToUpdate ); - void onLegendUpdated(); + void onLegendUpdated(); protected: - friend class RiuMultiPlotBook; - QPointer m_layout; QPointer m_plotLayout; QPointer m_plotWidgetFrame; diff --git a/ApplicationLibCode/UserInterface/RiuSummaryMultiPlotBook.cpp b/ApplicationLibCode/UserInterface/RiuSummaryMultiPlotBook.cpp new file mode 100644 index 0000000000..db05009753 --- /dev/null +++ b/ApplicationLibCode/UserInterface/RiuSummaryMultiPlotBook.cpp @@ -0,0 +1,110 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022 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 "RiuSummaryMultiPlotBook.h" + +#include "RimSummaryMultiPlot.h" + +#include "RiuSummaryMultiPlotPage.h" + +#include "RiuPlotWidget.h" + +#include +#include + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RiuSummaryMultiPlotBook::RiuSummaryMultiPlotBook( RimSummaryMultiPlot* plotDefinition, QWidget* parent ) + : RiuMultiPlotBook( plotDefinition, parent ) +{ +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RiuSummaryMultiPlotBook::~RiuSummaryMultiPlotBook() +{ +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuSummaryMultiPlotBook::createPages() +{ + CAF_ASSERT( m_plotDefinition ); + + QList> plotWidgets = this->visiblePlotWidgets(); + + int columns = std::max( 1, m_plotDefinition->columnCount() ); + int rowsPerPage = m_plotDefinition->rowsPerPage(); + + int row = 0; + int col = 0; + + RiuSummaryMultiPlotPage* page = createSummaryPage(); + + for ( int visibleIndex = 0; visibleIndex < plotWidgets.size(); ++visibleIndex ) + { + int expectedColSpan = static_cast( plotWidgets[visibleIndex]->colSpan() ); + int colSpan = std::min( expectedColSpan, columns ); + + if ( row >= rowsPerPage ) + { + row = 0; + page = createSummaryPage(); + } + + page->addPlot( plotWidgets[visibleIndex] ); + page->performUpdate( RiaDefines::MultiPlotPageUpdateType::ALL ); + + col += colSpan; + if ( col >= columns ) + { + row++; + col = 0; + } + } + + // Set page numbers in title when there's more than one page + if ( m_pages.size() > 1 ) + { + for ( int i = 0; i < m_pages.size(); ++i ) + { + int pageNumber = i + 1; + m_pages[i]->setPlotTitle( QString( "%1 %2/%3" ).arg( m_plotTitle ).arg( pageNumber ).arg( m_pages.size() ) ); + } + } + adjustBookFrame(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RiuSummaryMultiPlotPage* RiuSummaryMultiPlotBook::createSummaryPage() +{ + RimSummaryMultiPlot* sumMultPlot = dynamic_cast( m_plotDefinition.p() ); + RiuSummaryMultiPlotPage* page = new RiuSummaryMultiPlotPage( sumMultPlot, this ); + + applyPageSettings( page ); + + m_pages.push_back( page ); + m_bookLayout->addWidget( page ); + + page->setVisible( true ); + return page; +} diff --git a/ApplicationLibCode/UserInterface/RiuSummaryMultiPlotBook.h b/ApplicationLibCode/UserInterface/RiuSummaryMultiPlotBook.h new file mode 100644 index 0000000000..7d3561f410 --- /dev/null +++ b/ApplicationLibCode/UserInterface/RiuSummaryMultiPlotBook.h @@ -0,0 +1,42 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022 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. +// +///////////////////////////////////////////////////////////////////////////////// +#pragma once + +#include "RiuMultiPlotBook.h" + +class RimSummaryMultiPlot; +class RiuSummaryMultiPlotPage; + +//================================================================================================== +// +// +//================================================================================================== +class RiuSummaryMultiPlotBook : public RiuMultiPlotBook +{ + Q_OBJECT + +public: + RiuSummaryMultiPlotBook( RimSummaryMultiPlot* plotDefinition, QWidget* parent = nullptr ); + ~RiuSummaryMultiPlotBook() override; + +protected: + void createPages() override; + +private: + RiuSummaryMultiPlotPage* createSummaryPage(); +}; diff --git a/ApplicationLibCode/UserInterface/RiuSummaryMultiPlotPage.cpp b/ApplicationLibCode/UserInterface/RiuSummaryMultiPlotPage.cpp index ae40c70197..45f6f3a263 100644 --- a/ApplicationLibCode/UserInterface/RiuSummaryMultiPlotPage.cpp +++ b/ApplicationLibCode/UserInterface/RiuSummaryMultiPlotPage.cpp @@ -147,6 +147,7 @@ void RiuSummaryMultiPlotPage::reinsertPlotWidgets() } visibleIndex++; + col += colSpan - 1; } } }