annotate layer/TimeValueLayer.h @ 640:c6d705bf1672

Merge from branch "qt5". This revision actually builds with Qt4 (late releases) or Qt5, though it will warn on configure with Qt4.
author Chris Cannam
date Tue, 14 May 2013 12:36:43 +0100
parents 156a120345ae
children e77b1673e17e
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@607 37 virtual int getVerticalScaleWidth(View *v, bool, QPainter &) const;
Chris@607 38 virtual void paintVerticalScale(View *v, bool, 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@615 95 PlotSegmentation,
Chris@615 96 PlotDiscreteCurves
Chris@26 97 };
Chris@0 98
Chris@0 99 void setPlotStyle(PlotStyle style);
Chris@0 100 PlotStyle getPlotStyle() const { return m_plotStyle; }
Chris@0 101
Chris@66 102 enum VerticalScale {
Chris@101 103 AutoAlignScale,
Chris@66 104 LinearScale,
Chris@66 105 LogScale,
Chris@101 106 PlusMinusOneScale
Chris@66 107 };
Chris@66 108
Chris@66 109 void setVerticalScale(VerticalScale scale);
Chris@66 110 VerticalScale getVerticalScale() const { return m_verticalScale; }
Chris@66 111
Chris@513 112 void setDrawSegmentDivisions(bool);
Chris@513 113 bool getDrawSegmentDivisions() const { return m_drawSegmentDivisions; }
Chris@513 114
Chris@553 115 void setShowDerivative(bool);
Chris@553 116 bool getShowDerivative() const { return m_derivative; }
Chris@553 117
Chris@44 118 virtual bool isLayerScrollable(const View *v) const;
Chris@0 119
Chris@23 120 virtual bool isLayerEditable() const { return true; }
Chris@23 121
Chris@169 122 virtual int getCompletion(View *) const { return m_model->getCompletion(); }
Chris@0 123
Chris@79 124 virtual bool needsTextLabelHeight() const {
Chris@81 125 return m_plotStyle == PlotSegmentation && m_model->hasTextLabels();
Chris@79 126 }
Chris@79 127
Chris@101 128 virtual bool getValueExtents(float &min, float &max,
Chris@101 129 bool &logarithmic, QString &unit) const;
Chris@101 130
Chris@101 131 virtual bool getDisplayExtents(float &min, float &max) const;
Chris@437 132 virtual bool setDisplayExtents(float min, float max);
Chris@437 133
Chris@437 134 virtual int getVerticalZoomSteps(int &defaultStep) const;
Chris@437 135 virtual int getCurrentVerticalZoomStep() const;
Chris@437 136 virtual void setVerticalZoomStep(int);
Chris@437 137 virtual RangeMapper *getNewVerticalZoomRangeMapper() const;
Chris@79 138
Chris@316 139 virtual void toXml(QTextStream &stream, QString indent = "",
Chris@316 140 QString extraAttributes = "") const;
Chris@6 141
Chris@11 142 void setProperties(const QXmlAttributes &attributes);
Chris@11 143
Chris@494 144 virtual ColourSignificance getLayerColourSignificance() const {
Chris@494 145 if (m_plotStyle == PlotSegmentation) {
Chris@494 146 return ColourHasMeaningfulValue;
Chris@494 147 } else {
Chris@494 148 return ColourDistinguishes;
Chris@494 149 }
Chris@494 150 }
Chris@494 151
Chris@0 152 protected:
Chris@101 153 void getScaleExtents(View *, float &min, float &max, bool &log) const;
Chris@44 154 int getYForValue(View *, float value) const;
Chris@44 155 float getValueForY(View *, int y) const;
Chris@101 156 QColor getColourForValue(View *v, float value) const;
Chris@296 157 bool shouldAutoAlign() const;
Chris@68 158
Chris@44 159 SparseTimeValueModel::PointList getLocalPoints(View *v, int) const;
Chris@0 160
Chris@287 161 virtual int getDefaultColourHint(bool dark, bool &impose);
Chris@287 162
Chris@0 163 SparseTimeValueModel *m_model;
Chris@21 164 bool m_editing;
Chris@23 165 SparseTimeValueModel::Point m_originalPoint;
Chris@21 166 SparseTimeValueModel::Point m_editingPoint;
Chris@22 167 SparseTimeValueModel::EditCommand *m_editingCommand;
Chris@197 168 int m_colourMap;
Chris@0 169 PlotStyle m_plotStyle;
Chris@66 170 VerticalScale m_verticalScale;
Chris@513 171 bool m_drawSegmentDivisions;
Chris@553 172 bool m_derivative;
Chris@376 173
Chris@437 174 mutable float m_scaleMinimum;
Chris@437 175 mutable float m_scaleMaximum;
Chris@437 176
Chris@376 177 void finish(SparseTimeValueModel::EditCommand *command) {
Chris@376 178 Command *c = command->finish();
Chris@376 179 if (c) CommandHistory::getInstance()->addCommand(c, false);
Chris@376 180 }
Chris@0 181 };
Chris@0 182
Chris@0 183 #endif
Chris@0 184