annotate data/model/IntervalModel.cpp @ 18:d8e6709e9075

add - EasaierSessionManager - Easaier menus - Interval model
author lbajardsilogic
date Mon, 14 May 2007 13:13:14 +0000
parents 21f452cc3310
children a8dcc1ca82c4
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@16 19
lbajardsilogic@16 20
lbajardsilogic@16 21 TimeInterval::TimeInterval(long start, long end, float value):
lbajardsilogic@16 22 m_start(start), m_end(end), m_value(value)
lbajardsilogic@16 23 {
lbajardsilogic@16 24 }
lbajardsilogic@16 25
lbajardsilogic@16 26 TimeInterval::TimeInterval(long start, long end, const QString& label, float value):
lbajardsilogic@16 27 m_start(start), m_end(end), m_label(label), m_value(value)
lbajardsilogic@16 28 {
lbajardsilogic@16 29 }
lbajardsilogic@16 30
lbajardsilogic@16 31 TimeInterval::~TimeInterval()
lbajardsilogic@16 32 {
lbajardsilogic@16 33 }
lbajardsilogic@16 34
lbajardsilogic@16 35 QString
lbajardsilogic@16 36 TimeInterval::toXmlString(QString indent , QString extraAttributes ) const
lbajardsilogic@16 37 {
lbajardsilogic@16 38 return QString("%1<interval start=\"%2\" end=\"%3\" label=\"%4\" value=\"%5\" %6/>\n")
lbajardsilogic@16 39 .arg(indent).arg(m_start).arg(m_end).arg(m_label)
lbajardsilogic@16 40 .arg(m_value).arg(extraAttributes);
lbajardsilogic@16 41 }
lbajardsilogic@16 42
lbajardsilogic@16 43 QString
lbajardsilogic@16 44 TimeInterval::toDelimitedDataString(const QString& delimiter, size_t sampleRate) const
lbajardsilogic@16 45 {
lbajardsilogic@16 46 QStringList list;
lbajardsilogic@16 47 list << RealTime::frame2RealTime(m_start, sampleRate).toString().c_str();
lbajardsilogic@16 48 list << RealTime::frame2RealTime(m_end, sampleRate).toString().c_str();
lbajardsilogic@16 49 list << QString("%1").arg(m_value);
lbajardsilogic@16 50 list << m_label;
lbajardsilogic@16 51
lbajardsilogic@16 52 return list.join(delimiter);
lbajardsilogic@16 53 }
lbajardsilogic@16 54
lbajardsilogic@16 55 /**
lbajardsilogic@16 56 * IntervalModel
lbajardsilogic@16 57 */
lbajardsilogic@16 58
lbajardsilogic@16 59 IntervalModel::IntervalModel(size_t sampleRate, size_t resolution, bool notifyOnAdd) :
lbajardsilogic@16 60 m_sampleRate(sampleRate), m_resolution(resolution), m_notifyOnAdd(notifyOnAdd)
lbajardsilogic@16 61 {
lbajardsilogic@16 62
lbajardsilogic@16 63
lbajardsilogic@16 64 }
lbajardsilogic@16 65
lbajardsilogic@16 66 IntervalModel::~IntervalModel()
lbajardsilogic@16 67 {
lbajardsilogic@16 68
lbajardsilogic@16 69 }
lbajardsilogic@16 70
lbajardsilogic@16 71 QString
lbajardsilogic@16 72 IntervalModel::toDelimitedDataString(QString delimiter) const
lbajardsilogic@16 73 {
lbajardsilogic@16 74 QString s;
lbajardsilogic@16 75 for (IntervalListConstIterator i = m_intervals.begin(); i != m_intervals.end(); ++i)
lbajardsilogic@16 76 {
lbajardsilogic@16 77 s += (*i)->toDelimitedDataString(delimiter, m_sampleRate) + "\n";
lbajardsilogic@16 78 }
lbajardsilogic@16 79
lbajardsilogic@16 80 return s;
lbajardsilogic@16 81 }
lbajardsilogic@16 82
lbajardsilogic@16 83 QString
lbajardsilogic@16 84 IntervalModel::toXmlString(QString indent, QString extraAttributes) const
lbajardsilogic@16 85 {
lbajardsilogic@16 86 QString s;
lbajardsilogic@16 87
lbajardsilogic@16 88 s += Model::toXmlString
lbajardsilogic@16 89 (indent, QString("type=\"interval\" dimensions=\"3\" resolution=\"%1\" notifyOnAdd=\"%2\" dataset=\"%3\" %4")
lbajardsilogic@16 90 .arg(m_resolution)
lbajardsilogic@16 91 .arg(m_notifyOnAdd ? "true" : "false")
lbajardsilogic@16 92 .arg(getObjectExportId(&m_intervals))
lbajardsilogic@16 93 .arg(extraAttributes));
lbajardsilogic@16 94
lbajardsilogic@16 95 s += indent;
lbajardsilogic@16 96 s += QString("<dataset id=\"%1\" dimensions=\"3\"\">\n")
lbajardsilogic@16 97 .arg(getObjectExportId(&m_intervals));
lbajardsilogic@16 98
lbajardsilogic@16 99 for (IntervalListConstIterator i = m_intervals.begin(); i != m_intervals.end(); ++i)
lbajardsilogic@16 100 {
lbajardsilogic@16 101 s += (*i)->toXmlString(indent + " ");
lbajardsilogic@16 102 }
lbajardsilogic@16 103
lbajardsilogic@16 104 s += indent + "</dataset>\n";
lbajardsilogic@16 105
lbajardsilogic@16 106 return s;
lbajardsilogic@16 107 }
lbajardsilogic@16 108
lbajardsilogic@16 109 size_t
lbajardsilogic@16 110 IntervalModel::getStartFrame() const
lbajardsilogic@16 111 {
lbajardsilogic@16 112 QMutexLocker locker(&m_mutex);
lbajardsilogic@16 113
lbajardsilogic@16 114 size_t start= 0;
lbajardsilogic@16 115
lbajardsilogic@16 116 if (m_intervals.size() > 0)
lbajardsilogic@16 117 start = (*m_intervals.begin())->start();
lbajardsilogic@16 118
lbajardsilogic@16 119 for (IntervalListConstIterator i = m_intervals.begin() ; i != m_intervals.end(); ++i)
lbajardsilogic@16 120 {
lbajardsilogic@16 121 if (start > ((size_t) ((*i)->start())))
lbajardsilogic@16 122 start = (size_t) ((*i)->start());
lbajardsilogic@16 123 }
lbajardsilogic@16 124
lbajardsilogic@16 125 return start;
lbajardsilogic@16 126 }
lbajardsilogic@16 127
lbajardsilogic@16 128 size_t
lbajardsilogic@16 129 IntervalModel::getEndFrame() const
lbajardsilogic@16 130 {
lbajardsilogic@16 131 QMutexLocker locker(&m_mutex);
lbajardsilogic@16 132
lbajardsilogic@16 133 size_t end = 0;
lbajardsilogic@16 134
lbajardsilogic@16 135 for (IntervalListConstIterator i = m_intervals.begin() ; i != m_intervals.end(); ++i)
lbajardsilogic@16 136 {
lbajardsilogic@16 137 if (end < ((size_t) ((*i)->end())))
lbajardsilogic@16 138 end = (size_t) ((*i)->end());
lbajardsilogic@16 139 }
lbajardsilogic@16 140
lbajardsilogic@16 141 return end;
lbajardsilogic@16 142 }
lbajardsilogic@16 143
lbajardsilogic@16 144 Model*
lbajardsilogic@16 145 IntervalModel::clone() const
lbajardsilogic@16 146 {
lbajardsilogic@16 147 IntervalModel* model = new IntervalModel(m_sampleRate, m_resolution, m_notifyOnAdd);
lbajardsilogic@16 148 model->m_intervals = m_intervals;
lbajardsilogic@16 149
lbajardsilogic@16 150 return model;
lbajardsilogic@16 151 }
lbajardsilogic@16 152
lbajardsilogic@16 153 void
lbajardsilogic@16 154 IntervalModel::addInterval(long start, long end, const QString& label, float value)
lbajardsilogic@16 155 {
lbajardsilogic@16 156 QMutexLocker locker(&m_mutex);
lbajardsilogic@16 157
lbajardsilogic@16 158 m_intervals.push_back(new TimeInterval(start, end, label, value));
lbajardsilogic@16 159 }
lbajardsilogic@16 160
lbajardsilogic@16 161 void IntervalModel::addInterval(TimeIntervalPtr ti)
lbajardsilogic@16 162 {
lbajardsilogic@16 163 {
lbajardsilogic@16 164 QMutexLocker locker(&m_mutex);
lbajardsilogic@16 165
lbajardsilogic@16 166 m_intervals.push_back(ti);
lbajardsilogic@16 167 }
lbajardsilogic@16 168
lbajardsilogic@16 169 emit modelChanged(ti->start(), ti->end());
lbajardsilogic@16 170 }
lbajardsilogic@16 171
lbajardsilogic@16 172 void IntervalModel::removeInterval(TimeIntervalPtr ti)
lbajardsilogic@16 173 {
lbajardsilogic@16 174 {
lbajardsilogic@16 175 QMutexLocker locker(&m_mutex);
lbajardsilogic@16 176
lbajardsilogic@16 177 m_intervals.remove(ti);
lbajardsilogic@16 178 }
lbajardsilogic@16 179
lbajardsilogic@16 180 emit modelChanged(ti->start(), ti->end());
lbajardsilogic@16 181 }
lbajardsilogic@16 182
lbajardsilogic@16 183 void
lbajardsilogic@16 184 IntervalModel::changeInterval(TimeIntervalPtr ti, long start, long end, float value, const QString& label)
lbajardsilogic@16 185 {
lbajardsilogic@16 186
lbajardsilogic@16 187 long startMin = min(start, ti->start());
lbajardsilogic@16 188 long endMax = max(end, ti->end());
lbajardsilogic@16 189
lbajardsilogic@16 190 {
lbajardsilogic@16 191 QMutexLocker locker(&m_mutex);
lbajardsilogic@16 192
lbajardsilogic@16 193 if (label != ti->label())
lbajardsilogic@16 194 ti->label(label);
lbajardsilogic@16 195 ti->start(start);
lbajardsilogic@16 196 ti->end(end);
lbajardsilogic@16 197 ti->value(value);
lbajardsilogic@16 198 }
lbajardsilogic@16 199
lbajardsilogic@16 200 emit modelChanged(startMin, endMax);
lbajardsilogic@16 201 }
lbajardsilogic@16 202
lbajardsilogic@16 203