summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/Makefile.am2
-rw-r--r--src/pavucontrol.cc77
-rw-r--r--src/streamwidget.cc99
-rw-r--r--src/streamwidget.h6
4 files changed, 105 insertions, 79 deletions
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<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 = 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<Gnome::Glade::Xml>& 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 <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() {
+}
+
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 <gtkmm.h>
#include <libglademm.h>
+#include <pulse/pulseaudio.h>
+
#include "minimalstreamwidget.h"
+class ChannelWidget;
+
class StreamWidget : public MinimalStreamWidget {
public:
StreamWidget(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glade::Xml>& 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;