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); +	} +}  | 
