lbajardsilogic@0: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ lbajardsilogic@0: lbajardsilogic@0: /* lbajardsilogic@0: Sonic Visualiser lbajardsilogic@0: An audio file viewer and annotation editor. lbajardsilogic@0: Centre for Digital Music, Queen Mary, University of London. lbajardsilogic@0: lbajardsilogic@0: This program is free software; you can redistribute it and/or lbajardsilogic@0: modify it under the terms of the GNU General Public License as lbajardsilogic@0: published by the Free Software Foundation; either version 2 of the lbajardsilogic@0: License, or (at your option) any later version. See the file lbajardsilogic@0: COPYING included with this distribution for more information. lbajardsilogic@0: */ lbajardsilogic@0: lbajardsilogic@0: #ifndef _AUDIO_DIAL_H_ lbajardsilogic@0: #define _AUDIO_DIAL_H_ lbajardsilogic@0: lbajardsilogic@0: /** lbajardsilogic@0: * A rotary dial widget. lbajardsilogic@0: * lbajardsilogic@0: * Based on an original design by Thorsten Wilms. lbajardsilogic@0: * lbajardsilogic@0: * Implemented as a widget for the Rosegarden MIDI and audio sequencer lbajardsilogic@0: * and notation editor by Chris Cannam. lbajardsilogic@0: * lbajardsilogic@0: * Extracted into a standalone Qt3 widget by Pedro Lopez-Cabanillas lbajardsilogic@0: * and adapted for use in QSynth. lbajardsilogic@0: * lbajardsilogic@0: * Ported to Qt4 by Chris Cannam. lbajardsilogic@0: * lbajardsilogic@0: * This file copyright 2003-2006 Chris Cannam, copyright 2005 Pedro lbajardsilogic@0: * Lopez-Cabanillas, copyright 2006 Queen Mary, University of London. lbajardsilogic@0: * lbajardsilogic@0: * This program is free software; you can redistribute it and/or lbajardsilogic@0: * modify it under the terms of the GNU General Public License as lbajardsilogic@0: * published by the Free Software Foundation; either version 2 of the lbajardsilogic@0: * License, or (at your option) any later version. See the file lbajardsilogic@0: * COPYING included with this distribution for more information. lbajardsilogic@0: */ lbajardsilogic@0: lbajardsilogic@0: #include lbajardsilogic@0: #include lbajardsilogic@0: lbajardsilogic@0: class RangeMapper; lbajardsilogic@0: lbajardsilogic@0: /** lbajardsilogic@0: * AudioDial is a nicer-looking QDial that by default reacts to mouse lbajardsilogic@0: * movement on horizontal and vertical axes instead of in a radial lbajardsilogic@0: * motion. Move the mouse up or right to increment the value, down or lbajardsilogic@0: * left to decrement it. AudioDial also responds to the mouse wheel. lbajardsilogic@0: * lbajardsilogic@0: * The programming interface for this widget is compatible with QDial, lbajardsilogic@0: * with the addition of properties for the knob colour and meter lbajardsilogic@0: * colour and a boolean property mouseDial that determines whether to lbajardsilogic@0: * respond to radial mouse motion in the same way as QDial (the lbajardsilogic@0: * default is no). lbajardsilogic@0: */ lbajardsilogic@0: lbajardsilogic@0: class AudioDial : public QDial lbajardsilogic@0: { lbajardsilogic@0: Q_OBJECT lbajardsilogic@0: Q_PROPERTY( QColor knobColor READ getKnobColor WRITE setKnobColor ) lbajardsilogic@0: Q_PROPERTY( QColor meterColor READ getMeterColor WRITE setMeterColor ) lbajardsilogic@0: Q_PROPERTY( bool mouseDial READ getMouseDial WRITE setMouseDial ) lbajardsilogic@0: lbajardsilogic@0: public: lbajardsilogic@0: AudioDial(QWidget *parent = 0); lbajardsilogic@0: ~AudioDial(); lbajardsilogic@0: lbajardsilogic@0: const QColor& getKnobColor() const { return m_knobColor; } lbajardsilogic@0: const QColor& getMeterColor() const { return m_meterColor; } lbajardsilogic@0: bool getMouseDial() const { return m_mouseDial; } lbajardsilogic@0: lbajardsilogic@0: void setRangeMapper(RangeMapper *mapper); // I take ownership, will delete lbajardsilogic@0: const RangeMapper *rangeMapper() const { return m_rangeMapper; } lbajardsilogic@0: float mappedValue() const; lbajardsilogic@0: lbajardsilogic@0: void setShowToolTip(bool show); lbajardsilogic@0: lbajardsilogic@0: signals: lbajardsilogic@0: void mouseEntered(); lbajardsilogic@0: void mouseLeft(); lbajardsilogic@0: lbajardsilogic@0: public slots: lbajardsilogic@0: /** lbajardsilogic@0: * Set the colour of the knob. The default is to inherit the lbajardsilogic@0: * colour from the widget's palette. lbajardsilogic@0: */ lbajardsilogic@0: void setKnobColor(const QColor &color); lbajardsilogic@0: lbajardsilogic@0: /** lbajardsilogic@0: * Set the colour of the meter (the highlighted area around the lbajardsilogic@0: * knob that shows the current value). The default is to inherit lbajardsilogic@0: * the colour from the widget's palette. lbajardsilogic@0: */ lbajardsilogic@0: void setMeterColor(const QColor &color); lbajardsilogic@0: lbajardsilogic@0: /** lbajardsilogic@0: * Specify that the dial should respond to radial mouse movements lbajardsilogic@0: * in the same way as QDial. lbajardsilogic@0: */ lbajardsilogic@0: void setMouseDial(bool mouseDial); lbajardsilogic@0: lbajardsilogic@0: void setDefaultValue(int defaultValue); lbajardsilogic@0: lbajardsilogic@0: void setValue(int value); lbajardsilogic@0: lbajardsilogic@0: void setMappedValue(float mappedValue); lbajardsilogic@0: lbajardsilogic@0: protected: lbajardsilogic@0: void drawTick(QPainter &paint, float angle, int size, bool internal); lbajardsilogic@0: virtual void paintEvent(QPaintEvent *); lbajardsilogic@0: lbajardsilogic@0: // Alternate mouse behavior event handlers. lbajardsilogic@0: virtual void mousePressEvent(QMouseEvent *pMouseEvent); lbajardsilogic@0: virtual void mouseMoveEvent(QMouseEvent *pMouseEvent); lbajardsilogic@0: virtual void mouseReleaseEvent(QMouseEvent *pMouseEvent); lbajardsilogic@0: virtual void mouseDoubleClickEvent(QMouseEvent *pMouseEvent); lbajardsilogic@0: virtual void enterEvent(QEvent *); lbajardsilogic@0: virtual void leaveEvent(QEvent *); lbajardsilogic@0: lbajardsilogic@0: protected slots: lbajardsilogic@0: void updateMappedValue(int value); lbajardsilogic@0: lbajardsilogic@0: private: lbajardsilogic@0: QColor m_knobColor; lbajardsilogic@0: QColor m_meterColor; lbajardsilogic@0: lbajardsilogic@0: int m_defaultValue; lbajardsilogic@0: float m_mappedValue; lbajardsilogic@0: bool m_noMappedUpdate; lbajardsilogic@0: lbajardsilogic@0: // Alternate mouse behavior tracking. lbajardsilogic@0: bool m_mouseDial; lbajardsilogic@0: bool m_mousePressed; lbajardsilogic@0: QPoint m_posMouse; lbajardsilogic@0: lbajardsilogic@0: bool m_showTooltip; lbajardsilogic@0: lbajardsilogic@0: RangeMapper *m_rangeMapper; lbajardsilogic@0: }; lbajardsilogic@0: lbajardsilogic@83: #endif lbajardsilogic@0: lbajardsilogic@0: // end of AudioDial.h