configurable midi audition synth
[ardour.git] / gtk2_ardour / rc_option_editor.cc
index 238462c3cc790ea4a9d4836f47519370e3adeece..fc6978275772219a44170f25def153a96cf6733c 100644 (file)
 #include "pbd/fpu.h"
 #include "pbd/cpus.h"
 
-#include "midi++/manager.h"
-
 #include "ardour/audioengine.h"
 #include "ardour/dB.h"
 #include "ardour/rc_configuration.h"
 #include "ardour/control_protocol_manager.h"
+#include "ardour/plugin_manager.h"
 #include "control_protocol/control_protocol.h"
 
 #include "ardour_window.h"
@@ -650,6 +649,7 @@ class ControlSurfacesOptions : public OptionEditorBox
 public:
        ControlSurfacesOptions (Gtk::Window& parent)
                : _parent (parent)
+               , _ignore_view_change (0)
        {
                _store = ListStore::create (_model);
                _view.set_model (_store);
@@ -702,9 +702,14 @@ private:
         void protocol_status_changed (ControlProtocolInfo* cpi) {
                /* find the row */
                TreeModel::Children rows = _store->children();
+               
                for (TreeModel::Children::iterator x = rows.begin(); x != rows.end(); ++x) {
+                       string n = ((*x)[_model.name]);
+
                        if ((*x)[_model.protocol_info] == cpi) {
+                               _ignore_view_change++;
                                (*x)[_model.enabled] = (cpi->protocol || cpi->requested);
+                               _ignore_view_change--;
                                break;
                        }
                }
@@ -714,6 +719,10 @@ private:
        {
                TreeModel::Row r = *i;
 
+               if (_ignore_view_change) {
+                       return;
+               }
+
                ControlProtocolInfo* cpi = r[_model.protocol_info];
                if (!cpi) {
                        return;
@@ -722,22 +731,23 @@ private:
                bool const was_enabled = (cpi->protocol != 0);
                bool const is_enabled = r[_model.enabled];
 
+
                if (was_enabled != is_enabled) {
+
                        if (!was_enabled) {
-                               ControlProtocolManager::instance().instantiate (*cpi);
+                               ControlProtocolManager::instance().activate (*cpi);
                        } else {
                                Gtk::Window* win = r[_model.editor];
                                if (win) {
                                        win->hide ();
                                }
 
-                               ControlProtocolManager::instance().teardown (*cpi);
+                               ControlProtocolManager::instance().deactivate (*cpi);
                                        
                                if (win) {
                                        delete win;
+                                       r[_model.editor] = 0;
                                }
-                               r[_model.editor] = 0;
-                               cpi->requested = false;
                        }
                }
 
@@ -807,6 +817,7 @@ private:
        TreeView _view;
         Gtk::Window& _parent;
         PBD::ScopedConnection protocol_status_connection;
+        uint32_t _ignore_view_change;
 };
 
 class VideoTimelineOptions : public OptionEditorBox
@@ -831,7 +842,7 @@ public:
                t->attach (*l, 0, 1, 1, 2, FILL);
                t->attach (_video_server_url_entry, 1, 2, 1, 2, FILL);
                Gtkmm2ext::UI::instance()->set_tip (_video_server_url_entry,
-                                           _("Base URL of the video-server including http prefix. This is usually 'http://hostname.example.org:1554/' and defaults to 'http://localhost:1554/' when the video-server is runing locally"));
+                                           _("Base URL of the video-server including http prefix. This is usually 'http://hostname.example.org:1554/' and defaults to 'http://localhost:1554/' when the video-server is running locally"));
 
                l = manage (new Label (_("Video Folder:")));
                l->set_alignment (0, 0.5);
@@ -1148,7 +1159,7 @@ RCOptionEditor::RCOptionEditor ()
 
        tsf = new BoolOption (
                     "seamless-loop",
-                    _("Do seamless looping (not possible when slaved to MTC, JACK etc)"),
+                    _("Do seamless looping (not possible when slaved to MTC, LTC etc)"),
                     sigc::mem_fun (*_rc_config, &RCConfiguration::get_seamless_loop),
                     sigc::mem_fun (*_rc_config, &RCConfiguration::set_seamless_loop)
                     );
@@ -1315,6 +1326,14 @@ RCOptionEditor::RCOptionEditor ()
                     sigc::mem_fun (*_rc_config, &RCConfiguration::set_show_track_meters)
                     ));
 
+       add_option (_("Editor"),
+            new BoolOption (
+                    "show-editor-meter",
+                    _("Display master-meter in the toolbar"),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_show_editor_meter),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_show_editor_meter)
+                    ));
+
        bco = new BoolComboOption (
                     "use-overlap-equivalency",
                     _("Regions in active edit groups are edited together"),
@@ -1408,14 +1427,6 @@ RCOptionEditor::RCOptionEditor ()
                            sigc::mem_fun (*_rc_config, &RCConfiguration::set_update_editor_during_summary_drag)
                            ));
 
-       add_option (_("Editor"),
-            new BoolOption (
-                    "sync-all-route-ordering",
-                    _("Synchronise editor and mixer track order"),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_sync_all_route_ordering),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_sync_all_route_ordering)
-                    ));
-
        add_option (_("Editor"),
             new BoolOption (
                     "link-editor-and-mixer-selection",
@@ -1458,12 +1469,10 @@ RCOptionEditor::RCOptionEditor ()
                sigc::mem_fun (*_rc_config, &RCConfiguration::set_monitoring_model)
                );
 
-#ifndef __APPLE__
-        /* no JACK monitoring on CoreAudio */
-        if (AudioEngine::instance()->can_request_hardware_monitoring()) {
-                mm->add (HardwareMonitoring, _("JACK"));
+        if (AudioEngine::instance()->port_engine().can_monitor_input()) {
+                mm->add (HardwareMonitoring, _("via Audio Driver"));
         }
-#endif
+
        mm->add (SoftwareMonitoring, _("ardour"));
        mm->add (ExternalMonitoring, _("audio hardware"));
 
@@ -1583,6 +1592,8 @@ RCOptionEditor::RCOptionEditor ()
 
        /* SOLO AND MUTE */
 
+       add_option (_("Solo / mute"), new OptionEditorHeading (_("Solo")));
+
        add_option (_("Solo / mute"),
             new FaderOption (
                     "solo-mute-gain",
@@ -1696,6 +1707,16 @@ RCOptionEditor::RCOptionEditor ()
                     sigc::mem_fun (*_rc_config, &RCConfiguration::set_mute_affects_main_outs)
                     ));
 
+       add_option (_("Solo / mute"), new OptionEditorHeading (_("Send Routing")));
+
+       add_option (_("Solo / mute"),
+            new BoolOption (
+                    "link-send-and-route-panner",
+                    _("Link panners of Aux and External Sends with main panner by default"),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_link_send_and_route_panner),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_link_send_and_route_panner)
+                    ));
+
        add_option (_("MIDI"),
                    new BoolOption (
                            "send-midi-clock",
@@ -1796,6 +1817,31 @@ RCOptionEditor::RCOptionEditor ()
                     sigc::mem_fun (*_rc_config, &RCConfiguration::set_sound_midi_notes)
                     ));
 
+       add_option (_("MIDI"), new OptionEditorHeading (_("Midi Audition")));
+
+       ComboOption<std::string>* audition_synth = new ComboOption<std::string> (
+               "midi-audition-synth-uri",
+               _("Midi Audition Synth (LV2)"),
+               sigc::mem_fun (*_rc_config, &RCConfiguration::get_midi_audition_synth_uri),
+               sigc::mem_fun (*_rc_config, &RCConfiguration::set_midi_audition_synth_uri)
+               );
+
+       audition_synth->add(X_(""), _("None"));
+       PluginInfoList all_plugs;
+       PluginManager& manager (PluginManager::instance());
+#ifdef LV2_SUPPORT
+       all_plugs.insert (all_plugs.end(), manager.lv2_plugin_info().begin(), manager.lv2_plugin_info().end());
+
+       for (PluginInfoList::const_iterator i = all_plugs.begin(); i != all_plugs.end(); ++i) {
+               if (manager.get_status (*i) == PluginManager::Hidden) continue;
+               if (!(*i)->is_instrument()) continue;
+               if ((*i)->type != ARDOUR::LV2) continue;
+               audition_synth->add((*i)->unique_id, (*i)->name);
+       }
+#endif
+
+       add_option (_("MIDI"), audition_synth);
+
        /* USER INTERACTION */
 
        if (getenv ("ARDOUR_BUNDLED")) {
@@ -1826,7 +1872,6 @@ RCOptionEditor::RCOptionEditor ()
 
        rm->add (UserOrdered, _("assigned by user"));
        rm->add (MixerOrdered, _("follows order of mixer"));
-       rm->add (EditorOrdered, _("follows order of editor"));
 
        add_option (_("Control Surfaces"), rm);
 
@@ -1895,7 +1940,7 @@ RCOptionEditor::RCOptionEditor ()
 
        ComboOption<float>* mht = new ComboOption<float> (
                "meter-hold",
-               _("Meter hold time"),
+               _("Peak hold time"),
                sigc::mem_fun (*_rc_config, &RCConfiguration::get_meter_hold),
                sigc::mem_fun (*_rc_config, &RCConfiguration::set_meter_hold)
                );
@@ -1909,7 +1954,7 @@ RCOptionEditor::RCOptionEditor ()
 
        ComboOption<float>* mfo = new ComboOption<float> (
                "meter-falloff",
-               _("Meter fall-off"),
+               _("DPM fall-off"),
                sigc::mem_fun (*_rc_config, &RCConfiguration::get_meter_falloff),
                sigc::mem_fun (*_rc_config, &RCConfiguration::set_meter_falloff)
                );
@@ -1928,22 +1973,53 @@ RCOptionEditor::RCOptionEditor ()
 
        ComboOption<MeterLineUp>* mlu = new ComboOption<MeterLineUp> (
                "meter-line-up-level",
-               _("Meter Line Up Level"),
+               _("Meter line-up level; 0dBu"),
                sigc::mem_fun (*_rc_config, &RCConfiguration::get_meter_line_up_level),
                sigc::mem_fun (*_rc_config, &RCConfiguration::set_meter_line_up_level)
                );
 
-       mlu->add (MeteringLineUp24, _("-24dB"));
-       mlu->add (MeteringLineUp20, _("-20dB (SMPTE)"));
-       mlu->add (MeteringLineUp18, _("-18dB (EBU)"));
-       mlu->add (MeteringLineUp15, _("-15dB"));
+       mlu->add (MeteringLineUp24, _("-24dBFS (SMPTE US: 4dBu = -20dBFS)"));
+       mlu->add (MeteringLineUp20, _("-20dBFS (SMPTE RP.0155)"));
+       mlu->add (MeteringLineUp18, _("-18dBFS (EBU, BBC)"));
+       mlu->add (MeteringLineUp15, _("-15dBFS (DIN)"));
 
-       Gtkmm2ext::UI::instance()->set_tip (mlu->tip_widget(), _("Configure meter-ticks and color-knee point."));
+       Gtkmm2ext::UI::instance()->set_tip (mlu->tip_widget(), _("Configure meter-marks and color-knee point for dBFS scale DPM, set reference level for IEC1/Nordic, IEC2 PPM and VU meter."));
 
        add_option (S_("Preferences|GUI"), mlu);
 
-       Gtk::Adjustment *mpk = manage (new Gtk::Adjustment(-.1, -10, 0, .01, .1));
-       HSliderOption *mpks = new HSliderOption("meter-peak", _("Meter peak threshold [dBFS]"),
+       ComboOption<MeterLineUp>* mld = new ComboOption<MeterLineUp> (
+               "meter-line-up-din",
+               _("IEC1/DIN Meter line-up level; 0dBu"),
+               sigc::mem_fun (*_rc_config, &RCConfiguration::get_meter_line_up_din),
+               sigc::mem_fun (*_rc_config, &RCConfiguration::set_meter_line_up_din)
+               );
+
+       mld->add (MeteringLineUp24, _("-24dBFS (SMPTE US: 4dBu = -20dBFS)"));
+       mld->add (MeteringLineUp20, _("-20dBFS (SMPTE RP.0155)"));
+       mld->add (MeteringLineUp18, _("-18dBFS (EBU, BBC)"));
+       mld->add (MeteringLineUp15, _("-15dBFS (DIN)"));
+
+       Gtkmm2ext::UI::instance()->set_tip (mld->tip_widget(), _("Reference level for IEC1/DIN meter."));
+
+       add_option (S_("Preferences|GUI"), mld);
+
+       ComboOption<VUMeterStandard>* mvu = new ComboOption<VUMeterStandard> (
+               "meter-vu-standard",
+               _("VU Meter standard"),
+               sigc::mem_fun (*_rc_config, &RCConfiguration::get_meter_vu_standard),
+               sigc::mem_fun (*_rc_config, &RCConfiguration::set_meter_vu_standard)
+               );
+
+       mvu->add (MeteringVUfrench,   _("0VU = -2dBu (France)"));
+       mvu->add (MeteringVUamerican, _("0VU = 0dBu (North America, Australia)"));
+       mvu->add (MeteringVUstandard, _("0VU = +4dBu (standard)"));
+       mvu->add (MeteringVUeight,    _("0VU = +8dBu"));
+
+       add_option (S_("Preferences|GUI"), mvu);
+
+       Gtk::Adjustment *mpk = manage (new Gtk::Adjustment(0, -10, 0, .1, .1));
+       HSliderOption *mpks = new HSliderOption("meter-peak",
+                       _("Peak threshold [dBFS]"),
                        mpk,
                        sigc::mem_fun (*_rc_config, &RCConfiguration::get_meter_peak),
                        sigc::mem_fun (*_rc_config, &RCConfiguration::set_meter_peak)
@@ -1954,6 +2030,15 @@ RCOptionEditor::RCOptionEditor ()
                 _("Specify the audio signal level in dbFS at and above which the meter-peak indicator will flash red."));
 
        add_option (S_("Preferences|GUI"), mpks);
+
+       add_option (S_("Preferences|GUI"),
+            new BoolOption (
+                    "meter-style-led",
+                    _("LED meter style"),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_meter_style_led),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_meter_style_led)
+                    ));
+
 }
 
 void