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
|