class OptionsPortMatrix : public PortMatrix
{
public:
- OptionsPortMatrix (ARDOUR::Session& session)
- : PortMatrix (session, DataType::AUDIO)
+ 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());
} else {
- _ports[OTHER].gather (_session, true);
+ _ports[OTHER].gather (_session, true, false);
}
}
{
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()) {
for (ARDOUR::Bundle::PortList::const_iterator i = our_ports.begin(); i != our_ports.end(); ++i) {
Port* f = _session.engine().get_port_by_name (*i);
assert (f);
-
+
if (s) {
_session.click_io()->connect (f, *j, 0);
} else {
{
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()) {
-
+
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);
assert (f);
-
+
if (f->connected_to (*j)) {
return PortMatrixNode::ASSOCIATED;
} else {
bool can_remove_channels (boost::shared_ptr<Bundle>) const {
return false;
}
-
+
void remove_channel (ARDOUR::BundleChannel) {}
-
+
std::string disassociation_verb () const {
return _("Disassociate");
}
-
+
private:
/* see PortMatrix: signal flow from 0 to 1 (out to in) */
enum {
class ConnectionOptions : public OptionEditorBox
{
public:
- ConnectionOptions (ARDOUR::Session* s)
- : _port_matrix (*s)
+ ConnectionOptions (Gtk::Window* parent, ARDOUR::Session* s)
+ : _port_matrix (parent, *s)
{
_box->pack_start (_port_matrix);
}
- void parameter_changed (string const & p)
+ void parameter_changed (string const &)
{
}
};
SessionOptionEditor::SessionOptionEditor (Session* s)
- : OptionEditor (&(s->config), _("Session Preferences")),
- _session_config (&(s->config))
+ : OptionEditor (&(s->config), _("Session Preferences"))
+ , _session_config (&(s->config))
{
+ /* SYNC */
+
+ ComboOption<uint32_t>* spf = new ComboOption<uint32_t> (
+ "subframes-per-frame",
+ _("Subframes per frame"),
+ mem_fun (*_session_config, &SessionConfiguration::get_subframes_per_frame),
+ mem_fun (*_session_config, &SessionConfiguration::set_subframes_per_frame)
+ );
+
+ spf->add (80, _("80"));
+ spf->add (100, _("100"));
+
+ add_option (_("Sync"), spf);
+
+ ComboOption<SyncSource>* ssrc = new ComboOption<SyncSource> (
+ "sync-source",
+ _("External sync source"),
+ mem_fun (*_session_config, &SessionConfiguration::get_sync_source),
+ 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->config.ParameterChanged.connect (bind (mem_fun (*this, &SessionOptionEditor::follow_sync_state), s, ssrc));
+
+ populate_sync_options (s, ssrc);
+ follow_sync_state (string ("external-sync"), s, ssrc);
+
+ add_option (_("Sync"), ssrc);
+
+ ComboOption<TimecodeFormat>* smf = new ComboOption<TimecodeFormat> (
+ "timecode-format",
+ _("Timecode frames-per-second"),
+ mem_fun (*_session_config, &SessionConfiguration::get_timecode_format),
+ mem_fun (*_session_config, &SessionConfiguration::set_timecode_format)
+ );
+
+ smf->add (timecode_23976, _("23.976"));
+ smf->add (timecode_24, _("24"));
+ smf->add (timecode_24976, _("24.976"));
+ smf->add (timecode_25, _("25"));
+ smf->add (timecode_2997, _("29.97"));
+ smf->add (timecode_2997drop, _("29.97 drop"));
+ smf->add (timecode_30, _("30"));
+ smf->add (timecode_30drop, _("30 drop"));
+ smf->add (timecode_5994, _("59.94"));
+ smf->add (timecode_60, _("60"));
+
+ add_option (_("Sync"), smf);
+
+ add_option (_("Sync"), new BoolOption (
+ "timecode-source-is-synced",
+ _("Timecode source shares sample clock with audio interface"),
+ mem_fun (*_session_config, &SessionConfiguration::get_timecode_source_is_synced),
+ mem_fun (*_session_config, &SessionConfiguration::set_timecode_source_is_synced)
+ ));
+
+ ComboOption<float>* vpu = new ComboOption<float> (
+ "video-pullup",
+ _("Pull-up / pull-down"),
+ mem_fun (*_session_config, &SessionConfiguration::get_video_pullup),
+ mem_fun (*_session_config, &SessionConfiguration::set_video_pullup)
+ );
+
+ vpu->add (4.1667 + 0.1, _("4.1667 + 0.1%"));
+ vpu->add (4.1667, _("4.1667"));
+ vpu->add (4.1667 - 0.1, _("4.1667 - 0.1%"));
+ vpu->add (0.1, _("0.1"));
+ vpu->add (0, _("none"));
+ vpu->add (-0.1, _("-0.1"));
+ vpu->add (-4.1667 + 0.1, _("-4.1667 + 0.1%"));
+ vpu->add (-4.1667, _("-4.1667"));
+ vpu->add (-4.1667 - 0.1, _("-4.1667 - 0.1%"));
+
+ add_option (_("Sync"), vpu);
+
/* FADES */
ComboOption<CrossfadeModel>* cfm = new ComboOption<CrossfadeModel> (
mem_fun (*_session_config, &SessionConfiguration::set_show_region_fades)
));
- /* SYNC */
-
- ComboOption<uint32_t>* spf = new ComboOption<uint32_t> (
- "subframes-per-frame",
- _("Subframes per frame"),
- mem_fun (*_session_config, &SessionConfiguration::get_subframes_per_frame),
- mem_fun (*_session_config, &SessionConfiguration::set_subframes_per_frame)
- );
-
- spf->add (80, _("80"));
- spf->add (100, _("100"));
-
- add_option (_("Sync"), spf);
-
- ComboOption<SmpteFormat>* smf = new ComboOption<SmpteFormat> (
- "smpte-format",
- _("Timecode frames-per-second"),
- mem_fun (*_session_config, &SessionConfiguration::get_smpte_format),
- mem_fun (*_session_config, &SessionConfiguration::set_smpte_format)
- );
-
- smf->add (smpte_23976, _("23.976"));
- smf->add (smpte_24, _("24"));
- smf->add (smpte_24976, _("24.976"));
- smf->add (smpte_25, _("25"));
- smf->add (smpte_2997, _("29.97"));
- smf->add (smpte_2997drop, _("29.97 drop"));
- smf->add (smpte_30, _("30"));
- smf->add (smpte_30drop, _("30 drop"));
- smf->add (smpte_5994, _("59.94"));
- smf->add (smpte_60, _("60"));
-
- add_option (_("Sync"), smf);
-
- 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)
- ));
-
- ComboOption<float>* vpu = new ComboOption<float> (
- "video-pullup",
- _("Pull-up / pull-down"),
- mem_fun (*_session_config, &SessionConfiguration::get_video_pullup),
- mem_fun (*_session_config, &SessionConfiguration::set_video_pullup)
- );
-
- vpu->add (4.1667 + 0.1, _("4.1667 + 0.1%"));
- vpu->add (4.1667, _("4.1667"));
- vpu->add (4.1667 - 0.1, _("4.1667 - 0.1%"));
- vpu->add (0.1, _("0.1"));
- vpu->add (0, _("none"));
- vpu->add (-0.1, _("-0.1"));
- vpu->add (-4.1667 + 0.1, _("-4.1667 + 0.1%"));
- vpu->add (-4.1667, _("-4.1667"));
- vpu->add (-4.1667 - 0.1, _("-4.1667 - 0.1%"));
-
- add_option (_("Sync"), vpu);
-
/* MISC */
add_option (_("Misc"), new OptionEditorHeading (_("Audio file format")));
ComboOption<LayerModel>* lm = new ComboOption<LayerModel> (
"layer-model",
- _("Layering model"),
+ _("Layering model in overlaid mode"),
mem_fun (*_session_config, &SessionConfiguration::get_layer_model),
mem_fun (*_session_config, &SessionConfiguration::set_layer_model)
);
lm->add (AddHigher, _("most recently added is higher"));
add_option (_("Misc"), lm);
-
+
add_option (_("Misc"), new OptionEditorHeading (_("Broadcast WAVE metadata")));
-
+
add_option (_("Misc"), new EntryOption (
"bwf-country-code",
_("Country code"),
mem_fun (*_session_config, &SessionConfiguration::set_bwf_organization_code)
));
- add_option (_("Connections"), new ConnectionOptions (s));
+ add_option (_("Connections"), new ConnectionOptions (this, s));
+}
+
+void
+SessionOptionEditor::populate_sync_options (Session* s, Option* opt)
+{
+ ComboOption<SyncSource>* sync_opt = dynamic_cast<ComboOption<SyncSource>* > (opt);
+
+ vector<SyncSource> sync_opts = s->get_available_sync_options ();
+
+ sync_opt->clear ();
+
+ for (vector<SyncSource>::iterator i = sync_opts.begin(); i != sync_opts.end(); ++i) {
+ sync_opt->add (*i, sync_source_to_string (*i));
+ }
+}
+
+void
+SessionOptionEditor::follow_sync_state (std::string p, Session* s, Option* opt)
+{
+ ComboOption<SyncSource>* sync_opt = dynamic_cast<ComboOption<SyncSource>* > (opt);
+ if (p == "external-sync") {
+ if (s->config.get_external_sync()) {
+ sync_opt->set_sensitive (false);
+ } else {
+ sync_opt->set_sensitive (true);
+ }
+ }
}