#include <QHelpEvent>
#include <QIcon>
#include <QMenu>
+#include <QPainter>
#include <QProgressBar>
#include <QSlider>
+#include <QStyleOption>
#include <QTimer>
#include <QToolButton>
}
DolphinStatusBar::DolphinStatusBar(QWidget *parent)
- : QWidget(parent)
+ : AnimatedHeightWidget(parent)
, m_text()
, m_defaultText()
, m_label(nullptr)
, m_delayUpdateTimer(nullptr)
, m_textTimestamp()
{
+ setProperty("_breeze_statusbar_separator", true);
+
+ QWidget *contentsContainer = prepareContentsContainer();
+
// Initialize text label
- m_label = new KSqueezedTextLabel(m_text, this);
- m_label->setWordWrap(true);
+ m_label = new KSqueezedTextLabel(m_text, contentsContainer);
m_label->setTextFormat(Qt::PlainText);
// Initialize zoom slider's explanatory label
- m_zoomLabel = new QLabel(i18nc("Used as a noun, i.e. 'Here is the zoom level:'", "Zoom:"), this);
+ m_zoomLabel = new KSqueezedTextLabel(i18nc("Used as a noun, i.e. 'Here is the zoom level:'", "Zoom:"), contentsContainer);
// Initialize zoom widget
- m_zoomSlider = new QSlider(Qt::Horizontal, this);
+ m_zoomSlider = new QSlider(Qt::Horizontal, contentsContainer);
m_zoomSlider->setAccessibleName(i18n("Zoom"));
m_zoomSlider->setAccessibleDescription(i18nc("Description for zoom-slider (accessibility)", "Sets the size of the file icons."));
m_zoomSlider->setPageStep(1);
connect(m_zoomSlider, &QSlider::sliderMoved, this, &DolphinStatusBar::showZoomSliderToolTip);
// Initialize space information
- m_spaceInfo = new StatusBarSpaceInfo(this);
+ m_spaceInfo = new StatusBarSpaceInfo(contentsContainer);
// Initialize progress information
- m_stopButton = new QToolButton(this);
+ m_stopButton = new QToolButton(contentsContainer);
m_stopButton->setIcon(QIcon::fromTheme(QStringLiteral("process-stop")));
m_stopButton->setAccessibleName(i18n("Stop"));
m_stopButton->setAutoRaise(true);
m_stopButton->hide();
connect(m_stopButton, &QToolButton::clicked, this, &DolphinStatusBar::stopPressed);
- m_progressTextLabel = new QLabel(this);
+ m_progressTextLabel = new QLabel(contentsContainer);
m_progressTextLabel->hide();
- m_progressBar = new QProgressBar(this);
+ m_progressBar = new QProgressBar(contentsContainer);
m_progressBar->hide();
m_showProgressBarTimer = new QTimer(this);
m_progressBar->setFixedHeight(zoomSliderHeight);
m_progressBar->setMaximumWidth(fontMetrics.averageCharWidth() * 20);
- QHBoxLayout *topLayout = new QHBoxLayout(this);
- topLayout->setContentsMargins(2, 0, 2, 0);
- topLayout->setSpacing(4);
- topLayout->addWidget(m_label, 1);
- topLayout->addWidget(m_zoomLabel);
- topLayout->addWidget(m_zoomSlider, 1);
- topLayout->addWidget(m_spaceInfo, 1);
- topLayout->addWidget(m_stopButton);
- topLayout->addWidget(m_progressTextLabel);
- topLayout->addWidget(m_progressBar);
-
- setVisible(GeneralSettings::showStatusBar());
+ m_topLayout = new QHBoxLayout(contentsContainer);
+ updateContentsMargins();
+ m_topLayout->setSpacing(4);
+ m_topLayout->addWidget(m_label, 1);
+ m_topLayout->addWidget(m_zoomLabel);
+ m_topLayout->addWidget(m_zoomSlider, 1);
+ m_topLayout->addWidget(m_spaceInfo, 1);
+ m_topLayout->addWidget(m_stopButton);
+ m_topLayout->addWidget(m_progressTextLabel);
+ m_topLayout->addWidget(m_progressBar);
+
+ setVisible(GeneralSettings::showStatusBar(), WithoutAnimation);
setExtensionsVisible(true);
setWhatsThis(xi18nc("@info:whatsthis Statusbar",
"<para>This is "
void DolphinStatusBar::readSettings()
{
- setVisible(GeneralSettings::showStatusBar());
+ setVisible(GeneralSettings::showStatusBar(), WithAnimation);
setExtensionsVisible(true);
}
showSpaceInfoAction->setCheckable(true);
showSpaceInfoAction->setChecked(GeneralSettings::showSpaceInfo());
- const QAction *action = menu.exec(QCursor::pos());
+ const QAction *action = menu.exec(event->reason() == QContextMenuEvent::Reason::Mouse ? QCursor::pos() : mapToGlobal(QPoint(width() / 2, height() / 2)));
if (action == showZoomSliderAction) {
const bool visible = showZoomSliderAction->isChecked();
GeneralSettings::setShowZoomSlider(visible);
GeneralSettings::setShowSpaceInfo(visible);
m_spaceInfo->setVisible(visible);
}
+ updateContentsMargins();
}
void DolphinStatusBar::showZoomSliderToolTip(int zoomLevel)
m_spaceInfo->setVisible(showSpaceInfo);
m_zoomSlider->setVisible(showZoomSlider);
m_zoomLabel->setVisible(showZoomSlider);
+ updateContentsMargins();
+}
+
+void DolphinStatusBar::updateContentsMargins()
+{
+ if (GeneralSettings::showSpaceInfo()) {
+ // We reduce the outside margin for the flat button so it visually has the same margin as the status bar text label on the other end of the bar.
+ m_topLayout->setContentsMargins(6, 0, 2, 0);
+ } else {
+ m_topLayout->setContentsMargins(6, 0, 6, 0);
+ }
+}
+
+void DolphinStatusBar::paintEvent(QPaintEvent *paintEvent)
+{
+ Q_UNUSED(paintEvent)
+ QPainter p(this);
+ QStyleOption opt;
+ opt.initFrom(this);
+ style()->drawPrimitive(QStyle::PE_PanelStatusBar, &opt, &p, this);
+}
+
+int DolphinStatusBar::preferredHeight() const
+{
+ return m_spaceInfo->height();
}
#include "moc_dolphinstatusbar.cpp"