#include "statusbar.h" #include #include #include #include StatusBar::StatusBar(QWidget *parent) : QWidget(parent) , m_mode(new QLabel(this)) , m_url(new QLabel(this)) , m_progress(new QLabel(this)) { setObjectName(QStringLiteral("statusBar")); m_mode->setObjectName(QStringLiteral("statusMode")); m_url->setObjectName(QStringLiteral("statusUrl")); m_progress->setObjectName(QStringLiteral("statusProgress")); m_url->setTextInteractionFlags(Qt::NoTextInteraction); auto *layout = new QHBoxLayout(this); layout->setContentsMargins(4, 1, 4, 1); layout->setSpacing(8); layout->addWidget(m_mode); layout->addWidget(m_url, 1); layout->addWidget(m_progress); } void StatusBar::setMode(const QString &mode) { m_mode->setText(mode.isEmpty() ? QString() : QStringLiteral("-- %1 --").arg(mode.toUpper())); m_mode->setVisible(!mode.isEmpty()); } void StatusBar::setUrl(const QUrl &url) { m_urlText = url.toDisplayString(); m_insecure = url.scheme() == QLatin1String("http") || url.scheme() == QLatin1String("ws"); setUrlLabelState(false, m_insecure); m_url->setText(m_urlText); } void StatusBar::setProgress(int percent) { const bool loading = percent > 0 && percent < 100; m_progress->setText(loading ? QStringLiteral("[%1%]").arg(percent) : QString()); m_progress->setVisible(loading); } void StatusBar::showMessage(const QString &message, bool isError) { setUrlLabelState(isError, false); m_url->setText(message); QTimer::singleShot(4000, this, &StatusBar::clearMessage); } void StatusBar::clearMessage() { setUrlLabelState(false, m_insecure); m_url->setText(m_urlText); } void StatusBar::setUrlLabelState(bool error, bool insecure) { m_url->setProperty("error", error); m_url->setProperty("insecure", insecure); // Re-polish so the stylesheet picks up the changed properties. m_url->style()->unpolish(m_url); m_url->style()->polish(m_url); }