summaryrefslogtreecommitdiffstats
path: root/src/streamwidget.cc
diff options
context:
space:
mode:
authorColin Guthrie <cguthrie@mandriva.org>2009-03-15 13:02:56 +0000
committerColin Guthrie <cguthrie@mandriva.org>2009-03-15 13:02:56 +0000
commite1e452ac2209a343feea10a358668a75c5c5e289 (patch)
treee725fed0041abaf2f2336bdb5a66df67c9b072bc /src/streamwidget.cc
parentf6af4f80b8e4760bdfdc8ca66509d8667bb6f41b (diff)
Split out streamwidget into it's own files.
Also correct the location of the argument default value specification (it should be in prototype not implementation)
Diffstat (limited to 'src/streamwidget.cc')
-rw-r--r--src/streamwidget.cc99
1 files changed, 99 insertions, 0 deletions
diff --git a/src/streamwidget.cc b/src/streamwidget.cc
new file mode 100644
index 0000000..647e643
--- /dev/null
+++ b/src/streamwidget.cc
@@ -0,0 +1,99 @@
+/***
+ This file is part of pavucontrol.
+
+ Copyright 2006-2008 Lennart Poettering
+ Copyright 2009 Colin Guthrie
+
+ pavucontrol is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ pavucontrol 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
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with pavucontrol. If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include "streamwidget.h"
+#include "channelwidget.h"
+
+/*** StreamWidget ***/
+
+StreamWidget::StreamWidget(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glade::Xml>& x) :
+ MinimalStreamWidget(cobject, x) {
+
+ x->get_widget("lockToggleButton", lockToggleButton);
+ x->get_widget("muteToggleButton", muteToggleButton);
+
+ muteToggleButton->signal_clicked().connect(sigc::mem_fun(*this, &StreamWidget::onMuteToggleButton));
+
+ for (unsigned i = 0; i < PA_CHANNELS_MAX; i++)
+ channelWidgets[i] = NULL;
+}
+
+void StreamWidget::setChannelMap(const pa_channel_map &m, bool can_decibel) {
+ channelMap = m;
+
+ for (int i = 0; i < m.channels; i++) {
+ ChannelWidget *cw = channelWidgets[i] = ChannelWidget::create();
+ cw->beepDevice = beepDevice;
+ cw->channel = i;
+ cw->can_decibel = can_decibel;
+ cw->streamWidget = this;
+ char text[64];
+ snprintf(text, sizeof(text), "<b>%s</b>", pa_channel_position_to_pretty_string(m.map[i]));
+ cw->channelLabel->set_markup(text);
+ channelsVBox->pack_start(*cw, false, false, 0);
+ }
+
+ lockToggleButton->set_sensitive(m.channels > 1);
+}
+
+void StreamWidget::setVolume(const pa_cvolume &v, bool force) {
+ g_assert(v.channels == channelMap.channels);
+
+ volume = v;
+
+ if (timeoutConnection.empty() || force) { /* do not update the volume when a volume change is still in flux */
+ for (int i = 0; i < volume.channels; i++)
+ channelWidgets[i]->setVolume(volume.values[i]);
+ }
+}
+
+void StreamWidget::updateChannelVolume(int channel, pa_volume_t v) {
+ pa_cvolume n;
+ g_assert(channel < volume.channels);
+
+ n = volume;
+ if (lockToggleButton->get_active()) {
+ for (int i = 0; i < n.channels; i++)
+ n.values[i] = v;
+ } else
+ n.values[channel] = v;
+
+ setVolume(n, true);
+
+ if (timeoutConnection.empty())
+ timeoutConnection = Glib::signal_timeout().connect(sigc::mem_fun(*this, &StreamWidget::timeoutEvent), 100);
+}
+
+void StreamWidget::onMuteToggleButton() {
+
+ lockToggleButton->set_sensitive(!muteToggleButton->get_active());
+
+ for (int i = 0; i < channelMap.channels; i++)
+ channelWidgets[i]->set_sensitive(!muteToggleButton->get_active());
+}
+
+bool StreamWidget::timeoutEvent() {
+ executeVolumeUpdate();
+ return false;
+}
+
+void StreamWidget::executeVolumeUpdate() {
+}
+