diff options
-rw-r--r-- | src/paprefs.cc | 95 | ||||
-rw-r--r-- | src/paprefs.glade | 614 |
2 files changed, 393 insertions, 316 deletions
diff --git a/src/paprefs.cc b/src/paprefs.cc index 6a067d8..de100f1 100644 --- a/src/paprefs.cc +++ b/src/paprefs.cc @@ -36,7 +36,6 @@ public: MainWindow(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glade::Xml>& x); static MainWindow* create(); - Gtk::EventBox *titleEventBox; Gtk::Button *closeButton; Gtk::CheckButton @@ -48,7 +47,9 @@ public: *rtpReceiveCheckButton, *rtpSendCheckButton, *rtpLoopbackCheckButton, - *combineCheckButton; + *combineCheckButton, + *upnpMediaServerCheckButton, + *upnpNullSinkCheckButton; Gtk::RadioButton *rtpMikeRadioButton, @@ -60,30 +61,44 @@ public: bool ignoreChanges; void onCloseButtonClicked(); + void updateSensitive(); + void onChangeRemoteAccess(); void onChangeZeroconfDiscover(); void onChangeZeroconfRaopDiscover(); void onChangeRtpReceive(); void onChangeRtpSend(); void onChangeCombine(); + void onChangeUpnp(); + void readFromGConf(); + void checkForModules(); + void writeToGConfRemoteAccess(); void writeToGConfZeroconfDiscover(); void writeToGConfZeroconfRaopDiscover(); void writeToGConfRtpReceive(); void writeToGConfRtpSend(); void writeToGConfCombine(); + void writeToGConfUPnP(); + void onGConfChange(const Glib::ustring& key, const Gnome::Conf::Value& value); - bool rtpRecvAvailable, rtpSendAvailable, zeroconfPublishAvailable, zeroconfDiscoverAvailable, zeroconfRaopDiscoverAvailable, remoteAvailable; + bool + rtpRecvAvailable, + rtpSendAvailable, + zeroconfPublishAvailable, + zeroconfDiscoverAvailable, + zeroconfRaopDiscoverAvailable, + remoteAvailable, + upnpAvailable; }; MainWindow::MainWindow(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glade::Xml>& x) : Gtk::Window(cobject), ignoreChanges(true) { - x->get_widget("titleEventBox", titleEventBox); x->get_widget("closeButton", closeButton); x->get_widget("remoteAccessCheckButton", remoteAccessCheckButton); @@ -95,14 +110,13 @@ MainWindow::MainWindow(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glade: x->get_widget("rtpSendCheckButton", rtpSendCheckButton); x->get_widget("rtpLoopbackCheckButton", rtpLoopbackCheckButton); x->get_widget("combineCheckButton", combineCheckButton); + x->get_widget("upnpMediaServerCheckButton", upnpMediaServerCheckButton); + x->get_widget("upnpNullSinkCheckButton", upnpNullSinkCheckButton); x->get_widget("rtpMikeRadioButton", rtpMikeRadioButton); x->get_widget("rtpSpeakerRadioButton", rtpSpeakerRadioButton); x->get_widget("rtpNullSinkRadioButton", rtpNullSinkRadioButton); - Gdk::Color c("white"); - titleEventBox->modify_bg(Gtk::STATE_NORMAL, c); - checkForModules(); gconf = Gnome::Conf::Client::get_default_client(); @@ -130,6 +144,9 @@ MainWindow::MainWindow(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glade: rtpNullSinkRadioButton->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::onChangeRtpSend)); combineCheckButton->signal_toggled().connect(sigc::mem_fun(*this, &MainWindow::onChangeCombine)); + + upnpMediaServerCheckButton->signal_toggled().connect(sigc::mem_fun(*this, &MainWindow::onChangeUpnp)); + upnpNullSinkCheckButton->signal_toggled().connect(sigc::mem_fun(*this, &MainWindow::onChangeUpnp)); } MainWindow* MainWindow::create() { @@ -161,6 +178,9 @@ void MainWindow::updateSensitive() { rtpMikeRadioButton->set_sensitive(b && rtpSendAvailable); rtpSpeakerRadioButton->set_sensitive(b && rtpSendAvailable); rtpNullSinkRadioButton->set_sensitive(b && rtpSendAvailable); + + upnpMediaServerCheckButton->set_sensitive(upnpAvailable); + upnpNullSinkCheckButton->set_sensitive(upnpAvailable && upnpMediaServerCheckButton->get_active()); } void MainWindow::onChangeRemoteAccess() { @@ -208,14 +228,21 @@ void MainWindow::onChangeRtpSend() { } void MainWindow::onChangeCombine() { - Gnome::Conf::ChangeSet changeSet; - if (ignoreChanges) return; writeToGConfCombine(); } +void MainWindow::onChangeUpnp() { + + if (ignoreChanges) + return; + + updateSensitive(); + writeToGConfUPnP(); +} + void MainWindow::writeToGConfCombine() { Gnome::Conf::ChangeSet changeSet; changeSet.set(PA_GCONF_PATH_MODULES"/combine/locked", true); @@ -361,7 +388,11 @@ void MainWindow::writeToGConfRtpSend() { if (rtpSendCheckButton->get_active()) { if (!mikeEnabled && !speakerEnabled) { changeSet.set(PA_GCONF_PATH_MODULES"/rtp-send/name0", Glib::ustring("module-null-sink")); - changeSet.set(PA_GCONF_PATH_MODULES"/rtp-send/args0", Glib::ustring("sink_name=rtp format=s16be channels=2 rate=44100 description=\"RTP Multicast Sink\"")); + changeSet.set(PA_GCONF_PATH_MODULES"/rtp-send/args0", Glib::ustring("sink_name=rtp " + "format=s16be " + "channels=2 " + "rate=44100 " + "sink_properties=\"device.description='RTP Multicast' device.bus='network' device.icon_name='network-server'\"")); changeSet.set(PA_GCONF_PATH_MODULES"/rtp-send/name1", Glib::ustring("module-rtp-send")); changeSet.set(PA_GCONF_PATH_MODULES"/rtp-send/args1", Glib::ustring(loopbackEnabled ? "source=rtp.monitor loop=1" : "source=rtp.monitor loop=0")); @@ -391,6 +422,42 @@ void MainWindow::writeToGConfRtpSend() { gconf->suggest_sync(); } +void MainWindow::writeToGConfUPnP() { + Gnome::Conf::ChangeSet changeSet; + + changeSet.set(PA_GCONF_PATH_MODULES"/upnp-media-server/locked", true); + gconf->change_set_commit(changeSet, true); + + if (upnpMediaServerCheckButton->get_active()) { + changeSet.set(PA_GCONF_PATH_MODULES"/upnp-media-server/name0", Glib::ustring("module-rygel-media-server")); + changeSet.set(PA_GCONF_PATH_MODULES"/upnp-media-server/args0", Glib::ustring("")); + + if (upnpNullSinkCheckButton->get_active()) { + changeSet.set(PA_GCONF_PATH_MODULES"/upnp-media-server/name1", Glib::ustring("module-null-sink")); + changeSet.set(PA_GCONF_PATH_MODULES"/upnp-media-server/args1", Glib::ustring("sink_name=upnp " + "format=s16be " + "channels=2 " + "rate=44100 " + "sink_properties=\"device.description='DLNA/UPnP Streaming' device.bus='network' device.icon_name='network-server'\"")); + changeSet.set(PA_GCONF_PATH_MODULES"/upnp-media-server/null-sink-enabled", true); + } else { + changeSet.unset(PA_GCONF_PATH_MODULES"/upnp-media-server/name1"); + changeSet.unset(PA_GCONF_PATH_MODULES"/upnp-media-server/args1"); + changeSet.set(PA_GCONF_PATH_MODULES"/upnp-media-server/null-sink-enabled", false); + } + + changeSet.set(PA_GCONF_PATH_MODULES"/upnp-media-server/enabled", true); + } else + changeSet.set(PA_GCONF_PATH_MODULES"/upnp-media-server/enabled", false); + + gconf->change_set_commit(changeSet, true); + + changeSet.set(PA_GCONF_PATH_MODULES"/upnp-media-server/locked", false); + gconf->change_set_commit(changeSet, true); + + gconf->suggest_sync(); +} + void MainWindow::onGConfChange(const Glib::ustring&, const Gnome::Conf::Value&) { readFromGConf(); } @@ -422,6 +489,9 @@ void MainWindow::readFromGConf() { combineCheckButton->set_active(gconf->get_bool(PA_GCONF_PATH_MODULES"/combine/enabled")); + upnpMediaServerCheckButton->set_active(gconf->get_bool(PA_GCONF_PATH_MODULES"/upnp-media-server/enabled")); + upnpNullSinkCheckButton->set_active(gconf->get_bool(PA_GCONF_PATH_MODULES"/upnp-media-server/null-sink-enabled")); + ignoreChanges = FALSE; updateSensitive(); @@ -440,6 +510,11 @@ void MainWindow::checkForModules() { rtpRecvAvailable = access(MODULESDIR "module-rtp-recv" SHREXT, F_OK) == 0; rtpSendAvailable = access(MODULESDIR "module-rtp-send" SHREXT, F_OK) == 0; + + upnpAvailable = + access(MODULESDIR "module-rygel-media-server" SHREXT, F_OK) == 0// && + // g_find_program_in_path("rygel") + ; } int main(int argc, char *argv[]) { diff --git a/src/paprefs.glade b/src/paprefs.glade index 33ab460..d570a4c 100644 --- a/src/paprefs.glade +++ b/src/paprefs.glade @@ -7,21 +7,31 @@ <property name="resizable">False</property> <property name="icon_name">preferences-desktop</property> <child> - <widget class="GtkVBox" id="vbox3"> + <widget class="GtkVBox" id="vbox20"> <property name="visible">True</property> + <property name="border_width">12</property> + <property name="orientation">vertical</property> + <property name="spacing">12</property> <child> - <widget class="GtkEventBox" id="titleEventBox"> + <widget class="GtkNotebook" id="notebook1"> <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> <child> - <widget class="GtkHBox" id="hbox2"> + <widget class="GtkVBox" id="vbox30"> <property name="visible">True</property> <property name="border_width">12</property> - <property name="spacing">12</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> <child> - <widget class="GtkImage" id="image19"> + <widget class="GtkCheckButton" id="zeroconfDiscoverCheckButton"> + <property name="label" translatable="yes">Make discoverable _PulseAudio network sound devices available locally</property> <property name="visible">True</property> - <property name="icon_name">preferences-desktop</property> - <property name="icon-size">6</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="use_underline">True</property> + <property name="draw_indicator">True</property> </widget> <packing> <property name="expand">False</property> @@ -30,377 +40,333 @@ </packing> </child> <child> - <widget class="GtkVBox" id="vbox22"> + <widget class="GtkCheckButton" id="zeroconfRaopDiscoverCheckButton"> + <property name="label" translatable="yes">Make discoverable Apple A_irTunes sound devices available locally</property> <property name="visible">True</property> - <property name="spacing">6</property> - <child> - <widget class="GtkLabel" id="titleLabel"> - <property name="visible">True</property> - <property name="xalign">0</property> - <property name="yalign">1</property> - <property name="label" translatable="yes"><span size="18000" color="black"><b>PulseAudio Preferences</b></span></property> - <property name="use_markup">True</property> - </widget> - <packing> - <property name="position">0</property> - </packing> - </child> - <child> - <widget class="GtkLabel" id="label4825"> - <property name="visible">True</property> - <property name="xalign">0</property> - <property name="yalign">0</property> - <property name="label" translatable="yes"><span color="black">View and modify the configuration of your local sound server</span></property> - <property name="use_markup">True</property> - </widget> - <packing> - <property name="position">1</property> - </packing> - </child> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="use_underline">True</property> + <property name="draw_indicator">True</property> </widget> <packing> + <property name="expand">False</property> + <property name="fill">False</property> <property name="position">1</property> </packing> </child> + <child> + <widget class="GtkLabel" id="tm"> + <property name="visible">True</property> + <property name="sensitive">False</property> + <property name="label" translatable="yes"><i>Apple and AirTunes are trademarks of Apple Inc., registered in the U.S. and other countries.</i></property> + <property name="use_markup">True</property> + <property name="single_line_mode">True</property> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="pack_type">end</property> + <property name="position">2</property> + </packing> + </child> </widget> </child> - </widget> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <widget class="GtkHSeparator" id="hseparator1"> - <property name="visible">True</property> - </widget> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> - </child> - <child> - <widget class="GtkVBox" id="vbox20"> - <property name="visible">True</property> - <property name="border_width">12</property> - <property name="spacing">12</property> <child> - <widget class="GtkNotebook" id="notebook1"> + <widget class="GtkLabel" id="label1"> <property name="visible">True</property> - <property name="can_focus">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes">Network _Access</property> + <property name="use_underline">True</property> + </widget> + <packing> + <property name="tab_fill">False</property> + <property name="type">tab</property> + </packing> + </child> + <child> + <widget class="GtkVBox" id="vbox2"> + <property name="visible">True</property> + <property name="border_width">12</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> <child> - <widget class="GtkVBox" id="vbox30"> + <widget class="GtkCheckButton" id="remoteAccessCheckButton"> + <property name="label" translatable="yes">Enable _network access to local sound devices</property> <property name="visible">True</property> - <property name="border_width">12</property> - <property name="spacing">6</property> - <child> - <widget class="GtkCheckButton" id="remoteAccessCheckButton"> - <property name="label" translatable="yes">Enable _network access to local sound devices</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> - </widget> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> - </child> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_underline">True</property> + <property name="draw_indicator">True</property> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <widget class="GtkAlignment" id="alignment8"> + <property name="visible">True</property> + <property name="left_padding">12</property> <child> - <widget class="GtkAlignment" id="alignment8"> + <widget class="GtkVBox" id="vbox34"> <property name="visible">True</property> - <property name="left_padding">12</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> <child> - <widget class="GtkVBox" id="vbox34"> + <widget class="GtkCheckButton" id="zeroconfBrowseCheckButton"> + <property name="label" translatable="yes">Allow other machines on the LAN to _discover local sound devices</property> <property name="visible">True</property> - <property name="spacing">6</property> - <child> - <widget class="GtkCheckButton" id="zeroconfBrowseCheckButton"> - <property name="label" translatable="yes">Allow other machines on the LAN to _discover local sound devices</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> - </widget> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <widget class="GtkCheckButton" id="anonymousAuthCheckButton"> - <property name="label" translatable="yes">Don't require _authentication</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> - </widget> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> - </child> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_underline">True</property> + <property name="draw_indicator">True</property> </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <widget class="GtkCheckButton" id="anonymousAuthCheckButton"> + <property name="label" translatable="yes">Don't _require authentication</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_underline">True</property> + <property name="draw_indicator">True</property> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> </child> </widget> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> - </child> - <child> - <widget class="GtkCheckButton" id="zeroconfDiscoverCheckButton"> - <property name="label" translatable="yes">_Make discoverable network sound devices available locally</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> - </widget> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">2</property> - </packing> - </child> - <child> - <widget class="GtkCheckButton" id="zeroconfRaopDiscoverCheckButton"> - <property name="label" translatable="yes">Make discoverable Apple Air_tunes sound devices available locally</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> - </widget> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">3</property> - </packing> - </child> - <child> - <widget class="GtkLabel" id="tm"> - <property name="visible">True</property> - <property name="sensitive">False</property> - <property name="xalign">0</property> - <property name="label" translatable="yes"><i>Apple and Airtunes are trademarks of Apple Inc., registered in the U.S. and other countries.</i></property> - <property name="use_markup">True</property> - </widget> - <packing> - <property name="position">4</property> - </packing> </child> </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> </child> <child> - <widget class="GtkLabel" id="label1"> + <widget class="GtkCheckButton" id="upnpMediaServerCheckButton"> + <property name="label" translatable="yes">Make local sound devices available as DLNA/_UPnP Media Server</property> <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label" translatable="yes">N_etwork Access</property> <property name="use_underline">True</property> + <property name="draw_indicator">True</property> </widget> <packing> - <property name="tab_fill">False</property> - <property name="type">tab</property> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">2</property> </packing> </child> <child> - <widget class="GtkVBox" id="vbox31"> + <widget class="GtkAlignment" id="alignment2"> <property name="visible">True</property> - <property name="border_width">12</property> - <property name="spacing">6</property> - <child> - <widget class="GtkCheckButton" id="rtpReceiveCheckButton"> - <property name="label" translatable="yes">Enable Multicast/RTP _receiver</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> - </widget> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> - </child> + <property name="left_padding">12</property> <child> - <widget class="GtkCheckButton" id="rtpSendCheckButton"> - <property name="label" translatable="yes">Enable Multicast/RTP _sender</property> + <widget class="GtkVBox" id="vbox3"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> - </widget> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> - </child> - <child> - <widget class="GtkAlignment" id="alignment10"> - <property name="visible">True</property> - <property name="left_padding">12</property> + <property name="orientation">vertical</property> <child> - <widget class="GtkVBox" id="vbox36"> + <widget class="GtkCheckButton" id="upnpNullSinkCheckButton"> + <property name="label" translatable="yes">Create separate audio device for DLNA/UPnP media streaming</property> <property name="visible">True</property> - <property name="spacing">6</property> - <child> - <widget class="GtkRadioButton" id="rtpMikeRadioButton"> - <property name="label" translatable="yes">Send audio from local _microphone</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> - </widget> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <widget class="GtkRadioButton" id="rtpSpeakerRadioButton"> - <property name="label" translatable="yes">Send audio from local s_peakers</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> - <property name="group">rtpMikeRadioButton</property> - </widget> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> - </child> - <child> - <widget class="GtkRadioButton" id="rtpNullSinkRadioButton"> - <property name="label" translatable="yes">Create seperate audio _device for Multicast/RTP</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> - <property name="group">rtpMikeRadioButton</property> - </widget> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">2</property> - </packing> - </child> - <child> - <widget class="GtkCheckButton" id="rtpLoopbackCheckButton"> - <property name="label" translatable="yes">_Loopback audio to local speakers</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> - </widget> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">3</property> - </packing> - </child> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="use_underline">True</property> + <property name="draw_indicator">True</property> </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> </child> </widget> - <packing> - <property name="position">2</property> - </packing> </child> </widget> <packing> - <property name="position">1</property> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">3</property> </packing> </child> + </widget> + <packing> + <property name="position">1</property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="label3"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes">Network _Server</property> + <property name="use_underline">True</property> + </widget> + <packing> + <property name="position">3</property> + <property name="tab_fill">False</property> + <property name="type">tab</property> + </packing> + </child> + <child> + <widget class="GtkVBox" id="vbox31"> + <property name="visible">True</property> + <property name="border_width">12</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> <child> - <widget class="GtkLabel" id="label2"> + <widget class="GtkCheckButton" id="rtpReceiveCheckButton"> + <property name="label" translatable="yes">Enable Multicast/RTP re_ceiver</property> <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label" translatable="yes">Multicast/R_TP</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> <property name="use_underline">True</property> + <property name="draw_indicator">True</property> </widget> <packing> - <property name="position">1</property> - <property name="tab_fill">False</property> - <property name="type">tab</property> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> </packing> </child> <child> - <widget class="GtkVBox" id="vbox4"> + <widget class="GtkCheckButton" id="rtpSendCheckButton"> + <property name="label" translatable="yes">Enable Multicast/RTP s_ender</property> <property name="visible">True</property> - <property name="border_width">12</property> - <property name="spacing">6</property> - <child> - <widget class="GtkCheckButton" id="combineCheckButton"> - <property name="label" translatable="yes">Add _virtual output device for simultaneous output on all local sound cards</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> - </widget> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> - </child> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_underline">True</property> + <property name="draw_indicator">True</property> </widget> <packing> - <property name="position">2</property> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> </packing> </child> <child> - <widget class="GtkLabel" id="label3"> + <widget class="GtkAlignment" id="alignment10"> <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label" translatable="yes">Sim_ultaneous Output</property> - <property name="use_underline">True</property> + <property name="left_padding">12</property> + <child> + <widget class="GtkVBox" id="vbox36"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> + <child> + <widget class="GtkRadioButton" id="rtpMikeRadioButton"> + <property name="label" translatable="yes">Send audio from local _microphone</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_underline">True</property> + <property name="active">True</property> + <property name="draw_indicator">True</property> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <widget class="GtkRadioButton" id="rtpSpeakerRadioButton"> + <property name="label" translatable="yes">Send audio from local spea_kers</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_underline">True</property> + <property name="draw_indicator">True</property> + <property name="group">rtpMikeRadioButton</property> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <widget class="GtkRadioButton" id="rtpNullSinkRadioButton"> + <property name="label" translatable="yes">Create separate audio device _for Multicast/RTP</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_underline">True</property> + <property name="draw_indicator">True</property> + <property name="group">rtpMikeRadioButton</property> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">2</property> + </packing> + </child> + <child> + <widget class="GtkCheckButton" id="rtpLoopbackCheckButton"> + <property name="label" translatable="yes">_Loop back audio to local speakers</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_underline">True</property> + <property name="draw_indicator">True</property> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">3</property> + </packing> + </child> + </widget> + </child> </widget> <packing> <property name="position">2</property> - <property name="tab_fill">False</property> - <property name="type">tab</property> </packing> </child> </widget> <packing> - <property name="position">0</property> + <property name="position">2</property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="label2"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes">Multicast/R_TP</property> + <property name="use_underline">True</property> + </widget> + <packing> + <property name="position">2</property> + <property name="tab_fill">False</property> + <property name="type">tab</property> </packing> </child> <child> - <widget class="GtkHButtonBox" id="hbuttonbox1"> + <widget class="GtkVBox" id="vbox4"> <property name="visible">True</property> - <property name="layout_style">end</property> + <property name="border_width">12</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> <child> - <widget class="GtkButton" id="closeButton"> - <property name="label">gtk-close</property> + <widget class="GtkCheckButton" id="combineCheckButton"> + <property name="label" translatable="yes">Add _virtual output device for simultaneous output on all local sound cards</property> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="can_default">True</property> <property name="receives_default">False</property> - <property name="use_stock">True</property> + <property name="use_underline">True</property> + <property name="draw_indicator">True</property> </widget> <packing> <property name="expand">False</property> @@ -410,15 +376,51 @@ </child> </widget> <packing> + <property name="position">3</property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="label4"> + <property name="visible">True</property> + <property name="label" translatable="yes">Simultaneous _Output</property> + <property name="use_underline">True</property> + </widget> + <packing> + <property name="position">3</property> + <property name="tab_fill">False</property> + <property name="type">tab</property> + </packing> + </child> + </widget> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <widget class="GtkHButtonBox" id="hbuttonbox1"> + <property name="visible">True</property> + <property name="layout_style">end</property> + <child> + <widget class="GtkButton" id="closeButton"> + <property name="label">gtk-close</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="can_default">True</property> + <property name="receives_default">True</property> + <property name="use_stock">True</property> + </widget> + <packing> <property name="expand">False</property> <property name="fill">False</property> - <property name="pack_type">end</property> - <property name="position">1</property> + <property name="position">0</property> </packing> </child> </widget> <packing> - <property name="position">2</property> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="pack_type">end</property> + <property name="position">1</property> </packing> </child> </widget> |