annotate widgets/Panner.h @ 282:d9319859a4cf tip

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