Materials: Material selector doesn't have minimum size set

Add properties for setting a minimum size with reasonable defaults.
Notify the user when the tree is expanded or contracted to allow
for container resizing.
This commit is contained in:
David Carter
2024-06-17 11:30:01 -04:00
parent 30f7f26889
commit 276d189254
2 changed files with 44 additions and 0 deletions

View File

@@ -59,6 +59,7 @@ MaterialTreeWidget::MaterialTreeWidget(const std::shared_ptr<Materials::Material
QWidget* parent)
: QWidget(parent)
, m_expanded(false)
, m_treeSizeHint(250, 500)
, _filter(filter)
{
setup();
@@ -69,6 +70,7 @@ MaterialTreeWidget::MaterialTreeWidget(
QWidget* parent)
: QWidget(parent)
, m_expanded(false)
, m_treeSizeHint(250, 500)
, _filter(std::make_shared<Materials::MaterialFilter>())
, _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<Materials::MaterialFilter>())
{
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)

View File

@@ -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<Materials::Material>& 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;