annotate view/Pane.h @ 224:9465b5375235

* Fix #1672407 confused by plugin-named files in cwd (or home?) * Fix #1491848 crash when loading new file while transform plugin runs * Fix #1502287 Background remains black after spectrogram layer deleted * Fix #1604477 Replacing the main audio file silences secondary audio file * Fix failure to initialise property box layout to last preference on startup * Fix resample/wrong-rate display in Pane, ensure that right rate is chosen if all current models have an acceptable rate even if previous main model had a different one * Fix "global zoom" broken in previous commit * Some fixes to spectrogram cache area updating (makes spectrogram appear more quickly, previously it had a tendency to refresh with empty space) * Fixes to colour 3d plot normalization
author Chris Cannam
date Thu, 08 Mar 2007 16:53:08 +0000
parents cd81066ac7ad
children 6dab3ac2fe73
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@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@127 53 virtual QString toXmlString(QString indent = "",
Chris@127 54 QString extraAttributes = "") const;
Chris@127 55
Chris@127 56 signals:
Chris@127 57 void paneInteractedWith();
Chris@127 58 void rightButtonMenuRequested(QPoint position);
Chris@127 59
Chris@127 60 public slots:
Chris@127 61 virtual void toolModeChanged();
Chris@133 62 virtual void zoomWheelsEnabledChanged();
Chris@222 63 virtual void viewZoomLevelChanged(View *v, unsigned long z, bool locked);
Chris@127 64
Chris@132 65 virtual void horizontalThumbwheelMoved(int value);
Chris@132 66 virtual void verticalThumbwheelMoved(int value);
Chris@133 67 virtual void verticalZoomChanged();
Chris@174 68 virtual void verticalPannerMoved(float x, float y, float w, float h);
Chris@188 69 virtual void editVerticalPannerExtents();
Chris@133 70
Chris@133 71 virtual void propertyContainerSelected(View *, PropertyContainer *pc);
Chris@132 72
Chris@189 73 void mouseEnteredWidget();
Chris@189 74 void mouseLeftWidget();
Chris@189 75
Chris@127 76 protected:
Chris@127 77 virtual void paintEvent(QPaintEvent *e);
Chris@127 78 virtual void mousePressEvent(QMouseEvent *e);
Chris@127 79 virtual void mouseReleaseEvent(QMouseEvent *e);
Chris@127 80 virtual void mouseMoveEvent(QMouseEvent *e);
Chris@127 81 virtual void mouseDoubleClickEvent(QMouseEvent *e);
Chris@127 82 virtual void leaveEvent(QEvent *e);
Chris@127 83 virtual void wheelEvent(QWheelEvent *e);
Chris@133 84 virtual void resizeEvent(QResizeEvent *e);
Chris@127 85
Chris@127 86 Selection getSelectionAt(int x, bool &closeToLeft, bool &closeToRight) const;
Chris@127 87
Chris@127 88 bool editSelectionStart(QMouseEvent *e);
Chris@127 89 bool editSelectionDrag(QMouseEvent *e);
Chris@127 90 bool editSelectionEnd(QMouseEvent *e);
Chris@127 91 bool selectionIsBeingEdited() const;
Chris@127 92
Chris@133 93 void updateHeadsUpDisplay();
Chris@174 94 void updateVerticalPanner();
Chris@174 95
Chris@174 96 bool canTopLayerMoveVertical();
Chris@174 97 bool getTopLayerDisplayExtents(float &valueMin, float &valueMax,
Chris@188 98 float &displayMin, float &displayMax,
Chris@188 99 QString *unit = 0);
Chris@174 100 bool setTopLayerDisplayExtents(float displayMin, float displayMax);
Chris@174 101
Chris@174 102 void dragTopLayer(QMouseEvent *e);
Chris@174 103 void dragExtendSelection(QMouseEvent *e);
Chris@174 104 void zoomToRegion(int x0, int y0, int x1, int y1);
Chris@189 105 void updateContextHelp(const QPoint *pos);
Chris@133 106
Chris@127 107 bool m_identifyFeatures;
Chris@127 108 QPoint m_identifyPoint;
Chris@127 109 QPoint m_clickPos;
Chris@127 110 QPoint m_mousePos;
Chris@127 111 bool m_clickedInRange;
Chris@127 112 bool m_shiftPressed;
Chris@127 113 bool m_ctrlPressed;
Chris@127 114 bool m_navigating;
Chris@127 115 bool m_resizing;
Chris@127 116 size_t m_dragCentreFrame;
Chris@136 117 float m_dragStartMinValue;
Chris@127 118 bool m_centreLineVisible;
Chris@127 119 size_t m_selectionStartFrame;
Chris@127 120 Selection m_editingSelection;
Chris@127 121 int m_editingSelectionEdge;
Chris@222 122 mutable int m_scaleWidth;
Chris@133 123
Chris@150 124 enum DragMode {
Chris@150 125 UnresolvedDrag,
Chris@150 126 VerticalDrag,
Chris@150 127 HorizontalDrag,
Chris@150 128 FreeDrag
Chris@150 129 };
Chris@150 130 DragMode m_dragMode;
Chris@150 131
Chris@133 132 QWidget *m_headsUpDisplay;
Chris@172 133 Panner *m_vpan;
Chris@133 134 Thumbwheel *m_hthumb;
Chris@133 135 Thumbwheel *m_vthumb;
Chris@189 136 NotifyingPushButton *m_reset;
Chris@127 137 };
Chris@127 138
Chris@127 139 #endif
Chris@127 140