+void DolphinStatusBar::updateWidthToContent()
+{
+ if (GeneralSettings::showStatusBar() == GeneralSettings::EnumShowStatusBar::Small) {
+ QStyleOptionSlider opt;
+ opt.initFrom(this);
+ opt.orientation = Qt::Vertical;
+ const QSize labelSize = QFontMetrics(font()).size(Qt::TextSingleLine, m_label->fullText());
+ // Make sure minimum height takes clipping into account.
+ setMinimumHeight(m_label->height() + clippingAmount());
+ const int scrollbarWidth = style()->pixelMetric(QStyle::PM_ScrollBarExtent, &opt, this);
+ const int maximumViewWidth = parentWidget()->width() - scrollbarWidth;
+ if (m_stopButton->isVisible() || m_progressTextLabel->isVisible() || m_progressBar->isVisible()) {
+ // Use maximum width when interactable elements are shown, to keep them
+ // from "jumping around" when user tries to interact with them.
+ setFixedWidth(maximumViewWidth);
+ } else {
+ const int contentWidth = labelSize.width() + 15;
+ setFixedWidth(qMin(contentWidth, maximumViewWidth));
+ }
+ Q_EMIT widthUpdated();
+ } else {
+ setMinimumHeight(0);
+ setFixedWidth(QWIDGETSIZE_MAX);
+ Q_EMIT widthUpdated();
+ }
+}
+
+int DolphinStatusBar::clippingAmount() const
+{
+ QStyleOption opt;
+ opt.initFrom(this);
+ // Add 2 for extra padding due to how QRect coordinates work.
+ const int val = 2 + style()->pixelMetric(QStyle::PM_SplitterWidth, &opt, this) * 2;
+ return val;
+}
+
+void DolphinStatusBar::updateMode()
+{
+ switch (GeneralSettings::showStatusBar()) {
+ case GeneralSettings::EnumShowStatusBar::Small:
+ setEnabled(true);
+ m_spaceInfo->setShown(false);
+ m_zoomSlider->setVisible(false);
+ m_zoomLabel->setVisible(false);
+ setVisible(true, WithAnimation);
+ break;
+ case GeneralSettings::EnumShowStatusBar::FullWidth:
+ setEnabled(true);
+ m_spaceInfo->setShown(true);
+ setVisible(true, WithAnimation);
+ break;
+ case GeneralSettings::EnumShowStatusBar::Disabled:
+ setEnabled(false);
+ setVisible(false, WithoutAnimation);
+ break;
+ }
+ Q_EMIT modeUpdated();
+ updateWidthToContent();
+}
+