annotate widgets/Panner.h @ 183:5f86ae638b04

* Omit translucent blue fill for selection rectangles that are superimposed over layers that use colours for meaningful purposes such as the spectrogram (CHARM change request)
author Chris Cannam
date Fri, 24 Nov 2006 16:56:15 +0000
parents 42118892f428
children dd573e090eed
rev   line source
Chris@172 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@172 2
Chris@172 3 /*
Chris@172 4 Sonic Visualiser
Chris@172 5 An audio file viewer and annotation editor.
Chris@172 6 Centre for Digital Music, Queen Mary, University of London.
Chris@182 7 This file copyright 2006 QMUL.
Chris@172 8
Chris@172 9 This program is free software; you can redistribute it and/or
Chris@172 10 modify it under the terms of the GNU General Public License as
Chris@172 11 published by the Free Software Foundation; either version 2 of the
Chris@172 12 License, or (at your option) any later version. See the file
Chris@172 13 COPYING included with this distribution for more information.
Chris@172 14 */
Chris@172 15
Chris@172 16 #ifndef _PANNER_H_
Chris@172 17 #define _PANNER_H_
Chris@172 18
Chris@172 19 #include <QWidget>
Chris@172 20
Chris@172 21 class Panner : public QWidget
Chris@172 22 {
Chris@172 23 Q_OBJECT
Chris@172 24
Chris@172 25 public:
Chris@172 26 Panner(QWidget *parent = 0);
Chris@172 27 virtual ~Panner();
Chris@172 28
Chris@173 29 void setDefaultRectCentre(float, float);
Chris@173 30
Chris@174 31 void setThumbColour(QColor colour);
Chris@174 32 void setAlpha(int backgroundAlpha, int thumbAlpha);
Chris@174 33
Chris@172 34 virtual void mousePressEvent(QMouseEvent *e);
Chris@172 35 virtual void mouseDoubleClickEvent(QMouseEvent *e);
Chris@172 36 virtual void mouseMoveEvent(QMouseEvent *e);
Chris@172 37 virtual void mouseReleaseEvent(QMouseEvent *e);
Chris@172 38 virtual void wheelEvent(QWheelEvent *e);
Chris@172 39 virtual void paintEvent(QPaintEvent *e);
Chris@172 40
Chris@172 41 virtual QSize sizeHint() const;
Chris@172 42
Chris@172 43 signals:
Chris@172 44 /**
Chris@172 45 * Emitted when the panned rectangle is dragged or otherwise
Chris@172 46 * moved. Arguments are x0, y0, width and height of the rectangle
Chris@172 47 * in the range 0 -> 1 as proportions of the width and height of
Chris@172 48 * the whole widget.
Chris@172 49 */
Chris@172 50 void rectExtentsChanged(float, float, float, float);
Chris@172 51
Chris@172 52 /**
Chris@172 53 * Emitted when the rectangle is dragged or otherwise moved (as
Chris@172 54 * well as extentsChanged). Arguments are the centre coordinates
Chris@172 55 * of the rectangle in the range 0 -> 1 as proportions of the
Chris@172 56 * width and height of the whole widget.
Chris@172 57 */
Chris@172 58 void rectCentreMoved(float, float);
Chris@172 59
Chris@172 60 public slots:
Chris@172 61 /**
Chris@172 62 * Set the extents of the panned rectangle within the overall
Chris@172 63 * panner widget. Coordinates are in the range 0 -> 1 in both axes,
Chris@172 64 * with 0 at the top in the y axis.
Chris@172 65 */
Chris@172 66 void setRectExtents(float x0, float y0, float width, float height);
Chris@172 67
Chris@172 68 /**
Chris@172 69 * Set the width of the panned rectangle as a fraction (0 -> 1) of
Chris@172 70 * that of the whole panner widget.
Chris@172 71 */
Chris@172 72 void setRectWidth(float width);
Chris@172 73
Chris@172 74 /**
Chris@172 75 * Set the height of the panned rectangle as a fraction (0 -> 1)
Chris@172 76 * of that of the whole panner widget.
Chris@172 77 */
Chris@172 78 void setRectHeight(float height);
Chris@172 79
Chris@172 80 /**
Chris@172 81 * Set the location of the centre of the panned rectangle on the x
Chris@172 82 * axis, as a proportion (0 -> 1) of the width of the whole panner
Chris@172 83 * widget.
Chris@172 84 */
Chris@172 85 void setRectCentreX(float x);
Chris@172 86
Chris@172 87 /**
Chris@172 88 * Set the location of the centre of the panned rectangle on the y
Chris@172 89 * axis, as a proportion (0 -> 1) of the height of the whole panner
Chris@172 90 * widget.
Chris@172 91 */
Chris@172 92 void setRectCentreY(float y);
Chris@172 93
Chris@172 94 protected:
Chris@172 95 void normalise();
Chris@172 96 void emitAndUpdate();
Chris@173 97 void resetToDefault();
Chris@172 98
Chris@172 99 float m_rectX;
Chris@172 100 float m_rectY;
Chris@172 101 float m_rectWidth;
Chris@172 102 float m_rectHeight;
Chris@173 103
Chris@173 104 float m_defaultCentreX;
Chris@173 105 float m_defaultCentreY;
Chris@173 106 bool m_defaultsSet;
Chris@173 107
Chris@174 108 QColor m_thumbColour;
Chris@174 109 int m_backgroundAlpha;
Chris@174 110 int m_thumbAlpha;
Chris@174 111
Chris@173 112 float centreX() const { return m_rectX + m_rectWidth/2; }
Chris@173 113 float centreY() const { return m_rectY + m_rectHeight/2; }
Chris@173 114
Chris@173 115 bool m_clicked;
Chris@173 116 QPoint m_clickPos;
Chris@173 117 float m_dragStartX;
Chris@173 118 float m_dragStartY;
Chris@172 119 };
Chris@172 120
Chris@172 121 #endif
Chris@172 122