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