#include #include "paman.hh" #include "SinkWindow.hh" #define GLADE_NAME "sinkWindow" SinkWindow::SinkWindow(BaseObjectType* cobject, const Glib::RefPtr& refGlade) : Gtk::Window(cobject), nameLabel(NULL), descriptionLabel(NULL), indexLabel(NULL), sampleTypeLabel(NULL), latencyLabel(NULL), ownerModuleLabel(NULL), monitorSourceLabel(NULL), volumeLabel(NULL), closeButton(NULL), toMonitorSourceButton(NULL), toOwnerModuleButton(NULL), volumeResetButton(NULL), volumeMuteButton(NULL), volumeScale(NULL) { refGlade->get_widget("nameLabel", nameLabel); refGlade->get_widget("descriptionLabel", descriptionLabel); refGlade->get_widget("indexLabel", indexLabel); refGlade->get_widget("sampleTypeLabel", sampleTypeLabel); refGlade->get_widget("latencyLabel", latencyLabel); refGlade->get_widget("ownerModuleLabel", ownerModuleLabel); refGlade->get_widget("monitorSourceLabel", monitorSourceLabel); refGlade->get_widget("closeButton", closeButton); refGlade->get_widget("toMonitorSourceButton", toMonitorSourceButton); refGlade->get_widget("toOwnerModuleButton", toOwnerModuleButton); refGlade->get_widget("volumeLabel", volumeLabel); refGlade->get_widget("volumeScale", volumeScale); refGlade->get_widget("volumeResetButton", volumeResetButton); refGlade->get_widget("volumeMuteButton", volumeMuteButton); closeButton->signal_clicked().connect(sigc::mem_fun(*this, &SinkWindow::onCloseButton)); toMonitorSourceButton->signal_clicked().connect(sigc::mem_fun(*this, &SinkWindow::onToMonitorSourceButton)); toOwnerModuleButton->signal_clicked().connect(sigc::mem_fun(*this, &SinkWindow::onToOwnerModuleButton)); volumeScale->signal_value_changed().connect(sigc::mem_fun(*this, &SinkWindow::onVolumeScaleValueChanged)); volumeResetButton->signal_clicked().connect(sigc::mem_fun(*this, &SinkWindow::onVolumeResetButton)); volumeMuteButton->signal_clicked().connect(sigc::mem_fun(*this, &SinkWindow::onVolumeMuteButton)); } SinkWindow* SinkWindow::create() { SinkWindow *w = NULL; Glib::RefPtr refXml = Gnome::Glade::Xml::create(GLADE_FILE, GLADE_NAME); refXml->get_widget_derived(GLADE_NAME, w); return w; } void SinkWindow::updateInfo(const SinkInfo &i) { char t[20], ss[PA_SAMPLE_SNPRINT_MAX_LENGTH]; nameLabel->set_text(i.name); descriptionLabel->set_text(i.description); snprintf(t, sizeof(t), "#%u", i.index); indexLabel->set_text(t); pa_sample_spec_snprint(ss, sizeof(ss), &i.sample_spec); sampleTypeLabel->set_text(ss); snprintf(t, sizeof(t), "#%u", i.owner_module); ownerModuleLabel->set_text(t); snprintf(t, sizeof(t), "%u usec", i.latency); latencyLabel->set_text(t); SourceInfo *source = serverInfoManager->getSourceInfo(i.monitor_source); monitorSourceLabel->set_text(source->name); volumeScale->set_value(((double) i.volume / 0x100) * 100); snprintf(t, sizeof(t), "%u%%", (i.volume*100)/0x100); volumeLabel->set_text(t); set_title("Sink: "+i.name); monitor_source = i.monitor_source; owner_module = i.owner_module; index = i.index; toOwnerModuleButton->set_sensitive(owner_module != (uint32_t) -1); } void SinkWindow::onCloseButton() { hide(); } void SinkWindow::onToMonitorSourceButton() { serverInfoManager->showSourceWindow(monitor_source); } void SinkWindow::onToOwnerModuleButton() { if (owner_module != (uint32_t) -1) serverInfoManager->showModuleWindow(owner_module); } void SinkWindow::onVolumeScaleValueChanged() { serverInfoManager->setSinkVolume(index, (uint32_t) ((volumeScale->get_value()*0x100)/100)); } void SinkWindow::onVolumeResetButton() { serverInfoManager->setSinkVolume(index, PA_VOLUME_NORM); } void SinkWindow::onVolumeMuteButton() { serverInfoManager->setSinkVolume(index, PA_VOLUME_MUTED); }