annotate widgets/AudioDial.h @ 1603:f12c25651f96

Debug
author Chris Cannam
date Wed, 29 Apr 2020 17:47:37 +0100
parents e5464dc2f6cf
children
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@1407 15 #ifndef SV_AUDIO_DIAL_H
Chris@1407 16 #define SV_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@182 31 * This file copyright 2003-2006 Chris Cannam, copyright 2005 Pedro
Chris@182 32 * Lopez-Cabanillas, copyright 2006 Queen Mary, University of London.
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@167 44 class RangeMapper;
Chris@1584 45 class QMenu;
Chris@167 46
Chris@0 47 /**
Chris@0 48 * AudioDial is a nicer-looking QDial that by default reacts to mouse
Chris@0 49 * movement on horizontal and vertical axes instead of in a radial
Chris@0 50 * motion. Move the mouse up or right to increment the value, down or
Chris@0 51 * left to decrement it. AudioDial also responds to the mouse wheel.
Chris@0 52 *
Chris@0 53 * The programming interface for this widget is compatible with QDial,
Chris@0 54 * with the addition of properties for the knob colour and meter
Chris@0 55 * colour and a boolean property mouseDial that determines whether to
Chris@0 56 * respond to radial mouse motion in the same way as QDial (the
Chris@0 57 * default is no).
Chris@0 58 */
Chris@0 59
Chris@0 60 class AudioDial : public QDial
Chris@0 61 {
Chris@0 62 Q_OBJECT
Chris@0 63 Q_PROPERTY( QColor knobColor READ getKnobColor WRITE setKnobColor )
Chris@0 64 Q_PROPERTY( QColor meterColor READ getMeterColor WRITE setMeterColor )
Chris@0 65 Q_PROPERTY( bool mouseDial READ getMouseDial WRITE setMouseDial )
Chris@0 66
Chris@0 67 public:
Chris@0 68 AudioDial(QWidget *parent = 0);
Chris@0 69 ~AudioDial();
Chris@0 70
Chris@0 71 const QColor& getKnobColor() const { return m_knobColor; }
Chris@0 72 const QColor& getMeterColor() const { return m_meterColor; }
Chris@0 73 bool getMouseDial() const { return m_mouseDial; }
Chris@0 74
Chris@167 75 void setRangeMapper(RangeMapper *mapper); // I take ownership, will delete
Chris@168 76 const RangeMapper *rangeMapper() const { return m_rangeMapper; }
Chris@908 77 double mappedValue() const;
Chris@167 78
Chris@271 79 int defaultValue() const { return m_defaultValue; }
Chris@271 80
Chris@168 81 void setShowToolTip(bool show);
Chris@1584 82 void setProvideContextMenu(bool provide);
Chris@167 83
Chris@189 84 signals:
Chris@189 85 void mouseEntered();
Chris@189 86 void mouseLeft();
Chris@189 87
Chris@0 88 public slots:
Chris@0 89 /**
Chris@0 90 * Set the colour of the knob. The default is to inherit the
Chris@0 91 * colour from the widget's palette.
Chris@0 92 */
Chris@0 93 void setKnobColor(const QColor &color);
Chris@0 94
Chris@0 95 /**
Chris@0 96 * Set the colour of the meter (the highlighted area around the
Chris@0 97 * knob that shows the current value). The default is to inherit
Chris@0 98 * the colour from the widget's palette.
Chris@0 99 */
Chris@0 100 void setMeterColor(const QColor &color);
Chris@0 101
Chris@0 102 /**
Chris@0 103 * Specify that the dial should respond to radial mouse movements
Chris@0 104 * in the same way as QDial.
Chris@0 105 */
Chris@0 106 void setMouseDial(bool mouseDial);
Chris@0 107
Chris@34 108 void setDefaultValue(int defaultValue);
Chris@34 109
Chris@219 110 void setValue(int value);
Chris@219 111
Chris@908 112 void setDefaultMappedValue(double mappedValue);
Chris@344 113
Chris@908 114 void setMappedValue(double mappedValue);
Chris@177 115
Chris@344 116 void setToDefault();
Chris@344 117
Chris@1584 118 void edit();
Chris@1584 119
Chris@0 120 protected:
Chris@908 121 void drawTick(QPainter &paint, double angle, int size, bool internal);
Chris@1406 122 void paintEvent(QPaintEvent *) override;
Chris@0 123
Chris@0 124 // Alternate mouse behavior event handlers.
Chris@1406 125 void mousePressEvent(QMouseEvent *pMouseEvent) override;
Chris@1406 126 void mouseMoveEvent(QMouseEvent *pMouseEvent) override;
Chris@1406 127 void mouseReleaseEvent(QMouseEvent *pMouseEvent) override;
Chris@1406 128 void mouseDoubleClickEvent(QMouseEvent *pMouseEvent) override;
Chris@1406 129 void enterEvent(QEvent *) override;
Chris@1406 130 void leaveEvent(QEvent *) override;
Chris@0 131
Chris@168 132 protected slots:
Chris@168 133 void updateMappedValue(int value);
Chris@1584 134 void contextMenuRequested(const QPoint &);
Chris@168 135
Chris@0 136 private:
Chris@0 137 QColor m_knobColor;
Chris@0 138 QColor m_meterColor;
Chris@0 139
Chris@34 140 int m_defaultValue;
Chris@908 141 double m_defaultMappedValue;
Chris@908 142 double m_mappedValue;
Chris@168 143 bool m_noMappedUpdate;
Chris@34 144
Chris@0 145 // Alternate mouse behavior tracking.
Chris@0 146 bool m_mouseDial;
Chris@0 147 bool m_mousePressed;
Chris@0 148 QPoint m_posMouse;
Chris@167 149
Chris@168 150 bool m_showTooltip;
Chris@1584 151 bool m_provideContextMenu;
Chris@1584 152
Chris@1584 153 QString m_title;
Chris@1584 154
Chris@1584 155 QMenu *m_lastContextMenu;
Chris@168 156
Chris@167 157 RangeMapper *m_rangeMapper;
Chris@0 158 };
Chris@0 159
Chris@0 160
Chris@0 161 #endif // __AudioDial_h
Chris@0 162
Chris@0 163 // end of AudioDial.h