Move RouteGroup color into libardour.
authorRobin Gareus <robin@gareus.org>
Wed, 3 May 2017 15:36:35 +0000 (17:36 +0200)
committerRobin Gareus <robin@gareus.org>
Wed, 3 May 2017 15:53:00 +0000 (17:53 +0200)
This allows to change it from scripts and surfaces and consolidates code.

libs/ardour/ardour/route_group.h
libs/ardour/route_group.cc

index c75202f986371883b3af828f703bf0ce22239db5..34f70857a2dab4afc6fcdbfee4dad76d991792b3 100644 (file)
@@ -150,6 +150,15 @@ public:
        bool has_control_master() const;
        bool slaved () const;
 
+       uint32_t rgba () const { return _rgba; }
+
+       /** set route-group color and notify UI about change */
+       void set_rgba (uint32_t);
+
+       /* directly set color only, used to convert old 5.x gui-object-state
+        * to libardour color */
+       void migrate_rgba (uint32_t color) { _rgba = color; }
+
 private:
        boost::shared_ptr<RouteList> routes;
        boost::shared_ptr<Route> subgroup_bus;
@@ -179,6 +188,8 @@ private:
 
        void post_set (PBD::PropertyChange const &);
        void push_to_groups ();
+
+       uint32_t _rgba;
 };
 
 } /* namespace */
index 9bbbd90776207044555f74c0e9924d2f705c321e..c41a890a02d68eef7528cb0174342213cb48d29b 100644 (file)
@@ -109,6 +109,7 @@ RouteGroup::RouteGroup (Session& s, const string &n)
        , _rec_enable_group (new ControlGroup (RecEnableAutomation))
        , _gain_group (new GainControlGroup ())
        , _monitoring_group (new ControlGroup (MonitoringAutomation))
+       , _rgba (0)
 {
        _xml_node_name = X_("RouteGroup");
 
@@ -234,6 +235,22 @@ RouteGroup::remove (boost::shared_ptr<Route> r)
        return -1;
 }
 
+void
+RouteGroup::set_rgba (uint32_t color) {
+       _rgba = color;
+
+       PBD::PropertyChange change;
+       change.add (Properties::color);
+       PropertyChanged (change);
+
+       if (!is_color ()) {
+               return;
+       }
+
+       for (RouteList::const_iterator i = routes->begin(); i != routes->end(); ++i) {
+               (*i)->presentation_info().PropertyChanged (Properties::color);
+       }
+}
 
 XMLNode&
 RouteGroup::get_state ()
@@ -241,6 +258,7 @@ RouteGroup::get_state ()
        XMLNode *node = new XMLNode ("RouteGroup");
 
        node->set_property ("id", id());
+       node->set_property ("rgba", _rgba);
 
        add_properties (*node);
 
@@ -266,6 +284,7 @@ RouteGroup::set_state (const XMLNode& node, int version)
 
        set_id (node);
        set_values (node);
+       node.get_property ("rgba", _rgba);
 
        std::string routes;
        if (node.get_property ("routes", routes)) {