annotate widgets/LevelPanToolButton.cpp @ 941:d6acb8e36605 tonioni

Simpler colours in level pan widget
author Chris Cannam
date Tue, 31 Mar 2015 14:08:06 +0100
parents 77110abca8a1
children fcbfc7fad1f2
rev   line source
Chris@929 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@929 2
Chris@929 3 /*
Chris@929 4 Sonic Visualiser
Chris@929 5 An audio file viewer and annotation editor.
Chris@929 6 Centre for Digital Music, Queen Mary, University of London.
Chris@929 7
Chris@929 8 This program is free software; you can redistribute it and/or
Chris@929 9 modify it under the terms of the GNU General Public License as
Chris@929 10 published by the Free Software Foundation; either version 2 of the
Chris@929 11 License, or (at your option) any later version. See the file
Chris@929 12 COPYING included with this distribution for more information.
Chris@929 13 */
Chris@929 14
Chris@929 15 #include "LevelPanToolButton.h"
Chris@929 16 #include "LevelPanWidget.h"
Chris@929 17
Chris@929 18 #include <QMenu>
Chris@929 19 #include <QWidgetAction>
Chris@929 20 #include <QImage>
Chris@936 21 #include <QStylePainter>
Chris@936 22 #include <QStyleOptionToolButton>
Chris@929 23
Chris@929 24 #include <iostream>
Chris@929 25 using std::cerr;
Chris@929 26 using std::endl;
Chris@929 27
Chris@929 28 LevelPanToolButton::LevelPanToolButton(QWidget *parent) :
Chris@929 29 QToolButton(parent),
Chris@930 30 m_pixels(32),
Chris@930 31 m_muted(false),
Chris@930 32 m_savedLevel(1.f)
Chris@929 33 {
Chris@929 34 m_lpw = new LevelPanWidget();
Chris@929 35
Chris@929 36 connect(m_lpw, SIGNAL(levelChanged(float)), this, SIGNAL(levelChanged(float)));
Chris@930 37 connect(m_lpw, SIGNAL(levelChanged(float)), this, SLOT(selfLevelChanged(float)));
Chris@929 38
Chris@929 39 connect(m_lpw, SIGNAL(panChanged(float)), this, SIGNAL(panChanged(float)));
Chris@932 40 connect(m_lpw, SIGNAL(panChanged(float)), this, SLOT(update()));
Chris@930 41
Chris@930 42 connect(this, SIGNAL(clicked(bool)), this, SLOT(selfClicked()));
Chris@929 43
Chris@929 44 QMenu *menu = new QMenu();
Chris@929 45 QWidgetAction *wa = new QWidgetAction(menu);
Chris@929 46 wa->setDefaultWidget(m_lpw);
Chris@929 47 menu->addAction(wa);
Chris@929 48
Chris@936 49 setPopupMode(InstantPopup);
Chris@929 50 setMenu(menu);
Chris@929 51
Chris@932 52 setImageSize(m_pixels);
Chris@929 53 }
Chris@929 54
Chris@929 55 LevelPanToolButton::~LevelPanToolButton()
Chris@929 56 {
Chris@929 57 }
Chris@929 58
Chris@929 59 float
Chris@929 60 LevelPanToolButton::getLevel() const
Chris@929 61 {
Chris@929 62 return m_lpw->getLevel();
Chris@929 63 }
Chris@929 64
Chris@929 65 float
Chris@929 66 LevelPanToolButton::getPan() const
Chris@929 67 {
Chris@929 68 return m_lpw->getPan();
Chris@929 69 }
Chris@929 70
Chris@940 71 bool
Chris@940 72 LevelPanToolButton::includesMute() const
Chris@940 73 {
Chris@940 74 return m_lpw->includesMute();
Chris@940 75 }
Chris@940 76
Chris@929 77 void
Chris@929 78 LevelPanToolButton::setImageSize(int pixels)
Chris@929 79 {
Chris@929 80 m_pixels = pixels;
Chris@932 81
Chris@932 82 QPixmap px(m_pixels, m_pixels);
Chris@932 83 px.fill(Qt::transparent);
Chris@932 84 setIcon(px);
Chris@932 85
Chris@933 86 m_lpw->setFixedWidth(m_pixels * 3);
Chris@933 87 m_lpw->setFixedHeight(m_pixels * 3);
Chris@929 88 }
Chris@929 89
Chris@929 90 void
Chris@929 91 LevelPanToolButton::setLevel(float level)
Chris@929 92 {
Chris@929 93 m_lpw->setLevel(level);
Chris@932 94 update();
Chris@929 95 }
Chris@929 96
Chris@929 97 void
Chris@929 98 LevelPanToolButton::setPan(float pan)
Chris@929 99 {
Chris@929 100 m_lpw->setPan(pan);
Chris@932 101 update();
Chris@930 102 }
Chris@930 103
Chris@930 104 void
Chris@940 105 LevelPanToolButton::setIncludeMute(bool include)
Chris@940 106 {
Chris@940 107 m_lpw->setIncludeMute(include);
Chris@940 108 update();
Chris@940 109 }
Chris@940 110
Chris@940 111 void
Chris@933 112 LevelPanToolButton::setEnabled(bool enabled)
Chris@933 113 {
Chris@933 114 m_lpw->setEnabled(enabled);
Chris@933 115 QToolButton::setEnabled(enabled);
Chris@933 116 }
Chris@933 117
Chris@933 118 void
Chris@930 119 LevelPanToolButton::selfLevelChanged(float level)
Chris@930 120 {
Chris@930 121 if (level > 0.f) {
Chris@930 122 m_muted = false;
Chris@930 123 } else {
Chris@930 124 m_muted = true;
Chris@930 125 m_savedLevel = 1.f;
Chris@930 126 }
Chris@932 127 update();
Chris@930 128 }
Chris@930 129
Chris@930 130 void
Chris@930 131 LevelPanToolButton::selfClicked()
Chris@930 132 {
Chris@930 133 cerr << "selfClicked" << endl;
Chris@930 134
Chris@930 135 if (m_muted) {
Chris@930 136 m_muted = false;
Chris@930 137 m_lpw->setLevel(m_savedLevel);
Chris@931 138 emit levelChanged(m_savedLevel);
Chris@930 139 } else {
Chris@930 140 m_savedLevel = m_lpw->getLevel();
Chris@930 141 m_muted = true;
Chris@930 142 m_lpw->setLevel(0.f);
Chris@931 143 emit levelChanged(0.f);
Chris@930 144 }
Chris@932 145 update();
Chris@929 146 }
Chris@929 147
Chris@929 148 void
Chris@936 149 LevelPanToolButton::paintEvent(QPaintEvent *)
Chris@929 150 {
Chris@936 151 QStylePainter p(this);
Chris@936 152 QStyleOptionToolButton opt;
Chris@936 153 initStyleOption(&opt);
Chris@936 154 opt.features &= (~QStyleOptionToolButton::HasMenu);
Chris@936 155 p.drawComplexControl(QStyle::CC_ToolButton, opt);
Chris@936 156
Chris@934 157 if (m_pixels >= height()) {
Chris@934 158 setImageSize(height()-1);
Chris@934 159 }
Chris@936 160
Chris@932 161 double margin = (double(height()) - m_pixels) / 2.0;
Chris@932 162 m_lpw->renderTo(this, QRectF(margin, margin, m_pixels, m_pixels), false);
Chris@929 163 }
Chris@929 164
Chris@932 165