From e1e452ac2209a343feea10a358668a75c5c5e289 Mon Sep 17 00:00:00 2001 From: Colin Guthrie Date: Sun, 15 Mar 2009 13:02:56 +0000 Subject: [PATCH] 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) --- src/Makefile.am | 2 +- src/pavucontrol.cc | 77 ----------------------------------- src/streamwidget.cc | 99 +++++++++++++++++++++++++++++++++++++++++++++ src/streamwidget.h | 6 ++- 4 files changed, 105 insertions(+), 79 deletions(-) create mode 100644 src/streamwidget.cc diff --git a/src/Makefile.am b/src/Makefile.am index d0aea0f..5df4619 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -27,7 +27,7 @@ desktop_DATA=$(desktop_in_files:.desktop.in=.desktop) pavucontrol_SOURCES= \ minimalstreamwidget.h minimalstreamwidget.cc \ channelwidget.h channelwidget.cc \ - streamwidget.h \ + streamwidget.h streamwidget.cc \ pavucontrol.cc i18n.h pavucontrol_LDADD=$(AM_LDADD) $(GUILIBS_LIBS) $(PULSE_LIBS) diff --git a/src/pavucontrol.cc b/src/pavucontrol.cc index a88f5d5..597591e 100644 --- a/src/pavucontrol.cc +++ b/src/pavucontrol.cc @@ -73,7 +73,6 @@ enum SourceType{ SOURCE_MONITOR, }; -class StreamWidget; class MainWindow; class CardWidget : public Gtk::VBox { @@ -386,82 +385,6 @@ void CardWidget::onProfileChange() { } -/*** StreamWidget ***/ - -StreamWidget::StreamWidget(BaseObjectType* cobject, const Glib::RefPtr& 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), "%s", 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 = false) { - 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() { -} - SinkWidget::SinkWidget(BaseObjectType* cobject, const Glib::RefPtr& x) : StreamWidget(cobject, x), defaultMenuItem("_Default", true){ 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 . +***/ + +#include "streamwidget.h" +#include "channelwidget.h" + +/*** StreamWidget ***/ + +StreamWidget::StreamWidget(BaseObjectType* cobject, const Glib::RefPtr& 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), "%s", 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() { +} + diff --git a/src/streamwidget.h b/src/streamwidget.h index b6f49c8..da4c8b8 100644 --- a/src/streamwidget.h +++ b/src/streamwidget.h @@ -28,14 +28,18 @@ #include #include +#include + #include "minimalstreamwidget.h" +class ChannelWidget; + class StreamWidget : public MinimalStreamWidget { public: StreamWidget(BaseObjectType* cobject, const Glib::RefPtr& x); void setChannelMap(const pa_channel_map &m, bool can_decibel); - void setVolume(const pa_cvolume &volume, bool force); + void setVolume(const pa_cvolume &volume, bool force = false); virtual void updateChannelVolume(int channel, pa_volume_t v); Gtk::ToggleButton *lockToggleButton, *muteToggleButton;