diff options
Diffstat (limited to 'src/pavucontrol.cc')
-rw-r--r-- | src/pavucontrol.cc | 127 |
1 files changed, 1 insertions, 126 deletions
diff --git a/src/pavucontrol.cc b/src/pavucontrol.cc index 7fef582..a4c0f31 100644 --- a/src/pavucontrol.cc +++ b/src/pavucontrol.cc @@ -36,6 +36,7 @@ #include <pulse/ext-stream-restore.h> #include "i18n.h" +#include "minimalstreamwidget.h" #ifndef GLADE_FILE #define GLADE_FILE "pavucontrol.glade" @@ -98,36 +99,6 @@ public: virtual void set_sensitive(bool enabled); }; -class MinimalStreamWidget : public Gtk::VBox { -public: - MinimalStreamWidget(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glade::Xml>& x); - - Gtk::VBox *channelsVBox; - Gtk::Label *nameLabel, *boldNameLabel; - Gtk::ToggleButton *streamToggleButton; - Gtk::Menu menu; - Gtk::Image *iconImage; - Gtk::ProgressBar peakProgressBar; - double lastPeak; - - bool updating; - - void onStreamToggleButton(); - void onMenuDeactivated(); - void popupMenuPosition(int& x, int& y, bool& push_in); - - virtual void prepareMenu(void); - - bool volumeMeterEnabled; - void enableVolumeMeter(); - void updatePeak(double v); - - Glib::ustring beepDevice; - -protected: - virtual bool on_button_press_event(GdkEventButton* event); -}; - class StreamWidget : public MinimalStreamWidget { public: StreamWidget(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glade::Xml>& x); @@ -549,102 +520,6 @@ void CardWidget::onProfileChange() { } -/*** MinimalStreamWidget ***/ -MinimalStreamWidget::MinimalStreamWidget(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glade::Xml>& x) : - Gtk::VBox(cobject), - peakProgressBar(), - lastPeak(0), - updating(false), - volumeMeterEnabled(false) { - - x->get_widget("channelsVBox", channelsVBox); - x->get_widget("nameLabel", nameLabel); - x->get_widget("boldNameLabel", boldNameLabel); - x->get_widget("streamToggle", streamToggleButton); - x->get_widget("iconImage", iconImage); - - peakProgressBar.set_size_request(-1, 10); - channelsVBox->pack_end(peakProgressBar, false, false); - - streamToggleButton->set_active(false); - streamToggleButton->signal_clicked().connect(sigc::mem_fun(*this, &MinimalStreamWidget::onStreamToggleButton)); - menu.signal_deactivate().connect(sigc::mem_fun(*this, &MinimalStreamWidget::onMenuDeactivated)); - - peakProgressBar.hide(); -} - -void MinimalStreamWidget::prepareMenu(void) { -} - -void MinimalStreamWidget::onMenuDeactivated(void) { - streamToggleButton->set_active(false); -} - -void MinimalStreamWidget::popupMenuPosition(int& x, int& y, bool& push_in G_GNUC_UNUSED) { - Gtk::Requisition r; - - streamToggleButton->get_window()->get_origin(x, y); - r = menu.size_request(); - - /* Align the right side of the menu with the right side of the togglebutton */ - x += streamToggleButton->get_allocation().get_x(); - x += streamToggleButton->get_allocation().get_width(); - x -= r.width; - - /* Align the top of the menu with the buttom of the togglebutton */ - y += streamToggleButton->get_allocation().get_y(); - y += streamToggleButton->get_allocation().get_height(); -} - -void MinimalStreamWidget::onStreamToggleButton(void) { - if (streamToggleButton->get_active()) { - prepareMenu(); - menu.popup(sigc::mem_fun(*this, &MinimalStreamWidget::popupMenuPosition), 0, gtk_get_current_event_time()); - } -} - -bool MinimalStreamWidget::on_button_press_event (GdkEventButton* event) { - if (Gtk::VBox::on_button_press_event(event)) - return TRUE; - - if (event->type == GDK_BUTTON_PRESS && event->button == 3) { - prepareMenu(); - menu.popup(0, event->time); - return TRUE; - } - - return FALSE; -} - -#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; - peakProgressBar.show(); -} - /*** StreamWidget ***/ StreamWidget::StreamWidget(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glade::Xml>& x) : |