Files
att_browser/src/statusbar.cpp
T

74 lines
2.0 KiB
C++

#include "statusbar.h"
#include <QHBoxLayout>
#include <QLabel>
#include <QStyle>
#include <QTimer>
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);
}