lbajardsilogic@16: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
lbajardsilogic@16:
lbajardsilogic@16: /*
lbajardsilogic@16: Sound Access
lbajardsilogic@16: EASAIER client application.
lbajardsilogic@16: Silogic 2007. Luc Barthélémy.
lbajardsilogic@16:
lbajardsilogic@16: This program is free software; you can redistribute it and/or
lbajardsilogic@16: modify it under the terms of the GNU General Public License as
lbajardsilogic@16: published by the Free Software Foundation; either version 2 of the
lbajardsilogic@16: License, or (at your option) any later version. See the file
lbajardsilogic@16: COPYING included with this distribution for more information.
lbajardsilogic@16: */
lbajardsilogic@16:
lbajardsilogic@16:
lbajardsilogic@16: #include "system/System.h"
lbajardsilogic@16: #include "model/IntervalModel.h"
lbajardsilogic@16:
lbajardsilogic@16:
lbajardsilogic@16:
lbajardsilogic@16: TimeInterval::TimeInterval(long start, long end, float value):
lbajardsilogic@16: m_start(start), m_end(end), m_value(value)
lbajardsilogic@16: {
lbajardsilogic@16: }
lbajardsilogic@16:
lbajardsilogic@16: TimeInterval::TimeInterval(long start, long end, const QString& label, float value):
lbajardsilogic@16: m_start(start), m_end(end), m_label(label), m_value(value)
lbajardsilogic@16: {
lbajardsilogic@16: }
lbajardsilogic@16:
lbajardsilogic@16: TimeInterval::~TimeInterval()
lbajardsilogic@16: {
lbajardsilogic@16: }
lbajardsilogic@16:
lbajardsilogic@16: QString
lbajardsilogic@16: TimeInterval::toXmlString(QString indent , QString extraAttributes ) const
lbajardsilogic@16: {
lbajardsilogic@16: return QString("%1\n")
lbajardsilogic@16: .arg(indent).arg(m_start).arg(m_end).arg(m_label)
lbajardsilogic@16: .arg(m_value).arg(extraAttributes);
lbajardsilogic@16: }
lbajardsilogic@16:
lbajardsilogic@16: QString
lbajardsilogic@16: TimeInterval::toDelimitedDataString(const QString& delimiter, size_t sampleRate) const
lbajardsilogic@16: {
lbajardsilogic@16: QStringList list;
lbajardsilogic@16: list << RealTime::frame2RealTime(m_start, sampleRate).toString().c_str();
lbajardsilogic@16: list << RealTime::frame2RealTime(m_end, sampleRate).toString().c_str();
lbajardsilogic@16: list << QString("%1").arg(m_value);
lbajardsilogic@16: list << m_label;
lbajardsilogic@16:
lbajardsilogic@16: return list.join(delimiter);
lbajardsilogic@16: }
lbajardsilogic@16:
lbajardsilogic@16: /**
lbajardsilogic@16: * IntervalModel
lbajardsilogic@16: */
lbajardsilogic@16:
lbajardsilogic@16: IntervalModel::IntervalModel(size_t sampleRate, size_t resolution, bool notifyOnAdd) :
lbajardsilogic@16: m_sampleRate(sampleRate), m_resolution(resolution), m_notifyOnAdd(notifyOnAdd)
lbajardsilogic@16: {
lbajardsilogic@16:
lbajardsilogic@16:
lbajardsilogic@16: }
lbajardsilogic@16:
lbajardsilogic@16: IntervalModel::~IntervalModel()
lbajardsilogic@16: {
lbajardsilogic@16:
lbajardsilogic@16: }
lbajardsilogic@16:
lbajardsilogic@16: QString
lbajardsilogic@16: IntervalModel::toDelimitedDataString(QString delimiter) const
lbajardsilogic@16: {
lbajardsilogic@16: QString s;
lbajardsilogic@16: for (IntervalListConstIterator i = m_intervals.begin(); i != m_intervals.end(); ++i)
lbajardsilogic@16: {
lbajardsilogic@16: s += (*i)->toDelimitedDataString(delimiter, m_sampleRate) + "\n";
lbajardsilogic@16: }
lbajardsilogic@16:
lbajardsilogic@16: return s;
lbajardsilogic@16: }
lbajardsilogic@16:
lbajardsilogic@16: QString
lbajardsilogic@16: IntervalModel::toXmlString(QString indent, QString extraAttributes) const
lbajardsilogic@16: {
lbajardsilogic@16: QString s;
lbajardsilogic@16:
lbajardsilogic@16: s += Model::toXmlString
lbajardsilogic@16: (indent, QString("type=\"interval\" dimensions=\"3\" resolution=\"%1\" notifyOnAdd=\"%2\" dataset=\"%3\" %4")
lbajardsilogic@16: .arg(m_resolution)
lbajardsilogic@16: .arg(m_notifyOnAdd ? "true" : "false")
lbajardsilogic@16: .arg(getObjectExportId(&m_intervals))
lbajardsilogic@16: .arg(extraAttributes));
lbajardsilogic@16:
lbajardsilogic@16: s += indent;
lbajardsilogic@16: s += QString("\n")
lbajardsilogic@16: .arg(getObjectExportId(&m_intervals));
lbajardsilogic@16:
lbajardsilogic@16: for (IntervalListConstIterator i = m_intervals.begin(); i != m_intervals.end(); ++i)
lbajardsilogic@16: {
lbajardsilogic@16: s += (*i)->toXmlString(indent + " ");
lbajardsilogic@16: }
lbajardsilogic@16:
lbajardsilogic@16: s += indent + "\n";
lbajardsilogic@16:
lbajardsilogic@16: return s;
lbajardsilogic@16: }
lbajardsilogic@16:
lbajardsilogic@16: size_t
lbajardsilogic@16: IntervalModel::getStartFrame() const
lbajardsilogic@16: {
lbajardsilogic@16: QMutexLocker locker(&m_mutex);
lbajardsilogic@16:
lbajardsilogic@16: size_t start= 0;
lbajardsilogic@16:
lbajardsilogic@16: if (m_intervals.size() > 0)
lbajardsilogic@16: start = (*m_intervals.begin())->start();
lbajardsilogic@16:
lbajardsilogic@16: for (IntervalListConstIterator i = m_intervals.begin() ; i != m_intervals.end(); ++i)
lbajardsilogic@16: {
lbajardsilogic@16: if (start > ((size_t) ((*i)->start())))
lbajardsilogic@16: start = (size_t) ((*i)->start());
lbajardsilogic@16: }
lbajardsilogic@16:
lbajardsilogic@16: return start;
lbajardsilogic@16: }
lbajardsilogic@16:
lbajardsilogic@16: size_t
lbajardsilogic@16: IntervalModel::getEndFrame() const
lbajardsilogic@16: {
lbajardsilogic@16: QMutexLocker locker(&m_mutex);
lbajardsilogic@16:
lbajardsilogic@16: size_t end = 0;
lbajardsilogic@16:
lbajardsilogic@16: for (IntervalListConstIterator i = m_intervals.begin() ; i != m_intervals.end(); ++i)
lbajardsilogic@16: {
lbajardsilogic@16: if (end < ((size_t) ((*i)->end())))
lbajardsilogic@16: end = (size_t) ((*i)->end());
lbajardsilogic@16: }
lbajardsilogic@16:
lbajardsilogic@16: return end;
lbajardsilogic@16: }
lbajardsilogic@16:
lbajardsilogic@16: Model*
lbajardsilogic@16: IntervalModel::clone() const
lbajardsilogic@16: {
lbajardsilogic@16: IntervalModel* model = new IntervalModel(m_sampleRate, m_resolution, m_notifyOnAdd);
lbajardsilogic@16: model->m_intervals = m_intervals;
lbajardsilogic@16:
lbajardsilogic@16: return model;
lbajardsilogic@16: }
lbajardsilogic@16:
lbajardsilogic@16: void
lbajardsilogic@16: IntervalModel::addInterval(long start, long end, const QString& label, float value)
lbajardsilogic@16: {
lbajardsilogic@16: QMutexLocker locker(&m_mutex);
lbajardsilogic@16:
lbajardsilogic@16: m_intervals.push_back(new TimeInterval(start, end, label, value));
lbajardsilogic@16: }
lbajardsilogic@16:
lbajardsilogic@16: void IntervalModel::addInterval(TimeIntervalPtr ti)
lbajardsilogic@16: {
lbajardsilogic@16: {
lbajardsilogic@16: QMutexLocker locker(&m_mutex);
lbajardsilogic@16:
lbajardsilogic@16: m_intervals.push_back(ti);
lbajardsilogic@16: }
lbajardsilogic@16:
lbajardsilogic@16: emit modelChanged(ti->start(), ti->end());
lbajardsilogic@16: }
lbajardsilogic@16:
lbajardsilogic@16: void IntervalModel::removeInterval(TimeIntervalPtr ti)
lbajardsilogic@16: {
lbajardsilogic@16: {
lbajardsilogic@16: QMutexLocker locker(&m_mutex);
lbajardsilogic@16:
lbajardsilogic@16: m_intervals.remove(ti);
lbajardsilogic@16: }
lbajardsilogic@16:
lbajardsilogic@16: emit modelChanged(ti->start(), ti->end());
lbajardsilogic@16: }
lbajardsilogic@16:
lbajardsilogic@16: void
lbajardsilogic@16: IntervalModel::changeInterval(TimeIntervalPtr ti, long start, long end, float value, const QString& label)
lbajardsilogic@16: {
lbajardsilogic@16:
lbajardsilogic@16: long startMin = min(start, ti->start());
lbajardsilogic@16: long endMax = max(end, ti->end());
lbajardsilogic@16:
lbajardsilogic@16: {
lbajardsilogic@16: QMutexLocker locker(&m_mutex);
lbajardsilogic@16:
lbajardsilogic@16: if (label != ti->label())
lbajardsilogic@16: ti->label(label);
lbajardsilogic@16: ti->start(start);
lbajardsilogic@16: ti->end(end);
lbajardsilogic@16: ti->value(value);
lbajardsilogic@16: }
lbajardsilogic@16:
lbajardsilogic@16: emit modelChanged(startMin, endMax);
lbajardsilogic@16: }
lbajardsilogic@16:
lbajardsilogic@16: