annotate view/Pane.h @ 299:5c59c433b358

* Show colour swatch next to layer name in pane (if available) * Fix for incorrect layer name prefix handling (was making some layers appear to have the same model name in cases where the model names differed by the final character only)
author Chris Cannam
date Wed, 05 Sep 2007 15:17:15 +0000
parents 3101c68a00c1
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