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
This commit is contained in:
parent
3be7176862
commit
cfbec44c33
|
@ -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);
|
||||
|
|
|
@ -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")))) {
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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 ();
|
||||
|
|
Loading…
Reference in New Issue
Block a user