Pith - whittle
whittle/src/ui/StatusStrip.cpp [3.7 kb]
Modified: 19:51:45 130 026 (27 Jul 026)
0 Days Ago
#include "ui/StatusStrip.h"
#include "ui/Palette.h"
#include <QFontMetrics>
#include <QHBoxLayout>
#include <QLabel>
#include <QLocale>
#include <QPalette>
#include <QProgressBar>
#include <QResizeEvent>
#include <QStyle>
#include <QVBoxLayout>

namespace whittle {
namespace {

// progress bar width
constexpr int kBarWidth    = 600;
constexpr int kMinBarWidth = 400;

constexpr int kSpacing     = 8;
// status padding
constexpr int kPadAbove    = 0;
constexpr int kPadBelow    = 9;

QString human(qint64 b) {
    return QLocale().formattedDataSize(b, 1, QLocale::DataSizeTraditionalFormat);
}

}

StatusStrip::StatusStrip(QWidget* parent) : QWidget(parent) {
    m_status = new QLabel;
    m_detail = new QLabel;
    m_size   = new QLabel;
    m_errors = new QLabel;

    m_detail->setTextFormat(Qt::PlainText);
    m_detail->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Preferred);

    QPalette pal = m_errors->palette();
    pal.setColor(QPalette::WindowText, Palette::Skipped);
    m_errors->setPalette(pal);

    m_bar = new QProgressBar;
    m_bar->setTextVisible(false);
    m_bar->setMinimumWidth(kMinBarWidth);
    m_bar->setMaximumWidth(kBarWidth);

    const int side = style()->pixelMetric(QStyle::PM_LayoutLeftMargin);
    auto* h = new QHBoxLayout(this);
    h->setContentsMargins(side, kPadAbove, side, kPadBelow);
    h->setSpacing(kSpacing);
    h->addWidget(m_bar);
    h->addWidget(m_status);
    h->addWidget(m_detail, 1);
    h->addWidget(m_size);
    h->addWidget(m_errors);

    setDormant();
}

void StatusStrip::setStatus(const QString& text) {
    m_status->setText(text);
    m_status->setVisible(!text.isEmpty());
}

void StatusStrip::setDormant() {
    m_detailText.clear();
    m_detail->clear();
    m_size->clear();
    m_errors->clear();
    setStatus(tr("Whittle Me This"));
    m_bar->setRange(0, 1000);
    m_bar->setValue(0);
}

void StatusStrip::setScanning() {
    m_size->clear();
    m_errors->clear();
    setStatus(tr("Scanning..."));
    m_bar->setRange(0, 0);
}

void StatusStrip::setScanned() {
    m_size->clear();
    m_errors->clear();
    setStatus(QString());
    m_bar->setRange(0, 1000);
    m_bar->setValue(0);
}

void StatusStrip::setCounts(int folders, int files, qint64 bytes,
                            int newFiles, qint64 newBytes,
                            int diffFiles, qint64 diffBytes) {
    m_elide = Qt::ElideRight;
    m_detailText =
        tr("Folders: %1   Files: %2 (%3)   New: %4 (%5)   Different: %6 (%7)")
            .arg(folders)
            .arg(files).arg(human(bytes))
            .arg(newFiles).arg(human(newBytes))
            .arg(diffFiles).arg(human(diffBytes));
    updateDetail();
}

void StatusStrip::setMerging(const QString& relPath, qint64 fileBytes,
                             qint64 bytesDone, qint64 bytesTotal) {
    setStatus(tr("Merging:"));
    m_errors->clear();
    m_size->setText(relPath.isEmpty() ? QString() : human(fileBytes));
    m_elide      = Qt::ElideMiddle;
    m_detailText = relPath;
    updateDetail();
    m_bar->setRange(0, 1000);
    m_bar->setValue(bytesTotal > 0 ? int((bytesDone * 1000) / bytesTotal) : 1000);
}

void StatusStrip::setWhittled(int files, qint64 bytes, int errors) {
    m_detailText.clear();
    m_detail->clear();
    m_size->clear();
    setStatus(tr("Whittled: %1 (%2)").arg(files).arg(human(bytes)));
    m_errors->setText(errors > 0 ? tr("Errors: %1").arg(errors) : QString());
    m_bar->setRange(0, 1000);
    m_bar->setValue(1000);
}

void StatusStrip::updateDetail() {
    if (m_detailText.isEmpty()) { m_detail->clear(); return; }
    m_detail->setText(m_detail->fontMetrics().elidedText(
        m_detailText, m_elide, m_detail->width()));
}

void StatusStrip::resizeEvent(QResizeEvent* e) {
    QWidget::resizeEvent(e);
    updateDetail();
}

}
Updates
Whittle - Linux 130.026
Wedge - Android 126.026
Wedge - Linux 124.026
Shim - Android 117.026
Miter - 114.026
Dev
TVShow (227) 'CSA'
TVShow (228) 'APT'
TVProgram (83) 'BXT'
Miter Update(s)
Peen (Messaging)

Menu
Calendar
Project Tin (024/029)
Miter
RSS Feed
User Avatar
@vgmlr
=SUM(parts)