Mercurial > hg > svgui
diff widgets/LevelPanWidget.h @ 1324:13d9b422f7fe zoom
Merge from default branch
author | Chris Cannam |
---|---|
date | Mon, 17 Sep 2018 13:51:31 +0100 |
parents | 5db672d6de4f |
children | a18e78b9c78b |
line wrap: on
line diff
--- a/widgets/LevelPanWidget.h Mon Dec 12 15:18:52 2016 +0000 +++ b/widgets/LevelPanWidget.h Mon Sep 17 13:51:31 2018 +0100 @@ -17,6 +17,8 @@ #include <QWidget> +#include "WheelCounter.h" + /** * A simple widget for coarse level and pan control. */ @@ -29,7 +31,8 @@ LevelPanWidget(QWidget *parent = 0); ~LevelPanWidget(); - /// Return level as a gain value in the range [0,1] + /// Return level as a gain value. The basic level range is [0,1] but the + /// gain scale may go up to 4.0 float getLevel() const; /// Return pan as a value in the range [-1,1] @@ -47,43 +50,80 @@ QSize sizeHint() const; public slots: - /// Set level in the range [0,1] -- will be rounded + /// Set level. The basic level range is [0,1] but the scale may go + /// higher. The value will be rounded. void setLevel(float); - /// Set pan in the range [-1,1] -- will be rounded + /// Set pan in the range [-1,1]. The value will be rounded void setPan(float); + /// Set left and right peak monitoring levels in the range [0,1] + void setMonitoringLevels(float, float); + /// Specify whether the widget is editable or read-only (default editable) void setEditable(bool); /// Specify whether the level range should include muting or not void setIncludeMute(bool); + + /// Reset to default values + void setToDefault(); + + // public so it can be called from LevelPanToolButton (ew) + virtual void wheelEvent(QWheelEvent *ev); signals: - void levelChanged(float); - void panChanged(float); + void levelChanged(float); // range [0,1] + void panChanged(float); // range [-1,1] + void mouseEntered(); + void mouseLeft(); + protected: virtual void mousePressEvent(QMouseEvent *ev); virtual void mouseMoveEvent(QMouseEvent *ev); virtual void mouseReleaseEvent(QMouseEvent *ev); - virtual void wheelEvent(QWheelEvent *ev); virtual void paintEvent(QPaintEvent *ev); + virtual void enterEvent(QEvent *); + virtual void leaveEvent(QEvent *); void emitLevelChanged(); void emitPanChanged(); + + int m_minNotch; + int m_maxNotch; + int m_notch; + int m_pan; + float m_monitorLeft; + float m_monitorRight; + bool m_editable; + bool m_editing; + bool m_includeMute; + bool m_includeHalfSteps; + + WheelCounter m_wheelCounter; + + int clampNotch(int notch) const; + int clampPan(int pan) const; + + int audioLevelToNotch(float audioLevel) const; + float notchToAudioLevel(int notch) const; + + int audioPanToPan(float audioPan) const; + float panToAudioPan(int pan) const; + + int coordsToNotch(QRectF rect, QPointF pos) const; + int coordsToPan(QRectF rect, QPointF pos) const; + + QColor cellToColour(int cell) const; - int m_level; - int m_pan; - bool m_editable; - bool m_includeMute; - QSizeF cellSize(QRectF) const; - QPointF cellCentre(QRectF, int level, int pan) const; + QPointF cellCentre(QRectF, int row, int col) const; QSizeF cellLightSize(QRectF) const; - QRectF cellLightRect(QRectF, int level, int pan) const; + QRectF cellLightRect(QRectF, int row, int col) const; + QRectF cellOutlineRect(QRectF, int row, int col) const; double thinLineWidth(QRectF) const; - void toCell(QRectF, QPointF loc, int &level, int &pan) const; + double cornerRadius(QRectF) const; }; #endif