annotate layer/TimeValueLayer.h @ 1447:8afea53332f3 single-point

Add option to make pane sizes auto-resize-only (i.e. remove user control via a splitter); also place alignment views above panes instead of below, meaning the extra bit of space that we currently have for the pane without one at least goes to the primary pane
author Chris Cannam
date Tue, 30 Apr 2019 15:53:21 +0100
parents 8a7c82282fbc
children 696e569ff21b
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@1227 16 #ifndef SV_TIME_VALUE_LAYER_H
Chris@1227 17 #define SV_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@1406 40 void paint(LayerGeometryProvider *v, QPainter &paint, QRect rect) const override;
Chris@0 41
Chris@1406 42 int getVerticalScaleWidth(LayerGeometryProvider *v, bool, QPainter &) const override;
Chris@1406 43 void paintVerticalScale(LayerGeometryProvider *v, bool, QPainter &paint, QRect rect) const override;
Chris@42 44
Chris@1406 45 QString getFeatureDescription(LayerGeometryProvider *v, QPoint &) const override;
Chris@1406 46 QString getLabelPreceding(sv_frame_t) const override;
Chris@0 47
Chris@1406 48 bool snapToFeatureFrame(LayerGeometryProvider *v, sv_frame_t &frame,
Chris@1266 49 int &resolution,
Chris@1406 50 SnapType snap) const override;
Chris@1406 51 bool snapToSimilarFeature(LayerGeometryProvider *v, sv_frame_t &frame,
Chris@805 52 int &resolution,
Chris@1406 53 SnapType snap) const override;
Chris@13 54
Chris@1406 55 void drawStart(LayerGeometryProvider *v, QMouseEvent *) override;
Chris@1406 56 void drawDrag(LayerGeometryProvider *v, QMouseEvent *) override;
Chris@1406 57 void drawEnd(LayerGeometryProvider *v, QMouseEvent *) override;
Chris@21 58
Chris@1406 59 void eraseStart(LayerGeometryProvider *v, QMouseEvent *) override;
Chris@1406 60 void eraseDrag(LayerGeometryProvider *v, QMouseEvent *) override;
Chris@1406 61 void eraseEnd(LayerGeometryProvider *v, QMouseEvent *) override;
Chris@335 62
Chris@1406 63 void editStart(LayerGeometryProvider *v, QMouseEvent *) override;
Chris@1406 64 void editDrag(LayerGeometryProvider *v, QMouseEvent *) override;
Chris@1406 65 void editEnd(LayerGeometryProvider *v, QMouseEvent *) override;
Chris@21 66
Chris@1406 67 bool editOpen(LayerGeometryProvider *v, QMouseEvent *) override;
Chris@70 68
Chris@1406 69 void moveSelection(Selection s, sv_frame_t newStartFrame) override;
Chris@1406 70 void resizeSelection(Selection s, Selection newSize) override;
Chris@1406 71 void deleteSelection(Selection s) override;
Chris@76 72
Chris@1406 73 void copy(LayerGeometryProvider *v, Selection s, Clipboard &to) override;
Chris@1406 74 bool paste(LayerGeometryProvider *v, const Clipboard &from, sv_frame_t frameOffset,
Chris@1406 75 bool interactive) override;
Chris@43 76
Chris@1406 77 const Model *getModel() const override { return m_model; }
Chris@0 78 void setModel(SparseTimeValueModel *model);
Chris@0 79
Chris@1406 80 PropertyList getProperties() const override;
Chris@1406 81 QString getPropertyLabel(const PropertyName &) const override;
Chris@1406 82 QString getPropertyIconName(const PropertyName &) const override;
Chris@1406 83 PropertyType getPropertyType(const PropertyName &) const override;
Chris@1406 84 QString getPropertyGroupName(const PropertyName &) const override;
Chris@1406 85 int getPropertyRangeAndValue(const PropertyName &,
Chris@1406 86 int *min, int *max, int *deflt) const override;
Chris@1406 87 QString getPropertyValueLabel(const PropertyName &,
Chris@1406 88 int value) const override;
Chris@1406 89 void setProperty(const PropertyName &, int value) override;
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@1266 95 PlotPoints,
Chris@1266 96 PlotStems,
Chris@1266 97 PlotConnectedPoints,
Chris@1266 98 PlotLines,
Chris@1266 99 PlotCurve,
Chris@1266 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@1406 123 bool isLayerScrollable(const LayerGeometryProvider *v) const override;
Chris@0 124
Chris@1406 125 bool isLayerEditable() const override { return true; }
Chris@23 126
Chris@1406 127 int getCompletion(LayerGeometryProvider *) const override { return m_model->getCompletion(); }
Chris@0 128
Chris@1406 129 bool needsTextLabelHeight() const override {
Chris@81 130 return m_plotStyle == PlotSegmentation && m_model->hasTextLabels();
Chris@79 131 }
Chris@79 132
Chris@1406 133 bool getValueExtents(double &min, double &max,
Chris@1406 134 bool &logarithmic, QString &unit) const override;
Chris@101 135
Chris@1406 136 bool getDisplayExtents(double &min, double &max) const override;
Chris@1406 137 bool setDisplayExtents(double min, double max) override;
Chris@437 138
Chris@1406 139 int getVerticalZoomSteps(int &defaultStep) const override;
Chris@1406 140 int getCurrentVerticalZoomStep() const override;
Chris@1406 141 void setVerticalZoomStep(int) override;
Chris@1406 142 RangeMapper *getNewVerticalZoomRangeMapper() const override;
Chris@79 143
Chris@1406 144 void toXml(QTextStream &stream, QString indent = "",
Chris@1406 145 QString extraAttributes = "") const override;
Chris@6 146
Chris@1406 147 void setProperties(const QXmlAttributes &attributes) override;
Chris@11 148
Chris@1205 149 /// Override from SingleColourLayer
Chris@1406 150 ColourSignificance getLayerColourSignificance() const override {
Chris@494 151 if (m_plotStyle == PlotSegmentation) {
Chris@494 152 return ColourHasMeaningfulValue;
Chris@494 153 } else {
Chris@494 154 return ColourDistinguishes;
Chris@494 155 }
Chris@494 156 }
Chris@494 157
Chris@1205 158 /// Override from SingleColourLayer
Chris@1406 159 bool hasLightBackground() const override {
Chris@1205 160 if (m_plotStyle == PlotSegmentation) {
Chris@1205 161 return true;
Chris@1205 162 } else {
Chris@1205 163 return SingleColourLayer::hasLightBackground();
Chris@1205 164 }
Chris@1205 165 }
Chris@1205 166
Chris@699 167 /// VerticalScaleLayer and ColourScaleLayer methods
Chris@1406 168 int getYForValue(LayerGeometryProvider *, double value) const override;
Chris@1406 169 double getValueForY(LayerGeometryProvider *, int y) const override;
Chris@1406 170 QString getScaleUnits() const override;
Chris@1406 171 QColor getColourForValue(LayerGeometryProvider *v, double value) const override;
Chris@696 172
Chris@0 173 protected:
Chris@918 174 void getScaleExtents(LayerGeometryProvider *, double &min, double &max, bool &log) const;
Chris@296 175 bool shouldAutoAlign() const;
Chris@68 176
Chris@1429 177 EventVector getLocalPoints(LayerGeometryProvider *v, int) const;
Chris@0 178
Chris@1406 179 int getDefaultColourHint(bool dark, bool &impose) override;
Chris@287 180
Chris@0 181 SparseTimeValueModel *m_model;
Chris@21 182 bool m_editing;
Chris@1429 183 Event m_originalPoint;
Chris@1429 184 Event m_editingPoint;
Chris@1429 185 ChangeEventsCommand *m_editingCommand;
Chris@197 186 int m_colourMap;
Chris@1362 187 bool m_colourInverted;
Chris@0 188 PlotStyle m_plotStyle;
Chris@66 189 VerticalScale m_verticalScale;
Chris@513 190 bool m_drawSegmentDivisions;
Chris@553 191 bool m_derivative;
Chris@376 192
Chris@905 193 mutable double m_scaleMinimum;
Chris@905 194 mutable double m_scaleMaximum;
Chris@437 195
Chris@1429 196 void finish(ChangeEventsCommand *command) {
Chris@376 197 Command *c = command->finish();
Chris@376 198 if (c) CommandHistory::getInstance()->addCommand(c, false);
Chris@376 199 }
Chris@0 200 };
Chris@0 201
Chris@0 202 #endif
Chris@0 203