annotate widgets/AudioDial.h @ 77:fd348f36c0d3

* Implement harmonic cursor in spectrogram * Implement layer export. This doesn't quite do the right thing for the SV XML layer export yet -- it doesn't include layer display information, so when imported, it only creates an invisible model. Could also do with fixing CSV file import so as to work correctly for note and text layers.
author Chris Cannam
date Mon, 10 Apr 2006 17:22:59 +0000
parents 705f05ab42e3
children 53b9c7656798
rev   line source
Chris@58 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@0 2
Chris@0 3 /*
Chris@59 4 Sonic Visualiser
Chris@59 5 An audio file viewer and annotation editor.
Chris@59 6 Centre for Digital Music, Queen Mary, University of London.
Chris@0 7
Chris@59 8 This program is free software; you can redistribute it and/or
Chris@59 9 modify it under the terms of the GNU General Public License as
Chris@59 10 published by the Free Software Foundation; either version 2 of the
Chris@59 11 License, or (at your option) any later version. See the file
Chris@59 12 COPYING included with this distribution for more information.
Chris@0 13 */
Chris@0 14
Chris@0 15 #ifndef _AUDIO_DIAL_H_
Chris@0 16 #define _AUDIO_DIAL_H_
Chris@0 17
Chris@0 18 /**
Chris@0 19 * A rotary dial widget.
Chris@0 20 *
Chris@0 21 * Based on an original design by Thorsten Wilms.
Chris@0 22 *
Chris@0 23 * Implemented as a widget for the Rosegarden MIDI and audio sequencer
Chris@0 24 * and notation editor by Chris Cannam.
Chris@0 25 *
Chris@0 26 * Extracted into a standalone Qt3 widget by Pedro Lopez-Cabanillas
Chris@0 27 * and adapted for use in QSynth.
Chris@0 28 *
Chris@0 29 * Ported to Qt4 by Chris Cannam.
Chris@0 30 *
Chris@0 31 * This file copyright 2003-2005 Chris Cannam, copyright 2005 Pedro
Chris@0 32 * Lopez-Cabanillas.
Chris@0 33 *
Chris@0 34 * This program is free software; you can redistribute it and/or
Chris@0 35 * modify it under the terms of the GNU General Public License as
Chris@0 36 * published by the Free Software Foundation; either version 2 of the
Chris@0 37 * License, or (at your option) any later version. See the file
Chris@0 38 * COPYING included with this distribution for more information.
Chris@0 39 */
Chris@0 40
Chris@0 41 #include <QDial>
Chris@0 42 #include <map>
Chris@0 43
Chris@0 44 /**
Chris@0 45 * AudioDial is a nicer-looking QDial that by default reacts to mouse
Chris@0 46 * movement on horizontal and vertical axes instead of in a radial
Chris@0 47 * motion. Move the mouse up or right to increment the value, down or
Chris@0 48 * left to decrement it. AudioDial also responds to the mouse wheel.
Chris@0 49 *
Chris@0 50 * The programming interface for this widget is compatible with QDial,
Chris@0 51 * with the addition of properties for the knob colour and meter
Chris@0 52 * colour and a boolean property mouseDial that determines whether to
Chris@0 53 * respond to radial mouse motion in the same way as QDial (the
Chris@0 54 * default is no).
Chris@0 55 */
Chris@0 56
Chris@0 57 class AudioDial : public QDial
Chris@0 58 {
Chris@0 59 Q_OBJECT
Chris@0 60 Q_PROPERTY( QColor knobColor READ getKnobColor WRITE setKnobColor )
Chris@0 61 Q_PROPERTY( QColor meterColor READ getMeterColor WRITE setMeterColor )
Chris@0 62 Q_PROPERTY( bool mouseDial READ getMouseDial WRITE setMouseDial )
Chris@0 63
Chris@0 64 public:
Chris@0 65 AudioDial(QWidget *parent = 0);
Chris@0 66 ~AudioDial();
Chris@0 67
Chris@0 68 const QColor& getKnobColor() const { return m_knobColor; }
Chris@0 69 const QColor& getMeterColor() const { return m_meterColor; }
Chris@0 70 bool getMouseDial() const { return m_mouseDial; }
Chris@0 71
Chris@0 72 public slots:
Chris@0 73 /**
Chris@0 74 * Set the colour of the knob. The default is to inherit the
Chris@0 75 * colour from the widget's palette.
Chris@0 76 */
Chris@0 77 void setKnobColor(const QColor &color);
Chris@0 78
Chris@0 79 /**
Chris@0 80 * Set the colour of the meter (the highlighted area around the
Chris@0 81 * knob that shows the current value). The default is to inherit
Chris@0 82 * the colour from the widget's palette.
Chris@0 83 */
Chris@0 84 void setMeterColor(const QColor &color);
Chris@0 85
Chris@0 86 /**
Chris@0 87 * Specify that the dial should respond to radial mouse movements
Chris@0 88 * in the same way as QDial.
Chris@0 89 */
Chris@0 90 void setMouseDial(bool mouseDial);
Chris@0 91
Chris@34 92 void setDefaultValue(int defaultValue);
Chris@34 93
Chris@0 94 protected:
Chris@0 95 void drawTick(QPainter &paint, float angle, int size, bool internal);
Chris@0 96 virtual void paintEvent(QPaintEvent *);
Chris@0 97
Chris@0 98 // Alternate mouse behavior event handlers.
Chris@0 99 virtual void mousePressEvent(QMouseEvent *pMouseEvent);
Chris@0 100 virtual void mouseMoveEvent(QMouseEvent *pMouseEvent);
Chris@0 101 virtual void mouseReleaseEvent(QMouseEvent *pMouseEvent);
Chris@34 102 virtual void mouseDoubleClickEvent(QMouseEvent *pMouseEvent);
Chris@0 103
Chris@0 104 private:
Chris@0 105 QColor m_knobColor;
Chris@0 106 QColor m_meterColor;
Chris@0 107
Chris@34 108 int m_defaultValue;
Chris@34 109
Chris@0 110 // Alternate mouse behavior tracking.
Chris@0 111 bool m_mouseDial;
Chris@0 112 bool m_mousePressed;
Chris@0 113 QPoint m_posMouse;
Chris@0 114 };
Chris@0 115
Chris@0 116
Chris@0 117 #endif // __AudioDial_h
Chris@0 118
Chris@0 119 // end of AudioDial.h