diff options
Diffstat (limited to 'paperreplaymodel.cc')
-rw-r--r-- | paperreplaymodel.cc | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/paperreplaymodel.cc b/paperreplaymodel.cc new file mode 100644 index 0000000..e818b9c --- /dev/null +++ b/paperreplaymodel.cc @@ -0,0 +1,119 @@ +#include "smartpen.h" +#include "notebookmodel.h" +#include "paperreplaymodel.h" + +PaperReplayModel::PaperReplayModel(PaperReplay *replay, QObject *parent) : + QAbstractTableModel(parent), _replay(replay) +{ +} + +QVariant PaperReplayModel::data(const QModelIndex &index, int role) const +{ + if (!index.isValid()) return QVariant(); + int row = index.row(); + int column = index.column(); + const PaperReplay::Session &session = _sessions.at(row); + switch (column) { + case 0: + switch (role) { + case Qt::DisplayRole: + return getSessionName(session); + } + break; + case 1: + switch (role) { + case Qt::DisplayRole: + return getSessionLength(session); + } + break; + } + + return QVariant(); +} + +QVariant PaperReplayModel::headerData(int section, Qt::Orientation orientation, int role) const +{ + switch (orientation) { + case Qt::Horizontal: + switch (section) { + case 0: + switch (role) { + case Qt::DisplayRole: + return tr("Recording"); + } + break; + case 1: + switch (role) { + case Qt::DisplayRole: + return tr("Length"); + } + break; + } + break; + case Qt::Vertical: + break; + } + return QVariant(); +} + +int PaperReplayModel::rowCount(const QModelIndex &parent) const +{ + if (parent.isValid()) return 0; + return _sessions.size(); +} + +int PaperReplayModel::columnCount(const QModelIndex &parent) const +{ + if (parent.isValid()) return 0; + return 2; +} + +QString PaperReplayModel::sessionFilename(const QModelIndex &index) const +{ + if (!index.isValid()) return QString(); + int row = index.row(); + const PaperReplay::Session &session = _sessions.at(row); + return session.fileName(); +} + +void PaperReplayModel::refresh() +{ + beginResetModel(); + _sessions = _replay->sessions(); + qSort(_sessions.begin(), _sessions.end(), PaperReplay::Session::startTimeLess); + endResetModel(); +} + +QString PaperReplayModel::getSessionName(const PaperReplay::Session &session) +{ + QString title = session.name(); + + if (title.isEmpty()) { + QDateTime date = Smartpen::fromPenTime(session.startTime()); + title = date.toString(Qt::DefaultLocaleLongDate); + } + + return title; +} + +QString PaperReplayModel::getSessionDate(const PaperReplay::Session &session) +{ + QDateTime date = Smartpen::fromPenTime(session.startTime()); + return date.toString(Qt::DefaultLocaleShortDate); +} + +QString PaperReplayModel::getSessionLength(const PaperReplay::Session &session) +{ + int secs = Smartpen::fromPenTime(session.startTime()).secsTo(Smartpen::fromPenTime(session.endTime())); + int mins = secs / 60; + secs %= 60; + int hours = mins / 60; + mins %= 60; + + const QChar fill('0'); + if (hours) { + return QString("%1:%2:%3").arg(hours).arg(mins, 2, 10, fill).arg(secs, 2, 10, fill); + } else { + return QString("%2:%3").arg(mins).arg(secs, 2, 10, fill); + } +} |