From c00fb2d1f926893e69c8a75c83fb16a23127cc0f Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Fri, 15 Sep 2017 12:52:26 +0200 Subject: [PATCH] #1889 Curve Creator : Add stretch to bottom field layout --- .../RicSummaryCurveCreatorDialog.h | 4 + .../RicSummaryCurveCreatorSplitterUi.cpp | 80 ++++++++++++++++++- .../RicSummaryCurveCreatorSplitterUi.h | 14 +++- 3 files changed, 96 insertions(+), 2 deletions(-) diff --git a/ApplicationCode/Commands/SummaryPlotCommands/RicSummaryCurveCreatorDialog.h b/ApplicationCode/Commands/SummaryPlotCommands/RicSummaryCurveCreatorDialog.h index e5341c7507..bc8f53b16f 100644 --- a/ApplicationCode/Commands/SummaryPlotCommands/RicSummaryCurveCreatorDialog.h +++ b/ApplicationCode/Commands/SummaryPlotCommands/RicSummaryCurveCreatorDialog.h @@ -23,6 +23,10 @@ class RicSummaryCurveCreatorSplitterUi; class RicSummaryCurveCreator; +//================================================================================================== +/// +/// +//================================================================================================== class RicSummaryCurveCreatorDialog : public QDialog { public: diff --git a/ApplicationCode/Commands/SummaryPlotCommands/RicSummaryCurveCreatorSplitterUi.cpp b/ApplicationCode/Commands/SummaryPlotCommands/RicSummaryCurveCreatorSplitterUi.cpp index 694912e678..924faf243a 100644 --- a/ApplicationCode/Commands/SummaryPlotCommands/RicSummaryCurveCreatorSplitterUi.cpp +++ b/ApplicationCode/Commands/SummaryPlotCommands/RicSummaryCurveCreatorSplitterUi.cpp @@ -20,6 +20,9 @@ #include "RicSummaryCurveCreator.h" #include "RicSummaryCurveCreatorUiKeywords.h" + +#include "cafPdmUiFieldEditorHandle.h" +#include "cafPdmUiFieldHandle.h" #include "cafPdmUiGroup.h" #include "cafPdmUiTreeView.h" @@ -93,8 +96,10 @@ void RicSummaryCurveCreatorSplitterUi::recursivelyConfigureAndUpdateTopLevelUiIt m_secondRowLayout->insertWidget(1, getOrCreatePlotWidget()); - // NB! Only groups at top level are handled, fields at top level are not added to layout + // Fields at bottom of dialog + + configureAndUpdateFields(1, m_bottomFieldLayout, topLevelUiItems, uiConfigName); } //-------------------------------------------------------------------------------------------------- @@ -125,6 +130,10 @@ QWidget* RicSummaryCurveCreatorSplitterUi::createWidget(QWidget* parent) m_layout->addWidget(m_firstColumnSplitter); + m_bottomFieldLayout = new QHBoxLayout; + m_layout->addLayout(m_bottomFieldLayout); + m_bottomFieldLayout->insertStretch(0, 1); + return widget; } @@ -192,3 +201,72 @@ QWidget* RicSummaryCurveCreatorSplitterUi::getOrCreatePlotWidget() return nullptr; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicSummaryCurveCreatorSplitterUi::configureAndUpdateFields(int widgetStartIndex, + QBoxLayout* layout, + const std::vector& uiItems, + const QString& uiConfigName) +{ + int currentWidgetIndex = widgetStartIndex; + + for (size_t i = 0; i < uiItems.size(); ++i) + { + if (uiItems[i]->isUiHidden(uiConfigName)) continue; + if (uiItems[i]->isUiGroup()) continue; + + { + caf::PdmUiFieldHandle* field = dynamic_cast(uiItems[i]); + + caf::PdmUiFieldEditorHandle* fieldEditor = findOrCreateFieldEditor(this->widget(), field, uiConfigName); + + if (fieldEditor) + { + fieldEditor->setField(field); + + // Place the widget(s) into the correct parent and layout + QWidget* fieldCombinedWidget = fieldEditor->combinedWidget(); + + if (fieldCombinedWidget) + { + fieldCombinedWidget->setParent(this->widget()); + layout->insertWidget(currentWidgetIndex++, fieldCombinedWidget); + } + else + { + caf::PdmUiItemInfo::LabelPosType labelPos = field->uiLabelPosition(uiConfigName); + + QWidget* fieldEditorWidget = fieldEditor->editorWidget(); + + if (labelPos != caf::PdmUiItemInfo::HIDDEN) + { + QWidget* fieldLabelWidget = fieldEditor->labelWidget(); + if (fieldLabelWidget) + { + fieldLabelWidget->setParent(this->widget()); + + layout->insertWidget(currentWidgetIndex++, fieldLabelWidget); + + fieldLabelWidget->show(); + } + } + else + { + QWidget* fieldLabelWidget = fieldEditor->labelWidget(); + if (fieldLabelWidget) fieldLabelWidget->hide(); + } + + if (fieldEditorWidget) + { + fieldEditorWidget->setParent(this->widget()); // To make sure this widget has the current group box as parent. + + layout->insertWidget(currentWidgetIndex++, fieldEditorWidget); + } + } + + fieldEditor->updateUi(uiConfigName); + } + } + } +} diff --git a/ApplicationCode/Commands/SummaryPlotCommands/RicSummaryCurveCreatorSplitterUi.h b/ApplicationCode/Commands/SummaryPlotCommands/RicSummaryCurveCreatorSplitterUi.h index b7bc3a4164..25baee989e 100644 --- a/ApplicationCode/Commands/SummaryPlotCommands/RicSummaryCurveCreatorSplitterUi.h +++ b/ApplicationCode/Commands/SummaryPlotCommands/RicSummaryCurveCreatorSplitterUi.h @@ -24,17 +24,22 @@ class RicSummaryCurveCreator; -class QHBoxLayout; class QMinimizePanel; class QSplitter; class QString; class QVBoxLayout; +class QHBoxLayout; +class QBoxLayout; namespace caf { class PdmUiItem; } +//================================================================================================== +/// +/// +//================================================================================================== class RicSummaryCurveCreatorSplitterUi : public caf::PdmUiWidgetBasedObjectEditor { public: @@ -54,6 +59,11 @@ private: const QString& keyword, const QString& uiConfigName); + void configureAndUpdateFields(int widgetStartIndex, + QBoxLayout* layout, + const std::vector& topLevelUiItems, + const QString& uiConfigName); + private: QPointer m_layout; QPointer m_firstColumnSplitter; @@ -63,4 +73,6 @@ private: QPointer m_firstRowLayout; QPointer m_secondRowLayout; QPointer m_lowerLeftLayout; + + QPointer m_bottomFieldLayout; };