annotate view/Pane.h @ 333:e74b56f07c73

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