annotate data/model/SparseTimeValueModel.h @ 392:183ee2a55fc7

* More work to abstract out interactive components used in the data library, so that it does not need to depend on QtGui.
author Chris Cannam
date Fri, 14 Mar 2008 17:14:21 +0000
parents 5858cc462d0a
children 50a956688baa
rev   line source
Chris@147 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@147 2
Chris@147 3 /*
Chris@147 4 Sonic Visualiser
Chris@147 5 An audio file viewer and annotation editor.
Chris@147 6 Centre for Digital Music, Queen Mary, University of London.
Chris@147 7 This file copyright 2006 Chris Cannam.
Chris@147 8
Chris@147 9 This program is free software; you can redistribute it and/or
Chris@147 10 modify it under the terms of the GNU General Public License as
Chris@147 11 published by the Free Software Foundation; either version 2 of the
Chris@147 12 License, or (at your option) any later version. See the file
Chris@147 13 COPYING included with this distribution for more information.
Chris@147 14 */
Chris@147 15
Chris@147 16 #ifndef _SPARSE_TIME_VALUE_MODEL_H_
Chris@147 17 #define _SPARSE_TIME_VALUE_MODEL_H_
Chris@147 18
Chris@147 19 #include "SparseValueModel.h"
Chris@150 20 #include "base/PlayParameterRepository.h"
Chris@147 21 #include "base/RealTime.h"
Chris@147 22
Chris@147 23 /**
Chris@147 24 * Time/value point type for use in a SparseModel or SparseValueModel.
Chris@147 25 * With this point type, the model basically represents a wiggly-line
Chris@147 26 * plot with points at arbitrary intervals of the model resolution.
Chris@147 27 */
Chris@147 28
Chris@147 29 struct TimeValuePoint
Chris@147 30 {
Chris@147 31 public:
Chris@147 32 TimeValuePoint(long _frame) : frame(_frame), value(0.0f) { }
Chris@147 33 TimeValuePoint(long _frame, float _value, QString _label) :
Chris@147 34 frame(_frame), value(_value), label(_label) { }
Chris@147 35
Chris@147 36 int getDimensions() const { return 2; }
Chris@147 37
Chris@147 38 long frame;
Chris@147 39 float value;
Chris@147 40 QString label;
Chris@338 41
Chris@338 42 QString getLabel() const { return label; }
Chris@147 43
Chris@314 44 void toXml(QTextStream &stream, QString indent = "",
Chris@314 45 QString extraAttributes = "") const
Chris@147 46 {
Chris@314 47 stream << QString("%1<point frame=\"%2\" value=\"%3\" label=\"%4\" %5/>\n")
Chris@147 48 .arg(indent).arg(frame).arg(value).arg(label).arg(extraAttributes);
Chris@147 49 }
Chris@147 50
Chris@147 51 QString toDelimitedDataString(QString delimiter, size_t sampleRate) const
Chris@147 52 {
Chris@147 53 QStringList list;
Chris@147 54 list << RealTime::frame2RealTime(frame, sampleRate).toString().c_str();
Chris@147 55 list << QString("%1").arg(value);
Chris@318 56 if (label != "") list << label;
Chris@147 57 return list.join(delimiter);
Chris@147 58 }
Chris@147 59
Chris@147 60 struct Comparator {
Chris@147 61 bool operator()(const TimeValuePoint &p1,
Chris@147 62 const TimeValuePoint &p2) const {
Chris@147 63 if (p1.frame != p2.frame) return p1.frame < p2.frame;
Chris@147 64 if (p1.value != p2.value) return p1.value < p2.value;
Chris@147 65 return p1.label < p2.label;
Chris@147 66 }
Chris@147 67 };
Chris@147 68
Chris@147 69 struct OrderComparator {
Chris@147 70 bool operator()(const TimeValuePoint &p1,
Chris@147 71 const TimeValuePoint &p2) const {
Chris@147 72 return p1.frame < p2.frame;
Chris@147 73 }
Chris@147 74 };
Chris@147 75 };
Chris@147 76
Chris@147 77
Chris@147 78 class SparseTimeValueModel : public SparseValueModel<TimeValuePoint>
Chris@147 79 {
Chris@147 80 public:
Chris@147 81 SparseTimeValueModel(size_t sampleRate, size_t resolution,
Chris@256 82 bool notifyOnAdd = true) :
Chris@256 83 SparseValueModel<TimeValuePoint>(sampleRate, resolution,
Chris@256 84 notifyOnAdd)
Chris@256 85 {
Chris@391 86 // not yet playable
Chris@256 87 }
Chris@256 88
Chris@256 89 SparseTimeValueModel(size_t sampleRate, size_t resolution,
Chris@147 90 float valueMinimum, float valueMaximum,
Chris@147 91 bool notifyOnAdd = true) :
Chris@147 92 SparseValueModel<TimeValuePoint>(sampleRate, resolution,
Chris@147 93 valueMinimum, valueMaximum,
Chris@147 94 notifyOnAdd)
Chris@147 95 {
Chris@391 96 // not yet playable
Chris@147 97 }
Chris@345 98
Chris@345 99 QString getTypeName() const { return tr("Sparse Time-Value"); }
Chris@147 100 };
Chris@147 101
Chris@147 102
Chris@147 103 #endif
Chris@147 104
Chris@147 105
Chris@147 106