centralize legal-session-name-checkng and include : and ; in characters that we disal...
[ardour.git] / gtk2_ardour / group_tabs.cc
index 94caf5993684fe0dc385a7d144aa7aa83d3b369e..a7cd274a306316b2a9abc7d4696c508085749111 100644 (file)
@@ -244,7 +244,7 @@ GroupTabs::render (cairo_t* cr)
        /* background */
 
        cairo_set_source_rgb (cr, 0, 0, 0);
-       cairo_rectangle (cr, 0, 0, _width, _height);
+       cairo_rectangle (cr, 0, 0, get_width(), get_height());
        cairo_fill (cr);
 
        /* tabs */
@@ -309,23 +309,24 @@ 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 (_("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());
                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;
 
@@ -432,13 +433,24 @@ GroupTabs::subgroup (RouteGroup* g, bool aux, Placement placement)
 }
 
 struct CollectSorter {
-       CollectSorter (std::string const & key) : _key (key) {}
+       CollectSorter (string const & key) : _key (key) {}
 
        bool operator () (boost::shared_ptr<Route> a, boost::shared_ptr<Route> b) {
                return a->order_key (_key) < b->order_key (_key);
        }
 
-       std::string _key;
+       string _key;
+};
+
+struct OrderSorter {
+       OrderSorter (string const & 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;
 };
 
 /** Collect all members of a RouteGroup so that they are together in the Editor or Mixer.
@@ -453,6 +465,7 @@ GroupTabs::collect (RouteGroup* g)
 
        RouteList::iterator i = group_routes->begin ();
        boost::shared_ptr<RouteList> routes = _session->get_routes ();
+       routes->sort (OrderSorter (order_key ()));
        RouteList::const_iterator j = routes->begin ();
 
        int diff = 0;
@@ -531,6 +544,12 @@ 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);
+       
+       /* 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