annotate layer/TimeValueLayer.h @ 561:aced8ec09bc8

* Complete the overhaul of CSV file import; now you can pick the purpose for each column in the file, and SV should do the rest. The most significant practical improvement here is that we can now handle files in which time and duration do not necessarily appear in known columns.
author Chris Cannam
date Mon, 19 Jul 2010 17:08:56 +0000
parents 97e60a895211
children 5b72899d692b
rev   line source
Chris@58 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@0 2
Chris@0 3 /*
Chris@59 4 Sonic Visualiser
Chris@59 5 An audio file viewer and annotation editor.
Chris@59 6 Centre for Digital Music, Queen Mary, University of London.
Chris@59 7 This file copyright 2006 Chris Cannam.
Chris@0 8
Chris@59 9 This program is free software; you can redistribute it and/or
Chris@59 10 modify it under the terms of the GNU General Public License as
Chris@59 11 published by the Free Software Foundation; either version 2 of the
Chris@59 12 License, or (at your option) any later version. See the file
Chris@59 13 COPYING included with this distribution for more information.
Chris@0 14 */
Chris@0 15
Chris@30 16 #ifndef _TIME_VALUE_LAYER_H_
Chris@30 17 #define _TIME_VALUE_LAYER_H_
Chris@0 18
Chris@287 19 #include "SingleColourLayer.h"
Chris@128 20 #include "data/model/SparseTimeValueModel.h"
Chris@0 21
Chris@0 22 #include <QObject>
Chris@0 23 #include <QColor>
Chris@0 24
Chris@0 25 class View;
Chris@0 26 class QPainter;
Chris@0 27
Chris@287 28 class TimeValueLayer : public SingleColourLayer
Chris@0 29 {
Chris@0 30 Q_OBJECT
Chris@0 31
Chris@0 32 public:
Chris@44 33 TimeValueLayer();
Chris@0 34
Chris@44 35 virtual void paint(View *v, QPainter &paint, QRect rect) const;
Chris@0 36
Chris@44 37 virtual int getVerticalScaleWidth(View *v, QPainter &) const;
Chris@44 38 virtual void paintVerticalScale(View *v, QPainter &paint, QRect rect) const;
Chris@42 39
Chris@44 40 virtual QString getFeatureDescription(View *v, QPoint &) const;
Chris@552 41 virtual QString getLabelPreceding(size_t) const;
Chris@0 42
Chris@44 43 virtual bool snapToFeatureFrame(View *v, int &frame,
Chris@28 44 size_t &resolution,
Chris@28 45 SnapType snap) const;
Chris@517 46 virtual bool snapToSimilarFeature(View *v, int &frame,
Chris@517 47 size_t &resolution,
Chris@517 48 SnapType snap) const;
Chris@13 49
Chris@44 50 virtual void drawStart(View *v, QMouseEvent *);
Chris@44 51 virtual void drawDrag(View *v, QMouseEvent *);
Chris@44 52 virtual void drawEnd(View *v, QMouseEvent *);
Chris@21 53
Chris@335 54 virtual void eraseStart(View *v, QMouseEvent *);
Chris@335 55 virtual void eraseDrag(View *v, QMouseEvent *);
Chris@335 56 virtual void eraseEnd(View *v, QMouseEvent *);
Chris@335 57
Chris@44 58 virtual void editStart(View *v, QMouseEvent *);
Chris@44 59 virtual void editDrag(View *v, QMouseEvent *);
Chris@44 60 virtual void editEnd(View *v, QMouseEvent *);
Chris@21 61
Chris@255 62 virtual bool editOpen(View *v, QMouseEvent *);
Chris@70 63
Chris@43 64 virtual void moveSelection(Selection s, size_t newStartFrame);
Chris@43 65 virtual void resizeSelection(Selection s, Selection newSize);
Chris@76 66 virtual void deleteSelection(Selection s);
Chris@76 67
Chris@359 68 virtual void copy(View *v, Selection s, Clipboard &to);
Chris@359 69 virtual bool paste(View *v, const Clipboard &from, int frameOffset,
Chris@125 70 bool interactive);
Chris@43 71
Chris@0 72 virtual const Model *getModel() const { return m_model; }
Chris@0 73 void setModel(SparseTimeValueModel *model);
Chris@0 74
Chris@0 75 virtual PropertyList getProperties() const;
Chris@87 76 virtual QString getPropertyLabel(const PropertyName &) const;
Chris@515 77 virtual QString getPropertyIconName(const PropertyName &) const;
Chris@0 78 virtual PropertyType getPropertyType(const PropertyName &) const;
Chris@198 79 virtual QString getPropertyGroupName(const PropertyName &) const;
Chris@0 80 virtual int getPropertyRangeAndValue(const PropertyName &,
Chris@216 81 int *min, int *max, int *deflt) const;
Chris@0 82 virtual QString getPropertyValueLabel(const PropertyName &,
Chris@0 83 int value) const;
Chris@0 84 virtual void setProperty(const PropertyName &, int value);
Chris@0 85
Chris@197 86 void setFillColourMap(int);
Chris@197 87 int getFillColourMap() const { return m_colourMap; }
Chris@197 88
Chris@26 89 enum PlotStyle {
Chris@26 90 PlotPoints,
Chris@26 91 PlotStems,
Chris@26 92 PlotConnectedPoints,
Chris@26 93 PlotLines,
Chris@26 94 PlotCurve,
Chris@26 95 PlotSegmentation
Chris@26 96 };
Chris@0 97
Chris@0 98 void setPlotStyle(PlotStyle style);
Chris@0 99 PlotStyle getPlotStyle() const { return m_plotStyle; }
Chris@0 100
Chris@66 101 enum VerticalScale {
Chris@101 102 AutoAlignScale,
Chris@66 103 LinearScale,
Chris@66 104 LogScale,
Chris@101 105 PlusMinusOneScale
Chris@66 106 };
Chris@66 107
Chris@66 108 void setVerticalScale(VerticalScale scale);
Chris@66 109 VerticalScale getVerticalScale() const { return m_verticalScale; }
Chris@66 110
Chris@513 111 void setDrawSegmentDivisions(bool);
Chris@513 112 bool getDrawSegmentDivisions() const { return m_drawSegmentDivisions; }
Chris@513 113
Chris@553 114 void setShowDerivative(bool);
Chris@553 115 bool getShowDerivative() const { return m_derivative; }
Chris@553 116
Chris@44 117 virtual bool isLayerScrollable(const View *v) const;
Chris@0 118
Chris@23 119 virtual bool isLayerEditable() const { return true; }
Chris@23 120
Chris@169 121 virtual int getCompletion(View *) const { return m_model->getCompletion(); }
Chris@0 122
Chris@79 123 virtual bool needsTextLabelHeight() const {
Chris@81 124 return m_plotStyle == PlotSegmentation && m_model->hasTextLabels();
Chris@79 125 }
Chris@79 126
Chris@101 127 virtual bool getValueExtents(float &min, float &max,
Chris@101 128 bool &logarithmic, QString &unit) const;
Chris@101 129
Chris@101 130 virtual bool getDisplayExtents(float &min, float &max) const;
Chris@437 131 virtual bool setDisplayExtents(float min, float max);
Chris@437 132
Chris@437 133 virtual int getVerticalZoomSteps(int &defaultStep) const;
Chris@437 134 virtual int getCurrentVerticalZoomStep() const;
Chris@437 135 virtual void setVerticalZoomStep(int);
Chris@437 136 virtual RangeMapper *getNewVerticalZoomRangeMapper() const;
Chris@79 137
Chris@316 138 virtual void toXml(QTextStream &stream, QString indent = "",
Chris@316 139 QString extraAttributes = "") const;
Chris@6 140
Chris@11 141 void setProperties(const QXmlAttributes &attributes);
Chris@11 142
Chris@494 143 virtual ColourSignificance getLayerColourSignificance() const {
Chris@494 144 if (m_plotStyle == PlotSegmentation) {
Chris@494 145 return ColourHasMeaningfulValue;
Chris@494 146 } else {
Chris@494 147 return ColourDistinguishes;
Chris@494 148 }
Chris@494 149 }
Chris@494 150
Chris@0 151 protected:
Chris@101 152 void getScaleExtents(View *, float &min, float &max, bool &log) const;
Chris@44 153 int getYForValue(View *, float value) const;
Chris@44 154 float getValueForY(View *, int y) const;
Chris@101 155 QColor getColourForValue(View *v, float value) const;
Chris@296 156 bool shouldAutoAlign() const;
Chris@68 157
Chris@44 158 SparseTimeValueModel::PointList getLocalPoints(View *v, int) const;
Chris@0 159
Chris@287 160 virtual int getDefaultColourHint(bool dark, bool &impose);
Chris@287 161
Chris@0 162 SparseTimeValueModel *m_model;
Chris@21 163 bool m_editing;
Chris@23 164 SparseTimeValueModel::Point m_originalPoint;
Chris@21 165 SparseTimeValueModel::Point m_editingPoint;
Chris@22 166 SparseTimeValueModel::EditCommand *m_editingCommand;
Chris@197 167 int m_colourMap;
Chris@0 168 PlotStyle m_plotStyle;
Chris@66 169 VerticalScale m_verticalScale;
Chris@513 170 bool m_drawSegmentDivisions;
Chris@553 171 bool m_derivative;
Chris@376 172
Chris@437 173 mutable float m_scaleMinimum;
Chris@437 174 mutable float m_scaleMaximum;
Chris@437 175
Chris@376 176 void finish(SparseTimeValueModel::EditCommand *command) {
Chris@376 177 Command *c = command->finish();
Chris@376 178 if (c) CommandHistory::getInstance()->addCommand(c, false);
Chris@376 179 }
Chris@0 180 };
Chris@0 181
Chris@0 182 #endif
Chris@0 183