summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2009-06-22 00:02:45 +0000
committerCarl Hetherington <carl@carlh.net>2009-06-22 00:02:45 +0000
commitcfbec44c3351c062d2360615c894db4cb1f8d260 (patch)
tree4f48fb969e3539830abb0497d467f9603ddf2cb1 /gtk2_ardour
parent3be717686279a0419437721d88a9f77c14e71f0b (diff)
Add some more options to the route group list context menu. Fix a crash bug on removing route groups using the tab context menu.
git-svn-id: svn://localhost/ardour2/branches/3.0@5239 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/editor.h6
-rw-r--r--gtk2_ardour/editor_edit_groups.cc141
-rw-r--r--gtk2_ardour/group_tabs.cc11
-rw-r--r--gtk2_ardour/route_time_axis.cc1
4 files changed, 133 insertions, 26 deletions
diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h
index a28c742881..489f8a9e6f 100644
--- a/gtk2_ardour/editor.h
+++ b/gtk2_ardour/editor.h
@@ -1860,7 +1860,7 @@ public:
Gtk::ScrolledWindow route_group_display_scroller;
Gtk::Menu* route_group_list_menu;
- void build_route_group_list_menu ();
+ void build_route_group_list_menu (ARDOUR::RouteGroup *);
void activate_all_route_groups ();
void disable_all_route_groups ();
@@ -1868,6 +1868,10 @@ public:
void route_group_row_change (const Gtk::TreeModel::Path&,const Gtk::TreeModel::iterator&);
void route_group_name_edit (const Glib::ustring&, const Glib::ustring&);
void new_route_group ();
+ void new_route_group_from_selection ();
+ void new_route_group_from_rec_enabled ();
+ void new_route_group_from_soloed ();
+ void edit_route_group (ARDOUR::RouteGroup *);
void route_group_list_button_clicked ();
gint route_group_list_button_press_event (GdkEventButton* ev);
void add_route_group (ARDOUR::RouteGroup* group);
diff --git a/gtk2_ardour/editor_edit_groups.cc b/gtk2_ardour/editor_edit_groups.cc
index ac7e1f3d66..6fea319c0d 100644
--- a/gtk2_ardour/editor_edit_groups.cc
+++ b/gtk2_ardour/editor_edit_groups.cc
@@ -31,6 +31,8 @@
#include "prompter.h"
#include "gui_thread.h"
#include "editor_group_tabs.h"
+#include "route_group_dialog.h"
+#include "route_time_axis.h"
#include "ardour/route.h"
@@ -43,19 +45,30 @@ using namespace PBD;
using namespace Gtk;
void
-Editor::build_route_group_list_menu ()
+Editor::build_route_group_list_menu (RouteGroup* g)
{
using namespace Gtk::Menu_Helpers;
+ delete route_group_list_menu;
+
+ Menu* new_from = new Menu;
+ MenuList& f = new_from->items ();
+ f.push_back (MenuElem (_("Selection..."), mem_fun (*this, &Editor::new_route_group_from_selection)));
+ f.push_back (MenuElem (_("Record Enabled..."), mem_fun (*this, &Editor::new_route_group_from_rec_enabled)));
+ f.push_back (MenuElem (_("Soloed..."), mem_fun (*this, &Editor::new_route_group_from_soloed)));
+
route_group_list_menu = new Menu;
route_group_list_menu->set_name ("ArdourContextMenu");
MenuList& items = route_group_list_menu->items();
+ items.push_back (MenuElem (_("New Group..."), mem_fun(*this, &Editor::new_route_group)));
+ items.push_back (MenuElem (_("New Group From"), *new_from));
+ if (g) {
+ items.push_back (MenuElem (_("Edit Group..."), bind (mem_fun(*this, &Editor::edit_route_group), g)));
+ }
+ items.push_back (SeparatorElem());
items.push_back (MenuElem (_("Activate All"), mem_fun(*this, &Editor::activate_all_route_groups)));
items.push_back (MenuElem (_("Disable All"), mem_fun(*this, &Editor::disable_all_route_groups)));
- items.push_back (SeparatorElem());
- items.push_back (MenuElem (_("Add group"), mem_fun(*this, &Editor::new_route_group)));
-
}
void
@@ -79,7 +92,92 @@ Editor::set_route_group_activation (RouteGroup* g, bool a)
void
Editor::new_route_group ()
{
- session->add_route_group (new RouteGroup (*session, ""));
+ 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);
+ } else {
+ delete g;
+ }
+}
+
+void
+Editor::new_route_group_from_selection ()
+{
+ 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);
+
+ for (TrackSelection::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) {
+ RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (*i);
+ if (rtv) {
+ rtv->route()->set_route_group (g, this);
+ }
+ }
+
+ } else {
+ delete g;
+ }
+}
+
+void
+Editor::new_route_group_from_rec_enabled ()
+{
+ 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);
+
+ for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
+ RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (*i);
+ if (rtv && rtv->route()->record_enabled()) {
+ rtv->route()->set_route_group (g, this);
+ }
+ }
+
+ } else {
+ delete g;
+ }
+}
+
+void
+Editor::new_route_group_from_soloed ()
+{
+ 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);
+
+ for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
+ RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (*i);
+ if (rtv && !rtv->route()->is_master() && rtv->route()->soloed()) {
+ rtv->route()->set_route_group (g, this);
+ }
+ }
+
+ } else {
+ delete g;
+ }
+}
+
+void
+Editor::edit_route_group (RouteGroup* g)
+{
+ RouteGroupDialog d (g, Gtk::Stock::APPLY);
+ d.do_run ();
}
void
@@ -116,24 +214,31 @@ Editor::route_group_list_button_clicked ()
gint
Editor::route_group_list_button_press_event (GdkEventButton* ev)
{
- if (Keyboard::is_context_menu_event (ev)) {
- if (route_group_list_menu == 0) {
- build_route_group_list_menu ();
- }
- route_group_list_menu->popup (1, ev->time);
- return true;
- }
-
-
- RouteGroup* group;
- TreeIter iter;
TreeModel::Path path;
+ TreeIter iter;
+ RouteGroup* group = 0;
TreeViewColumn* column;
int cellx;
int celly;
- if (!route_group_display.get_path_at_pos ((int)ev->x, (int)ev->y, path, column, cellx, celly)) {
- return false;
+ bool const p = route_group_display.get_path_at_pos ((int)ev->x, (int)ev->y, path, column, cellx, celly);
+
+ if (p) {
+ iter = group_model->get_iter (path);
+ }
+
+ if (iter) {
+ group = (*iter)[group_columns.routegroup];
+ }
+
+ if (Keyboard::is_context_menu_event (ev)) {
+ build_route_group_list_menu (group);
+ route_group_list_menu->popup (1, ev->time);
+ return true;
+ }
+
+ if (!p) {
+ return 1;
}
switch (GPOINTER_TO_UINT (column->get_data (X_("colnum")))) {
diff --git a/gtk2_ardour/group_tabs.cc b/gtk2_ardour/group_tabs.cc
index 1dd15b31ba..60eed1c7cf 100644
--- a/gtk2_ardour/group_tabs.cc
+++ b/gtk2_ardour/group_tabs.cc
@@ -86,12 +86,11 @@ GroupTabs::on_button_press_event (GdkEventButton* ev)
} else if (ev->button == 3) {
- if (!_menu) {
- _menu = new Menu;
- MenuList& items = _menu->items ();
- items.push_back (MenuElem (_("Edit..."), bind (mem_fun (*this, &GroupTabs::edit_group), t->group)));
- items.push_back (MenuElem (_("Remove"), bind (mem_fun (*this, &GroupTabs::remove_group), t->group)));
- }
+ delete _menu;
+ _menu = new Menu;
+ MenuList& items = _menu->items ();
+ items.push_back (MenuElem (_("Edit..."), bind (mem_fun (*this, &GroupTabs::edit_group), t->group)));
+ items.push_back (MenuElem (_("Remove"), bind (mem_fun (*this, &GroupTabs::remove_group), t->group)));
_menu->popup (ev->button, ev->time);
diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc
index c2935ee62e..f5e278c594 100644
--- a/gtk2_ardour/route_time_axis.cc
+++ b/gtk2_ardour/route_time_axis.cc
@@ -2411,7 +2411,6 @@ void
RouteTimeAxisView::set_route_group_to_new ()
{
RouteGroup* g = new RouteGroup (_session, "", RouteGroup::Active);
- g->set_active (true, this);
RouteGroupDialog d (g, Gtk::Stock::NEW);
int const r = d.do_run ();