summaryrefslogtreecommitdiff
path: root/gtk2_ardour/route_group_menu.cc
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2009-06-29 00:38:58 +0000
committerCarl Hetherington <carl@carlh.net>2009-06-29 00:38:58 +0000
commit7a4f1b9cf685aa5b6288b87c02d0f25397f6cd3a (patch)
tree6d243fd6e5da374036131f5d5f0f1192c147dd8a /gtk2_ardour/route_group_menu.cc
parent1a5de76f7e6299322b7602ad6c447c598baf1865 (diff)
Factor route group menu out into its own class.
git-svn-id: svn://localhost/ardour2/branches/3.0@5292 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/route_group_menu.cc')
-rw-r--r--gtk2_ardour/route_group_menu.cc71
1 files changed, 71 insertions, 0 deletions
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 <gtkmm/menu.h>
+#include <gtkmm/stock.h>
+#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<RadioMenuItem*> (&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<RadioMenuItem*> (&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;
+ }
+}