annotate widgets/AudioDial.h @ 1619:36634b427d61

Fix wrongly-written test which made the mapping alignments line up wrongly in some cases where adjacent panes were related (but, because of this test, the alignment view thought they were not)
author Chris Cannam
date Tue, 18 Aug 2020 14:49:36 +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