annotate layer/TimeInstantLayer.h @ 1534:bfd8b22fd67c

Fix #1904 Scrolling colour 3d plot does not always work when in View normalisation mode. We shouldn't imagine we've just invalidated the cache if the truth is that we've only just created the renderer
author Chris Cannam
date Wed, 09 Oct 2019 13:45:17 +0100
parents 696e569ff21b
children e6362cf5ff1d
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@1407 16 #ifndef SV_TIME_INSTANT_LAYER_H
Chris@1407 17 #define SV_TIME_INSTANT_LAYER_H
Chris@0 18
Chris@287 19 #include "SingleColourLayer.h"
Chris@128 20 #include "data/model/SparseOneDimensionalModel.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 TimeInstantLayer : public SingleColourLayer
Chris@0 29 {
Chris@0 30 Q_OBJECT
Chris@0 31
Chris@0 32 public:
Chris@44 33 TimeInstantLayer();
Chris@308 34 virtual ~TimeInstantLayer();
Chris@0 35
Chris@1406 36 void paint(LayerGeometryProvider *v, QPainter &paint, QRect rect) const override;
Chris@0 37
Chris@1406 38 QString getLabelPreceding(sv_frame_t) const override;
Chris@1406 39 QString getFeatureDescription(LayerGeometryProvider *v, QPoint &) const override;
Chris@0 40
Chris@1406 41 bool snapToFeatureFrame(LayerGeometryProvider *v, sv_frame_t &frame,
Chris@1266 42 int &resolution,
Chris@1406 43 SnapType snap) const override;
Chris@13 44
Chris@1406 45 void drawStart(LayerGeometryProvider *v, QMouseEvent *) override;
Chris@1406 46 void drawDrag(LayerGeometryProvider *v, QMouseEvent *) override;
Chris@1406 47 void drawEnd(LayerGeometryProvider *v, QMouseEvent *) override;
Chris@17 48
Chris@1406 49 void eraseStart(LayerGeometryProvider *v, QMouseEvent *) override;
Chris@1406 50 void eraseDrag(LayerGeometryProvider *v, QMouseEvent *) override;
Chris@1406 51 void eraseEnd(LayerGeometryProvider *v, QMouseEvent *) override;
Chris@335 52
Chris@1406 53 void editStart(LayerGeometryProvider *v, QMouseEvent *) override;
Chris@1406 54 void editDrag(LayerGeometryProvider *v, QMouseEvent *) override;
Chris@1406 55 void editEnd(LayerGeometryProvider *v, QMouseEvent *) override;
Chris@18 56
Chris@1406 57 bool editOpen(LayerGeometryProvider *, QMouseEvent *) override;
Chris@70 58
Chris@1406 59 void moveSelection(Selection s, sv_frame_t newStartFrame) override;
Chris@1406 60 void resizeSelection(Selection s, Selection newSize) override;
Chris@1406 61 void deleteSelection(Selection s) override;
Chris@43 62
Chris@1406 63 void copy(LayerGeometryProvider *v, Selection s, Clipboard &to) override;
Chris@1406 64 bool paste(LayerGeometryProvider *v, const Clipboard &from, sv_frame_t frameOffset,
Chris@1406 65 bool interactive) override;
Chris@76 66
Chris@1470 67 ModelId getModel() const override { return m_model; }
Chris@1470 68 void setModel(ModelId model); // a SparseOneDimensionalModel
Chris@0 69
Chris@1406 70 PropertyList getProperties() const override;
Chris@1406 71 QString getPropertyLabel(const PropertyName &) const override;
Chris@1406 72 PropertyType getPropertyType(const PropertyName &) const override;
Chris@1406 73 int getPropertyRangeAndValue(const PropertyName &,
Chris@1406 74 int *min, int *max, int *deflt) const override;
Chris@1406 75 QString getPropertyValueLabel(const PropertyName &,
Chris@1406 76 int value) const override;
Chris@1406 77 void setProperty(const PropertyName &, int value) override;
Chris@0 78
Chris@28 79 enum PlotStyle {
Chris@1266 80 PlotInstants,
Chris@1266 81 PlotSegmentation
Chris@28 82 };
Chris@28 83
Chris@28 84 void setPlotStyle(PlotStyle style);
Chris@28 85 PlotStyle getPlotStyle() const { return m_plotStyle; }
Chris@28 86
Chris@1406 87 bool isLayerScrollable(const LayerGeometryProvider *v) const override;
Chris@0 88
Chris@1406 89 bool isLayerEditable() const override { return true; }
Chris@23 90
Chris@1470 91 int getCompletion(LayerGeometryProvider *) const override;
Chris@0 92
Chris@1470 93 bool needsTextLabelHeight() const override;
Chris@79 94
Chris@1406 95 bool getValueExtents(double &, double &, bool &, QString &) const override {
Chris@79 96 return false;
Chris@79 97 }
Chris@79 98
Chris@1406 99 void toXml(QTextStream &stream, QString indent = "",
Chris@1406 100 QString extraAttributes = "") const override;
Chris@6 101
Chris@1406 102 void setProperties(const QXmlAttributes &attributes) override;
Chris@11 103
Chris@1406 104 ColourSignificance getLayerColourSignificance() const override {
Chris@494 105 if (m_plotStyle == PlotSegmentation) {
Chris@494 106 return ColourHasMeaningfulValue;
Chris@494 107 } else {
Chris@494 108 return ColourDistinguishes;
Chris@494 109 }
Chris@494 110 }
Chris@494 111
Chris@1406 112 int getVerticalScaleWidth(LayerGeometryProvider *, bool, QPainter &) const override { return 0; }
Chris@607 113
Chris@0 114 protected:
Chris@1433 115 EventVector getLocalPoints(LayerGeometryProvider *v, int) const;
Chris@0 116
Chris@1406 117 int getDefaultColourHint(bool dark, bool &impose) override;
Chris@287 118
Chris@918 119 bool clipboardAlignmentDiffers(LayerGeometryProvider *v, const Clipboard &) const;
Chris@358 120
Chris@1470 121 ModelId m_model;
Chris@18 122 bool m_editing;
Chris@1433 123 Event m_editingPoint;
Chris@1433 124 ChangeEventsCommand *m_editingCommand;
Chris@28 125 PlotStyle m_plotStyle;
Chris@376 126
Chris@1433 127 void finish(ChangeEventsCommand *command) {
Chris@376 128 Command *c = command->finish();
Chris@376 129 if (c) CommandHistory::getInstance()->addCommand(c, false);
Chris@376 130 }
Chris@0 131 };
Chris@0 132
Chris@0 133 #endif
Chris@0 134