1 #include "ardour/session.h"
3 #include "ardour/auditioner.h"
4 #include "ardour/audioengine.h"
5 #include "ardour/port.h"
6 #include "session_option_editor.h"
7 #include "port_matrix.h"
12 using namespace ARDOUR;
14 class OptionsPortMatrix : public PortMatrix
17 OptionsPortMatrix (ARDOUR::Session& session)
18 : PortMatrix (session, DataType::AUDIO)
20 _port_group.reset (new PortGroup (""));
21 _ports[OURS].add_group (_port_group);
26 void setup_ports (int dim)
28 cerr << _session.the_auditioner()->output()->n_ports() << "\n";
31 _port_group->clear ();
32 _port_group->add_bundle (_session.click_io()->bundle());
33 _port_group->add_bundle (_session.the_auditioner()->output()->bundle());
35 _ports[OTHER].gather (_session, true);
39 void set_state (ARDOUR::BundleChannel c[2], bool s)
41 Bundle::PortList const & our_ports = c[OURS].bundle->channel_ports (c[OURS].channel);
42 Bundle::PortList const & other_ports = c[OTHER].bundle->channel_ports (c[OTHER].channel);
44 if (c[OURS].bundle == _session.click_io()->bundle()) {
46 for (ARDOUR::Bundle::PortList::const_iterator i = our_ports.begin(); i != our_ports.end(); ++i) {
47 for (ARDOUR::Bundle::PortList::const_iterator j = other_ports.begin(); j != other_ports.end(); ++j) {
49 Port* f = _session.engine().get_port_by_name (*i);
53 _session.click_io()->connect (f, *j, 0);
55 _session.click_io()->disconnect (f, *j, 0);
62 PortMatrixNode::State get_state (ARDOUR::BundleChannel c[2]) const
64 Bundle::PortList const & our_ports = c[OURS].bundle->channel_ports (c[OURS].channel);
65 Bundle::PortList const & other_ports = c[OTHER].bundle->channel_ports (c[OTHER].channel);
67 if (c[OURS].bundle == _session.click_io()->bundle()) {
69 for (ARDOUR::Bundle::PortList::const_iterator i = our_ports.begin(); i != our_ports.end(); ++i) {
70 for (ARDOUR::Bundle::PortList::const_iterator j = other_ports.begin(); j != other_ports.end(); ++j) {
71 Port* f = _session.engine().get_port_by_name (*i);
74 if (f->connected_to (*j)) {
75 return PortMatrixNode::ASSOCIATED;
77 return PortMatrixNode::NOT_ASSOCIATED;
88 return PortMatrixNode::NOT_ASSOCIATED;
91 bool list_is_global (int dim) const
93 return (dim == OTHER);
96 void add_channel (boost::shared_ptr<ARDOUR::Bundle>) {}
97 bool can_remove_channels (int) const {
100 void remove_channel (ARDOUR::BundleChannel) {}
101 bool can_rename_channels (int) const {
106 /* see PortMatrix: signal flow from 0 to 1 (out to in) */
112 boost::shared_ptr<PortGroup> _port_group;
117 class ConnectionOptions : public OptionEditorBox
120 ConnectionOptions (ARDOUR::Session* s)
123 _box->pack_start (_port_matrix);
126 void parameter_changed (string const & p)
131 void set_state_from_config ()
137 OptionsPortMatrix _port_matrix;
140 SessionOptionEditor::SessionOptionEditor (Session* s)
141 : OptionEditor (&(s->config), _("Session Preferences")),
142 _session_config (&(s->config))
146 ComboOption<CrossfadeModel>* cfm = new ComboOption<CrossfadeModel> (
148 _("Crossfades are created"),
149 mem_fun (*_session_config, &SessionConfiguration::get_xfade_model),
150 mem_fun (*_session_config, &SessionConfiguration::set_xfade_model)
153 cfm->add (FullCrossfade, _("to span entire overlap"));
154 cfm->add (ShortCrossfade, _("short"));
156 add_option (_("Fades"), cfm);
158 add_option (_("Fades"), new SpinOption<float> (
159 _("short-xfade-seconds"),
160 _("Short crossfade length"),
161 mem_fun (*_session_config, &SessionConfiguration::get_short_xfade_seconds),
162 mem_fun (*_session_config, &SessionConfiguration::set_short_xfade_seconds),
167 add_option (_("Fades"), new SpinOption<float> (
168 _("destructive-xfade-seconds"),
169 _("Destructive crossfade length"),
170 mem_fun (*_session_config, &SessionConfiguration::get_destructive_xfade_msecs),
171 mem_fun (*_session_config, &SessionConfiguration::set_destructive_xfade_msecs),
176 add_option (_("Fades"), new BoolOption (
178 _("Create crossfades automatically"),
179 mem_fun (*_session_config, &SessionConfiguration::get_auto_xfade),
180 mem_fun (*_session_config, &SessionConfiguration::set_auto_xfade)
183 add_option (_("Fades"), new BoolOption (
185 _("Crossfades active"),
186 mem_fun (*_session_config, &SessionConfiguration::get_xfades_active),
187 mem_fun (*_session_config, &SessionConfiguration::set_xfades_active)
190 add_option (_("Fades"), new BoolOption (
192 _("Crossfades visible"),
193 mem_fun (*_session_config, &SessionConfiguration::get_xfades_visible),
194 mem_fun (*_session_config, &SessionConfiguration::set_xfades_visible)
197 add_option (_("Fades"), new BoolOption (
199 _("Region fades active"),
200 mem_fun (*_session_config, &SessionConfiguration::get_use_region_fades),
201 mem_fun (*_session_config, &SessionConfiguration::set_use_region_fades)
204 add_option (_("Fades"), new BoolOption (
206 _("Region fades visible"),
207 mem_fun (*_session_config, &SessionConfiguration::get_show_region_fades),
208 mem_fun (*_session_config, &SessionConfiguration::set_show_region_fades)
213 ComboOption<uint32_t>* spf = new ComboOption<uint32_t> (
214 "subframes-per-frame",
215 _("Subframes per frame"),
216 mem_fun (*_session_config, &SessionConfiguration::get_subframes_per_frame),
217 mem_fun (*_session_config, &SessionConfiguration::set_subframes_per_frame)
220 spf->add (80, _("80"));
221 spf->add (100, _("100"));
223 add_option (_("Sync"), spf);
225 ComboOption<SmpteFormat>* smf = new ComboOption<SmpteFormat> (
227 _("Timecode frames-per-second"),
228 mem_fun (*_session_config, &SessionConfiguration::get_smpte_format),
229 mem_fun (*_session_config, &SessionConfiguration::set_smpte_format)
232 smf->add (smpte_23976, _("23.976"));
233 smf->add (smpte_24, _("24"));
234 smf->add (smpte_24976, _("24.976"));
235 smf->add (smpte_25, _("25"));
236 smf->add (smpte_2997, _("29.97"));
237 smf->add (smpte_2997drop, _("29.97 drop"));
238 smf->add (smpte_30, _("30"));
239 smf->add (smpte_30drop, _("30 drop"));
240 smf->add (smpte_5994, _("59.94"));
241 smf->add (smpte_60, _("60"));
243 add_option (_("Sync"), smf);
245 add_option (_("Sync"), new BoolOption (
246 "timecode-source-is-synced",
247 _("Timecode source is synced"),
248 mem_fun (*_session_config, &SessionConfiguration::get_timecode_source_is_synced),
249 mem_fun (*_session_config, &SessionConfiguration::set_timecode_source_is_synced)
252 ComboOption<float>* vpu = new ComboOption<float> (
254 _("Pull-up / pull-down"),
255 mem_fun (*_session_config, &SessionConfiguration::get_video_pullup),
256 mem_fun (*_session_config, &SessionConfiguration::set_video_pullup)
259 vpu->add (4.1667 + 0.1, _("4.1667 + 0.1%"));
260 vpu->add (4.1667, _("4.1667"));
261 vpu->add (4.1667 - 0.1, _("4.1667 - 0.1%"));
262 vpu->add (0.1, _("0.1"));
263 vpu->add (0, _("none"));
264 vpu->add (-0.1, _("-0.1"));
265 vpu->add (-4.1667 + 0.1, _("-4.1667 + 0.1%"));
266 vpu->add (-4.1667, _("-4.1667"));
267 vpu->add (-4.1667 - 0.1, _("-4.1667 - 0.1%"));
269 add_option (_("Sync"), vpu);
273 add_option (_("Misc"), new OptionEditorHeading (_("Audio file format")));
275 ComboOption<SampleFormat>* sf = new ComboOption<SampleFormat> (
276 "native-file-data-format",
278 mem_fun (*_session_config, &SessionConfiguration::get_native_file_data_format),
279 mem_fun (*_session_config, &SessionConfiguration::set_native_file_data_format)
282 sf->add (FormatFloat, _("32-bit floating point"));
283 sf->add (FormatInt24, _("24-bit integer"));
284 sf->add (FormatInt16, _("16-bit integer"));
286 add_option (_("Misc"), sf);
288 ComboOption<HeaderFormat>* hf = new ComboOption<HeaderFormat> (
289 "native-file-header-format",
291 mem_fun (*_session_config, &SessionConfiguration::get_native_file_header_format),
292 mem_fun (*_session_config, &SessionConfiguration::set_native_file_header_format)
295 hf->add (BWF, _("Broadcast WAVE"));
296 hf->add (WAVE, _("WAVE"));
297 hf->add (WAVE64, _("WAVE-64"));
298 hf->add (CAF, _("CAF"));
300 add_option (_("Misc"), hf);
302 add_option (_("Misc"), new OptionEditorHeading (_("Layering")));
304 ComboOption<LayerModel>* lm = new ComboOption<LayerModel> (
307 mem_fun (*_session_config, &SessionConfiguration::get_layer_model),
308 mem_fun (*_session_config, &SessionConfiguration::set_layer_model)
311 lm->add (LaterHigher, _("later is higher"));
312 lm->add (MoveAddHigher, _("most recently moved or added is higher"));
313 lm->add (AddHigher, _("most recently added is higher"));
315 add_option (_("Misc"), lm);
317 add_option (_("Misc"), new OptionEditorHeading (_("Broadcast WAVE metadata")));
319 add_option (_("Misc"), new EntryOption (
322 mem_fun (*_session_config, &SessionConfiguration::get_bwf_country_code),
323 mem_fun (*_session_config, &SessionConfiguration::set_bwf_country_code)
326 add_option (_("Misc"), new EntryOption (
327 "bwf-organization-code",
328 _("Organization code"),
329 mem_fun (*_session_config, &SessionConfiguration::get_bwf_organization_code),
330 mem_fun (*_session_config, &SessionConfiguration::set_bwf_organization_code)
333 add_option (_("Connections"), new ConnectionOptions (s));