annotate layer/TimeInstantLayer.h @ 1614:c6f5c822b10d

Fix potential divide-by-zero (depending on a race elsewhere)
author Chris Cannam
date Tue, 30 Jun 2020 10:56:56 +0100
parents e6362cf5ff1d
children
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@1547 42 int &resolution,
Chris@1547 43 SnapType snap, int ycoord) 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