annotate layer/RegionLayer.h @ 959:2633a1d73e39

Address #1214, layer import produces wrong layer type. We needed a more principled approach to making sure the format gets updated properly and the dialog elements are consistent (basically separating making the dialog elements consistent from subsequently updating the format). This change should provide that, though there may be gotchas still.
author Chris Cannam
date Tue, 12 May 2015 12:31:37 +0100
parents 251dd0abc7b7
children 94e4952a6774
rev   line source
Chris@411 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@411 2
Chris@411 3 /*
Chris@411 4 Sonic Visualiser
Chris@411 5 An audio file viewer and annotation editor.
Chris@411 6 Centre for Digital Music, Queen Mary, University of London.
Chris@411 7 This file copyright 2006-2008 Chris Cannam and QMUL.
Chris@411 8
Chris@411 9 This program is free software; you can redistribute it and/or
Chris@411 10 modify it under the terms of the GNU General Public License as
Chris@411 11 published by the Free Software Foundation; either version 2 of the
Chris@411 12 License, or (at your option) any later version. See the file
Chris@411 13 COPYING included with this distribution for more information.
Chris@411 14 */
Chris@411 15
Chris@411 16 #ifndef _REGION_LAYER_H_
Chris@411 17 #define _REGION_LAYER_H_
Chris@411 18
Chris@411 19 #include "SingleColourLayer.h"
Chris@701 20 #include "VerticalScaleLayer.h"
Chris@701 21 #include "ColourScaleLayer.h"
Chris@701 22
Chris@411 23 #include "data/model/RegionModel.h"
Chris@411 24
Chris@411 25 #include <QObject>
Chris@411 26 #include <QColor>
Chris@411 27
Chris@433 28 #include <map>
Chris@433 29
Chris@411 30 class View;
Chris@411 31 class QPainter;
Chris@411 32
Chris@701 33 class RegionLayer : public SingleColourLayer,
Chris@701 34 public VerticalScaleLayer,
Chris@701 35 public ColourScaleLayer
Chris@411 36 {
Chris@411 37 Q_OBJECT
Chris@411 38
Chris@411 39 public:
Chris@411 40 RegionLayer();
Chris@411 41
Chris@411 42 virtual void paint(View *v, QPainter &paint, QRect rect) const;
Chris@411 43
Chris@701 44 virtual int getVerticalScaleWidth(View *v, bool, QPainter &) const;
Chris@701 45 virtual void paintVerticalScale(View *v, bool, QPainter &paint, QRect rect) const;
Chris@701 46
Chris@411 47 virtual QString getFeatureDescription(View *v, QPoint &) const;
Chris@909 48 virtual QString getLabelPreceding(sv_frame_t) const;
Chris@411 49
Chris@905 50 virtual bool snapToFeatureFrame(View *v, sv_frame_t &frame,
Chris@805 51 int &resolution,
Chris@411 52 SnapType snap) const;
Chris@905 53 virtual bool snapToSimilarFeature(View *v, sv_frame_t &frame,
Chris@805 54 int &resolution,
Chris@559 55 SnapType snap) const;
Chris@411 56
Chris@411 57 virtual void drawStart(View *v, QMouseEvent *);
Chris@411 58 virtual void drawDrag(View *v, QMouseEvent *);
Chris@411 59 virtual void drawEnd(View *v, QMouseEvent *);
Chris@411 60
Chris@411 61 virtual void eraseStart(View *v, QMouseEvent *);
Chris@411 62 virtual void eraseDrag(View *v, QMouseEvent *);
Chris@411 63 virtual void eraseEnd(View *v, QMouseEvent *);
Chris@411 64
Chris@411 65 virtual void editStart(View *v, QMouseEvent *);
Chris@411 66 virtual void editDrag(View *v, QMouseEvent *);
Chris@411 67 virtual void editEnd(View *v, QMouseEvent *);
Chris@411 68
Chris@411 69 virtual bool editOpen(View *v, QMouseEvent *);
Chris@411 70
Chris@905 71 virtual void moveSelection(Selection s, sv_frame_t newStartFrame);
Chris@411 72 virtual void resizeSelection(Selection s, Selection newSize);
Chris@411 73 virtual void deleteSelection(Selection s);
Chris@411 74
Chris@411 75 virtual void copy(View *v, Selection s, Clipboard &to);
Chris@905 76 virtual bool paste(View *v, const Clipboard &from, sv_frame_t frameOffset,
Chris@411 77 bool interactive);
Chris@411 78
Chris@411 79 virtual const Model *getModel() const { return m_model; }
Chris@411 80 void setModel(RegionModel *model);
Chris@411 81
Chris@411 82 virtual PropertyList getProperties() const;
Chris@411 83 virtual QString getPropertyLabel(const PropertyName &) const;
Chris@411 84 virtual PropertyType getPropertyType(const PropertyName &) const;
Chris@411 85 virtual QString getPropertyGroupName(const PropertyName &) const;
Chris@411 86 virtual int getPropertyRangeAndValue(const PropertyName &,
Chris@411 87 int *min, int *max, int *deflt) const;
Chris@411 88 virtual QString getPropertyValueLabel(const PropertyName &,
Chris@411 89 int value) const;
Chris@411 90 virtual void setProperty(const PropertyName &, int value);
Chris@411 91
Chris@427 92 void setFillColourMap(int);
Chris@427 93 int getFillColourMap() const { return m_colourMap; }
Chris@427 94
Chris@411 95 enum VerticalScale {
Chris@411 96 AutoAlignScale,
Chris@433 97 EqualSpaced,
Chris@411 98 LinearScale,
Chris@411 99 LogScale,
Chris@411 100 };
Chris@411 101
Chris@411 102 void setVerticalScale(VerticalScale scale);
Chris@411 103 VerticalScale getVerticalScale() const { return m_verticalScale; }
Chris@411 104
Chris@412 105 enum PlotStyle {
Chris@412 106 PlotLines,
Chris@412 107 PlotSegmentation
Chris@412 108 };
Chris@412 109
Chris@412 110 void setPlotStyle(PlotStyle style);
Chris@412 111 PlotStyle getPlotStyle() const { return m_plotStyle; }
Chris@412 112
Chris@411 113 virtual bool isLayerScrollable(const View *v) const;
Chris@411 114
Chris@411 115 virtual bool isLayerEditable() const { return true; }
Chris@411 116
Chris@411 117 virtual int getCompletion(View *) const { return m_model->getCompletion(); }
Chris@411 118
Chris@905 119 virtual bool getValueExtents(double &min, double &max,
Chris@411 120 bool &log, QString &unit) const;
Chris@411 121
Chris@905 122 virtual bool getDisplayExtents(double &min, double &max) const;
Chris@411 123
Chris@411 124 virtual void toXml(QTextStream &stream, QString indent = "",
Chris@411 125 QString extraAttributes = "") const;
Chris@411 126
Chris@701 127 void setProperties(const QXmlAttributes &attributes);
Chris@607 128
Chris@701 129 /// VerticalScaleLayer and ColourScaleLayer methods
Chris@905 130 int getYForValue(View *v, double value) const;
Chris@905 131 double getValueForY(View *v, int y) const;
Chris@701 132 virtual QString getScaleUnits() const;
Chris@905 133 QColor getColourForValue(View *v, double value) const;
Chris@411 134
Chris@433 135 protected slots:
Chris@433 136 void recalcSpacing();
Chris@433 137
Chris@411 138 protected:
Chris@905 139 double getValueForY(View *v, int y, int avoid) const;
Chris@905 140 void getScaleExtents(View *, double &min, double &max, bool &log) const;
Chris@411 141
Chris@411 142 virtual int getDefaultColourHint(bool dark, bool &impose);
Chris@411 143
Chris@550 144 RegionModel::PointList getLocalPoints(View *v, int x) const;
Chris@550 145
Chris@550 146 bool getPointToDrag(View *v, int x, int y, RegionModel::Point &) const;
Chris@411 147
Chris@411 148 RegionModel *m_model;
Chris@411 149 bool m_editing;
Chris@551 150 int m_dragPointX;
Chris@551 151 int m_dragPointY;
Chris@551 152 int m_dragStartX;
Chris@551 153 int m_dragStartY;
Chris@411 154 RegionModel::Point m_originalPoint;
Chris@411 155 RegionModel::Point m_editingPoint;
Chris@411 156 RegionModel::EditCommand *m_editingCommand;
Chris@411 157 VerticalScale m_verticalScale;
Chris@427 158 int m_colourMap;
Chris@412 159 PlotStyle m_plotStyle;
Chris@411 160
Chris@905 161 typedef std::map<double, int> SpacingMap;
Chris@551 162
Chris@542 163 // region value -> ordering
Chris@433 164 SpacingMap m_spacingMap;
Chris@433 165
Chris@551 166 // region value -> number of regions with this value
Chris@551 167 SpacingMap m_distributionMap;
Chris@551 168
Chris@542 169 int spacingIndexToY(View *v, int i) const;
Chris@905 170 double yToSpacingIndex(View *v, int y) const;
Chris@542 171
Chris@411 172 void finish(RegionModel::EditCommand *command) {
Chris@411 173 Command *c = command->finish();
Chris@411 174 if (c) CommandHistory::getInstance()->addCommand(c, false);
Chris@411 175 }
Chris@411 176 };
Chris@411 177
Chris@411 178 #endif
Chris@411 179