annotate widgets/AudioDial.h @ 282:d9319859a4cf tip

(none)
author benoitrigolleau
date Fri, 31 Oct 2008 11:00:24 +0000
parents 76d4fbab5f20
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
lbajardsilogic@0 8 This program is free software; you can redistribute it and/or
lbajardsilogic@0 9 modify it under the terms of the GNU General Public License as
lbajardsilogic@0 10 published by the Free Software Foundation; either version 2 of the
lbajardsilogic@0 11 License, or (at your option) any later version. See the file
lbajardsilogic@0 12 COPYING included with this distribution for more information.
lbajardsilogic@0 13 */
lbajardsilogic@0 14
lbajardsilogic@0 15 #ifndef _AUDIO_DIAL_H_
lbajardsilogic@0 16 #define _AUDIO_DIAL_H_
lbajardsilogic@0 17
lbajardsilogic@0 18 /**
lbajardsilogic@0 19 * A rotary dial widget.
lbajardsilogic@0 20 *
lbajardsilogic@0 21 * Based on an original design by Thorsten Wilms.
lbajardsilogic@0 22 *
lbajardsilogic@0 23 * Implemented as a widget for the Rosegarden MIDI and audio sequencer
lbajardsilogic@0 24 * and notation editor by Chris Cannam.
lbajardsilogic@0 25 *
lbajardsilogic@0 26 * Extracted into a standalone Qt3 widget by Pedro Lopez-Cabanillas
lbajardsilogic@0 27 * and adapted for use in QSynth.
lbajardsilogic@0 28 *
lbajardsilogic@0 29 * Ported to Qt4 by Chris Cannam.
lbajardsilogic@0 30 *
lbajardsilogic@0 31 * This file copyright 2003-2006 Chris Cannam, copyright 2005 Pedro
lbajardsilogic@0 32 * Lopez-Cabanillas, copyright 2006 Queen Mary, University of London.
lbajardsilogic@0 33 *
lbajardsilogic@0 34 * This program is free software; you can redistribute it and/or
lbajardsilogic@0 35 * modify it under the terms of the GNU General Public License as
lbajardsilogic@0 36 * published by the Free Software Foundation; either version 2 of the
lbajardsilogic@0 37 * License, or (at your option) any later version. See the file
lbajardsilogic@0 38 * COPYING included with this distribution for more information.
lbajardsilogic@0 39 */
lbajardsilogic@0 40
lbajardsilogic@0 41 #include <QDial>
lbajardsilogic@0 42 #include <map>
lbajardsilogic@0 43
lbajardsilogic@0 44 class RangeMapper;
lbajardsilogic@0 45
lbajardsilogic@0 46 /**
lbajardsilogic@0 47 * AudioDial is a nicer-looking QDial that by default reacts to mouse
lbajardsilogic@0 48 * movement on horizontal and vertical axes instead of in a radial
lbajardsilogic@0 49 * motion. Move the mouse up or right to increment the value, down or
lbajardsilogic@0 50 * left to decrement it. AudioDial also responds to the mouse wheel.
lbajardsilogic@0 51 *
lbajardsilogic@0 52 * The programming interface for this widget is compatible with QDial,
lbajardsilogic@0 53 * with the addition of properties for the knob colour and meter
lbajardsilogic@0 54 * colour and a boolean property mouseDial that determines whether to
lbajardsilogic@0 55 * respond to radial mouse motion in the same way as QDial (the
lbajardsilogic@0 56 * default is no).
lbajardsilogic@0 57 */
lbajardsilogic@0 58
lbajardsilogic@0 59 class AudioDial : public QDial
lbajardsilogic@0 60 {
lbajardsilogic@0 61 Q_OBJECT
lbajardsilogic@0 62 Q_PROPERTY( QColor knobColor READ getKnobColor WRITE setKnobColor )
lbajardsilogic@0 63 Q_PROPERTY( QColor meterColor READ getMeterColor WRITE setMeterColor )
lbajardsilogic@0 64 Q_PROPERTY( bool mouseDial READ getMouseDial WRITE setMouseDial )
lbajardsilogic@0 65
lbajardsilogic@0 66 public:
lbajardsilogic@0 67 AudioDial(QWidget *parent = 0);
lbajardsilogic@0 68 ~AudioDial();
lbajardsilogic@0 69
lbajardsilogic@0 70 const QColor& getKnobColor() const { return m_knobColor; }
lbajardsilogic@0 71 const QColor& getMeterColor() const { return m_meterColor; }
lbajardsilogic@0 72 bool getMouseDial() const { return m_mouseDial; }
lbajardsilogic@0 73
lbajardsilogic@0 74 void setRangeMapper(RangeMapper *mapper); // I take ownership, will delete
lbajardsilogic@0 75 const RangeMapper *rangeMapper() const { return m_rangeMapper; }
lbajardsilogic@0 76 float mappedValue() const;
lbajardsilogic@0 77
lbajardsilogic@0 78 void setShowToolTip(bool show);
lbajardsilogic@0 79
lbajardsilogic@0 80 signals:
lbajardsilogic@0 81 void mouseEntered();
lbajardsilogic@0 82 void mouseLeft();
lbajardsilogic@0 83
lbajardsilogic@0 84 public slots:
lbajardsilogic@0 85 /**
lbajardsilogic@0 86 * Set the colour of the knob. The default is to inherit the
lbajardsilogic@0 87 * colour from the widget's palette.
lbajardsilogic@0 88 */
lbajardsilogic@0 89 void setKnobColor(const QColor &color);
lbajardsilogic@0 90
lbajardsilogic@0 91 /**
lbajardsilogic@0 92 * Set the colour of the meter (the highlighted area around the
lbajardsilogic@0 93 * knob that shows the current value). The default is to inherit
lbajardsilogic@0 94 * the colour from the widget's palette.
lbajardsilogic@0 95 */
lbajardsilogic@0 96 void setMeterColor(const QColor &color);
lbajardsilogic@0 97
lbajardsilogic@0 98 /**
lbajardsilogic@0 99 * Specify that the dial should respond to radial mouse movements
lbajardsilogic@0 100 * in the same way as QDial.
lbajardsilogic@0 101 */
lbajardsilogic@0 102 void setMouseDial(bool mouseDial);
lbajardsilogic@0 103
lbajardsilogic@0 104 void setDefaultValue(int defaultValue);
lbajardsilogic@0 105
lbajardsilogic@0 106 void setValue(int value);
lbajardsilogic@0 107
lbajardsilogic@0 108 void setMappedValue(float mappedValue);
lbajardsilogic@0 109
lbajardsilogic@0 110 protected:
lbajardsilogic@0 111 void drawTick(QPainter &paint, float angle, int size, bool internal);
lbajardsilogic@0 112 virtual void paintEvent(QPaintEvent *);
lbajardsilogic@0 113
lbajardsilogic@0 114 // Alternate mouse behavior event handlers.
lbajardsilogic@0 115 virtual void mousePressEvent(QMouseEvent *pMouseEvent);
lbajardsilogic@0 116 virtual void mouseMoveEvent(QMouseEvent *pMouseEvent);
lbajardsilogic@0 117 virtual void mouseReleaseEvent(QMouseEvent *pMouseEvent);
lbajardsilogic@0 118 virtual void mouseDoubleClickEvent(QMouseEvent *pMouseEvent);
lbajardsilogic@0 119 virtual void enterEvent(QEvent *);
lbajardsilogic@0 120 virtual void leaveEvent(QEvent *);
lbajardsilogic@0 121
lbajardsilogic@0 122 protected slots:
lbajardsilogic@0 123 void updateMappedValue(int value);
lbajardsilogic@0 124
lbajardsilogic@0 125 private:
lbajardsilogic@0 126 QColor m_knobColor;
lbajardsilogic@0 127 QColor m_meterColor;
lbajardsilogic@0 128
lbajardsilogic@0 129 int m_defaultValue;
lbajardsilogic@0 130 float m_mappedValue;
lbajardsilogic@0 131 bool m_noMappedUpdate;
lbajardsilogic@0 132
lbajardsilogic@0 133 // Alternate mouse behavior tracking.
lbajardsilogic@0 134 bool m_mouseDial;
lbajardsilogic@0 135 bool m_mousePressed;
lbajardsilogic@0 136 QPoint m_posMouse;
lbajardsilogic@0 137
lbajardsilogic@0 138 bool m_showTooltip;
lbajardsilogic@0 139
lbajardsilogic@0 140 RangeMapper *m_rangeMapper;
lbajardsilogic@0 141 };
lbajardsilogic@0 142
lbajardsilogic@83 143 #endif
lbajardsilogic@0 144
lbajardsilogic@0 145 // end of AudioDial.h