annotate layer/TimeValueLayer.h @ 855:57efeb75880d

Simplify some logic where loop was used with an unconditional "break" that meant it could only happen once (from coverity scan)
author Chris Cannam
date Wed, 03 Sep 2014 12:05:45 +0100
parents 1d526ba11a24
children b66fb15de477
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@696 20 #include "VerticalScaleLayer.h"
Chris@699 21 #include "ColourScaleLayer.h"
Chris@699 22
Chris@128 23 #include "data/model/SparseTimeValueModel.h"
Chris@0 24
Chris@0 25 #include <QObject>
Chris@0 26 #include <QColor>
Chris@0 27
Chris@0 28 class View;
Chris@0 29 class QPainter;
Chris@0 30
Chris@699 31 class TimeValueLayer : public SingleColourLayer,
Chris@699 32 public VerticalScaleLayer,
Chris@699 33 public ColourScaleLayer
Chris@0 34 {
Chris@0 35 Q_OBJECT
Chris@0 36
Chris@0 37 public:
Chris@44 38 TimeValueLayer();
Chris@0 39
Chris@44 40 virtual void paint(View *v, QPainter &paint, QRect rect) const;
Chris@0 41
Chris@607 42 virtual int getVerticalScaleWidth(View *v, bool, QPainter &) const;
Chris@607 43 virtual void paintVerticalScale(View *v, bool, QPainter &paint, QRect rect) const;
Chris@42 44
Chris@44 45 virtual QString getFeatureDescription(View *v, QPoint &) const;
Chris@805 46 virtual QString getLabelPreceding(int) const;
Chris@0 47
Chris@44 48 virtual bool snapToFeatureFrame(View *v, int &frame,
Chris@805 49 int &resolution,
Chris@28 50 SnapType snap) const;
Chris@517 51 virtual bool snapToSimilarFeature(View *v, int &frame,
Chris@805 52 int &resolution,
Chris@517 53 SnapType snap) const;
Chris@13 54
Chris@44 55 virtual void drawStart(View *v, QMouseEvent *);
Chris@44 56 virtual void drawDrag(View *v, QMouseEvent *);
Chris@44 57 virtual void drawEnd(View *v, QMouseEvent *);
Chris@21 58
Chris@335 59 virtual void eraseStart(View *v, QMouseEvent *);
Chris@335 60 virtual void eraseDrag(View *v, QMouseEvent *);
Chris@335 61 virtual void eraseEnd(View *v, QMouseEvent *);
Chris@335 62
Chris@44 63 virtual void editStart(View *v, QMouseEvent *);
Chris@44 64 virtual void editDrag(View *v, QMouseEvent *);
Chris@44 65 virtual void editEnd(View *v, QMouseEvent *);
Chris@21 66
Chris@255 67 virtual bool editOpen(View *v, QMouseEvent *);
Chris@70 68
Chris@805 69 virtual void moveSelection(Selection s, int newStartFrame);
Chris@43 70 virtual void resizeSelection(Selection s, Selection newSize);
Chris@76 71 virtual void deleteSelection(Selection s);
Chris@76 72
Chris@359 73 virtual void copy(View *v, Selection s, Clipboard &to);
Chris@359 74 virtual bool paste(View *v, const Clipboard &from, int frameOffset,
Chris@125 75 bool interactive);
Chris@43 76
Chris@0 77 virtual const Model *getModel() const { return m_model; }
Chris@0 78 void setModel(SparseTimeValueModel *model);
Chris@0 79
Chris@0 80 virtual PropertyList getProperties() const;
Chris@87 81 virtual QString getPropertyLabel(const PropertyName &) const;
Chris@515 82 virtual QString getPropertyIconName(const PropertyName &) const;
Chris@0 83 virtual PropertyType getPropertyType(const PropertyName &) const;
Chris@198 84 virtual QString getPropertyGroupName(const PropertyName &) const;
Chris@0 85 virtual int getPropertyRangeAndValue(const PropertyName &,
Chris@216 86 int *min, int *max, int *deflt) const;
Chris@0 87 virtual QString getPropertyValueLabel(const PropertyName &,
Chris@0 88 int value) const;
Chris@0 89 virtual void setProperty(const PropertyName &, int value);
Chris@0 90
Chris@197 91 void setFillColourMap(int);
Chris@197 92 int getFillColourMap() const { return m_colourMap; }
Chris@197 93
Chris@26 94 enum PlotStyle {
Chris@26 95 PlotPoints,
Chris@26 96 PlotStems,
Chris@26 97 PlotConnectedPoints,
Chris@26 98 PlotLines,
Chris@26 99 PlotCurve,
Chris@615 100 PlotSegmentation,
Chris@615 101 PlotDiscreteCurves
Chris@26 102 };
Chris@0 103
Chris@0 104 void setPlotStyle(PlotStyle style);
Chris@0 105 PlotStyle getPlotStyle() const { return m_plotStyle; }
Chris@0 106
Chris@66 107 enum VerticalScale {
Chris@101 108 AutoAlignScale,
Chris@66 109 LinearScale,
Chris@66 110 LogScale,
Chris@101 111 PlusMinusOneScale
Chris@66 112 };
Chris@66 113
Chris@66 114 void setVerticalScale(VerticalScale scale);
Chris@66 115 VerticalScale getVerticalScale() const { return m_verticalScale; }
Chris@66 116
Chris@513 117 void setDrawSegmentDivisions(bool);
Chris@513 118 bool getDrawSegmentDivisions() const { return m_drawSegmentDivisions; }
Chris@513 119
Chris@553 120 void setShowDerivative(bool);
Chris@553 121 bool getShowDerivative() const { return m_derivative; }
Chris@553 122
Chris@44 123 virtual bool isLayerScrollable(const View *v) const;
Chris@0 124
Chris@23 125 virtual bool isLayerEditable() const { return true; }
Chris@23 126
Chris@169 127 virtual int getCompletion(View *) const { return m_model->getCompletion(); }
Chris@0 128
Chris@79 129 virtual bool needsTextLabelHeight() const {
Chris@81 130 return m_plotStyle == PlotSegmentation && m_model->hasTextLabels();
Chris@79 131 }
Chris@79 132
Chris@101 133 virtual bool getValueExtents(float &min, float &max,
Chris@101 134 bool &logarithmic, QString &unit) const;
Chris@101 135
Chris@101 136 virtual bool getDisplayExtents(float &min, float &max) const;
Chris@437 137 virtual bool setDisplayExtents(float min, float max);
Chris@437 138
Chris@437 139 virtual int getVerticalZoomSteps(int &defaultStep) const;
Chris@437 140 virtual int getCurrentVerticalZoomStep() const;
Chris@437 141 virtual void setVerticalZoomStep(int);
Chris@437 142 virtual RangeMapper *getNewVerticalZoomRangeMapper() const;
Chris@79 143
Chris@316 144 virtual void toXml(QTextStream &stream, QString indent = "",
Chris@316 145 QString extraAttributes = "") const;
Chris@6 146
Chris@11 147 void setProperties(const QXmlAttributes &attributes);
Chris@11 148
Chris@494 149 virtual ColourSignificance getLayerColourSignificance() const {
Chris@494 150 if (m_plotStyle == PlotSegmentation) {
Chris@494 151 return ColourHasMeaningfulValue;
Chris@494 152 } else {
Chris@494 153 return ColourDistinguishes;
Chris@494 154 }
Chris@494 155 }
Chris@494 156
Chris@699 157 /// VerticalScaleLayer and ColourScaleLayer methods
Chris@696 158 virtual int getYForValue(View *, float value) const;
Chris@696 159 virtual float getValueForY(View *, int y) const;
Chris@696 160 virtual QString getScaleUnits() const;
Chris@699 161 virtual QColor getColourForValue(View *v, float value) const;
Chris@696 162
Chris@0 163 protected:
Chris@701 164 void getScaleExtents(View *, float &min, float &max, bool &log) const;
Chris@296 165 bool shouldAutoAlign() const;
Chris@68 166
Chris@44 167 SparseTimeValueModel::PointList getLocalPoints(View *v, int) const;
Chris@0 168
Chris@287 169 virtual int getDefaultColourHint(bool dark, bool &impose);
Chris@287 170
Chris@0 171 SparseTimeValueModel *m_model;
Chris@21 172 bool m_editing;
Chris@23 173 SparseTimeValueModel::Point m_originalPoint;
Chris@21 174 SparseTimeValueModel::Point m_editingPoint;
Chris@22 175 SparseTimeValueModel::EditCommand *m_editingCommand;
Chris@197 176 int m_colourMap;
Chris@0 177 PlotStyle m_plotStyle;
Chris@66 178 VerticalScale m_verticalScale;
Chris@513 179 bool m_drawSegmentDivisions;
Chris@553 180 bool m_derivative;
Chris@376 181
Chris@437 182 mutable float m_scaleMinimum;
Chris@437 183 mutable float m_scaleMaximum;
Chris@437 184
Chris@376 185 void finish(SparseTimeValueModel::EditCommand *command) {
Chris@376 186 Command *c = command->finish();
Chris@376 187 if (c) CommandHistory::getInstance()->addCommand(c, false);
Chris@376 188 }
Chris@0 189 };
Chris@0 190
Chris@0 191 #endif
Chris@0 192