annotate widgets/LevelPanWidget.h @ 1256:5a10e9d924d4

Make some corrections to crosshair (measure cursor) positioning and feature descriptions. Needs review.
author Chris Cannam
date Tue, 07 Mar 2017 18:54:15 +0000
parents 8ef67917c301
children e8368466fa34
rev   line source
Chris@923 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@923 2
Chris@923 3 /*
Chris@923 4 Sonic Visualiser
Chris@923 5 An audio file viewer and annotation editor.
Chris@923 6 Centre for Digital Music, Queen Mary, University of London.
Chris@923 7
Chris@923 8 This program is free software; you can redistribute it and/or
Chris@923 9 modify it under the terms of the GNU General Public License as
Chris@923 10 published by the Free Software Foundation; either version 2 of the
Chris@923 11 License, or (at your option) any later version. See the file
Chris@923 12 COPYING included with this distribution for more information.
Chris@923 13 */
Chris@923 14
Chris@923 15 #ifndef LEVEL_PAN_WIDGET_H
Chris@923 16 #define LEVEL_PAN_WIDGET_H
Chris@923 17
Chris@923 18 #include <QWidget>
Chris@923 19
Chris@923 20 /**
Chris@923 21 * A simple widget for coarse level and pan control.
Chris@923 22 */
Chris@923 23
Chris@923 24 class LevelPanWidget : public QWidget
Chris@923 25 {
Chris@923 26 Q_OBJECT
Chris@923 27
Chris@923 28 public:
Chris@923 29 LevelPanWidget(QWidget *parent = 0);
Chris@923 30 ~LevelPanWidget();
Chris@923 31
Chris@1201 32 /// Return level as a gain value. The basic level range is [0,1] but the
Chris@1201 33 /// gain scale may go up to 4.0
Chris@923 34 float getLevel() const;
Chris@923 35
Chris@923 36 /// Return pan as a value in the range [-1,1]
Chris@923 37 float getPan() const;
Chris@923 38
Chris@923 39 /// Find out whether the widget is editable
Chris@923 40 bool isEditable() const;
Chris@923 41
Chris@940 42 /// Discover whether the level range includes muting or not
Chris@940 43 bool includesMute() const;
Chris@940 44
Chris@929 45 /// Draw a suitably sized copy of the widget's contents to the given device
Chris@929 46 void renderTo(QPaintDevice *, QRectF, bool asIfEditable) const;
Chris@929 47
Chris@929 48 QSize sizeHint() const;
Chris@929 49
Chris@923 50 public slots:
Chris@1201 51 /// Set level. The basic level range is [0,1] but the scale may go
Chris@1201 52 /// higher. The value will be rounded.
Chris@923 53 void setLevel(float);
Chris@923 54
Chris@1201 55 /// Set pan in the range [-1,1]. The value will be rounded
Chris@923 56 void setPan(float);
Chris@923 57
Chris@1177 58 /// Set left and right peak monitoring levels in the range [0,1]
Chris@1177 59 void setMonitoringLevels(float, float);
Chris@1177 60
Chris@923 61 /// Specify whether the widget is editable or read-only (default editable)
Chris@923 62 void setEditable(bool);
Chris@940 63
Chris@940 64 /// Specify whether the level range should include muting or not
Chris@940 65 void setIncludeMute(bool);
Chris@1249 66
Chris@1249 67 /// Reset to default values
Chris@1249 68 void setToDefault();
Chris@923 69
Chris@1200 70 // public so it can be called from LevelPanToolButton (ew)
Chris@1200 71 virtual void wheelEvent(QWheelEvent *ev);
Chris@1200 72
Chris@923 73 signals:
Chris@1177 74 void levelChanged(float); // range [0,1]
Chris@1177 75 void panChanged(float); // range [-1,1]
Chris@923 76
Chris@1180 77 void mouseEntered();
Chris@1180 78 void mouseLeft();
Chris@1180 79
Chris@923 80 protected:
Chris@923 81 virtual void mousePressEvent(QMouseEvent *ev);
Chris@923 82 virtual void mouseMoveEvent(QMouseEvent *ev);
Chris@923 83 virtual void mouseReleaseEvent(QMouseEvent *ev);
Chris@923 84 virtual void paintEvent(QPaintEvent *ev);
Chris@1180 85 virtual void enterEvent(QEvent *);
Chris@1180 86 virtual void leaveEvent(QEvent *);
Chris@923 87
Chris@923 88 void emitLevelChanged();
Chris@923 89 void emitPanChanged();
Chris@923 90
Chris@923 91 int m_level;
Chris@923 92 int m_pan;
Chris@1177 93 float m_monitorLeft;
Chris@1177 94 float m_monitorRight;
Chris@923 95 bool m_editable;
Chris@1249 96 bool m_editing;
Chris@940 97 bool m_includeMute;
Chris@923 98
Chris@1177 99 static int audioLevelToLevel(float audioLevel, bool withMute);
Chris@1177 100 static float levelToAudioLevel(int level, bool withMute);
Chris@1177 101
Chris@1177 102 static int audioPanToPan(float audioPan);
Chris@1177 103 static float panToAudioPan(int pan);
Chris@1177 104
Chris@929 105 QSizeF cellSize(QRectF) const;
Chris@929 106 QPointF cellCentre(QRectF, int level, int pan) const;
Chris@929 107 QSizeF cellLightSize(QRectF) const;
Chris@929 108 QRectF cellLightRect(QRectF, int level, int pan) const;
Chris@929 109 double thinLineWidth(QRectF) const;
Chris@929 110 void toCell(QRectF, QPointF loc, int &level, int &pan) const;
Chris@923 111 };
Chris@923 112
Chris@923 113 #endif