summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/phonon/phonon/volumeslider.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/phonon/phonon/volumeslider.cpp')
-rw-r--r--src/3rdparty/phonon/phonon/volumeslider.cpp262
1 files changed, 262 insertions, 0 deletions
diff --git a/src/3rdparty/phonon/phonon/volumeslider.cpp b/src/3rdparty/phonon/phonon/volumeslider.cpp
new file mode 100644
index 0000000000..b59f689bc0
--- /dev/null
+++ b/src/3rdparty/phonon/phonon/volumeslider.cpp
@@ -0,0 +1,262 @@
+/* This file is part of the KDE project
+ Copyright (C) 2006-2007 Matthias Kretz <kretz@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) version 3, or any
+ later version accepted by the membership of KDE e.V. (or its
+ successor approved by the membership of KDE e.V.), Trolltech ASA
+ (or its successors, if any) and the KDE Free Qt Foundation, which shall
+ act as a proxy defined in Section 6 of version 3 of the license.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#include "volumeslider.h"
+#include "volumeslider_p.h"
+#include "audiooutput.h"
+#include "phonondefs_p.h"
+#include "phononnamespace_p.h"
+#include "factory_p.h"
+
+QT_BEGIN_NAMESPACE
+
+#ifndef QT_NO_PHONON_VOLUMESLIDER
+
+namespace Phonon
+{
+VolumeSlider::VolumeSlider(QWidget *parent)
+ : QWidget(parent),
+ k_ptr(new VolumeSliderPrivate(this))
+{
+ K_D(VolumeSlider);
+#ifndef QT_NO_TOOLTIP
+ setToolTip(tr("Volume: %1%").arg(100));
+#endif
+#ifndef QT_NO_WHATSTHIS
+ setWhatsThis(tr("Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1%").arg(100));
+#endif
+
+ connect(&d->slider, SIGNAL(valueChanged(int)), SLOT(_k_sliderChanged(int)));
+ connect(&d->muteButton, SIGNAL(clicked()), SLOT(_k_buttonClicked()));
+
+ setFocusProxy(&d->slider);
+}
+
+VolumeSlider::VolumeSlider(AudioOutput *output, QWidget *parent)
+ : QWidget(parent),
+ k_ptr(new VolumeSliderPrivate(this))
+{
+ K_D(VolumeSlider);
+#ifndef QT_NO_TOOLTIP
+ setToolTip(tr("Volume: %1%").arg(100));
+#endif
+#ifndef QT_NO_WHATSTHIS
+ setWhatsThis(tr("Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1%").arg(100));
+#endif
+
+ connect(&d->slider, SIGNAL(valueChanged(int)), SLOT(_k_sliderChanged(int)));
+ connect(&d->muteButton, SIGNAL(clicked()), SLOT(_k_buttonClicked()));
+
+ if (output) {
+ d->output = output;
+ d->slider.setValue(qRound(100 * output->volume()));
+ d->slider.setEnabled(true);
+ d->muteButton.setEnabled(true);
+ connect(output, SIGNAL(volumeChanged(qreal)), SLOT(_k_volumeChanged(qreal)));
+ connect(output, SIGNAL(mutedChanged(bool)), SLOT(_k_mutedChanged(bool)));
+ }
+
+ setFocusProxy(&d->slider);
+}
+
+VolumeSlider::~VolumeSlider()
+{
+ delete k_ptr;
+}
+
+bool VolumeSlider::isMuteVisible() const
+{
+ return k_ptr->muteButton.isVisible();
+}
+
+void VolumeSlider::setMuteVisible(bool visible)
+{
+ k_ptr->muteButton.setVisible(visible);
+}
+
+QSize VolumeSlider::iconSize() const
+{
+ return k_ptr->muteButton.iconSize();
+}
+
+void VolumeSlider::setIconSize(const QSize &iconSize)
+{
+ pDebug() << Q_FUNC_INFO << iconSize;
+ k_ptr->muteButton.setIconSize(iconSize);
+}
+
+qreal VolumeSlider::maximumVolume() const
+{
+ return k_ptr->slider.maximum() * 0.01;
+}
+
+void VolumeSlider::setMaximumVolume(qreal volume)
+{
+ int max = static_cast<int>(volume * 100);
+ k_ptr->slider.setMaximum(max);
+#ifndef QT_NO_WHATSTHIS
+ setWhatsThis(tr("Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1%")
+ .arg(max));
+#endif
+}
+
+Qt::Orientation VolumeSlider::orientation() const
+{
+ return k_ptr->slider.orientation();
+}
+
+void VolumeSlider::setOrientation(Qt::Orientation o)
+{
+ K_D(VolumeSlider);
+ Qt::Alignment align = (o == Qt::Horizontal ? Qt::AlignVCenter : Qt::AlignHCenter);
+ d->layout.setAlignment(&d->muteButton, align);
+ d->layout.setAlignment(&d->slider, align);
+ d->layout.setDirection(o == Qt::Horizontal ? QBoxLayout::LeftToRight : QBoxLayout::TopToBottom);
+ d->slider.setOrientation(o);
+}
+
+AudioOutput *VolumeSlider::audioOutput() const
+{
+ K_D(const VolumeSlider);
+ return d->output;
+}
+
+void VolumeSlider::setAudioOutput(AudioOutput *output)
+{
+ K_D(VolumeSlider);
+ if (d->output) {
+ disconnect(d->output, 0, this, 0);
+ }
+ d->output = output;
+ if (output) {
+ d->slider.setValue(qRound(100 * output->volume()));
+ d->slider.setEnabled(true);
+ d->muteButton.setEnabled(true);
+
+ d->_k_volumeChanged(output->volume());
+ d->_k_mutedChanged(output->isMuted());
+
+ connect(output, SIGNAL(volumeChanged(qreal)), SLOT(_k_volumeChanged(qreal)));
+ connect(output, SIGNAL(mutedChanged(bool)), SLOT(_k_mutedChanged(bool)));
+ } else {
+ d->slider.setValue(100);
+ d->slider.setEnabled(false);
+ d->muteButton.setEnabled(false);
+ }
+}
+
+void VolumeSliderPrivate::_k_buttonClicked()
+{
+ if (output) {
+ output->setMuted(!output->isMuted());
+ } else {
+ slider.setEnabled(false);
+ muteButton.setEnabled(false);
+ }
+}
+
+void VolumeSliderPrivate::_k_mutedChanged(bool muted)
+{
+#ifndef QT_NO_TOOLTIP
+ Q_Q(VolumeSlider);
+#endif
+ if (muted) {
+#ifndef QT_NO_TOOLTIP
+ q->setToolTip(VolumeSlider::tr("Muted"));
+#endif
+ muteButton.setIcon(mutedIcon);
+ } else {
+#ifndef QT_NO_TOOLTIP
+ q->setToolTip(VolumeSlider::tr("Volume: %1%").arg(static_cast<int>(output->volume() * 100.0)));
+#endif
+ muteButton.setIcon(volumeIcon);
+ }
+}
+
+void VolumeSliderPrivate::_k_sliderChanged(int value)
+{
+#ifndef QT_NO_TOOLTIP
+ Q_Q(VolumeSlider);
+#endif
+
+ if (output) {
+#ifndef QT_NO_TOOLTIP
+ if (!output->isMuted()) {
+ q->setToolTip(VolumeSlider::tr("Volume: %1%").arg(value));
+ }
+#endif
+
+ ignoreVolumeChange = true;
+ output->setVolume((static_cast<qreal>(value)) * 0.01);
+ ignoreVolumeChange = false;
+ } else {
+ slider.setEnabled(false);
+ muteButton.setEnabled(false);
+ }
+}
+
+void VolumeSliderPrivate::_k_volumeChanged(qreal value)
+{
+ if (!ignoreVolumeChange) {
+ slider.setValue(qRound(100 * value));
+ }
+}
+
+bool VolumeSlider::hasTracking() const
+{
+ return k_ptr->slider.hasTracking();
+}
+
+void VolumeSlider::setTracking(bool tracking)
+{
+ k_ptr->slider.setTracking(tracking);
+}
+
+int VolumeSlider::pageStep() const
+{
+ return k_ptr->slider.pageStep();
+}
+
+void VolumeSlider::setPageStep(int milliseconds)
+{
+ k_ptr->slider.setPageStep(milliseconds);
+}
+
+int VolumeSlider::singleStep() const
+{
+ return k_ptr->slider.singleStep();
+}
+
+void VolumeSlider::setSingleStep(int milliseconds)
+{
+ k_ptr->slider.setSingleStep(milliseconds);
+}
+
+} // namespace Phonon
+
+#endif //QT_NO_PHONON_VOLUMESLIDER
+
+QT_END_NAMESPACE
+
+#include "moc_volumeslider.cpp"
+
+// vim: sw=4 et