annotate layer/TimeInstantLayer.h @ 1065:85e49aa7fe77 spectrogram-minor-refactor

Fix possible crash when scrolling to end
author Chris Cannam
date Thu, 23 Jun 2016 08:46:20 +0100
parents 4fe7a09be0fe
children a34a2a25907c
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_INSTANT_LAYER_H_
Chris@30 17 #define _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@916 36 virtual void paint(LayerGeometryProvider *v, QPainter &paint, QRect rect) const;
Chris@0 37
Chris@909 38 virtual QString getLabelPreceding(sv_frame_t) const;
Chris@918 39 virtual QString getFeatureDescription(LayerGeometryProvider *v, QPoint &) const;
Chris@0 40
Chris@918 41 virtual bool snapToFeatureFrame(LayerGeometryProvider *v, sv_frame_t &frame,
Chris@805 42 int &resolution,
Chris@28 43 SnapType snap) const;
Chris@13 44
Chris@918 45 virtual void drawStart(LayerGeometryProvider *v, QMouseEvent *);
Chris@918 46 virtual void drawDrag(LayerGeometryProvider *v, QMouseEvent *);
Chris@918 47 virtual void drawEnd(LayerGeometryProvider *v, QMouseEvent *);
Chris@17 48
Chris@918 49 virtual void eraseStart(LayerGeometryProvider *v, QMouseEvent *);
Chris@918 50 virtual void eraseDrag(LayerGeometryProvider *v, QMouseEvent *);
Chris@918 51 virtual void eraseEnd(LayerGeometryProvider *v, QMouseEvent *);
Chris@335 52
Chris@918 53 virtual void editStart(LayerGeometryProvider *v, QMouseEvent *);
Chris@918 54 virtual void editDrag(LayerGeometryProvider *v, QMouseEvent *);
Chris@918 55 virtual void editEnd(LayerGeometryProvider *v, QMouseEvent *);
Chris@18 56
Chris@918 57 virtual bool editOpen(LayerGeometryProvider *, QMouseEvent *);
Chris@70 58
Chris@905 59 virtual void moveSelection(Selection s, sv_frame_t newStartFrame);
Chris@43 60 virtual void resizeSelection(Selection s, Selection newSize);
Chris@43 61 virtual void deleteSelection(Selection s);
Chris@43 62
Chris@918 63 virtual void copy(LayerGeometryProvider *v, Selection s, Clipboard &to);
Chris@918 64 virtual bool paste(LayerGeometryProvider *v, const Clipboard &from, sv_frame_t frameOffset,
Chris@125 65 bool interactive);
Chris@76 66
Chris@0 67 virtual const Model *getModel() const { return m_model; }
Chris@0 68 void setModel(SparseOneDimensionalModel *model);
Chris@0 69
Chris@0 70 virtual PropertyList getProperties() const;
Chris@87 71 virtual QString getPropertyLabel(const PropertyName &) const;
Chris@0 72 virtual PropertyType getPropertyType(const PropertyName &) const;
Chris@0 73 virtual int getPropertyRangeAndValue(const PropertyName &,
Chris@216 74 int *min, int *max, int *deflt) const;
Chris@0 75 virtual QString getPropertyValueLabel(const PropertyName &,
Chris@0 76 int value) const;
Chris@0 77 virtual void setProperty(const PropertyName &, int value);
Chris@0 78
Chris@28 79 enum PlotStyle {
Chris@28 80 PlotInstants,
Chris@28 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@918 87 virtual bool isLayerScrollable(const LayerGeometryProvider *v) const;
Chris@0 88
Chris@23 89 virtual bool isLayerEditable() const { return true; }
Chris@23 90
Chris@918 91 virtual int getCompletion(LayerGeometryProvider *) const { return m_model->getCompletion(); }
Chris@0 92
Chris@81 93 virtual bool needsTextLabelHeight() const { return m_model->hasTextLabels(); }
Chris@79 94
Chris@905 95 virtual bool getValueExtents(double &, double &, bool &, QString &) const {
Chris@79 96 return false;
Chris@79 97 }
Chris@79 98
Chris@316 99 virtual void toXml(QTextStream &stream, QString indent = "",
Chris@316 100 QString extraAttributes = "") const;
Chris@6 101
Chris@11 102 void setProperties(const QXmlAttributes &attributes);
Chris@11 103
Chris@494 104 virtual ColourSignificance getLayerColourSignificance() const {
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@918 112 virtual int getVerticalScaleWidth(LayerGeometryProvider *, bool, QPainter &) const { return 0; }
Chris@607 113
Chris@0 114 protected:
Chris@918 115 SparseOneDimensionalModel::PointList getLocalPoints(LayerGeometryProvider *v, int) const;
Chris@0 116
Chris@287 117 virtual int getDefaultColourHint(bool dark, bool &impose);
Chris@287 118
Chris@918 119 bool clipboardAlignmentDiffers(LayerGeometryProvider *v, const Clipboard &) const;
Chris@358 120
Chris@0 121 SparseOneDimensionalModel *m_model;
Chris@18 122 bool m_editing;
Chris@17 123 SparseOneDimensionalModel::Point m_editingPoint;
Chris@22 124 SparseOneDimensionalModel::EditCommand *m_editingCommand;
Chris@28 125 PlotStyle m_plotStyle;
Chris@376 126
Chris@376 127 void finish(SparseOneDimensionalModel::EditCommand *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