/** * @RDE_HEADER@ * Exercise Phase Overview Model * $Id$ * $HeadURL$ * $Author$ * Created by Christian Ehrlicher, SLSE, 2017-04-11 */ #include "exm_phase_model.h" namespace ExerciseManagement { //--------------------------------- // ExercisePhaseModel //--------------------------------- ExercisePhaseModel::ExercisePhaseModel(QObject *parent) : LtsWidgets::LtsAbstractTableModel({tr("Phase"), tr("Start"), tr("End"), tr("Description"), tr("Exercise-Id")}, parent) , m_exmDtc(nullptr) , m_logger(getLogger("ExercisePhaseModel")) {} bool ExercisePhaseModel::initModel(int exerciseId, const std::shared_ptr &dtc) { m_exerciseId = exerciseId; m_exmDtc = dtc; connect(m_exmDtc.get(), &ExerciseManagement::Interface::Dtc::exercisePhaseChanged, this, &ExercisePhaseModel::onDataChanged); // insert Model m_exmDtc->exercisePhases([this](const ExercisePhase &item) { insertRow(item); }); INFO_LOG(m_logger) << "initModel - #exercise phases: " << m_vecData.size(); return true; } QVariant ExercisePhaseModel::data(const QModelIndex &index, int role) const { if (!index.isValid() || role != Qt::DisplayRole || index.row() >= m_vecData.size()) return QVariant(); if (role == Qt::DisplayRole) { const ExerciseManagement::ExercisePhase &exPhase = m_vecData.at(index.row()); switch (index.column()) { case Name: return QString::fromStdString(exPhase.name()); case Start: return QDateTime::fromMSecsSinceEpoch(exPhase.beginTime()); case End: return QDateTime::fromMSecsSinceEpoch(exPhase.endTime()); case Description: return QString::fromStdString(exPhase.description()); case ExerciseId: return (exPhase.exerciseId()); } } return QVariant(); } // // ExercisePhaseProxyModel // void ExercisePhaseProxyModel::setSourceModel(QAbstractItemModel *sourceModel) { m_sourceModel = qobject_cast(sourceModel); LtsWidgets::LtsColumnFilterProxyModel::setSourceModel(sourceModel); } bool ExercisePhaseProxyModel::lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const { if (!m_sourceModel || source_left.column() != source_right.column() || !source_left.isValid() || !source_right.isValid()) return LtsWidgets::LtsColumnFilterProxyModel::lessThan(source_left, source_right); const auto &dataLeft = m_sourceModel->m_vecData.at(source_left.row()); const auto dataRight = m_sourceModel->m_vecData.at(source_right.row()); switch (source_left.column()) { case ExercisePhaseModel::Start: return dataLeft.beginTime() < dataRight.beginTime(); case ExercisePhaseModel::End: return dataLeft.endTime() < dataRight.endTime(); case ExercisePhaseModel::Name: case ExercisePhaseModel::Description: case ExercisePhaseModel::ExerciseId: break; } return LtsWidgets::LtsColumnFilterProxyModel::lessThan(source_left, source_right); } } // namespace ExerciseManagement