annotate view/Pane.h @ 607:5b72899d692b

Give a dedicated key to toggling the centre line, and move it out of the overlay level setting -- reducing number of overlay levels to 3. Introduce two distinct vertical scale types (so that we can hide the spectrogram colour scale part easily)
author Chris Cannam
date Mon, 30 Jan 2012 16:01:59 +0000
parents 683c46d7500b
children a13aa5320221 67b167bb60ab
rev   line source
Chris@127 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@127 2
Chris@127 3 /*
Chris@127 4 Sonic Visualiser
Chris@127 5 An audio file viewer and annotation editor.
Chris@127 6 Centre for Digital Music, Queen Mary, University of London.
Chris@182 7 This file copyright 2006 Chris Cannam and QMUL.
Chris@127 8
Chris@127 9 This program is free software; you can redistribute it and/or
Chris@127 10 modify it under the terms of the GNU General Public License as
Chris@127 11 published by the Free Software Foundation; either version 2 of the
Chris@127 12 License, or (at your option) any later version. See the file
Chris@127 13 COPYING included with this distribution for more information.
Chris@127 14 */
Chris@127 15
Chris@127 16 #ifndef _PANE_H_
Chris@127 17 #define _PANE_H_
Chris@127 18
Chris@127 19 #include <QFrame>
Chris@127 20 #include <QPoint>
Chris@127 21
Chris@127 22 #include "base/ZoomConstraint.h"
Chris@128 23 #include "View.h"
Chris@127 24 #include "base/Selection.h"
Chris@127 25
Chris@127 26 class QWidget;
Chris@127 27 class QPaintEvent;
Chris@127 28 class Layer;
Chris@133 29 class Thumbwheel;
Chris@172 30 class Panner;
Chris@189 31 class NotifyingPushButton;
Chris@282 32 class KeyReference;
Chris@127 33
Chris@127 34 class Pane : public View
Chris@127 35 {
Chris@127 36 Q_OBJECT
Chris@127 37
Chris@127 38 public:
Chris@127 39 Pane(QWidget *parent = 0);
Chris@127 40 virtual QString getPropertyContainerIconName() const { return "pane"; }
Chris@127 41
Chris@127 42 virtual bool shouldIlluminateLocalFeatures(const Layer *layer,
Chris@127 43 QPoint &pos) const;
Chris@127 44 virtual bool shouldIlluminateLocalSelection(QPoint &pos,
Chris@127 45 bool &closeToLeft,
Chris@127 46 bool &closeToRight) const;
Chris@127 47
Chris@127 48 void setCentreLineVisible(bool visible);
Chris@127 49 bool getCentreLineVisible() const { return m_centreLineVisible; }
Chris@127 50
Chris@222 51 virtual size_t getFirstVisibleFrame() const;
Chris@222 52
Chris@276 53 virtual size_t getVerticalScaleWidth() const;
Chris@276 54
Chris@229 55 virtual QImage *toNewImage(size_t f0, size_t f1);
Chris@229 56 virtual QImage *toNewImage() { return View::toNewImage(); }
Chris@229 57 virtual QSize getImageSize(size_t f0, size_t f1);
Chris@229 58 virtual QSize getImageSize() { return View::getImageSize(); }
Chris@227 59
Chris@316 60 virtual void toXml(QTextStream &stream, QString indent = "",
Chris@316 61 QString extraAttributes = "") const;
Chris@127 62
Chris@282 63 static void registerShortcuts(KeyReference &kr);
Chris@282 64
Chris@127 65 signals:
Chris@127 66 void paneInteractedWith();
Chris@127 67 void rightButtonMenuRequested(QPoint position);
Chris@312 68 void dropAccepted(QStringList uriList);
Chris@312 69 void dropAccepted(QString text);
Chris@127 70
Chris@127 71 public slots:
Chris@127 72 virtual void toolModeChanged();
Chris@133 73 virtual void zoomWheelsEnabledChanged();
Chris@222 74 virtual void viewZoomLevelChanged(View *v, unsigned long z, bool locked);
Chris@320 75 virtual void modelAlignmentCompletionChanged();
Chris@127 76
Chris@132 77 virtual void horizontalThumbwheelMoved(int value);
Chris@132 78 virtual void verticalThumbwheelMoved(int value);
Chris@133 79 virtual void verticalZoomChanged();
Chris@174 80 virtual void verticalPannerMoved(float x, float y, float w, float h);
Chris@188 81 virtual void editVerticalPannerExtents();
Chris@133 82
Chris@437 83 virtual void layerParametersChanged();
Chris@437 84
Chris@133 85 virtual void propertyContainerSelected(View *, PropertyContainer *pc);
Chris@132 86
Chris@189 87 void mouseEnteredWidget();
Chris@189 88 void mouseLeftWidget();
Chris@189 89
Chris@127 90 protected:
Chris@127 91 virtual void paintEvent(QPaintEvent *e);
Chris@127 92 virtual void mousePressEvent(QMouseEvent *e);
Chris@127 93 virtual void mouseReleaseEvent(QMouseEvent *e);
Chris@127 94 virtual void mouseMoveEvent(QMouseEvent *e);
Chris@127 95 virtual void mouseDoubleClickEvent(QMouseEvent *e);
Chris@290 96 virtual void enterEvent(QEvent *e);
Chris@127 97 virtual void leaveEvent(QEvent *e);
Chris@127 98 virtual void wheelEvent(QWheelEvent *e);
Chris@133 99 virtual void resizeEvent(QResizeEvent *e);
Chris@312 100 virtual void dragEnterEvent(QDragEnterEvent *e);
Chris@312 101 virtual void dropEvent(QDropEvent *e);
Chris@127 102
Chris@261 103 void drawVerticalScale(QRect r, Layer *, QPainter &);
Chris@261 104 void drawFeatureDescription(Layer *, QPainter &);
Chris@277 105 void drawCentreLine(int, QPainter &, bool omitLine);
Chris@261 106 void drawDurationAndRate(QRect, const Model *, int, QPainter &);
Chris@326 107 void drawWorkTitle(QRect, QPainter &, const Model *);
Chris@261 108 void drawLayerNames(QRect, QPainter &);
Chris@261 109 void drawEditingSelection(QPainter &);
Chris@326 110 void drawAlignmentStatus(QRect, QPainter &, const Model *, bool down);
Chris@261 111
Chris@229 112 virtual bool render(QPainter &paint, int x0, size_t f0, size_t f1);
Chris@229 113
Chris@127 114 Selection getSelectionAt(int x, bool &closeToLeft, bool &closeToRight) const;
Chris@127 115
Chris@127 116 bool editSelectionStart(QMouseEvent *e);
Chris@127 117 bool editSelectionDrag(QMouseEvent *e);
Chris@127 118 bool editSelectionEnd(QMouseEvent *e);
Chris@127 119 bool selectionIsBeingEdited() const;
Chris@127 120
Chris@133 121 void updateHeadsUpDisplay();
Chris@174 122 void updateVerticalPanner();
Chris@174 123
Chris@174 124 bool canTopLayerMoveVertical();
Chris@174 125 bool getTopLayerDisplayExtents(float &valueMin, float &valueMax,
Chris@188 126 float &displayMin, float &displayMax,
Chris@188 127 QString *unit = 0);
Chris@174 128 bool setTopLayerDisplayExtents(float displayMin, float displayMax);
Chris@174 129
Chris@174 130 void dragTopLayer(QMouseEvent *e);
Chris@174 131 void dragExtendSelection(QMouseEvent *e);
Chris@174 132 void zoomToRegion(int x0, int y0, int x1, int y1);
Chris@189 133 void updateContextHelp(const QPoint *pos);
Chris@259 134 void edgeScrollMaybe(int x);
Chris@133 135
Chris@127 136 bool m_identifyFeatures;
Chris@127 137 QPoint m_identifyPoint;
Chris@127 138 QPoint m_clickPos;
Chris@127 139 QPoint m_mousePos;
Chris@127 140 bool m_clickedInRange;
Chris@127 141 bool m_shiftPressed;
Chris@127 142 bool m_ctrlPressed;
Chris@510 143 bool m_altPressed;
Chris@266 144
Chris@127 145 bool m_navigating;
Chris@127 146 bool m_resizing;
Chris@343 147 bool m_editing;
Chris@343 148 bool m_releasing;
Chris@127 149 size_t m_dragCentreFrame;
Chris@136 150 float m_dragStartMinValue;
Chris@127 151 bool m_centreLineVisible;
Chris@127 152 size_t m_selectionStartFrame;
Chris@127 153 Selection m_editingSelection;
Chris@127 154 int m_editingSelectionEdge;
Chris@222 155 mutable int m_scaleWidth;
Chris@133 156
Chris@150 157 enum DragMode {
Chris@150 158 UnresolvedDrag,
Chris@150 159 VerticalDrag,
Chris@150 160 HorizontalDrag,
Chris@150 161 FreeDrag
Chris@150 162 };
Chris@150 163 DragMode m_dragMode;
Chris@150 164
Chris@343 165 DragMode updateDragMode(DragMode currentMode,
Chris@343 166 QPoint origin,
Chris@343 167 QPoint currentPoint,
Chris@343 168 bool canMoveHorizontal,
Chris@343 169 bool canMoveVertical,
Chris@343 170 bool resistHorizontal,
Chris@343 171 bool resistVertical);
Chris@343 172
Chris@133 173 QWidget *m_headsUpDisplay;
Chris@172 174 Panner *m_vpan;
Chris@133 175 Thumbwheel *m_hthumb;
Chris@133 176 Thumbwheel *m_vthumb;
Chris@189 177 NotifyingPushButton *m_reset;
Chris@262 178
Chris@290 179 bool m_mouseInWidget;
Chris@290 180
Chris@267 181 static QCursor *m_measureCursor1;
Chris@267 182 static QCursor *m_measureCursor2;
Chris@127 183 };
Chris@127 184
Chris@127 185 #endif
Chris@127 186