aboutsummaryrefslogtreecommitdiff
path: root/paperreplaymodel.cc
diff options
context:
space:
mode:
Diffstat (limited to 'paperreplaymodel.cc')
-rw-r--r--paperreplaymodel.cc119
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);
+ }
+}