mirror of
https://gitlab.freedesktop.org/pulseaudio/pavucontrol.git
synced 2026-05-17 10:58:09 +02:00
Current Glade versions want object IDs to be unique, but currently pavucontrol.glade shares some IDs between the top-level windows. I guess this used to be OK in the past, and the "interface-naming-policy toplevel-contextual" comment in the beginning of the .glade file probably has something to do with this. I want to update the .glade file to be easy to work with current Glade versions, so I will remove the duplicated object IDs. The first IDs to change are the "channelsVBox", "nameLabel", "boldNameLabel" and "iconImage" IDs. These were used by MinimalStreamWidget to create widgets for both devices and streams, but now that the IDs are different for devices and streams, the widgets have to be created by the subclasses. MinimalStreamWidget doesn't need the Gtk::Builder in its constructor any more, so remove that parameter to avoid warnings about an unused variable.
96 lines
2.6 KiB
C++
96 lines
2.6 KiB
C++
/***
|
|
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/>.
|
|
***/
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
#include <config.h>
|
|
#endif
|
|
|
|
#include "minimalstreamwidget.h"
|
|
|
|
/*** MinimalStreamWidget ***/
|
|
MinimalStreamWidget::MinimalStreamWidget(BaseObjectType* cobject) :
|
|
Gtk::VBox(cobject),
|
|
channelsVBox(NULL),
|
|
nameLabel(NULL),
|
|
boldNameLabel(NULL),
|
|
iconImage(NULL),
|
|
peakProgressBar(),
|
|
lastPeak(0),
|
|
peak(NULL),
|
|
updating(false),
|
|
volumeMeterEnabled(false),
|
|
volumeMeterVisible(true) {
|
|
}
|
|
|
|
void MinimalStreamWidget::init() {
|
|
/* Set up the peak meter. This is not done in the constructor, because
|
|
* channelsVBox is initialized by the subclasses, so it's not yet available
|
|
* in the constructor. */
|
|
|
|
peakProgressBar.set_size_request(-1, 10);
|
|
channelsVBox->pack_end(peakProgressBar, false, false);
|
|
|
|
/* XXX: Why is the peak meter hidden by default? Maybe the idea is that if
|
|
* setting up the monitoring stream fails for whatever reason, then we
|
|
* shouldn't show the peak meter at all. */
|
|
peakProgressBar.hide();
|
|
}
|
|
|
|
#define DECAY_STEP .04
|
|
|
|
void MinimalStreamWidget::updatePeak(double v) {
|
|
|
|
if (lastPeak >= DECAY_STEP)
|
|
if (v < lastPeak - DECAY_STEP)
|
|
v = lastPeak - DECAY_STEP;
|
|
|
|
lastPeak = v;
|
|
|
|
if (v >= 0) {
|
|
peakProgressBar.set_sensitive(TRUE);
|
|
peakProgressBar.set_fraction(v);
|
|
} else {
|
|
peakProgressBar.set_sensitive(FALSE);
|
|
peakProgressBar.set_fraction(0);
|
|
}
|
|
|
|
enableVolumeMeter();
|
|
}
|
|
|
|
void MinimalStreamWidget::enableVolumeMeter() {
|
|
if (volumeMeterEnabled)
|
|
return;
|
|
|
|
volumeMeterEnabled = true;
|
|
if (volumeMeterVisible) {
|
|
peakProgressBar.show();
|
|
}
|
|
}
|
|
|
|
void MinimalStreamWidget::setVolumeMeterVisible(bool v) {
|
|
volumeMeterVisible = v;
|
|
if (v) {
|
|
if (volumeMeterEnabled) {
|
|
peakProgressBar.show();
|
|
}
|
|
} else {
|
|
peakProgressBar.hide();
|
|
}
|
|
}
|