using namespace Gtk;
using namespace ARDOUR;
+using namespace PBD;
-RouteGroupMenu::RouteGroupMenu (Session& s, RouteGroup::Property p)
- : _session (s),
- _default_properties (p)
+RouteGroupMenu::RouteGroupMenu (Session* s, PropertyList* plist)
+ : SessionHandlePtr (s)
+ , _default_properties (plist)
+ , _inhibit_group_selected (false)
+ , _selected_route_group (0)
{
rebuild (0);
}
+RouteGroupMenu::~RouteGroupMenu()
+{
+ delete _default_properties;
+}
+
void
RouteGroupMenu::rebuild (RouteGroup* curr)
{
using namespace Menu_Helpers;
+ _selected_route_group = curr;
+
+ _inhibit_group_selected = true;
+
items().clear ();
- items().push_back (MenuElem (_("New group..."), mem_fun (*this, &RouteGroupMenu::new_group)));
+ items().push_back (MenuElem (_("New group..."), sigc::mem_fun (*this, &RouteGroupMenu::new_group)));
items().push_back (SeparatorElem ());
RadioMenuItem::Group group;
- items().push_back (RadioMenuElem (group, _("No group"), bind (mem_fun (*this, &RouteGroupMenu::set_group), (RouteGroup *) 0)));
+ items().push_back (RadioMenuElem (group, _("No group"), sigc::bind (sigc::mem_fun (*this, &RouteGroupMenu::set_group), (RouteGroup *) 0)));
if (curr == 0) {
static_cast<RadioMenuItem*> (&items().back())->set_active ();
}
- _session.foreach_route_group (bind (mem_fun (*this, &RouteGroupMenu::add_item), curr, &group));
+ if (_session) {
+ _session->foreach_route_group (sigc::bind (sigc::mem_fun (*this, &RouteGroupMenu::add_item), curr, &group));
+ }
+
+ _inhibit_group_selected = false;
}
void
{
using namespace Menu_Helpers;
- items().push_back (RadioMenuElem (*group, rg->name(), bind (mem_fun(*this, &RouteGroupMenu::set_group), rg)));
+ items().push_back (RadioMenuElem (*group, rg->name(), sigc::bind (sigc::mem_fun(*this, &RouteGroupMenu::set_group), rg)));
if (rg == curr) {
static_cast<RadioMenuItem*> (&items().back())->set_active ();
void
RouteGroupMenu::set_group (RouteGroup* g)
{
- GroupSelected (g);
+ if (g == _selected_route_group) {
+ /* cut off the signal_toggled that GTK emits for an option that is being un-selected
+ when a new option is being selected instead
+ */
+ return;
+ }
+
+ if (!_inhibit_group_selected) {
+ GroupSelected (g);
+ }
+
+ _selected_route_group = g;
}
void
RouteGroupMenu::new_group ()
{
- RouteGroup* g = new RouteGroup (_session, "", RouteGroup::Active, _default_properties);
+ if (!_session) {
+ return;
+ }
+
+ RouteGroup* g = new RouteGroup (*_session, "");
+ g->set_properties (*_default_properties);
RouteGroupDialog d (g, Gtk::Stock::NEW);
int const r = d.do_run ();
if (r == Gtk::RESPONSE_OK) {
- _session.add_route_group (g);
+ _session->add_route_group (g);
set_group (g);
} else {
delete g;