mirror of
https://github.com/OPM/ResInsight.git
synced 2026-11-02 09:00:14 -06:00
The tree selection editor can grow to a large height, which is useful when it is the last field editor in the property dialog. When other field editors are located below, the heightHint is now used as the maximum height instead. The form layout tracks whether an editor occupies the bottom-most row of the form and passes this to the editor. In the Analysis Plot, the time step selection is constrained to its height hint because other input fields are located below it.
134 lines
6.1 KiB
C++
134 lines
6.1 KiB
C++
//##################################################################################################
|
|
//
|
|
// Custom Visualization Core library
|
|
// Copyright (C) 2017 Ceetron Solutions AS
|
|
//
|
|
// This library may be used under the terms of either the GNU General Public License or
|
|
// the GNU Lesser General Public License as follows:
|
|
//
|
|
// GNU General Public License Usage
|
|
// This library 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.
|
|
//
|
|
// This library 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 <<http://www.gnu.org/licenses/gpl.html>>
|
|
// for more details.
|
|
//
|
|
// GNU Lesser General Public License Usage
|
|
// This library is free software; you can redistribute it and/or modify
|
|
// it under the terms of the GNU Lesser General Public License as published by
|
|
// the Free Software Foundation; either version 2.1 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// This library 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 Lesser General Public License at <<http://www.gnu.org/licenses/lgpl-2.1.html>>
|
|
// for more details.
|
|
//
|
|
//##################################################################################################
|
|
|
|
#pragma once
|
|
|
|
#include "cafPdmUiWidgetObjectEditorHandle.h"
|
|
|
|
#include <QPointer>
|
|
#include <QString>
|
|
|
|
#include <map>
|
|
#include <vector>
|
|
|
|
class QMinimizePanel;
|
|
class QGridLayout;
|
|
class QWidget;
|
|
class QVBoxLayout;
|
|
class QLabel;
|
|
class QPushButton;
|
|
|
|
namespace caf
|
|
{
|
|
class PdmFieldHandle;
|
|
class PdmUiFieldEditorHandle;
|
|
class PdmUiFieldHandle;
|
|
class PdmUiGroup;
|
|
class PdmUiLabel;
|
|
class PdmUiButton;
|
|
class PdmUiOrdering;
|
|
|
|
//==================================================================================================
|
|
///
|
|
//==================================================================================================
|
|
class PdmUiFormLayoutObjectEditor : public PdmUiWidgetObjectEditorHandle
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
PdmUiFormLayoutObjectEditor();
|
|
~PdmUiFormLayoutObjectEditor() override;
|
|
|
|
protected:
|
|
/// When overriding this function, use findOrCreateGroupBox() or findOrCreateFieldEditor() for detailed control
|
|
/// Use recursivelyConfigureAndUpdateUiItemsInGridLayoutColumn() for automatic layout of group and field widgets
|
|
virtual void recursivelyConfigureAndUpdateTopLevelUiOrdering( const PdmUiOrdering& topLevelUiOrdering,
|
|
const QString& uiConfigName ) = 0;
|
|
|
|
bool recursivelyConfigureAndUpdateUiOrderingInNewGridLayout( const PdmUiOrdering& uiOrdering,
|
|
QWidget* containerWidget,
|
|
const QString& uiConfigName,
|
|
bool parentRowIsLast = true );
|
|
int recursivelyConfigureAndUpdateUiOrderingInGridLayout( const PdmUiOrdering& uiOrdering,
|
|
QWidget* containerWidgetWithGridLayout,
|
|
const QString& uiConfigName,
|
|
bool parentRowIsLast = true );
|
|
|
|
int recursivelyAddGroupToGridLayout( PdmUiItem* currentItem,
|
|
QWidget* containerWidget,
|
|
const QString& uiConfigName,
|
|
QGridLayout* parentLayout,
|
|
int currentRowIndex,
|
|
int currentColumn,
|
|
int itemColumnSpan,
|
|
bool parentRowIsLast = true );
|
|
|
|
QMinimizePanel* findOrCreateGroupBox( QWidget* parent, PdmUiGroup* group, const QString& uiConfigName );
|
|
PdmUiFieldEditorHandle* findOrCreateFieldEditor( QWidget* parent, PdmUiFieldHandle* field, const QString& uiConfigName );
|
|
QPushButton* createButton( QWidget* parent, const PdmUiButton& button, const QString& uiConfigName );
|
|
|
|
static void ensureWidgetContainsEmptyGridLayout( QWidget* containerWidget, QMargins contentMargins = QMargins() );
|
|
|
|
private slots:
|
|
void groupBoxExpandedStateToggled( bool isExpanded );
|
|
|
|
private:
|
|
bool isUiGroupExpanded( const PdmUiGroup* uiGroup ) const;
|
|
void cleanupBeforeSettingPdmObject() override;
|
|
void configureAndUpdateUi( const QString& uiConfigName ) override;
|
|
|
|
static void recursiveVerifyUniqueNames( const std::vector<PdmUiItem*>& uiItems,
|
|
const QString& uiConfigName,
|
|
std::set<QString>* fieldKeywordNames,
|
|
std::set<QString>* groupNames );
|
|
|
|
QLabel* createLabel( QWidget* parent, const PdmUiLabel& label, const QString& uiConfigName );
|
|
|
|
void deleteLabelsAndButtons();
|
|
|
|
private:
|
|
std::map<PdmFieldHandle*, PdmUiFieldEditorHandle*> m_fieldViews;
|
|
std::set<PdmFieldHandle*> m_usedFields; ///< used temporarily to store the new(complete) set of used fields
|
|
std::map<QString, QPointer<QMinimizePanel>> m_groupBoxes;
|
|
std::map<QString, QPointer<QMinimizePanel>> m_newGroupBoxes; ///< used temporarily to store the new(complete) set of
|
|
///< group boxes
|
|
std::vector<QPointer<QLabel>> m_labels;
|
|
std::vector<QPointer<QPushButton>> m_buttons;
|
|
|
|
std::map<QString, std::map<QString, bool>> m_objectKeywordGroupUiNameExpandedState;
|
|
};
|
|
|
|
} // end namespace caf
|