diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlot.cpp b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlot.cpp index af677dd272..29b074a9a0 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlot.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlot.cpp @@ -2023,17 +2023,27 @@ std::vector RimSummaryPlot::fieldsToShowInToolbar() { std::vector toolBarFields; - auto sourceObject = sourceSteppingObjectForKeyEventHandling(); - - if ( sourceObject ) { - toolBarFields = sourceObject->fieldsToShowInToolbar(); + auto fields = m_textCurveSetEditor->fieldsToShowInToolbar(); + toolBarFields.insert( std::end( toolBarFields ), std::begin( fields ), std::end( fields ) ); } - if ( toolBarFields.empty() ) + bool anyFieldsAvailableForSummary = false; + + auto sourceObject = sourceSteppingObjectForKeyEventHandling(); + if ( sourceObject ) + { + auto fields = sourceObject->fieldsToShowInToolbar(); + toolBarFields.insert( std::end( toolBarFields ), std::begin( fields ), std::end( fields ) ); + + anyFieldsAvailableForSummary = !fields.empty(); + } + + if ( !anyFieldsAvailableForSummary ) { // Show ensemble stepping if no fields are available from summary stepping - toolBarFields = ensembleCurveSetCollection()->fieldsToShowInToolbar(); + auto fields = ensembleCurveSetCollection()->fieldsToShowInToolbar(); + toolBarFields.insert( std::end( toolBarFields ), std::begin( fields ), std::end( fields ) ); } return toolBarFields; diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotFilterTextCurveSetEditor.cpp b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotFilterTextCurveSetEditor.cpp index 94505ef109..86d6fc18a7 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotFilterTextCurveSetEditor.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotFilterTextCurveSetEditor.cpp @@ -19,12 +19,14 @@ #include "RimSummaryPlotFilterTextCurveSetEditor.h" #include "RiaApplication.h" +#include "RiaGuiApplication.h" #include "RiaLogging.h" #include "RiaSummaryCurveDefinition.h" #include "RifSummaryReaderInterface.h" #include "RigCaseCellResultsData.h" #include "RigEclipseCaseData.h" + #include "RimEclipseCase.h" #include "RimEnsembleCurveSet.h" #include "RimEnsembleCurveSetCollection.h" @@ -41,11 +43,14 @@ #include "RimSummaryCurve.h" #include "RimSummaryCurveCollection.h" #include "RimSummaryPlot.h" + +#include "RiuPlotMainWindow.h" #include "RiuSummaryCurveDefSelection.h" #include "SummaryPlotCommands/RicSummaryPlotFeatureImpl.h" #include "WellLogCommands/RicWellLogPlotCurveFeatureImpl.h" +#include "cafPdmUiLabelEditor.h" #include "cafPdmUiTextEditor.h" #include "cafPdmUiTreeSelectionEditor.h" @@ -72,6 +77,11 @@ RimSummaryPlotFilterTextCurveSetEditor::RimSummaryPlotFilterTextCurveSetEditor() " \"BPR:15,28,*\" (no space) Oil phase pressure for all blocks along k as separate curves.\n"; // clang-format on + CAF_PDM_InitFieldNoDefault( &m_curveFilterLabelText, "Summary", "Summary", "", "", "" ); + m_curveFilterLabelText.uiCapability()->setUiEditorTypeName( caf::PdmUiLabelEditor::uiEditorTypeName() ); + m_curveFilterLabelText.uiCapability()->setUiLabelPosition( caf::PdmUiItemInfo::HIDDEN ); + m_curveFilterLabelText.xmlCapability()->disableIO(); + CAF_PDM_InitFieldNoDefault( &m_curveFilterText, "CurveFilterText", "Curve Filter Text", "", filterTextToolTip, "" ); m_curveFilterText.uiCapability()->setUiLabelPosition( caf::PdmUiItemInfo::HIDDEN ); // m_curveFilterText.uiCapability()->setUiEditorTypeName( caf::PdmUiTextEditor::uiEditorTypeName() ); @@ -87,6 +97,23 @@ RimSummaryPlotFilterTextCurveSetEditor::RimSummaryPlotFilterTextCurveSetEditor() //-------------------------------------------------------------------------------------------------- RimSummaryPlotFilterTextCurveSetEditor::~RimSummaryPlotFilterTextCurveSetEditor() {} +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RimSummaryPlotFilterTextCurveSetEditor::fieldsToShowInToolbar() +{ + std::vector fields; + fields.push_back( &m_curveFilterLabelText ); + fields.push_back( &m_curveFilterText ); + + return fields; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimSummaryPlotFilterTextCurveSetEditor::updateCurveFilterText() {} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -266,9 +293,20 @@ void RimSummaryPlotFilterTextCurveSetEditor::fieldChangedByUi( const caf::PdmFie if ( changedField == &m_curveFilterText ) { m_curveFilterText = curveFilterTextWithoutOutdatedLabel(); + + m_curveFilterText.uiCapability()->updateConnectedEditors(); } m_isFieldRecentlyChangedFromGui = true; + + if ( RiaGuiApplication::isRunning() ) + { + RiuPlotMainWindow* mainPlotWindow = RiaGuiApplication::instance()->mainPlotWindow(); + if ( mainPlotWindow ) + { + mainPlotWindow->updateSummaryPlotToolBar(); + } + } } //-------------------------------------------------------------------------------------------------- @@ -342,6 +380,8 @@ void RimSummaryPlotFilterTextCurveSetEditor::defineUiOrdering( QString uiConfigN { m_curveFilterText = curveFilterTextWithoutOutdatedLabel(); } + + m_curveFilterText.uiCapability()->updateConnectedEditors(); } m_isFieldRecentlyChangedFromGui = false; diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotFilterTextCurveSetEditor.h b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotFilterTextCurveSetEditor.h index f7e4869593..4a43e8d7a6 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotFilterTextCurveSetEditor.h +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotFilterTextCurveSetEditor.h @@ -31,6 +31,10 @@ public: RimSummaryPlotFilterTextCurveSetEditor(); ~RimSummaryPlotFilterTextCurveSetEditor() override; + std::vector fieldsToShowInToolbar(); + + void updateCurveFilterText(); + protected: QList calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions, bool* useOptionsOnly ) override; @@ -49,7 +53,9 @@ private: QString curveFilterTextWithoutOutdatedLabel() const; caf::PdmPtrArrayField m_selectedSources; - caf::PdmField m_curveFilterText; + + caf::PdmField m_curveFilterLabelText; + caf::PdmField m_curveFilterText; bool m_isFieldRecentlyChangedFromGui; }; diff --git a/ApplicationCode/UserInterface/RiuPlotMainWindow.cpp b/ApplicationCode/UserInterface/RiuPlotMainWindow.cpp index 476d97f173..85e364976e 100644 --- a/ApplicationCode/UserInterface/RiuPlotMainWindow.cpp +++ b/ApplicationCode/UserInterface/RiuPlotMainWindow.cpp @@ -558,23 +558,22 @@ void RiuPlotMainWindow::updateSummaryPlotToolBar( bool forceUpdateUi ) { std::vector toolBarFields = summaryPlot->fieldsToShowInToolbar(); + QString keyword; + if ( !m_summaryPlotToolBarEditor->isEditorDataValid( toolBarFields ) ) { + keyword = m_summaryPlotToolBarEditor->keywordForWidgetWithFocus(); + m_summaryPlotToolBarEditor->setFields( toolBarFields ); } - else if ( forceUpdateUi ) - { - m_summaryPlotToolBarEditor->updateUi(); - } m_summaryPlotToolBarEditor->updateUi(); - m_summaryPlotToolBarEditor->show(); + m_summaryPlotToolBarEditor->setKeyboardFocusFromKeyword( keyword ); } else { m_summaryPlotToolBarEditor->clear(); - m_summaryPlotToolBarEditor->hide(); } diff --git a/Fwk/AppFwk/cafUserInterface/cafPdmUiToolBarEditor.cpp b/Fwk/AppFwk/cafUserInterface/cafPdmUiToolBarEditor.cpp index 5577cde98f..655a9ecd42 100644 --- a/Fwk/AppFwk/cafUserInterface/cafPdmUiToolBarEditor.cpp +++ b/Fwk/AppFwk/cafUserInterface/cafPdmUiToolBarEditor.cpp @@ -232,6 +232,22 @@ void PdmUiToolBarEditor::clear() m_actions.clear(); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void PdmUiToolBarEditor::setKeyboardFocusFromKeyword(const QString& fieldKeyword) +{ + auto fieldView = m_fieldViews[fieldKeyword]; + if (fieldView) + { + auto editorWidget = fieldView->editorWidget(); + if (editorWidget) + { + editorWidget->setFocus(Qt::ActiveWindowFocusReason); + } + } +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -254,4 +270,30 @@ void PdmUiToolBarEditor::hide() } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString PdmUiToolBarEditor::keywordForWidgetWithFocus() +{ + QString keyword; + + if (m_toolbar->isVisible()) + { + for (auto fieldViewPair : m_fieldViews) + { + auto fieldView = fieldViewPair.second; + if (fieldView) + { + auto editorWidget = fieldView->editorWidget(); + if (editorWidget && editorWidget->hasFocus()) + { + keyword = fieldViewPair.first; + } + } + } + } + + return keyword; +} + } // end namespace caf diff --git a/Fwk/AppFwk/cafUserInterface/cafPdmUiToolBarEditor.h b/Fwk/AppFwk/cafUserInterface/cafPdmUiToolBarEditor.h index 4b48d7be35..c15050cb4e 100644 --- a/Fwk/AppFwk/cafUserInterface/cafPdmUiToolBarEditor.h +++ b/Fwk/AppFwk/cafUserInterface/cafPdmUiToolBarEditor.h @@ -64,10 +64,14 @@ public: bool isEditorDataValid(const std::vector& fields) const; void setFields(std::vector& fields); void clear(); + + void setKeyboardFocusFromKeyword(const QString& fieldKeyword); + QString keywordForWidgetWithFocus(); void show(); void hide(); + private: void configureAndUpdateUi(const QString& uiConfigName) override;