[VDD] Fix minimum size by adding a compact mode to quickSettingsButtons

Took 17 minutes

Took 5 seconds
This commit is contained in:
Lukas Brübach 2026-05-13 13:45:28 +02:00
parent fe12f4cbb9
commit 33e5ae00db
4 changed files with 58 additions and 6 deletions

View file

@ -35,19 +35,33 @@ void SettingsButtonWidget::setButtonIcon(QPixmap iconMap)
button->setIcon(iconMap);
}
void SettingsButtonWidget::setButtonText(const QString &buttonText)
void SettingsButtonWidget::setButtonText(const QString &text)
{
// 🔓 unlock size constraints
buttonText = text;
button->setMinimumSize(QSize(0, 0));
button->setMaximumSize(QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX));
button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
button->setText(buttonText);
button->setText(text);
button->setFixedHeight(32);
button->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
button->setMinimumWidth(button->sizeHint().width());
button->setMinimumWidth(32); // icon-only fallback minimum
}
void SettingsButtonWidget::setCompact(bool _compact)
{
compact = _compact;
if (compact) {
button->setToolButtonStyle(Qt::ToolButtonIconOnly);
button->setFixedWidth(32);
} else {
button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
button->setText(buttonText);
button->setFixedWidth(QWIDGETSIZE_MAX); // release fixed width
button->setMinimumWidth(32);
button->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
}
}
void SettingsButtonWidget::togglePopup()

View file

@ -23,6 +23,11 @@ public:
void removeSettingsWidget(QWidget *toRemove) const;
void setButtonIcon(QPixmap iconMap);
void setButtonText(const QString &buttonText);
void setCompact(bool compact);
bool isCompact() const
{
return compact;
};
protected:
void mousePressEvent(QMouseEvent *event) override;
@ -34,6 +39,8 @@ private slots:
private:
QHBoxLayout *layout;
QToolButton *button;
QString buttonText;
bool compact;
public:
SettingsPopupWidget *popup;

View file

@ -135,6 +135,10 @@ void VisualDatabaseDisplayFilterToolbarWidget::initialize()
filterContainerLayout->addWidget(filterGroupBox);
filterContainerLayout->addStretch();
filterContainerLayout->addWidget(quickFilterSaveLoadWidget);
// Force a layout pass so sizeHint() is accurate
layout()->activate();
fullWidthHint = sizeHint().width();
}
void VisualDatabaseDisplayFilterToolbarWidget::retranslateUi()
@ -155,4 +159,25 @@ void VisualDatabaseDisplayFilterToolbarWidget::retranslateUi()
quickFilterSubTypeWidget->setButtonText(tr("Sub Type"));
quickFilterSetWidget->setButtonText(tr("Sets"));
quickFilterFormatLegalityWidget->setButtonText(tr("Formats"));
}
void VisualDatabaseDisplayFilterToolbarWidget::resizeEvent(QResizeEvent *event)
{
QWidget::resizeEvent(event);
updateCompactMode(event->size().width());
}
void VisualDatabaseDisplayFilterToolbarWidget::updateCompactMode(int availableWidth)
{
const bool compact = availableWidth < fullWidthHint;
const QList<SettingsButtonWidget *> filterButtons = {
quickFilterSaveLoadWidget, quickFilterNameWidget, quickFilterMainTypeWidget,
quickFilterSubTypeWidget, quickFilterSetWidget, quickFilterFormatLegalityWidget,
};
for (auto *btn : filterButtons) {
if (btn->isCompact() != compact) // only act on transitions
btn->setCompact(compact);
}
}

View file

@ -45,6 +45,12 @@ private:
VisualDatabaseDisplaySetFilterWidget *setFilterWidget;
SettingsButtonWidget *quickFilterFormatLegalityWidget;
VisualDatabaseDisplayFormatLegalityFilterWidget *formatLegalityWidget;
int fullWidthHint = 0;
void updateCompactMode(int availableWidth);
protected:
void resizeEvent(QResizeEvent *event) override;
};
#endif // COCKATRICE_VISUAL_DATABASE_DISPLAY_FILTER_TOOLBAR_WIDGET_H