annotate data/model/IntervalModel.cpp @ 282:d9319859a4cf tip

(none)
author benoitrigolleau
date Fri, 31 Oct 2008 11:00:24 +0000
parents ff8187498612
children
rev   line source
lbajardsilogic@16 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
lbajardsilogic@16 2
lbajardsilogic@16 3 /*
lbajardsilogic@16 4 Sound Access
lbajardsilogic@16 5 EASAIER client application.
lbajardsilogic@16 6 Silogic 2007. Luc Barthélémy.
lbajardsilogic@16 7
lbajardsilogic@16 8 This program is free software; you can redistribute it and/or
lbajardsilogic@16 9 modify it under the terms of the GNU General Public License as
lbajardsilogic@16 10 published by the Free Software Foundation; either version 2 of the
lbajardsilogic@16 11 License, or (at your option) any later version. See the file
lbajardsilogic@16 12 COPYING included with this distribution for more information.
lbajardsilogic@16 13 */
lbajardsilogic@16 14
lbajardsilogic@16 15
lbajardsilogic@16 16 #include "system/System.h"
lbajardsilogic@16 17 #include "model/IntervalModel.h"
lbajardsilogic@16 18
lbajardsilogic@48 19 #include <QTextStream>
lbajardsilogic@16 20
lbajardsilogic@16 21
lbajardsilogic@16 22 TimeInterval::TimeInterval(long start, long end, float value):
lbajardsilogic@16 23 m_start(start), m_end(end), m_value(value)
lbajardsilogic@16 24 {
lbajardsilogic@16 25 }
lbajardsilogic@16 26
lbajardsilogic@16 27 TimeInterval::TimeInterval(long start, long end, const QString& label, float value):
lbajardsilogic@16 28 m_start(start), m_end(end), m_label(label), m_value(value)
lbajardsilogic@16 29 {
lbajardsilogic@16 30 }
lbajardsilogic@16 31
lbajardsilogic@16 32 TimeInterval::~TimeInterval()
lbajardsilogic@16 33 {
lbajardsilogic@16 34 }
lbajardsilogic@16 35
lbajardsilogic@16 36 QString
lbajardsilogic@16 37 TimeInterval::toXmlString(QString indent , QString extraAttributes ) const
lbajardsilogic@16 38 {
lbajardsilogic@16 39 return QString("%1<interval start=\"%2\" end=\"%3\" label=\"%4\" value=\"%5\" %6/>\n")
lbajardsilogic@16 40 .arg(indent).arg(m_start).arg(m_end).arg(m_label)
lbajardsilogic@16 41 .arg(m_value).arg(extraAttributes);
lbajardsilogic@16 42 }
lbajardsilogic@16 43
lbajardsilogic@16 44 QString
lbajardsilogic@16 45 TimeInterval::toDelimitedDataString(const QString& delimiter, size_t sampleRate) const
lbajardsilogic@16 46 {
lbajardsilogic@16 47 QStringList list;
lbajardsilogic@16 48 list << RealTime::frame2RealTime(m_start, sampleRate).toString().c_str();
lbajardsilogic@16 49 list << RealTime::frame2RealTime(m_end, sampleRate).toString().c_str();
lbajardsilogic@16 50 list << QString("%1").arg(m_value);
lbajardsilogic@16 51 list << m_label;
lbajardsilogic@16 52
lbajardsilogic@16 53 return list.join(delimiter);
lbajardsilogic@16 54 }
lbajardsilogic@16 55
lbajardsilogic@16 56 /**
lbajardsilogic@16 57 * IntervalModel
lbajardsilogic@16 58 */
lbajardsilogic@16 59
lbajardsilogic@16 60 IntervalModel::IntervalModel(size_t sampleRate, size_t resolution, bool notifyOnAdd) :
lbajardsilogic@261 61 m_sampleRate(sampleRate), m_resolution(resolution), m_notifyOnAdd(notifyOnAdd),
lbajardsilogic@261 62 m_meanValue(0.2)
lbajardsilogic@16 63 {
lbajardsilogic@16 64
lbajardsilogic@16 65
lbajardsilogic@16 66 }
lbajardsilogic@16 67
lbajardsilogic@16 68 IntervalModel::~IntervalModel()
lbajardsilogic@16 69 {
lbajardsilogic@16 70
lbajardsilogic@16 71 }
lbajardsilogic@16 72
lbajardsilogic@16 73 QString
lbajardsilogic@16 74 IntervalModel::toDelimitedDataString(QString delimiter) const
lbajardsilogic@16 75 {
lbajardsilogic@16 76 QString s;
lbajardsilogic@16 77 for (IntervalListConstIterator i = m_intervals.begin(); i != m_intervals.end(); ++i)
lbajardsilogic@16 78 {
lbajardsilogic@16 79 s += (*i)->toDelimitedDataString(delimiter, m_sampleRate) + "\n";
lbajardsilogic@16 80 }
lbajardsilogic@16 81
lbajardsilogic@16 82 return s;
lbajardsilogic@16 83 }
lbajardsilogic@16 84
lbajardsilogic@48 85 void
lbajardsilogic@48 86 IntervalModel::toXml(QTextStream &out,
lbajardsilogic@48 87 QString indent,
lbajardsilogic@48 88 QString extraAttributes) const
lbajardsilogic@16 89 {
lbajardsilogic@48 90 out << Model::toXmlString
lbajardsilogic@16 91 (indent, QString("type=\"interval\" dimensions=\"3\" resolution=\"%1\" notifyOnAdd=\"%2\" dataset=\"%3\" %4")
lbajardsilogic@16 92 .arg(m_resolution)
lbajardsilogic@16 93 .arg(m_notifyOnAdd ? "true" : "false")
lbajardsilogic@16 94 .arg(getObjectExportId(&m_intervals))
lbajardsilogic@16 95 .arg(extraAttributes));
lbajardsilogic@16 96
lbajardsilogic@48 97 out << indent;
lbajardsilogic@48 98 out << QString("<dataset id=\"%1\" dimensions=\"3\">\n")
lbajardsilogic@16 99 .arg(getObjectExportId(&m_intervals));
lbajardsilogic@16 100
lbajardsilogic@16 101 for (IntervalListConstIterator i = m_intervals.begin(); i != m_intervals.end(); ++i)
lbajardsilogic@16 102 {
lbajardsilogic@48 103 out << (*i)->toXmlString(indent + " ");
lbajardsilogic@16 104 }
lbajardsilogic@16 105
lbajardsilogic@48 106 out << indent + "</dataset>\n";
lbajardsilogic@48 107 }
lbajardsilogic@48 108
lbajardsilogic@48 109 QString
lbajardsilogic@48 110 IntervalModel::toXmlString(QString indent,
lbajardsilogic@48 111 QString extraAttributes) const
lbajardsilogic@48 112 {
lbajardsilogic@48 113 QString s;
lbajardsilogic@48 114
lbajardsilogic@48 115 {
lbajardsilogic@48 116 QTextStream out(&s);
lbajardsilogic@48 117 toXml(out, indent, extraAttributes);
lbajardsilogic@48 118 }
lbajardsilogic@16 119
lbajardsilogic@16 120 return s;
lbajardsilogic@16 121 }
lbajardsilogic@16 122
lbajardsilogic@16 123 size_t
lbajardsilogic@16 124 IntervalModel::getStartFrame() const
lbajardsilogic@16 125 {
lbajardsilogic@16 126 QMutexLocker locker(&m_mutex);
lbajardsilogic@16 127
lbajardsilogic@16 128 size_t start= 0;
lbajardsilogic@16 129
lbajardsilogic@16 130 if (m_intervals.size() > 0)
lbajardsilogic@16 131 start = (*m_intervals.begin())->start();
lbajardsilogic@16 132
lbajardsilogic@16 133 for (IntervalListConstIterator i = m_intervals.begin() ; i != m_intervals.end(); ++i)
lbajardsilogic@16 134 {
lbajardsilogic@16 135 if (start > ((size_t) ((*i)->start())))
lbajardsilogic@16 136 start = (size_t) ((*i)->start());
lbajardsilogic@16 137 }
lbajardsilogic@16 138
lbajardsilogic@16 139 return start;
lbajardsilogic@16 140 }
lbajardsilogic@16 141
lbajardsilogic@16 142 size_t
lbajardsilogic@16 143 IntervalModel::getEndFrame() const
lbajardsilogic@16 144 {
lbajardsilogic@16 145 QMutexLocker locker(&m_mutex);
lbajardsilogic@16 146
lbajardsilogic@16 147 size_t end = 0;
lbajardsilogic@16 148
lbajardsilogic@16 149 for (IntervalListConstIterator i = m_intervals.begin() ; i != m_intervals.end(); ++i)
lbajardsilogic@16 150 {
lbajardsilogic@16 151 if (end < ((size_t) ((*i)->end())))
lbajardsilogic@16 152 end = (size_t) ((*i)->end());
lbajardsilogic@16 153 }
lbajardsilogic@16 154
lbajardsilogic@16 155 return end;
lbajardsilogic@16 156 }
lbajardsilogic@16 157
lbajardsilogic@16 158 Model*
lbajardsilogic@16 159 IntervalModel::clone() const
lbajardsilogic@16 160 {
lbajardsilogic@16 161 IntervalModel* model = new IntervalModel(m_sampleRate, m_resolution, m_notifyOnAdd);
lbajardsilogic@16 162 model->m_intervals = m_intervals;
lbajardsilogic@16 163
lbajardsilogic@16 164 return model;
lbajardsilogic@16 165 }
lbajardsilogic@16 166
lbajardsilogic@16 167 void
lbajardsilogic@16 168 IntervalModel::addInterval(long start, long end, const QString& label, float value)
lbajardsilogic@16 169 {
lbajardsilogic@16 170 QMutexLocker locker(&m_mutex);
lbajardsilogic@16 171
lbajardsilogic@16 172 m_intervals.push_back(new TimeInterval(start, end, label, value));
lbajardsilogic@16 173 }
lbajardsilogic@16 174
lbajardsilogic@16 175 void IntervalModel::addInterval(TimeIntervalPtr ti)
lbajardsilogic@16 176 {
lbajardsilogic@16 177 {
lbajardsilogic@16 178 QMutexLocker locker(&m_mutex);
lbajardsilogic@16 179
lbajardsilogic@16 180 m_intervals.push_back(ti);
lbajardsilogic@16 181 }
lbajardsilogic@16 182
lbajardsilogic@16 183 emit modelChanged(ti->start(), ti->end());
lbajardsilogic@16 184 }
lbajardsilogic@16 185
lbajardsilogic@16 186 void IntervalModel::removeInterval(TimeIntervalPtr ti)
lbajardsilogic@16 187 {
lbajardsilogic@16 188 {
lbajardsilogic@16 189 QMutexLocker locker(&m_mutex);
lbajardsilogic@16 190
lbajardsilogic@16 191 m_intervals.remove(ti);
lbajardsilogic@16 192 }
lbajardsilogic@16 193
lbajardsilogic@16 194 emit modelChanged(ti->start(), ti->end());
lbajardsilogic@16 195 }
lbajardsilogic@16 196
lbajardsilogic@16 197 void
lbajardsilogic@16 198 IntervalModel::changeInterval(TimeIntervalPtr ti, long start, long end, float value, const QString& label)
lbajardsilogic@16 199 {
lbajardsilogic@16 200
lbajardsilogic@190 201 long startMin = MIN(start, ti->start());
lbajardsilogic@190 202 long endMax = MAX(end, ti->end());
lbajardsilogic@16 203
lbajardsilogic@16 204 {
lbajardsilogic@16 205 QMutexLocker locker(&m_mutex);
lbajardsilogic@16 206
lbajardsilogic@16 207 if (label != ti->label())
lbajardsilogic@16 208 ti->label(label);
lbajardsilogic@16 209 ti->start(start);
lbajardsilogic@16 210 ti->end(end);
lbajardsilogic@16 211 ti->value(value);
lbajardsilogic@16 212 }
lbajardsilogic@16 213
lbajardsilogic@16 214 emit modelChanged(startMin, endMax);
lbajardsilogic@16 215 }
lbajardsilogic@16 216
lbajardsilogic@16 217