annotate data/model/IntervalModel.cpp @ 97:486e44e12a5d

this version use only one servlet. Data is provide by stream capacity.
author benoitrigolleau
date Tue, 10 Jul 2007 16:01:13 +0000
parents a8dcc1ca82c4
children 61681a2bc1e6
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@16 61 m_sampleRate(sampleRate), m_resolution(resolution), m_notifyOnAdd(notifyOnAdd)
lbajardsilogic@16 62 {
lbajardsilogic@16 63
lbajardsilogic@16 64
lbajardsilogic@16 65 }
lbajardsilogic@16 66
lbajardsilogic@16 67 IntervalModel::~IntervalModel()
lbajardsilogic@16 68 {
lbajardsilogic@16 69
lbajardsilogic@16 70 }
lbajardsilogic@16 71
lbajardsilogic@16 72 QString
lbajardsilogic@16 73 IntervalModel::toDelimitedDataString(QString delimiter) const
lbajardsilogic@16 74 {
lbajardsilogic@16 75 QString s;
lbajardsilogic@16 76 for (IntervalListConstIterator i = m_intervals.begin(); i != m_intervals.end(); ++i)
lbajardsilogic@16 77 {
lbajardsilogic@16 78 s += (*i)->toDelimitedDataString(delimiter, m_sampleRate) + "\n";
lbajardsilogic@16 79 }
lbajardsilogic@16 80
lbajardsilogic@16 81 return s;
lbajardsilogic@16 82 }
lbajardsilogic@16 83
lbajardsilogic@48 84 void
lbajardsilogic@48 85 IntervalModel::toXml(QTextStream &out,
lbajardsilogic@48 86 QString indent,
lbajardsilogic@48 87 QString extraAttributes) const
lbajardsilogic@16 88 {
lbajardsilogic@48 89 out << Model::toXmlString
lbajardsilogic@16 90 (indent, QString("type=\"interval\" dimensions=\"3\" resolution=\"%1\" notifyOnAdd=\"%2\" dataset=\"%3\" %4")
lbajardsilogic@16 91 .arg(m_resolution)
lbajardsilogic@16 92 .arg(m_notifyOnAdd ? "true" : "false")
lbajardsilogic@16 93 .arg(getObjectExportId(&m_intervals))
lbajardsilogic@16 94 .arg(extraAttributes));
lbajardsilogic@16 95
lbajardsilogic@48 96 out << indent;
lbajardsilogic@48 97 out << QString("<dataset id=\"%1\" dimensions=\"3\">\n")
lbajardsilogic@16 98 .arg(getObjectExportId(&m_intervals));
lbajardsilogic@16 99
lbajardsilogic@16 100 for (IntervalListConstIterator i = m_intervals.begin(); i != m_intervals.end(); ++i)
lbajardsilogic@16 101 {
lbajardsilogic@48 102 out << (*i)->toXmlString(indent + " ");
lbajardsilogic@16 103 }
lbajardsilogic@16 104
lbajardsilogic@48 105 out << indent + "</dataset>\n";
lbajardsilogic@48 106 }
lbajardsilogic@48 107
lbajardsilogic@48 108 QString
lbajardsilogic@48 109 IntervalModel::toXmlString(QString indent,
lbajardsilogic@48 110 QString extraAttributes) const
lbajardsilogic@48 111 {
lbajardsilogic@48 112 QString s;
lbajardsilogic@48 113
lbajardsilogic@48 114 {
lbajardsilogic@48 115 QTextStream out(&s);
lbajardsilogic@48 116 toXml(out, indent, extraAttributes);
lbajardsilogic@48 117 }
lbajardsilogic@16 118
lbajardsilogic@16 119 return s;
lbajardsilogic@16 120 }
lbajardsilogic@16 121
lbajardsilogic@16 122 size_t
lbajardsilogic@16 123 IntervalModel::getStartFrame() const
lbajardsilogic@16 124 {
lbajardsilogic@16 125 QMutexLocker locker(&m_mutex);
lbajardsilogic@16 126
lbajardsilogic@16 127 size_t start= 0;
lbajardsilogic@16 128
lbajardsilogic@16 129 if (m_intervals.size() > 0)
lbajardsilogic@16 130 start = (*m_intervals.begin())->start();
lbajardsilogic@16 131
lbajardsilogic@16 132 for (IntervalListConstIterator i = m_intervals.begin() ; i != m_intervals.end(); ++i)
lbajardsilogic@16 133 {
lbajardsilogic@16 134 if (start > ((size_t) ((*i)->start())))
lbajardsilogic@16 135 start = (size_t) ((*i)->start());
lbajardsilogic@16 136 }
lbajardsilogic@16 137
lbajardsilogic@16 138 return start;
lbajardsilogic@16 139 }
lbajardsilogic@16 140
lbajardsilogic@16 141 size_t
lbajardsilogic@16 142 IntervalModel::getEndFrame() const
lbajardsilogic@16 143 {
lbajardsilogic@16 144 QMutexLocker locker(&m_mutex);
lbajardsilogic@16 145
lbajardsilogic@16 146 size_t end = 0;
lbajardsilogic@16 147
lbajardsilogic@16 148 for (IntervalListConstIterator i = m_intervals.begin() ; i != m_intervals.end(); ++i)
lbajardsilogic@16 149 {
lbajardsilogic@16 150 if (end < ((size_t) ((*i)->end())))
lbajardsilogic@16 151 end = (size_t) ((*i)->end());
lbajardsilogic@16 152 }
lbajardsilogic@16 153
lbajardsilogic@16 154 return end;
lbajardsilogic@16 155 }
lbajardsilogic@16 156
lbajardsilogic@16 157 Model*
lbajardsilogic@16 158 IntervalModel::clone() const
lbajardsilogic@16 159 {
lbajardsilogic@16 160 IntervalModel* model = new IntervalModel(m_sampleRate, m_resolution, m_notifyOnAdd);
lbajardsilogic@16 161 model->m_intervals = m_intervals;
lbajardsilogic@16 162
lbajardsilogic@16 163 return model;
lbajardsilogic@16 164 }
lbajardsilogic@16 165
lbajardsilogic@16 166 void
lbajardsilogic@16 167 IntervalModel::addInterval(long start, long end, const QString& label, float value)
lbajardsilogic@16 168 {
lbajardsilogic@16 169 QMutexLocker locker(&m_mutex);
lbajardsilogic@16 170
lbajardsilogic@16 171 m_intervals.push_back(new TimeInterval(start, end, label, value));
lbajardsilogic@16 172 }
lbajardsilogic@16 173
lbajardsilogic@16 174 void IntervalModel::addInterval(TimeIntervalPtr ti)
lbajardsilogic@16 175 {
lbajardsilogic@16 176 {
lbajardsilogic@16 177 QMutexLocker locker(&m_mutex);
lbajardsilogic@16 178
lbajardsilogic@16 179 m_intervals.push_back(ti);
lbajardsilogic@16 180 }
lbajardsilogic@16 181
lbajardsilogic@16 182 emit modelChanged(ti->start(), ti->end());
lbajardsilogic@16 183 }
lbajardsilogic@16 184
lbajardsilogic@16 185 void IntervalModel::removeInterval(TimeIntervalPtr ti)
lbajardsilogic@16 186 {
lbajardsilogic@16 187 {
lbajardsilogic@16 188 QMutexLocker locker(&m_mutex);
lbajardsilogic@16 189
lbajardsilogic@16 190 m_intervals.remove(ti);
lbajardsilogic@16 191 }
lbajardsilogic@16 192
lbajardsilogic@16 193 emit modelChanged(ti->start(), ti->end());
lbajardsilogic@16 194 }
lbajardsilogic@16 195
lbajardsilogic@16 196 void
lbajardsilogic@16 197 IntervalModel::changeInterval(TimeIntervalPtr ti, long start, long end, float value, const QString& label)
lbajardsilogic@16 198 {
lbajardsilogic@16 199
lbajardsilogic@16 200 long startMin = min(start, ti->start());
lbajardsilogic@16 201 long endMax = max(end, ti->end());
lbajardsilogic@16 202
lbajardsilogic@16 203 {
lbajardsilogic@16 204 QMutexLocker locker(&m_mutex);
lbajardsilogic@16 205
lbajardsilogic@16 206 if (label != ti->label())
lbajardsilogic@16 207 ti->label(label);
lbajardsilogic@16 208 ti->start(start);
lbajardsilogic@16 209 ti->end(end);
lbajardsilogic@16 210 ti->value(value);
lbajardsilogic@16 211 }
lbajardsilogic@16 212
lbajardsilogic@16 213 emit modelChanged(startMin, endMax);
lbajardsilogic@16 214 }
lbajardsilogic@16 215
lbajardsilogic@16 216