add "custom" meter option which is the only option where the meter processor is visib...
authorPaul Davis <paul@linuxaudiosystems.com>
Wed, 18 Nov 2009 20:01:37 +0000 (20:01 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Wed, 18 Nov 2009 20:01:37 +0000 (20:01 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@6126 d708f5d6-7413-0410-9779-e7cbd77b26cf

16 files changed:
gtk2_ardour/gain_meter.cc
gtk2_ardour/mixer_strip.cc
gtk2_ardour/processor_box.cc
gtk2_ardour/route_time_axis.cc
libs/ardour/ardour/delivery.h
libs/ardour/ardour/meter.h
libs/ardour/ardour/processor.h
libs/ardour/ardour/send.h
libs/ardour/ardour/types.h
libs/ardour/delivery.cc
libs/ardour/enums.cc
libs/ardour/ladspa_plugin.cc
libs/ardour/meter.cc
libs/ardour/processor.cc
libs/ardour/route.cc
libs/ardour/send.cc

index 1b251ba3182c3168d3d45ad903902f3618f62ead..76ccbb41b98b0ef49b7985c2064b7a29bf8eb95e 100644 (file)
@@ -469,9 +469,14 @@ next_meter_point (MeterPoint mp)
                break;
 
        case MeterPostFader:
-               return MeterInput;
+               return MeterCustom;
+               break;
+
+       case MeterCustom:
+               return MeterInput;              
                break;
        }
+
        /*NOTREACHED*/
        return MeterInput;
 }
index 1ec93aa9b6a01405f5a40f0a8cafdd35522dc99d..876cf86dfbebbe5be4a1e1e2e4adc3efba0a2f66 100644 (file)
@@ -403,6 +403,10 @@ MixerStrip::set_route (boost::shared_ptr<Route> rt)
        case MeterPostFader:
                meter_point_label.set_text (_("post"));
                break;
+
+       case MeterCustom:
+               meter_point_label.set_text (_("custom"));
+               break;
        }
 
        delete route_ops_menu;
@@ -1603,6 +1607,10 @@ MixerStrip::meter_changed (void *src)
        case MeterPostFader:
                meter_point_label.set_text (_("post"));
                break;
+
+       case MeterCustom:
+               meter_point_label.set_text (_("custom"));
+               break;
        }
 
        gpm.setup_meters ();
index 5858ff76a0e2e05c7c4e2246523e45bf9eccb8a1..043395a0f1ddfb5756e29d22e7b3e01023d726f8 100644 (file)
@@ -804,11 +804,8 @@ void
 ProcessorBox::add_processor_to_display (boost::weak_ptr<Processor> p)
 {
        boost::shared_ptr<Processor> processor (p.lock ());
-       if (!processor) {
-               return;
-       }
 
-       if (!processor->visible()) {
+       if (!processor || !processor->display_to_user()) {
                return;
        }
 
index a3238fc95e7e606a9183ce37cd184ead896743f1..e1c480a9c0ac6028affd971c63b5295f72356a38 100644 (file)
@@ -1994,11 +1994,8 @@ void
 RouteTimeAxisView::add_processor_to_subplugin_menu (boost::weak_ptr<Processor> p)
 {
        boost::shared_ptr<Processor> processor (p.lock ());
-       if (!processor) {
-               return;
-       }
 
-       if (!processor->visible ()) {
+       if (!processor || !processor->display_to_user ()) {
                return;
        }
 
index beccab73ae939ee724e63ff40666267839499cfe..add222a0f175fd87fe9821f6cc91fea7de257beb 100644 (file)
@@ -61,7 +61,6 @@ public:
        bool set_name (const std::string& name);
        std::string display_name() const;
 
-       bool visible() const;
        Role role() const { return _role; }
        bool can_support_io_configuration (const ChanCount& in, ChanCount& out) const;
        bool configure_io (ChanCount in, ChanCount out);
index be8472b170f52e8a0161dbaac4d358214cd89884..10272ee733c5b56616429224a6f33d837d595bba 100644 (file)
@@ -53,10 +53,7 @@ public:
        PeakMeter(Session& s) : Processor(s, "Meter") {}
        PeakMeter(Session&s, const XMLNode& node);
 
-       bool visible() const;
-
        void meter();
-
        void reset ();
        void reset_max ();
 
index 473bb97130fe7332d3ccb86aa143d8f98748b125..3ec4a9885d1bb675c6b50aba85dea0ee89e11b42 100644 (file)
@@ -56,8 +56,8 @@ class Processor : public SessionObject, public AutomatableControls, public Laten
 
        virtual std::string display_name() const { return SessionObject::name(); }
 
-       virtual bool visible() const { return true; }
-       virtual void set_visible (bool) {}
+       virtual bool display_to_user() const { return _display_to_user; }
+       virtual void set_display_to_user (bool);
 
        bool active () const { return _pending_active; }
 
@@ -109,6 +109,7 @@ protected:
        ChanCount _configured_input;
        ChanCount _configured_output;
        void*     _gui;  /* generic, we don't know or care what this is */
+       bool        _display_to_user;
 
 private:
        int set_state_2X (const XMLNode&, int version);
index f9f13ee309f00da5a80355564b1969bbbcd70079..b86d321bd21c0be55a562ecd095b78deb90bca75 100644 (file)
@@ -43,7 +43,7 @@ class Send : public Delivery
 
        uint32_t bit_slot() const { return _bitslot; }
 
-       bool visible() const;
+       bool display_to_user() const;
 
        boost::shared_ptr<Amp> amp() const { return _amp; }
        boost::shared_ptr<PeakMeter> meter() const { return _meter; }
index 7e094174092d7cccef7649a9c7571fd845abc39d..75c4d20db4d5780debbe4b258ad3cba5dd90554c 100644 (file)
@@ -127,7 +127,8 @@ namespace ARDOUR {
        enum MeterPoint {
                MeterInput,
                MeterPreFader,
-               MeterPostFader
+               MeterPostFader,
+               MeterCustom
        };
 
        enum TrackMode {
index 5b063ad566c22aadc0d2972d2e105e74a9fcf894..3494be2cf5c35bfacb0a20c0006f2a3b5ece68ab 100644 (file)
@@ -59,9 +59,9 @@ Delivery::Delivery (Session& s, boost::shared_ptr<IO> io, boost::shared_ptr<Mute
        , _solo_isolated (false)
        , _mute_master (mm)
        , no_panner_reset (false)
-
 {
        _panner = boost::shared_ptr<Panner>(new Panner (_name, _session));
+       _display_to_user = false;
 
        if (_output) {
                _output->changed.connect (mem_fun (*this, &Delivery::output_changed));
@@ -85,6 +85,7 @@ Delivery::Delivery (Session& s, boost::shared_ptr<MuteMaster> mm, const string&
        , no_panner_reset (false)
 {
        _panner = boost::shared_ptr<Panner>(new Panner (_name, _session));
+       _display_to_user = false;
 
        if (_output) {
                _output->changed.connect (mem_fun (*this, &Delivery::output_changed));
@@ -108,6 +109,7 @@ Delivery::Delivery (Session& s, boost::shared_ptr<MuteMaster> mm, const XMLNode&
        , no_panner_reset (false)
 {
        _panner = boost::shared_ptr<Panner>(new Panner (_name, _session));
+       _display_to_user = false;
 
        if (set_state (node, Stateful::loading_state_version)) {
                throw failed_constructor ();
@@ -135,6 +137,7 @@ Delivery::Delivery (Session& s, boost::shared_ptr<IO> out, boost::shared_ptr<Mut
        , no_panner_reset (false)
 {
        _panner = boost::shared_ptr<Panner>(new Panner (_name, _session));
+       _display_to_user = false;
 
        if (set_state (node, Stateful::loading_state_version)) {
                throw failed_constructor ();
@@ -177,12 +180,6 @@ Delivery::increment_output_offset (nframes_t n)
        _output_offset += n;
 }
 
-bool
-Delivery::visible () const
-{
-       return true;
-}
-
 bool
 Delivery::can_support_io_configuration (const ChanCount& in, ChanCount& out) const
 {
index ed7ba88d8e81f2db52e1ec331303100948db99df..4b0ec3b34308b881c5fc71d022cdc9134103748b 100644 (file)
@@ -160,6 +160,7 @@ setup_enum_writer ()
        REGISTER_ENUM (MeterInput);
        REGISTER_ENUM (MeterPreFader);
        REGISTER_ENUM (MeterPostFader);
+       REGISTER_ENUM (MeterCustom);
        REGISTER (_MeterPoint);
 
        REGISTER_ENUM (Normal);
index 6e2acfbe096d066f89499fc9713d8e1c51bda39f..a242a76c3189880e8601b2d0f542ca614df79f4b 100644 (file)
@@ -393,9 +393,6 @@ LadspaPlugin::set_state (const XMLNode& node, int version)
        uint32_t port_id;
        LocaleGuard lg (X_("POSIX"));
 
-       cout << "LADSPA Plugin set state " << version << "\n";
-       cout << "- node " << node.name() << "\n";
-
        if (node.name() != state_node_name()) {
                error << _("Bad node sent to LadspaPlugin::set_state") << endmsg;
                return -1;
@@ -441,9 +438,6 @@ LadspaPlugin::set_state_2X (const XMLNode& node, int version)
        uint32_t port_id;
        LocaleGuard lg (X_("POSIX"));
 
-       cout << "LADSPA Plugin set state " << version << "\n";
-       cout << "- node " << node.name() << "\n";
-
        if (node.name() != state_node_name()) {
                error << _("Bad node sent to LadspaPlugin::set_state") << endmsg;
                return -1;
index a5e82c3bf3411131dd47d21903bbd371e79071ed..e5fcc16f292da752fe412d59c9797245d41299c1 100644 (file)
@@ -225,8 +225,3 @@ PeakMeter::state (bool full_state)
 }
 
 
-bool
-PeakMeter::visible() const
-{
-       return true;
-}
index b46cc661e49c7dbb57f4175fbfdb9450bb9cb63e..3bc9db024bef1873c5b1d0db710cb38f5a8648b6 100644 (file)
@@ -70,6 +70,7 @@ Processor::Processor(Session& session, const string& name)
        , _next_ab_is_active(false)
        , _configured(false)
        , _gui(0)
+       , _display_to_user (true)
 {
 }
 
@@ -81,6 +82,7 @@ Processor::Processor (Session& session, const XMLNode& node)
        , _next_ab_is_active(false)
        , _configured(false)
        , _gui(0)
+       , _display_to_user (true)
 {
        set_state (node, Stateful::loading_state_version);
        _pending_active = _active;
@@ -271,3 +273,10 @@ Processor::configure_io (ChanCount in, ChanCount out)
 
        return true;
 }
+
+void
+Processor::set_display_to_user (bool yn) 
+{
+       _display_to_user = yn;
+}
+
index 248d60ab679c75fe12db085314831ba64438f3bb..e0543bdda963f2ad7d5fce17422e6384378826e2 100644 (file)
@@ -80,6 +80,7 @@ Route::Route (Session& sess, string name, Flag flg, DataType default_type)
        /* add standard processors other than amp (added by ::init()) */
 
        _meter.reset (new PeakMeter (_session));
+       _meter->set_display_to_user (_meter_point == MeterCustom);
        add_processor (_meter, PreFader);
 
        if (_flags & ControlOut) {
@@ -774,6 +775,7 @@ Route::add_processor_from_xml (const XMLNode& node, ProcessorList::iterator iter
                                }
 
                                _meter.reset (new PeakMeter (_session, node));
+                               _meter->set_display_to_user (_meter_point == MeterCustom);
                                processor = _meter;
 
                        } else if (prop->value() == "amp") {
@@ -822,12 +824,12 @@ Route::add_processor_from_xml (const XMLNode& node, ProcessorList::iterator iter
                                return false;
                        }
 
-                       if (iter == _processors.end() && processor->visible() && !_processors.empty()) {
+                       if (iter == _processors.end() && processor->display_to_user() && !_processors.empty()) {
                                /* check for invisible processors stacked at the end and leave them there */
                                ProcessorList::iterator p;
                                p = _processors.end();
                                --p;
-                               while (!(*p)->visible() && p != _processors.begin()) {
+                               while (!(*p)->display_to_user() && p != _processors.begin()) {
                                        --p;
                                }
                                ++p;
@@ -885,12 +887,12 @@ Route::add_processor_from_xml_2X (const XMLNode& node, int version, ProcessorLis
                        return false;
                }
 
-               if (iter == _processors.end() && processor->visible() && !_processors.empty()) {
+               if (iter == _processors.end() && processor->display_to_user() && !_processors.empty()) {
                        /* check for invisible processors stacked at the end and leave them there */
                        ProcessorList::iterator p;
                        p = _processors.end();
                        --p;
-                       while (!(*p)->visible() && p != _processors.begin()) {
+                       while (!(*p)->display_to_user() && p != _processors.begin()) {
                                --p;
                        }
                        ++p;
@@ -1404,7 +1406,7 @@ Route::configure_processors_unlocked (ProcessorStreams* err)
 #ifndef NDEBUG
        DEBUG_TRACE (DEBUG::Processors, "{\n");
        for (list<boost::shared_ptr<Processor> >::const_iterator p = _processors.begin(); p != _processors.end(); ++p) {
-               DEBUG_TRACE (DEBUG::Processors, string_compose ("\t%1 ID = %2", (*p)->name(), (*p)->id()));
+               DEBUG_TRACE (DEBUG::Processors, string_compose ("\t%1 ID = %2\n", (*p)->name(), (*p)->id()));
        }
        DEBUG_TRACE (DEBUG::Processors, "}\n");
 #endif
@@ -1535,7 +1537,7 @@ int
 Route::reorder_processors (const ProcessorList& new_order, ProcessorStreams* err)
 {
        /* "new_order" is an ordered list of processors to be positioned according to "placement".
-          NOTE: all processors in "new_order" MUST be marked as visible. There maybe additional
+          NOTE: all processors in "new_order" MUST be marked as display_to_user(). There maybe additional
           processors in the current actual processor list that are hidden. Any visible processors
           in the current list but not in "new_order" will be assumed to be deleted.
        */
@@ -1574,7 +1576,7 @@ Route::reorder_processors (const ProcessorList& new_order, ProcessorStreams* err
 
                        } else {
 
-                               if (!(*oiter)->visible()) {
+                               if (!(*oiter)->display_to_user()) {
 
                                        as_it_will_be.push_back (*oiter);
 
@@ -1792,6 +1794,9 @@ Route::_set_state (const XMLNode& node, int version, bool /*call_base*/)
 
        if ((prop = node.property (X_("meter-point"))) != 0) {
                _meter_point = MeterPoint (string_2_enum (prop->value (), _meter_point));
+               if (_meter) {
+                       _meter->set_display_to_user (_meter_point == MeterCustom);
+               }
        }
 
        if ((prop = node.property (X_("route-group"))) != 0) {
@@ -2634,28 +2639,40 @@ Route::set_meter_point (MeterPoint p, void *src)
        {
                Glib::RWLock::WriterLock lm (_processor_lock);
                ProcessorList as_it_was (_processors);
-               
-               // Move meter in the processors list
-               ProcessorList::iterator loc = find(_processors.begin(), _processors.end(), _meter);
-               _processors.erase(loc);
-               switch (p) {
-               case MeterInput:
-                       loc = _processors.begin();
-                       break;
-               case MeterPreFader:
-                       loc = find(_processors.begin(), _processors.end(), _amp);
-                       break;
-               case MeterPostFader:
-                       loc = _processors.end();
+
+               if (p != MeterCustom) {
+                       // Move meter in the processors list to reflect the new position
+                       ProcessorList::iterator loc = find(_processors.begin(), _processors.end(), _meter);
+                       _processors.erase(loc);
+                       switch (p) {
+                       case MeterInput:
+                               loc = _processors.begin();
+                               break;
+                       case MeterPreFader:
+                               loc = find(_processors.begin(), _processors.end(), _amp);
+                               break;
+                       case MeterPostFader:
+                               loc = _processors.end();
+                               break;
+                       default:
                        break;
-               }
-               
-               _processors.insert(loc, _meter);
-               
-               if (configure_processors_unlocked (0)) {
-                       _processors = as_it_was;
-                       configure_processors_unlocked (0); // it worked before we tried to add it ...
-                       return;
+                       }
+
+                       _processors.insert(loc, _meter);
+                       
+                       if (configure_processors_unlocked (0)) {
+                               _processors = as_it_was;
+                               configure_processors_unlocked (0); // it worked before we tried to add it ...
+                               return;
+                       }
+
+                       _meter->set_display_to_user (false);
+
+               } else {
+
+                       // just make it visible and let the user move it
+
+                       _meter->set_display_to_user (true);
                }
                
        }
index 5a39c3322ac4318b151b45658b71f06009e7ee77..d2c1d3c493955d5837eeeb0f17da4fd224c88699 100644 (file)
@@ -241,8 +241,10 @@ Send::set_name (const std::string& new_name)
 }
 
 bool
-Send::visible () const
+Send::display_to_user () const
 {
+       /* we ignore Deliver::_display_to_user */
+
        if (_role == Listen) {
                return false;
        }