annotate view/Pane.h @ 290:3101c68a00c1

* Restore Scale setting which had mistakenly disappeared from spectrum * Some tweaks to spectrum peaks * Make spectrum default to 4096/75%... or is that overdoing it? * Show harmonic cursor even during playback if in measure mode and mouse in relevant pane * Avoid crash when trying to measure a non-layer * Various adjustments to some icons to make them look better in white-on-black schemes
author Chris Cannam
date Fri, 13 Jul 2007 15:54:17 +0000
parents 4edaff85875d
children 6de6f78b13a1
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@127 61 virtual QString toXmlString(QString indent = "",
Chris@127 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@127 69
Chris@127 70 public slots:
Chris@127 71 virtual void toolModeChanged();
Chris@133 72 virtual void zoomWheelsEnabledChanged();
Chris@222 73 virtual void viewZoomLevelChanged(View *v, unsigned long z, bool locked);
Chris@127 74
Chris@132 75 virtual void horizontalThumbwheelMoved(int value);
Chris@132 76 virtual void verticalThumbwheelMoved(int value);
Chris@133 77 virtual void verticalZoomChanged();
Chris@174 78 virtual void verticalPannerMoved(float x, float y, float w, float h);
Chris@188 79 virtual void editVerticalPannerExtents();
Chris@133 80
Chris@133 81 virtual void propertyContainerSelected(View *, PropertyContainer *pc);
Chris@132 82
Chris@189 83 void mouseEnteredWidget();
Chris@189 84 void mouseLeftWidget();
Chris@189 85
Chris@127 86 protected:
Chris@127 87 virtual void paintEvent(QPaintEvent *e);
Chris@127 88 virtual void mousePressEvent(QMouseEvent *e);
Chris@127 89 virtual void mouseReleaseEvent(QMouseEvent *e);
Chris@127 90 virtual void mouseMoveEvent(QMouseEvent *e);
Chris@127 91 virtual void mouseDoubleClickEvent(QMouseEvent *e);
Chris@290 92 virtual void enterEvent(QEvent *e);
Chris@127 93 virtual void leaveEvent(QEvent *e);
Chris@127 94 virtual void wheelEvent(QWheelEvent *e);
Chris@133 95 virtual void resizeEvent(QResizeEvent *e);
Chris@127 96
Chris@261 97 void drawVerticalScale(QRect r, Layer *, QPainter &);
Chris@261 98 void drawFeatureDescription(Layer *, QPainter &);
Chris@277 99 void drawCentreLine(int, QPainter &, bool omitLine);
Chris@261 100 void drawDurationAndRate(QRect, const Model *, int, QPainter &);
Chris@261 101 void drawLayerNames(QRect, QPainter &);
Chris@261 102 void drawEditingSelection(QPainter &);
Chris@261 103
Chris@229 104 virtual bool render(QPainter &paint, int x0, size_t f0, size_t f1);
Chris@229 105
Chris@127 106 Selection getSelectionAt(int x, bool &closeToLeft, bool &closeToRight) const;
Chris@127 107
Chris@127 108 bool editSelectionStart(QMouseEvent *e);
Chris@127 109 bool editSelectionDrag(QMouseEvent *e);
Chris@127 110 bool editSelectionEnd(QMouseEvent *e);
Chris@127 111 bool selectionIsBeingEdited() const;
Chris@127 112
Chris@133 113 void updateHeadsUpDisplay();
Chris@174 114 void updateVerticalPanner();
Chris@174 115
Chris@174 116 bool canTopLayerMoveVertical();
Chris@174 117 bool getTopLayerDisplayExtents(float &valueMin, float &valueMax,
Chris@188 118 float &displayMin, float &displayMax,
Chris@188 119 QString *unit = 0);
Chris@174 120 bool setTopLayerDisplayExtents(float displayMin, float displayMax);
Chris@174 121
Chris@174 122 void dragTopLayer(QMouseEvent *e);
Chris@174 123 void dragExtendSelection(QMouseEvent *e);
Chris@174 124 void zoomToRegion(int x0, int y0, int x1, int y1);
Chris@189 125 void updateContextHelp(const QPoint *pos);
Chris@259 126 void edgeScrollMaybe(int x);
Chris@133 127
Chris@127 128 bool m_identifyFeatures;
Chris@127 129 QPoint m_identifyPoint;
Chris@127 130 QPoint m_clickPos;
Chris@127 131 QPoint m_mousePos;
Chris@127 132 bool m_clickedInRange;
Chris@127 133 bool m_shiftPressed;
Chris@127 134 bool m_ctrlPressed;
Chris@266 135
Chris@127 136 bool m_navigating;
Chris@127 137 bool m_resizing;
Chris@127 138 size_t m_dragCentreFrame;
Chris@136 139 float m_dragStartMinValue;
Chris@127 140 bool m_centreLineVisible;
Chris@127 141 size_t m_selectionStartFrame;
Chris@127 142 Selection m_editingSelection;
Chris@127 143 int m_editingSelectionEdge;
Chris@222 144 mutable int m_scaleWidth;
Chris@133 145
Chris@150 146 enum DragMode {
Chris@150 147 UnresolvedDrag,
Chris@150 148 VerticalDrag,
Chris@150 149 HorizontalDrag,
Chris@150 150 FreeDrag
Chris@150 151 };
Chris@150 152 DragMode m_dragMode;
Chris@150 153
Chris@133 154 QWidget *m_headsUpDisplay;
Chris@172 155 Panner *m_vpan;
Chris@133 156 Thumbwheel *m_hthumb;
Chris@133 157 Thumbwheel *m_vthumb;
Chris@189 158 NotifyingPushButton *m_reset;
Chris@262 159
Chris@290 160 bool m_mouseInWidget;
Chris@290 161
Chris@267 162 static QCursor *m_measureCursor1;
Chris@267 163 static QCursor *m_measureCursor2;
Chris@127 164 };
Chris@127 165
Chris@127 166 #endif
Chris@127 167