From cc2b19cb57e4b2153a5a5d3e0ef19110be583d3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacob=20St=C3=B8ren?= Date: Tue, 25 Jun 2019 16:50:46 +0200 Subject: [PATCH] AppFwk: Added a tabbed property view dialog as convenience until we have a "tab" option in the uiOrdering system --- Fwk/AppFwk/cafUserInterface/CMakeLists.txt | 2 + .../cafPdmUiTabbedPropertyViewDialog.cpp | 117 ++++++++++++++++++ .../cafPdmUiTabbedPropertyViewDialog.h | 39 ++++++ 3 files changed, 158 insertions(+) create mode 100644 Fwk/AppFwk/cafUserInterface/cafPdmUiTabbedPropertyViewDialog.cpp create mode 100644 Fwk/AppFwk/cafUserInterface/cafPdmUiTabbedPropertyViewDialog.h diff --git a/Fwk/AppFwk/cafUserInterface/CMakeLists.txt b/Fwk/AppFwk/cafUserInterface/CMakeLists.txt index 5f2bf15809..247e12db1d 100644 --- a/Fwk/AppFwk/cafUserInterface/CMakeLists.txt +++ b/Fwk/AppFwk/cafUserInterface/CMakeLists.txt @@ -155,6 +155,8 @@ set( PROJECT_FILES cafPdmUiPickableLineEditor.cpp cafStyleSheetTools.h cafStyleSheetTools.cpp + cafPdmUiTabbedPropertyViewDialog.h + cafPdmUiTabbedPropertyViewDialog.cpp ) add_library( ${PROJECT_NAME} diff --git a/Fwk/AppFwk/cafUserInterface/cafPdmUiTabbedPropertyViewDialog.cpp b/Fwk/AppFwk/cafUserInterface/cafPdmUiTabbedPropertyViewDialog.cpp new file mode 100644 index 0000000000..6076f4f364 --- /dev/null +++ b/Fwk/AppFwk/cafUserInterface/cafPdmUiTabbedPropertyViewDialog.cpp @@ -0,0 +1,117 @@ + +#include "cafPdmUiTabbedPropertyViewDialog.h" + +#include "cafPdmObject.h" +#include "cafPdmUiPropertyView.h" + +#include +#include +#include +#include +#include +#include + +namespace caf +{ + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +PdmUiTabbedPropertyViewDialog::PdmUiTabbedPropertyViewDialog(caf::PdmObject* object, + const QStringList& uiConfigNameForTabs, + const QString& windowTitle, + QWidget* parent) + : QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint) +{ + this->setWindowTitle(windowTitle); + + QTabWidget* tabWidget = new QTabWidget; + + for (int i = 0; i < uiConfigNameForTabs.size(); i++) + { + QHBoxLayout* widgetLayout = new QHBoxLayout; + widgetLayout->setContentsMargins(0, 0, 0, 0); + + QWidget* containerWidget = new QWidget; + containerWidget->setLayout(widgetLayout); + + caf::PdmUiPropertyView* pdmUiPropertyView = new caf::PdmUiPropertyView(); + pdmUiPropertyView->setUiConfigurationName(uiConfigNameForTabs[i]); + + widgetLayout->addWidget(pdmUiPropertyView); + + tabWidget->addTab(containerWidget, uiConfigNameForTabs[i]); + pdmUiPropertyView->showProperties(object); + + m_propertyViewTabs.push_back(pdmUiPropertyView); + } + + QVBoxLayout* dialogLayout = new QVBoxLayout; + setLayout(dialogLayout); + + dialogLayout->addWidget(tabWidget); + + + m_dialogButtonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); + connect(m_dialogButtonBox, SIGNAL(accepted()), this, SLOT(accept())); + connect(m_dialogButtonBox, SIGNAL(rejected()), this, SLOT(reject())); + + dialogLayout->addWidget(m_dialogButtonBox); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +PdmUiTabbedPropertyViewDialog::~PdmUiTabbedPropertyViewDialog() +{ + for (auto propView : m_propertyViewTabs) + { + propView->showProperties(nullptr); + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QSize PdmUiTabbedPropertyViewDialog::minimumSizeHint() const +{ + QSize minSizeHint(0, 0); + + for (auto propView : m_propertyViewTabs) + { + QSize pageSize = propView->minimumSizeHint(); + pageSize += QSize(0, 100); + + minSizeHint = minSizeHint.expandedTo(pageSize); + } + + return minSizeHint; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QSize PdmUiTabbedPropertyViewDialog::sizeHint() const +{ + QSize maxSizeHint(0, 0); + + for (auto w : m_propertyViewTabs) + { + QSize pageSize = w->sizeHint(); + pageSize += QSize(0, 100); + + maxSizeHint = maxSizeHint.expandedTo(pageSize); + } + + return maxSizeHint; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QDialogButtonBox* PdmUiTabbedPropertyViewDialog::dialogButtonBox() +{ + return m_dialogButtonBox; +} + +} \ No newline at end of file diff --git a/Fwk/AppFwk/cafUserInterface/cafPdmUiTabbedPropertyViewDialog.h b/Fwk/AppFwk/cafUserInterface/cafPdmUiTabbedPropertyViewDialog.h new file mode 100644 index 0000000000..01b6c610e6 --- /dev/null +++ b/Fwk/AppFwk/cafUserInterface/cafPdmUiTabbedPropertyViewDialog.h @@ -0,0 +1,39 @@ +#pragma once + + +#include + +namespace caf { + class PdmObject; + class PdmUiPropertyView; +} + +class QDialogButtonBox; +class QWidget; +class QString; +class QStringList; + +namespace caf +{ + +class PdmUiTabbedPropertyViewDialog : public QDialog +{ +public: + PdmUiTabbedPropertyViewDialog(caf::PdmObject* object, + const QStringList& uiConfigNameForTabs, + const QString& windowTitle, + QWidget* parent); + ~PdmUiTabbedPropertyViewDialog() override; + + QDialogButtonBox* dialogButtonBox(); + +protected: + QSize minimumSizeHint() const override; + QSize sizeHint() const override; + +private: + std::vector m_propertyViewTabs; + QDialogButtonBox* m_dialogButtonBox; +}; + +} \ No newline at end of file