summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorColin Guthrie <cguthrie@mandriva.org>2009-03-16 16:59:15 +0000
committerColin Guthrie <cguthrie@mandriva.org>2009-06-17 08:54:10 +0100
commit644cfddf390396f7a97ae31034b56959a72ee2c2 (patch)
tree8a079e2aab0b424897c9cd4802f4f3a7c423a975 /src
parent7d296ec195e794c4f865611f6176c940aaa315cb (diff)
Create a devicewidget based on streamwidget.
This will become the base for Output and Input device tabs (as the streamwidget will have a different UI)
Diffstat (limited to 'src')
-rw-r--r--src/devicewidget.cc96
-rw-r--r--src/devicewidget.h54
2 files changed, 150 insertions, 0 deletions
diff --git a/src/devicewidget.cc b/src/devicewidget.cc
new file mode 100644
index 0000000..8d7ade2
--- /dev/null
+++ b/src/devicewidget.cc
@@ -0,0 +1,96 @@
+/***
+ 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 "devicewidget.h"
+
+/*** DeviceWidget ***/
+DeviceWidget::DeviceWidget(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, &DeviceWidget::onMuteToggleButton));
+
+ for (unsigned i = 0; i < PA_CHANNELS_MAX; i++)
+ channelWidgets[i] = NULL;
+}
+
+void DeviceWidget::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 DeviceWidget::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 DeviceWidget::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, &DeviceWidget::timeoutEvent), 100);
+}
+
+void DeviceWidget::onMuteToggleButton() {
+
+ lockToggleButton->set_sensitive(!muteToggleButton->get_active());
+
+ for (int i = 0; i < channelMap.channels; i++)
+ channelWidgets[i]->set_sensitive(!muteToggleButton->get_active());
+}
+
+bool DeviceWidget::timeoutEvent() {
+ executeVolumeUpdate();
+ return false;
+}
+
+void DeviceWidget::executeVolumeUpdate() {
+}
diff --git a/src/devicewidget.h b/src/devicewidget.h
new file mode 100644
index 0000000..ce3c55f
--- /dev/null
+++ b/src/devicewidget.h
@@ -0,0 +1,54 @@
+/***
+ 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/>.
+***/
+
+#ifndef devicewidget_h
+#define devicewidget_h
+
+#include "pavucontrol.h"
+
+#include "minimalstreamwidget.h"
+
+class ChannelWidget;
+
+class DeviceWidget : public MinimalStreamWidget {
+public:
+ DeviceWidget(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 = false);
+ virtual void updateChannelVolume(int channel, pa_volume_t v);
+
+ Gtk::ToggleButton *lockToggleButton, *muteToggleButton;
+
+ pa_channel_map channelMap;
+ pa_cvolume volume;
+
+ ChannelWidget *channelWidgets[PA_CHANNELS_MAX];
+
+ virtual void onMuteToggleButton();
+
+ sigc::connection timeoutConnection;
+
+ bool timeoutEvent();
+
+ virtual void executeVolumeUpdate();
+};
+
+#endif