Revert "fix LXVST support for plugins that make audioMaster callbacks from
[ardour.git] / gtk2_ardour / group_tabs.cc
index 08dfe539a2179f36433d0a705742993eaae86a20..1332d4ba10d7d81039a9ecd45a10cb187cd49277 100644 (file)
@@ -180,7 +180,7 @@ GroupTabs::on_motion_notify_event (GdkEventMotion* ev)
 
 
 bool
-GroupTabs::on_button_release_event (GdkEventButton* ev)
+GroupTabs::on_button_release_event (GdkEventButton*)
 {
        if (_dragging == 0) {
                return false;
@@ -243,10 +243,12 @@ GroupTabs::render (cairo_t* cr)
 
        /* background */
 
-       cairo_set_source_rgb (cr, 0, 0, 0);
+       Gdk::Color c = get_style()->get_base (Gtk::STATE_NORMAL);
+
+       cairo_set_source_rgb (cr, c.get_red_p(), c.get_green_p(), c.get_blue_p());
        cairo_rectangle (cr, 0, 0, get_width(), get_height());
        cairo_fill (cr);
-
+       
        /* tabs */
 
        for (list<Tab>::const_iterator i = _tabs.begin(); i != _tabs.end(); ++i) {
@@ -309,23 +311,28 @@ GroupTabs::get_menu (RouteGroup* g)
        _menu->set_name ("ArdourContextMenu");
        MenuList& items = _menu->items();
 
-       items.push_back (MenuElem (_("New..."), hide_return (sigc::mem_fun(*this, &GroupTabs::create_and_add_group))));
-       items.push_back (MenuElem (_("New From"), *new_from));
+       items.push_back (MenuElem (_("Create New Group ..."), hide_return (sigc::mem_fun(*this, &GroupTabs::create_and_add_group))));
+       items.push_back (MenuElem (_("Create New Group From"), *new_from));
 
        if (g) {
-               items.push_back (MenuElem (_("Edit..."), sigc::bind (sigc::mem_fun (*this, &GroupTabs::edit_group), g)));
-               items.push_back (MenuElem (_("Add New Subgroup Bus"), sigc::bind (sigc::mem_fun (*this, &GroupTabs::subgroup), g, false, PreFader)));
+               items.push_back (MenuElem (_("Edit Group..."), sigc::bind (sigc::mem_fun (*this, &GroupTabs::edit_group), g)));
+               items.push_back (MenuElem (_("Collect Group"), sigc::bind (sigc::mem_fun (*this, &GroupTabs::collect), g)));
+               items.push_back (MenuElem (_("Remove Group"), sigc::bind (sigc::mem_fun (*this, &GroupTabs::remove_group), g)));
+               items.push_back (SeparatorElem());
+               if (g->has_subgroup()) {
+                       items.push_back (MenuElem (_("Remove Subgroup Bus"), sigc::bind (sigc::mem_fun (*this, &GroupTabs::un_subgroup), g)));
+               } else {
+                       items.push_back (MenuElem (_("Add New Subgroup Bus"), sigc::bind (sigc::mem_fun (*this, &GroupTabs::subgroup), g, false, PreFader)));
+               }
                items.push_back (MenuElem (_("Add New Aux Bus (pre-fader)"), sigc::bind (sigc::mem_fun (*this, &GroupTabs::subgroup), g, true, PreFader)));
                items.push_back (MenuElem (_("Add New Aux Bus (post-fader)"), sigc::bind (sigc::mem_fun (*this, &GroupTabs::subgroup), g, true, PostFader)));
-               items.push_back (MenuElem (_("Collect"), sigc::bind (sigc::mem_fun (*this, &GroupTabs::collect), g)));
-               items.push_back (MenuElem (_("Remove"), sigc::bind (sigc::mem_fun (*this, &GroupTabs::remove_group), g)));
        }
 
        add_menu_items (_menu, g);
 
        items.push_back (SeparatorElem());
-       items.push_back (MenuElem (_("Activate All"), sigc::mem_fun(*this, &GroupTabs::activate_all)));
-       items.push_back (MenuElem (_("Disable All"), sigc::mem_fun(*this, &GroupTabs::disable_all)));
+       items.push_back (MenuElem (_("Enable All Groups"), sigc::mem_fun(*this, &GroupTabs::activate_all)));
+       items.push_back (MenuElem (_("Disable All Groups"), sigc::mem_fun(*this, &GroupTabs::disable_all)));
 
        return _menu;
 
@@ -431,25 +438,30 @@ GroupTabs::subgroup (RouteGroup* g, bool aux, Placement placement)
        g->make_subgroup (aux, placement);
 }
 
+void
+GroupTabs::un_subgroup (RouteGroup* g)
+{
+       g->destroy_subgroup ();
+}
+
 struct CollectSorter {
-       CollectSorter (string const & key) : _key (key) {}
+       CollectSorter (RouteSortOrderKey key) : _key (key) {}
 
        bool operator () (boost::shared_ptr<Route> a, boost::shared_ptr<Route> b) {
                return a->order_key (_key) < b->order_key (_key);
        }
 
-       string _key;
+        RouteSortOrderKey _key;
 };
 
 struct OrderSorter {
-       OrderSorter (string const & key) : _key (key) {}
+       OrderSorter (RouteSortOrderKey key) : _key (key) {}
        
        bool operator() (boost::shared_ptr<Route> a, boost::shared_ptr<Route> b) {
-               /* use of ">" forces the correct sort order */
                return a->order_key (_key) < b->order_key (_key);
        }
 
-       string _key;
+       RouteSortOrderKey _key;
 };
 
 /** Collect all members of a RouteGroup so that they are together in the Editor or Mixer.
@@ -542,7 +554,13 @@ GroupTabs::set_group_color (RouteGroup* group, Gdk::Color color)
 
        char buf[64];
        snprintf (buf, sizeof (buf), "%d:%d:%d", color.get_red(), color.get_green(), color.get_blue());
-       gui_state.set (group_gui_id (group), "color", buf);
+       gui_state.set_property (group_gui_id (group), "color", buf);
+       
+       /* the group color change notification */
+       
+       PBD::PropertyChange change;
+       change.add (Properties::color);
+       group->PropertyChanged (change);
 
        /* This is a bit of a hack, but this might change
           our route's effective color, so emit gui_changed