diff --git a/src/Mod/Material/Gui/MaterialTreeWidget.cpp b/src/Mod/Material/Gui/MaterialTreeWidget.cpp index f4f056ba69..849d9d663f 100644 --- a/src/Mod/Material/Gui/MaterialTreeWidget.cpp +++ b/src/Mod/Material/Gui/MaterialTreeWidget.cpp @@ -59,6 +59,7 @@ MaterialTreeWidget::MaterialTreeWidget(const std::shared_ptr()) , _filterList(filterList) { @@ -78,6 +80,7 @@ MaterialTreeWidget::MaterialTreeWidget( MaterialTreeWidget::MaterialTreeWidget(QWidget* parent) : QWidget(parent) , m_expanded(false) + , m_treeSizeHint(250, 500) , _filter(std::make_shared()) { setup(); @@ -102,6 +105,30 @@ MaterialTreeWidget::~MaterialTreeWidget() saveMaterialTree(); } +QSize MaterialTreeWidget::sizeHint() const +{ + if (!m_expanded) { + // When not expanded, the size height is the same as m_material + QSize size = m_material->sizeHint(); + size.setWidth(250); + return size; + } + return QWidget::sizeHint(); +} + +QSize MaterialTreeWidget::treeSizeHint() const +{ + return m_treeSizeHint; +} + +void MaterialTreeWidget::setTreeSizeHint(const QSize& hint) +{ + m_treeSizeHint = hint; + m_materialTree->setMinimumSize(m_treeSizeHint); + m_materialTree->adjustSize(); + adjustSize(); +} + void MaterialTreeWidget::createLayout() { m_material = new QLineEdit(this); @@ -111,12 +138,15 @@ void MaterialTreeWidget::createLayout() m_filterCombo = new QComboBox(this); m_editor = new QPushButton(tr("Launch editor"), this); + m_materialTree->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); + m_materialTree->setMinimumSize(m_treeSizeHint); m_materialTree->setSelectionMode(QAbstractItemView::SingleSelection); m_materialTree->setSelectionBehavior(QAbstractItemView::SelectItems); auto materialLayout = new QHBoxLayout(); materialLayout->addWidget(m_material); materialLayout->addWidget(m_expand); + // materialLayout->setSizeConstraint(QLayout::SetMinimumSize); auto treeLayout = new QHBoxLayout(); treeLayout->addWidget(m_materialTree); @@ -133,6 +163,8 @@ void MaterialTreeWidget::createLayout() layout->addItem(buttonLayout); setLayout(layout); + setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum); + // Set the filter if using a filter list if (hasMultipleFilters()) { _filter = _filterList->front(); @@ -169,6 +201,10 @@ void MaterialTreeWidget::setExpanded(bool open) else { m_expand->setIcon(style()->standardIcon(QStyle::SP_TitleBarUnshadeButton)); } + + // m_materialTree->adjustSize(); + adjustSize(); + Q_EMIT onExpanded(m_expanded); } void MaterialTreeWidget::setFilterVisible(bool open) diff --git a/src/Mod/Material/Gui/MaterialTreeWidget.h b/src/Mod/Material/Gui/MaterialTreeWidget.h index 707e278960..8ffeda1828 100644 --- a/src/Mod/Material/Gui/MaterialTreeWidget.h +++ b/src/Mod/Material/Gui/MaterialTreeWidget.h @@ -71,6 +71,8 @@ class MaterialTreeWidgetPy; class MatGuiExport MaterialTreeWidget: public QWidget, public Base::BaseClass { Q_OBJECT + Q_PROPERTY(QSize treeSizeHint READ treeSizeHint WRITE + setTreeSizeHint) // clazy:exclude=qproperty-without-notify TYPESYSTEM_HEADER_WITH_OVERRIDE(); @@ -158,10 +160,15 @@ public: _filterOptions.setIncludeLegacy(legacy); } + QSize sizeHint() const override; + QSize treeSizeHint() const; + void setTreeSizeHint(const QSize& hint); + Q_SIGNALS: /** Emits this signal when a material has been selected */ void materialSelected(const std::shared_ptr& material); void onMaterial(const QString& uuid); + void onExpanded(bool expanded); private Q_SLOTS: void expandClicked(bool checked); @@ -179,6 +186,7 @@ private: QPushButton* m_editor; QComboBox* m_filterCombo; bool m_expanded; + QSize m_treeSizeHint; QString m_materialDisplay; QString m_uuid;