#include "./syncthingstatuscomputionmodel.h" #include #include using namespace QtUtilities; namespace Data { using FlagType = SyncthingStatusComputionFlags; using UnderlyingFlagType = std::underlying_type_t; inline static ChecklistItem itemFor(SyncthingStatusComputionFlags oneFlag) { return ChecklistItem( static_cast(oneFlag), QString(), SyncthingStatusComputionFlags::Default & oneFlag ? Qt::Checked : Qt::Unchecked); } SyncthingStatusComputionModel::SyncthingStatusComputionModel(QObject *parent) : ChecklistModel(parent) { setItems({ itemFor(SyncthingStatusComputionFlags::Scanning), itemFor(SyncthingStatusComputionFlags::Synchronizing), itemFor(SyncthingStatusComputionFlags::RemoteSynchronizing), itemFor(SyncthingStatusComputionFlags::DevicePaused), }); } QString SyncthingStatusComputionModel::labelForId(const QVariant &id) const { switch (static_cast(id.toInt())) { case SyncthingStatusComputionFlags::Scanning: return tr("Local dir is scanning"); case SyncthingStatusComputionFlags::Synchronizing: return tr("Local dir is synchronizing"); case SyncthingStatusComputionFlags::RemoteSynchronizing: return tr("Remote dir has outstanding progress"); case SyncthingStatusComputionFlags::DevicePaused: return tr("A device is paused"); default: return id.toString(); } } SyncthingStatusComputionFlags SyncthingStatusComputionModel::statusComputionFlags() const { auto flags = SyncthingStatusComputionFlags::None; for (auto row = 0, rows = rowCount(); row != rows; ++row) { const auto i = index(row); if (i.data(Qt::CheckStateRole).toInt() == Qt::Checked) { flags += static_cast(i.data(idRole()).value()); } } return flags; } void SyncthingStatusComputionModel::setStatusComputionFlags(SyncthingStatusComputionFlags flags) { for (auto row = 0, rows = rowCount(); row != rows; ++row) { const auto i = index(row); setData(i, flags & static_cast(i.data(idRole()).value()) ? Qt::Checked : Qt::Unchecked, Qt::CheckStateRole); } } } // namespace Data