annotate widgets/AudioDial.h @ 44:ad214997dddb

* Refactor Layer classes so as no longer to store a single View pointer; instead they need to be able to draw themselves on any View on demand. Layers with caches (e.g. spectrogram) will need to be further refactored so as to maintain a per-View cache * Begin refactoring MainWindow by pulling out the document stuff (set of layers, models etc) into a Document class. Not yet in use. This revision is fairly unstable.
author Chris Cannam
date Thu, 02 Mar 2006 16:58:49 +0000
parents c43f2c4f66f2
children 01ab51f72e84
rev   line source
Chris@0 1 /* -*- c-basic-offset: 4 -*- vi:set ts=8 sts=4 sw=4: */
Chris@0 2
Chris@0 3 /*
Chris@0 4 A waveform viewer and audio annotation editor.
Chris@5 5 Chris Cannam, Queen Mary University of London, 2005-2006
Chris@0 6
Chris@0 7 This is experimental software. Not for distribution.
Chris@0 8 */
Chris@0 9
Chris@0 10 #ifndef _AUDIO_DIAL_H_
Chris@0 11 #define _AUDIO_DIAL_H_
Chris@0 12
Chris@0 13 /**
Chris@0 14 * A rotary dial widget.
Chris@0 15 *
Chris@0 16 * Based on an original design by Thorsten Wilms.
Chris@0 17 *
Chris@0 18 * Implemented as a widget for the Rosegarden MIDI and audio sequencer
Chris@0 19 * and notation editor by Chris Cannam.
Chris@0 20 *
Chris@0 21 * Extracted into a standalone Qt3 widget by Pedro Lopez-Cabanillas
Chris@0 22 * and adapted for use in QSynth.
Chris@0 23 *
Chris@0 24 * Ported to Qt4 by Chris Cannam.
Chris@0 25 *
Chris@0 26 * This file copyright 2003-2005 Chris Cannam, copyright 2005 Pedro
Chris@0 27 * Lopez-Cabanillas.
Chris@0 28 *
Chris@0 29 * This program is free software; you can redistribute it and/or
Chris@0 30 * modify it under the terms of the GNU General Public License as
Chris@0 31 * published by the Free Software Foundation; either version 2 of the
Chris@0 32 * License, or (at your option) any later version. See the file
Chris@0 33 * COPYING included with this distribution for more information.
Chris@0 34 */
Chris@0 35
Chris@0 36 #include <QDial>
Chris@0 37 #include <map>
Chris@0 38
Chris@0 39 /**
Chris@0 40 * AudioDial is a nicer-looking QDial that by default reacts to mouse
Chris@0 41 * movement on horizontal and vertical axes instead of in a radial
Chris@0 42 * motion. Move the mouse up or right to increment the value, down or
Chris@0 43 * left to decrement it. AudioDial also responds to the mouse wheel.
Chris@0 44 *
Chris@0 45 * The programming interface for this widget is compatible with QDial,
Chris@0 46 * with the addition of properties for the knob colour and meter
Chris@0 47 * colour and a boolean property mouseDial that determines whether to
Chris@0 48 * respond to radial mouse motion in the same way as QDial (the
Chris@0 49 * default is no).
Chris@0 50 */
Chris@0 51
Chris@0 52 class AudioDial : public QDial
Chris@0 53 {
Chris@0 54 Q_OBJECT
Chris@0 55 Q_PROPERTY( QColor knobColor READ getKnobColor WRITE setKnobColor )
Chris@0 56 Q_PROPERTY( QColor meterColor READ getMeterColor WRITE setMeterColor )
Chris@0 57 Q_PROPERTY( bool mouseDial READ getMouseDial WRITE setMouseDial )
Chris@0 58
Chris@0 59 public:
Chris@0 60 AudioDial(QWidget *parent = 0);
Chris@0 61 ~AudioDial();
Chris@0 62
Chris@0 63 const QColor& getKnobColor() const { return m_knobColor; }
Chris@0 64 const QColor& getMeterColor() const { return m_meterColor; }
Chris@0 65 bool getMouseDial() const { return m_mouseDial; }
Chris@0 66
Chris@0 67 public slots:
Chris@0 68 /**
Chris@0 69 * Set the colour of the knob. The default is to inherit the
Chris@0 70 * colour from the widget's palette.
Chris@0 71 */
Chris@0 72 void setKnobColor(const QColor &color);
Chris@0 73
Chris@0 74 /**
Chris@0 75 * Set the colour of the meter (the highlighted area around the
Chris@0 76 * knob that shows the current value). The default is to inherit
Chris@0 77 * the colour from the widget's palette.
Chris@0 78 */
Chris@0 79 void setMeterColor(const QColor &color);
Chris@0 80
Chris@0 81 /**
Chris@0 82 * Specify that the dial should respond to radial mouse movements
Chris@0 83 * in the same way as QDial.
Chris@0 84 */
Chris@0 85 void setMouseDial(bool mouseDial);
Chris@0 86
Chris@34 87 void setDefaultValue(int defaultValue);
Chris@34 88
Chris@0 89 protected:
Chris@0 90 void drawTick(QPainter &paint, float angle, int size, bool internal);
Chris@0 91 virtual void paintEvent(QPaintEvent *);
Chris@0 92
Chris@0 93 // Alternate mouse behavior event handlers.
Chris@0 94 virtual void mousePressEvent(QMouseEvent *pMouseEvent);
Chris@0 95 virtual void mouseMoveEvent(QMouseEvent *pMouseEvent);
Chris@0 96 virtual void mouseReleaseEvent(QMouseEvent *pMouseEvent);
Chris@34 97 virtual void mouseDoubleClickEvent(QMouseEvent *pMouseEvent);
Chris@0 98
Chris@0 99 private:
Chris@0 100 QColor m_knobColor;
Chris@0 101 QColor m_meterColor;
Chris@0 102
Chris@34 103 int m_defaultValue;
Chris@34 104
Chris@0 105 // Alternate mouse behavior tracking.
Chris@0 106 bool m_mouseDial;
Chris@0 107 bool m_mousePressed;
Chris@0 108 QPoint m_posMouse;
Chris@0 109 };
Chris@0 110
Chris@0 111
Chris@0 112 #endif // __AudioDial_h
Chris@0 113
Chris@0 114 // end of AudioDial.h