From 7a4f1b9cf685aa5b6288b87c02d0f25397f6cd3a Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Mon, 29 Jun 2009 00:38:58 +0000 Subject: Factor route group menu out into its own class. git-svn-id: svn://localhost/ardour2/branches/3.0@5292 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/route_group_menu.cc | 71 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 gtk2_ardour/route_group_menu.cc (limited to 'gtk2_ardour/route_group_menu.cc') diff --git a/gtk2_ardour/route_group_menu.cc b/gtk2_ardour/route_group_menu.cc new file mode 100644 index 0000000000..e42cdedfac --- /dev/null +++ b/gtk2_ardour/route_group_menu.cc @@ -0,0 +1,71 @@ +#include +#include +#include "ardour/session.h" +#include "ardour/route_group.h" +#include "route_group_menu.h" +#include "route_group_dialog.h" +#include "i18n.h" + +using namespace Gtk; +using namespace ARDOUR; + +RouteGroupMenu::RouteGroupMenu (Session& s) + : _session (s) +{ + rebuild (0); +} + +void +RouteGroupMenu::rebuild (RouteGroup* curr) +{ + using namespace Menu_Helpers; + + items().clear (); + + items().push_back (MenuElem (_("New group..."), 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))); + + if (curr == 0) { + static_cast (&items().back())->set_active (); + } + + _session.foreach_route_group (bind (mem_fun (*this, &RouteGroupMenu::add_item), curr, &group)); +} + +void +RouteGroupMenu::add_item (RouteGroup* rg, RouteGroup* curr, RadioMenuItem::Group* group) +{ + using namespace Menu_Helpers; + + items().push_back (RadioMenuElem (*group, rg->name(), bind (mem_fun(*this, &RouteGroupMenu::set_group), rg))); + + if (rg == curr) { + static_cast (&items().back())->set_active (); + } +} + +void +RouteGroupMenu::set_group (RouteGroup* g) +{ + GroupSelected (g); +} + + +void +RouteGroupMenu::new_group () +{ + RouteGroup* g = new RouteGroup (_session, "", RouteGroup::Active); + + RouteGroupDialog d (g, Gtk::Stock::NEW); + int const r = d.do_run (); + + if (r == Gtk::RESPONSE_OK) { + _session.add_route_group (g); + set_group (g); + } else { + delete g; + } +} -- cgit v1.2.3