//################################################################################################## // // 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 <> // 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 <> // for more details. // //################################################################################################## #pragma once #include "cafPdmUiWidgetObjectEditorHandle.h" #include "cafPdmUiOrdering.h" #include #include #include class QMinimizePanel; class QGridLayout; namespace caf { class PdmUiFieldEditorHandle; class PdmUiGroup; 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; void recursivelyConfigureAndUpdateUiOrderingInGridLayoutColumn(const PdmUiOrdering& uiOrdering, QWidget* containerWidgetWithGridLayout, const QString& uiConfigName); QMinimizePanel* findOrCreateGroupBox(QWidget* parent, PdmUiGroup* group, const QString& uiConfigName); PdmUiFieldEditorHandle* findOrCreateFieldEditor(QWidget* parent, PdmUiFieldHandle* field, const QString& uiConfigName); 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& uiItems, const QString& uiConfigName, std::set* fieldKeywordNames, std::set* groupNames); private: std::map m_fieldViews; std::map > m_groupBoxes; std::map > m_newGroupBoxes; ///< used temporarily to store the new(complete) set of group boxes std::map > m_objectKeywordGroupUiNameExpandedState; }; } // end namespace caf