annotate view/Pane.h @ 738:d26545a2a02d tonioni

Rather than undrawing the bottom bit of the dial, don't draw it in the first place (necessary on shaded background)
author Chris Cannam
date Thu, 06 Mar 2014 13:52:33 +0000
parents 711ae36a53a2
children 09e2677e34e7
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@716 70 void doubleClickSelectInvoked(size_t frame);
Chris@730 71 void regionOutlined(QRect rect);
Chris@127 72
Chris@127 73 public slots:
Chris@127 74 virtual void toolModeChanged();
Chris@133 75 virtual void zoomWheelsEnabledChanged();
Chris@222 76 virtual void viewZoomLevelChanged(View *v, unsigned long z, bool locked);
Chris@320 77 virtual void modelAlignmentCompletionChanged();
Chris@127 78
Chris@132 79 virtual void horizontalThumbwheelMoved(int value);
Chris@132 80 virtual void verticalThumbwheelMoved(int value);
Chris@133 81 virtual void verticalZoomChanged();
Chris@174 82 virtual void verticalPannerMoved(float x, float y, float w, float h);
Chris@188 83 virtual void editVerticalPannerExtents();
Chris@133 84
Chris@437 85 virtual void layerParametersChanged();
Chris@437 86
Chris@133 87 virtual void propertyContainerSelected(View *, PropertyContainer *pc);
Chris@132 88
Chris@730 89 void zoomToRegion(QRect r);
Chris@730 90
Chris@189 91 void mouseEnteredWidget();
Chris@189 92 void mouseLeftWidget();
Chris@189 93
Chris@127 94 protected:
Chris@127 95 virtual void paintEvent(QPaintEvent *e);
Chris@127 96 virtual void mousePressEvent(QMouseEvent *e);
Chris@127 97 virtual void mouseReleaseEvent(QMouseEvent *e);
Chris@127 98 virtual void mouseMoveEvent(QMouseEvent *e);
Chris@127 99 virtual void mouseDoubleClickEvent(QMouseEvent *e);
Chris@290 100 virtual void enterEvent(QEvent *e);
Chris@127 101 virtual void leaveEvent(QEvent *e);
Chris@127 102 virtual void wheelEvent(QWheelEvent *e);
Chris@133 103 virtual void resizeEvent(QResizeEvent *e);
Chris@312 104 virtual void dragEnterEvent(QDragEnterEvent *e);
Chris@312 105 virtual void dropEvent(QDropEvent *e);
Chris@127 106
Chris@261 107 void drawVerticalScale(QRect r, Layer *, QPainter &);
Chris@261 108 void drawFeatureDescription(Layer *, QPainter &);
Chris@277 109 void drawCentreLine(int, QPainter &, bool omitLine);
Chris@261 110 void drawDurationAndRate(QRect, const Model *, int, QPainter &);
Chris@326 111 void drawWorkTitle(QRect, QPainter &, const Model *);
Chris@261 112 void drawLayerNames(QRect, QPainter &);
Chris@261 113 void drawEditingSelection(QPainter &);
Chris@326 114 void drawAlignmentStatus(QRect, QPainter &, const Model *, bool down);
Chris@261 115
Chris@229 116 virtual bool render(QPainter &paint, int x0, size_t f0, size_t f1);
Chris@229 117
Chris@127 118 Selection getSelectionAt(int x, bool &closeToLeft, bool &closeToRight) const;
Chris@127 119
Chris@127 120 bool editSelectionStart(QMouseEvent *e);
Chris@127 121 bool editSelectionDrag(QMouseEvent *e);
Chris@127 122 bool editSelectionEnd(QMouseEvent *e);
Chris@127 123 bool selectionIsBeingEdited() const;
Chris@127 124
Chris@133 125 void updateHeadsUpDisplay();
Chris@174 126 void updateVerticalPanner();
Chris@174 127
Chris@174 128 bool canTopLayerMoveVertical();
Chris@174 129 bool getTopLayerDisplayExtents(float &valueMin, float &valueMax,
Chris@188 130 float &displayMin, float &displayMax,
Chris@188 131 QString *unit = 0);
Chris@174 132 bool setTopLayerDisplayExtents(float displayMin, float displayMax);
Chris@174 133
Chris@174 134 void dragTopLayer(QMouseEvent *e);
Chris@174 135 void dragExtendSelection(QMouseEvent *e);
Chris@189 136 void updateContextHelp(const QPoint *pos);
Chris@259 137 void edgeScrollMaybe(int x);
Chris@133 138
Chris@127 139 bool m_identifyFeatures;
Chris@127 140 QPoint m_identifyPoint;
Chris@127 141 QPoint m_clickPos;
Chris@127 142 QPoint m_mousePos;
Chris@127 143 bool m_clickedInRange;
Chris@127 144 bool m_shiftPressed;
Chris@127 145 bool m_ctrlPressed;
Chris@510 146 bool m_altPressed;
Chris@266 147
Chris@127 148 bool m_navigating;
Chris@127 149 bool m_resizing;
Chris@343 150 bool m_editing;
Chris@343 151 bool m_releasing;
Chris@127 152 size_t m_dragCentreFrame;
Chris@136 153 float m_dragStartMinValue;
Chris@127 154 bool m_centreLineVisible;
Chris@127 155 size_t m_selectionStartFrame;
Chris@127 156 Selection m_editingSelection;
Chris@127 157 int m_editingSelectionEdge;
Chris@222 158 mutable int m_scaleWidth;
Chris@133 159
Chris@150 160 enum DragMode {
Chris@150 161 UnresolvedDrag,
Chris@150 162 VerticalDrag,
Chris@150 163 HorizontalDrag,
Chris@150 164 FreeDrag
Chris@150 165 };
Chris@150 166 DragMode m_dragMode;
Chris@150 167
Chris@343 168 DragMode updateDragMode(DragMode currentMode,
Chris@343 169 QPoint origin,
Chris@343 170 QPoint currentPoint,
Chris@343 171 bool canMoveHorizontal,
Chris@343 172 bool canMoveVertical,
Chris@343 173 bool resistHorizontal,
Chris@343 174 bool resistVertical);
Chris@343 175
Chris@133 176 QWidget *m_headsUpDisplay;
Chris@172 177 Panner *m_vpan;
Chris@133 178 Thumbwheel *m_hthumb;
Chris@133 179 Thumbwheel *m_vthumb;
Chris@189 180 NotifyingPushButton *m_reset;
Chris@262 181
Chris@290 182 bool m_mouseInWidget;
Chris@290 183
Chris@267 184 static QCursor *m_measureCursor1;
Chris@267 185 static QCursor *m_measureCursor2;
Chris@127 186 };
Chris@127 187
Chris@127 188 #endif
Chris@127 189