Merge windows+cc branch into cairocanvas branch. Not finished, need to now merge...
[ardour.git] / gtk2_ardour / rc_option_editor.cc
index 5edac5866d2666fa5f8a11bab9db15a84a8c408d..7c5d9a776370c6c74bda3c95c18836ca37611968 100644 (file)
@@ -37,6 +37,8 @@
 #include "ardour/control_protocol_manager.h"
 #include "control_protocol/control_protocol.h"
 
+#include "canvas/wave_view.h"
+
 #include "ardour_window.h"
 #include "ardour_dialog.h"
 #include "gui_thread.h"
@@ -569,6 +571,56 @@ private:
        HScale _dpi_slider;
 };
 
+class ClipLevelOptions : public OptionEditorBox
+{
+public:
+       ClipLevelOptions (RCConfiguration* c) 
+               : _rc_config (c)
+               , _clip_level_adjustment (0, -128.0, 2.0, 0.1, 1.0) /* units of dB */
+               , _clip_level_slider (_clip_level_adjustment)
+       {
+               _clip_level_adjustment.set_value (_rc_config->get_waveform_clip_level ());
+
+               Label* l = manage (new Label (_("Waveform Clip Level (dBFS):")));
+               l->set_name ("OptionsLabel");
+
+               _clip_level_slider.set_update_policy (UPDATE_DISCONTINUOUS);
+               HBox* h = manage (new HBox);
+               h->set_spacing (4);
+               h->pack_start (*l, false, false);
+               h->pack_start (_clip_level_slider, true, true);
+
+               _box->pack_start (*h, false, false);
+
+               _clip_level_adjustment.signal_value_changed().connect (sigc::mem_fun (*this, &ClipLevelOptions::clip_level_changed));
+       }
+
+       void parameter_changed (string const & p)
+       {
+               if (p == "waveform-clip-level") {
+                       _clip_level_adjustment.set_value (_rc_config->get_waveform_clip_level());
+               }
+       }
+
+       void set_state_from_config ()
+       {
+               parameter_changed ("waveform-clip-level");
+       }
+
+private:
+
+       void clip_level_changed ()
+       {
+               _rc_config->set_waveform_clip_level (_clip_level_adjustment.get_value());
+               /* XXX: should be triggered from the parameter changed signal */
+               ArdourCanvas::WaveView::set_clip_level (_clip_level_adjustment.get_value());
+       }
+
+       RCConfiguration* _rc_config;
+       Adjustment _clip_level_adjustment;
+       HScale _clip_level_slider;
+};
+
 class BufferingOptions : public OptionEditorBox
 {
 public:
@@ -648,6 +700,7 @@ class ControlSurfacesOptions : public OptionEditorBox
 public:
        ControlSurfacesOptions (Gtk::Window& parent)
                : _parent (parent)
+               , _ignore_view_change (0)
        {
                _store = ListStore::create (_model);
                _view.set_model (_store);
@@ -700,9 +753,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;
                        }
                }
@@ -712,6 +770,10 @@ private:
        {
                TreeModel::Row r = *i;
 
+               if (_ignore_view_change) {
+                       return;
+               }
+
                ControlProtocolInfo* cpi = r[_model.protocol_info];
                if (!cpi) {
                        return;
@@ -720,22 +782,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;
                        }
                }
 
@@ -805,6 +868,7 @@ private:
        TreeView _view;
         Gtk::Window& _parent;
         PBD::ScopedConnection protocol_status_connection;
+        uint32_t _ignore_view_change;
 };
 
 class VideoTimelineOptions : public OptionEditorBox
@@ -1382,6 +1446,8 @@ RCOptionEditor::RCOptionEditor ()
 
        add_option (_("Editor"), wfsh);
 
+       add_option (_("Editor"), new ClipLevelOptions (_rc_config));
+
        add_option (_("Editor"),
             new BoolOption (
                     "show-waveforms-while-recording",
@@ -1406,14 +1472,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",
@@ -1822,7 +1880,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);