X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fsession_option_editor.cc;h=13f5dbc26cbea8b0e3b8e423d0c046c4927e56ba;hb=fddb3778120e25b3b8e8134084e260dac07c1365;hp=49dbcdff158dfa688b3efcb837a8f3062b857aba;hpb=498dfebcca3b97cdd7b83444040042fe06626241;p=ardour.git diff --git a/gtk2_ardour/session_option_editor.cc b/gtk2_ardour/session_option_editor.cc index 49dbcdff15..13f5dbc26c 100644 --- a/gtk2_ardour/session_option_editor.cc +++ b/gtk2_ardour/session_option_editor.cc @@ -3,36 +3,36 @@ #include "ardour/auditioner.h" #include "ardour/audioengine.h" #include "ardour/port.h" + +#include "gui_thread.h" #include "session_option_editor.h" #include "port_matrix.h" #include "i18n.h" using namespace std; -using namespace sigc; using namespace ARDOUR; class OptionsPortMatrix : public PortMatrix { public: - OptionsPortMatrix (Gtk::Window* parent, ARDOUR::Session& session) + OptionsPortMatrix (Gtk::Window* parent, ARDOUR::Session* session) : PortMatrix (parent, session, DataType::AUDIO) { _port_group.reset (new PortGroup ("")); _ports[OURS].add_group (_port_group); setup_all_ports (); + init (); } void setup_ports (int dim) { - cerr << _session.the_auditioner()->output()->n_ports() << "\n"; - if (dim == OURS) { _port_group->clear (); - _port_group->add_bundle (_session.click_io()->bundle()); - _port_group->add_bundle (_session.the_auditioner()->output()->bundle()); + _port_group->add_bundle (_session->click_io()->bundle()); + _port_group->add_bundle (_session->the_auditioner()->output()->bundle()); } else { - _ports[OTHER].gather (_session, true); + _ports[OTHER].gather (_session, true, false); } } @@ -41,18 +41,18 @@ public: Bundle::PortList const & our_ports = c[OURS].bundle->channel_ports (c[OURS].channel); Bundle::PortList const & other_ports = c[OTHER].bundle->channel_ports (c[OTHER].channel); - if (c[OURS].bundle == _session.click_io()->bundle()) { + if (c[OURS].bundle == _session->click_io()->bundle()) { for (ARDOUR::Bundle::PortList::const_iterator i = our_ports.begin(); i != our_ports.end(); ++i) { for (ARDOUR::Bundle::PortList::const_iterator j = other_ports.begin(); j != other_ports.end(); ++j) { - Port* f = _session.engine().get_port_by_name (*i); + Port* f = _session->engine().get_port_by_name (*i); assert (f); if (s) { - _session.click_io()->connect (f, *j, 0); + _session->click_io()->connect (f, *j, 0); } else { - _session.click_io()->disconnect (f, *j, 0); + _session->click_io()->disconnect (f, *j, 0); } } } @@ -64,11 +64,11 @@ public: Bundle::PortList const & our_ports = c[OURS].bundle->channel_ports (c[OURS].channel); Bundle::PortList const & other_ports = c[OTHER].bundle->channel_ports (c[OTHER].channel); - if (c[OURS].bundle == _session.click_io()->bundle()) { + if (c[OURS].bundle == _session->click_io()->bundle()) { for (ARDOUR::Bundle::PortList::const_iterator i = our_ports.begin(); i != our_ports.end(); ++i) { for (ARDOUR::Bundle::PortList::const_iterator j = other_ports.begin(); j != other_ports.end(); ++j) { - Port* f = _session.engine().get_port_by_name (*i); + Port* f = _session->engine().get_port_by_name (*i); assert (f); if (f->connected_to (*j)) { @@ -118,7 +118,7 @@ class ConnectionOptions : public OptionEditorBox { public: ConnectionOptions (Gtk::Window* parent, ARDOUR::Session* s) - : _port_matrix (parent, *s) + : _port_matrix (parent, s) { _box->pack_start (_port_matrix); } @@ -138,83 +138,18 @@ private: }; SessionOptionEditor::SessionOptionEditor (Session* s) - : OptionEditor (&(s->config), _("Session Preferences")) + : OptionEditor (&(s->config), _("Session Properties")) , _session_config (&(s->config)) { - /* FADES */ - - ComboOption* cfm = new ComboOption ( - "xfade-model", - _("Crossfades are created"), - mem_fun (*_session_config, &SessionConfiguration::get_xfade_model), - mem_fun (*_session_config, &SessionConfiguration::set_xfade_model) - ); - - cfm->add (FullCrossfade, _("to span entire overlap")); - cfm->add (ShortCrossfade, _("short")); - - add_option (_("Fades"), cfm); - - add_option (_("Fades"), new SpinOption ( - _("short-xfade-seconds"), - _("Short crossfade length"), - mem_fun (*_session_config, &SessionConfiguration::get_short_xfade_seconds), - mem_fun (*_session_config, &SessionConfiguration::set_short_xfade_seconds), - 0, 1000, 1, 10, - _("ms"), 0.001 - )); - - add_option (_("Fades"), new SpinOption ( - _("destructive-xfade-seconds"), - _("Destructive crossfade length"), - mem_fun (*_session_config, &SessionConfiguration::get_destructive_xfade_msecs), - mem_fun (*_session_config, &SessionConfiguration::set_destructive_xfade_msecs), - 0, 1000, 1, 10, - _("ms") - )); - - add_option (_("Fades"), new BoolOption ( - "auto-xfade", - _("Create crossfades automatically"), - mem_fun (*_session_config, &SessionConfiguration::get_auto_xfade), - mem_fun (*_session_config, &SessionConfiguration::set_auto_xfade) - )); - - add_option (_("Fades"), new BoolOption ( - "xfades-active", - _("Crossfades active"), - mem_fun (*_session_config, &SessionConfiguration::get_xfades_active), - mem_fun (*_session_config, &SessionConfiguration::set_xfades_active) - )); - - add_option (_("Fades"), new BoolOption ( - "xfades-visible", - _("Crossfades visible"), - mem_fun (*_session_config, &SessionConfiguration::get_xfades_visible), - mem_fun (*_session_config, &SessionConfiguration::set_xfades_visible) - )); - - add_option (_("Fades"), new BoolOption ( - "use-region-fades", - _("Region fades active"), - mem_fun (*_session_config, &SessionConfiguration::get_use_region_fades), - mem_fun (*_session_config, &SessionConfiguration::set_use_region_fades) - )); - - add_option (_("Fades"), new BoolOption ( - "show-region-fades", - _("Region fades visible"), - mem_fun (*_session_config, &SessionConfiguration::get_show_region_fades), - mem_fun (*_session_config, &SessionConfiguration::set_show_region_fades) - )); + set_name ("SessionProperties"); /* SYNC */ ComboOption* spf = new ComboOption ( "subframes-per-frame", _("Subframes per frame"), - mem_fun (*_session_config, &SessionConfiguration::get_subframes_per_frame), - mem_fun (*_session_config, &SessionConfiguration::set_subframes_per_frame) + sigc::mem_fun (*_session_config, &SessionConfiguration::get_subframes_per_frame), + sigc::mem_fun (*_session_config, &SessionConfiguration::set_subframes_per_frame) ); spf->add (80, _("80")); @@ -225,21 +160,24 @@ SessionOptionEditor::SessionOptionEditor (Session* s) ComboOption* ssrc = new ComboOption ( "sync-source", _("External sync source"), - mem_fun (*_session_config, &SessionConfiguration::get_sync_source), - mem_fun (*_session_config, &SessionConfiguration::set_sync_source) + sigc::mem_fun (*_session_config, &SessionConfiguration::get_sync_source), + sigc::mem_fun (*_session_config, &SessionConfiguration::set_sync_source) ); - s->MTC_PortChanged.connect (bind (mem_fun (*this, &SessionOptionEditor::populate_sync_options), s, ssrc)); - s->MIDIClock_PortChanged.connect (bind (mem_fun (*this, &SessionOptionEditor::populate_sync_options), s, ssrc)); + s->MTC_PortChanged.connect (_session_connections, invalidator (*this), boost::bind (&SessionOptionEditor::populate_sync_options, this, s, ssrc), gui_context()); + s->MIDIClock_PortChanged.connect (_session_connections, invalidator (*this), boost::bind (&SessionOptionEditor::populate_sync_options, this, s, ssrc), gui_context()); + s->config.ParameterChanged.connect (_session_connections, invalidator (*this), ui_bind (&SessionOptionEditor::follow_sync_state, this, _1, s, ssrc), gui_context()); + populate_sync_options (s, ssrc); + follow_sync_state (string ("external-sync"), s, ssrc); add_option (_("Sync"), ssrc); ComboOption* smf = new ComboOption ( "timecode-format", _("Timecode frames-per-second"), - mem_fun (*_session_config, &SessionConfiguration::get_timecode_format), - mem_fun (*_session_config, &SessionConfiguration::set_timecode_format) + sigc::mem_fun (*_session_config, &SessionConfiguration::get_timecode_format), + sigc::mem_fun (*_session_config, &SessionConfiguration::set_timecode_format) ); smf->add (timecode_23976, _("23.976")); @@ -257,16 +195,16 @@ SessionOptionEditor::SessionOptionEditor (Session* s) add_option (_("Sync"), new BoolOption ( "timecode-source-is-synced", - _("Timecode source is synced"), - mem_fun (*_session_config, &SessionConfiguration::get_timecode_source_is_synced), - mem_fun (*_session_config, &SessionConfiguration::set_timecode_source_is_synced) + _("Timecode source shares sample clock with audio interface"), + sigc::mem_fun (*_session_config, &SessionConfiguration::get_timecode_source_is_synced), + sigc::mem_fun (*_session_config, &SessionConfiguration::set_timecode_source_is_synced) )); ComboOption* vpu = new ComboOption ( "video-pullup", _("Pull-up / pull-down"), - mem_fun (*_session_config, &SessionConfiguration::get_video_pullup), - mem_fun (*_session_config, &SessionConfiguration::set_video_pullup) + sigc::mem_fun (*_session_config, &SessionConfiguration::get_video_pullup), + sigc::mem_fun (*_session_config, &SessionConfiguration::set_video_pullup) ); vpu->add (4.1667 + 0.1, _("4.1667 + 0.1%")); @@ -281,6 +219,73 @@ SessionOptionEditor::SessionOptionEditor (Session* s) add_option (_("Sync"), vpu); + /* FADES */ + + ComboOption* cfm = new ComboOption ( + "xfade-model", + _("Crossfades are created"), + sigc::mem_fun (*_session_config, &SessionConfiguration::get_xfade_model), + sigc::mem_fun (*_session_config, &SessionConfiguration::set_xfade_model) + ); + + cfm->add (FullCrossfade, _("to span entire overlap")); + cfm->add (ShortCrossfade, _("short")); + + add_option (_("Fades"), cfm); + + add_option (_("Fades"), new SpinOption ( + _("short-xfade-seconds"), + _("Short crossfade length"), + sigc::mem_fun (*_session_config, &SessionConfiguration::get_short_xfade_seconds), + sigc::mem_fun (*_session_config, &SessionConfiguration::set_short_xfade_seconds), + 0, 1000, 1, 10, + _("ms"), 0.001 + )); + + add_option (_("Fades"), new SpinOption ( + _("destructive-xfade-seconds"), + _("Destructive crossfade length"), + sigc::mem_fun (*_session_config, &SessionConfiguration::get_destructive_xfade_msecs), + sigc::mem_fun (*_session_config, &SessionConfiguration::set_destructive_xfade_msecs), + 0, 1000, 1, 10, + _("ms") + )); + + add_option (_("Fades"), new BoolOption ( + "auto-xfade", + _("Create crossfades automatically"), + sigc::mem_fun (*_session_config, &SessionConfiguration::get_auto_xfade), + sigc::mem_fun (*_session_config, &SessionConfiguration::set_auto_xfade) + )); + + add_option (_("Fades"), new BoolOption ( + "xfades-active", + _("Crossfades active"), + sigc::mem_fun (*_session_config, &SessionConfiguration::get_xfades_active), + sigc::mem_fun (*_session_config, &SessionConfiguration::set_xfades_active) + )); + + add_option (_("Fades"), new BoolOption ( + "xfades-visible", + _("Crossfades visible"), + sigc::mem_fun (*_session_config, &SessionConfiguration::get_xfades_visible), + sigc::mem_fun (*_session_config, &SessionConfiguration::set_xfades_visible) + )); + + add_option (_("Fades"), new BoolOption ( + "use-region-fades", + _("Region fades active"), + sigc::mem_fun (*_session_config, &SessionConfiguration::get_use_region_fades), + sigc::mem_fun (*_session_config, &SessionConfiguration::set_use_region_fades) + )); + + add_option (_("Fades"), new BoolOption ( + "show-region-fades", + _("Region fades visible"), + sigc::mem_fun (*_session_config, &SessionConfiguration::get_show_region_fades), + sigc::mem_fun (*_session_config, &SessionConfiguration::set_show_region_fades) + )); + /* MISC */ add_option (_("Misc"), new OptionEditorHeading (_("Audio file format"))); @@ -288,8 +293,8 @@ SessionOptionEditor::SessionOptionEditor (Session* s) ComboOption* sf = new ComboOption ( "native-file-data-format", _("Sample format"), - mem_fun (*_session_config, &SessionConfiguration::get_native_file_data_format), - mem_fun (*_session_config, &SessionConfiguration::set_native_file_data_format) + sigc::mem_fun (*_session_config, &SessionConfiguration::get_native_file_data_format), + sigc::mem_fun (*_session_config, &SessionConfiguration::set_native_file_data_format) ); sf->add (FormatFloat, _("32-bit floating point")); @@ -301,8 +306,8 @@ SessionOptionEditor::SessionOptionEditor (Session* s) ComboOption* hf = new ComboOption ( "native-file-header-format", _("File type"), - mem_fun (*_session_config, &SessionConfiguration::get_native_file_header_format), - mem_fun (*_session_config, &SessionConfiguration::set_native_file_header_format) + sigc::mem_fun (*_session_config, &SessionConfiguration::get_native_file_header_format), + sigc::mem_fun (*_session_config, &SessionConfiguration::set_native_file_header_format) ); hf->add (BWF, _("Broadcast WAVE")); @@ -317,8 +322,8 @@ SessionOptionEditor::SessionOptionEditor (Session* s) ComboOption* lm = new ComboOption ( "layer-model", _("Layering model in overlaid mode"), - mem_fun (*_session_config, &SessionConfiguration::get_layer_model), - mem_fun (*_session_config, &SessionConfiguration::set_layer_model) + sigc::mem_fun (*_session_config, &SessionConfiguration::get_layer_model), + sigc::mem_fun (*_session_config, &SessionConfiguration::set_layer_model) ); lm->add (LaterHigher, _("later is higher")); @@ -332,15 +337,15 @@ SessionOptionEditor::SessionOptionEditor (Session* s) add_option (_("Misc"), new EntryOption ( "bwf-country-code", _("Country code"), - mem_fun (*_session_config, &SessionConfiguration::get_bwf_country_code), - mem_fun (*_session_config, &SessionConfiguration::set_bwf_country_code) + sigc::mem_fun (*_session_config, &SessionConfiguration::get_bwf_country_code), + sigc::mem_fun (*_session_config, &SessionConfiguration::set_bwf_country_code) )); add_option (_("Misc"), new EntryOption ( "bwf-organization-code", _("Organization code"), - mem_fun (*_session_config, &SessionConfiguration::get_bwf_organization_code), - mem_fun (*_session_config, &SessionConfiguration::set_bwf_organization_code) + sigc::mem_fun (*_session_config, &SessionConfiguration::get_bwf_organization_code), + sigc::mem_fun (*_session_config, &SessionConfiguration::set_bwf_organization_code) )); add_option (_("Connections"), new ConnectionOptions (this, s)); @@ -360,3 +365,15 @@ SessionOptionEditor::populate_sync_options (Session* s, Option* opt) } } +void +SessionOptionEditor::follow_sync_state (std::string p, Session* s, Option* opt) +{ + ComboOption* sync_opt = dynamic_cast* > (opt); + if (p == "external-sync") { + if (s->config.get_external_sync()) { + sync_opt->set_sensitive (false); + } else { + sync_opt->set_sensitive (true); + } + } +}