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 {
105 std::string disassociation_verb () const {
106 return _("Disassociate");
110 /* see PortMatrix: signal flow from 0 to 1 (out to in) */
116 boost::shared_ptr<PortGroup> _port_group;
121 class ConnectionOptions : public OptionEditorBox
124 ConnectionOptions (ARDOUR::Session* s)
127 _box->pack_start (_port_matrix);
130 void parameter_changed (string const & p)
135 void set_state_from_config ()
141 OptionsPortMatrix _port_matrix;
144 SessionOptionEditor::SessionOptionEditor (Session* s)
145 : OptionEditor (&(s->config), _("Session Preferences")),
146 _session_config (&(s->config))
150 ComboOption<CrossfadeModel>* cfm = new ComboOption<CrossfadeModel> (
152 _("Crossfades are created"),
153 mem_fun (*_session_config, &SessionConfiguration::get_xfade_model),
154 mem_fun (*_session_config, &SessionConfiguration::set_xfade_model)
157 cfm->add (FullCrossfade, _("to span entire overlap"));
158 cfm->add (ShortCrossfade, _("short"));
160 add_option (_("Fades"), cfm);
162 add_option (_("Fades"), new SpinOption<float> (
163 _("short-xfade-seconds"),
164 _("Short crossfade length"),
165 mem_fun (*_session_config, &SessionConfiguration::get_short_xfade_seconds),
166 mem_fun (*_session_config, &SessionConfiguration::set_short_xfade_seconds),
171 add_option (_("Fades"), new SpinOption<float> (
172 _("destructive-xfade-seconds"),
173 _("Destructive crossfade length"),
174 mem_fun (*_session_config, &SessionConfiguration::get_destructive_xfade_msecs),
175 mem_fun (*_session_config, &SessionConfiguration::set_destructive_xfade_msecs),
180 add_option (_("Fades"), new BoolOption (
182 _("Create crossfades automatically"),
183 mem_fun (*_session_config, &SessionConfiguration::get_auto_xfade),
184 mem_fun (*_session_config, &SessionConfiguration::set_auto_xfade)
187 add_option (_("Fades"), new BoolOption (
189 _("Crossfades active"),
190 mem_fun (*_session_config, &SessionConfiguration::get_xfades_active),
191 mem_fun (*_session_config, &SessionConfiguration::set_xfades_active)
194 add_option (_("Fades"), new BoolOption (
196 _("Crossfades visible"),
197 mem_fun (*_session_config, &SessionConfiguration::get_xfades_visible),
198 mem_fun (*_session_config, &SessionConfiguration::set_xfades_visible)
201 add_option (_("Fades"), new BoolOption (
203 _("Region fades active"),
204 mem_fun (*_session_config, &SessionConfiguration::get_use_region_fades),
205 mem_fun (*_session_config, &SessionConfiguration::set_use_region_fades)
208 add_option (_("Fades"), new BoolOption (
210 _("Region fades visible"),
211 mem_fun (*_session_config, &SessionConfiguration::get_show_region_fades),
212 mem_fun (*_session_config, &SessionConfiguration::set_show_region_fades)
217 ComboOption<uint32_t>* spf = new ComboOption<uint32_t> (
218 "subframes-per-frame",
219 _("Subframes per frame"),
220 mem_fun (*_session_config, &SessionConfiguration::get_subframes_per_frame),
221 mem_fun (*_session_config, &SessionConfiguration::set_subframes_per_frame)
224 spf->add (80, _("80"));
225 spf->add (100, _("100"));
227 add_option (_("Sync"), spf);
229 ComboOption<SmpteFormat>* smf = new ComboOption<SmpteFormat> (
231 _("Timecode frames-per-second"),
232 mem_fun (*_session_config, &SessionConfiguration::get_smpte_format),
233 mem_fun (*_session_config, &SessionConfiguration::set_smpte_format)
236 smf->add (smpte_23976, _("23.976"));
237 smf->add (smpte_24, _("24"));
238 smf->add (smpte_24976, _("24.976"));
239 smf->add (smpte_25, _("25"));
240 smf->add (smpte_2997, _("29.97"));
241 smf->add (smpte_2997drop, _("29.97 drop"));
242 smf->add (smpte_30, _("30"));
243 smf->add (smpte_30drop, _("30 drop"));
244 smf->add (smpte_5994, _("59.94"));
245 smf->add (smpte_60, _("60"));
247 add_option (_("Sync"), smf);
249 add_option (_("Sync"), new BoolOption (
250 "timecode-source-is-synced",
251 _("Timecode source is synced"),
252 mem_fun (*_session_config, &SessionConfiguration::get_timecode_source_is_synced),
253 mem_fun (*_session_config, &SessionConfiguration::set_timecode_source_is_synced)
256 ComboOption<float>* vpu = new ComboOption<float> (
258 _("Pull-up / pull-down"),
259 mem_fun (*_session_config, &SessionConfiguration::get_video_pullup),
260 mem_fun (*_session_config, &SessionConfiguration::set_video_pullup)
263 vpu->add (4.1667 + 0.1, _("4.1667 + 0.1%"));
264 vpu->add (4.1667, _("4.1667"));
265 vpu->add (4.1667 - 0.1, _("4.1667 - 0.1%"));
266 vpu->add (0.1, _("0.1"));
267 vpu->add (0, _("none"));
268 vpu->add (-0.1, _("-0.1"));
269 vpu->add (-4.1667 + 0.1, _("-4.1667 + 0.1%"));
270 vpu->add (-4.1667, _("-4.1667"));
271 vpu->add (-4.1667 - 0.1, _("-4.1667 - 0.1%"));
273 add_option (_("Sync"), vpu);
277 add_option (_("Misc"), new OptionEditorHeading (_("Audio file format")));
279 ComboOption<SampleFormat>* sf = new ComboOption<SampleFormat> (
280 "native-file-data-format",
282 mem_fun (*_session_config, &SessionConfiguration::get_native_file_data_format),
283 mem_fun (*_session_config, &SessionConfiguration::set_native_file_data_format)
286 sf->add (FormatFloat, _("32-bit floating point"));
287 sf->add (FormatInt24, _("24-bit integer"));
288 sf->add (FormatInt16, _("16-bit integer"));
290 add_option (_("Misc"), sf);
292 ComboOption<HeaderFormat>* hf = new ComboOption<HeaderFormat> (
293 "native-file-header-format",
295 mem_fun (*_session_config, &SessionConfiguration::get_native_file_header_format),
296 mem_fun (*_session_config, &SessionConfiguration::set_native_file_header_format)
299 hf->add (BWF, _("Broadcast WAVE"));
300 hf->add (WAVE, _("WAVE"));
301 hf->add (WAVE64, _("WAVE-64"));
302 hf->add (CAF, _("CAF"));
304 add_option (_("Misc"), hf);
306 add_option (_("Misc"), new OptionEditorHeading (_("Layering")));
308 ComboOption<LayerModel>* lm = new ComboOption<LayerModel> (
311 mem_fun (*_session_config, &SessionConfiguration::get_layer_model),
312 mem_fun (*_session_config, &SessionConfiguration::set_layer_model)
315 lm->add (LaterHigher, _("later is higher"));
316 lm->add (MoveAddHigher, _("most recently moved or added is higher"));
317 lm->add (AddHigher, _("most recently added is higher"));
319 add_option (_("Misc"), lm);
321 add_option (_("Misc"), new OptionEditorHeading (_("Broadcast WAVE metadata")));
323 add_option (_("Misc"), new EntryOption (
326 mem_fun (*_session_config, &SessionConfiguration::get_bwf_country_code),
327 mem_fun (*_session_config, &SessionConfiguration::set_bwf_country_code)
330 add_option (_("Misc"), new EntryOption (
331 "bwf-organization-code",
332 _("Organization code"),
333 mem_fun (*_session_config, &SessionConfiguration::get_bwf_organization_code),
334 mem_fun (*_session_config, &SessionConfiguration::set_bwf_organization_code)
337 add_option (_("Connections"), new ConnectionOptions (s));