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::ScrolledWindow route_group_display_scroller;
|
||||||
Gtk::Menu* route_group_list_menu;
|
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 activate_all_route_groups ();
|
||||||
void disable_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_row_change (const Gtk::TreeModel::Path&,const Gtk::TreeModel::iterator&);
|
||||||
void route_group_name_edit (const Glib::ustring&, const Glib::ustring&);
|
void route_group_name_edit (const Glib::ustring&, const Glib::ustring&);
|
||||||
void new_route_group ();
|
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 ();
|
void route_group_list_button_clicked ();
|
||||||
gint route_group_list_button_press_event (GdkEventButton* ev);
|
gint route_group_list_button_press_event (GdkEventButton* ev);
|
||||||
void add_route_group (ARDOUR::RouteGroup* group);
|
void add_route_group (ARDOUR::RouteGroup* group);
|
||||||
|
@ -31,6 +31,8 @@
|
|||||||
#include "prompter.h"
|
#include "prompter.h"
|
||||||
#include "gui_thread.h"
|
#include "gui_thread.h"
|
||||||
#include "editor_group_tabs.h"
|
#include "editor_group_tabs.h"
|
||||||
|
#include "route_group_dialog.h"
|
||||||
|
#include "route_time_axis.h"
|
||||||
|
|
||||||
#include "ardour/route.h"
|
#include "ardour/route.h"
|
||||||
|
|
||||||
@ -43,19 +45,30 @@ using namespace PBD;
|
|||||||
using namespace Gtk;
|
using namespace Gtk;
|
||||||
|
|
||||||
void
|
void
|
||||||
Editor::build_route_group_list_menu ()
|
Editor::build_route_group_list_menu (RouteGroup* g)
|
||||||
{
|
{
|
||||||
using namespace Gtk::Menu_Helpers;
|
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 = new Menu;
|
||||||
route_group_list_menu->set_name ("ArdourContextMenu");
|
route_group_list_menu->set_name ("ArdourContextMenu");
|
||||||
MenuList& items = route_group_list_menu->items();
|
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 (_("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 (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
|
void
|
||||||
@ -79,7 +92,92 @@ Editor::set_route_group_activation (RouteGroup* g, bool a)
|
|||||||
void
|
void
|
||||||
Editor::new_route_group ()
|
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
|
void
|
||||||
@ -116,24 +214,31 @@ Editor::route_group_list_button_clicked ()
|
|||||||
gint
|
gint
|
||||||
Editor::route_group_list_button_press_event (GdkEventButton* ev)
|
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;
|
TreeModel::Path path;
|
||||||
|
TreeIter iter;
|
||||||
|
RouteGroup* group = 0;
|
||||||
TreeViewColumn* column;
|
TreeViewColumn* column;
|
||||||
int cellx;
|
int cellx;
|
||||||
int celly;
|
int celly;
|
||||||
|
|
||||||
if (!route_group_display.get_path_at_pos ((int)ev->x, (int)ev->y, path, column, cellx, celly)) {
|
bool const p = route_group_display.get_path_at_pos ((int)ev->x, (int)ev->y, path, column, cellx, celly);
|
||||||
return false;
|
|
||||||
|
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")))) {
|
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) {
|
} else if (ev->button == 3) {
|
||||||
|
|
||||||
if (!_menu) {
|
delete _menu;
|
||||||
_menu = new Menu;
|
_menu = new Menu;
|
||||||
MenuList& items = _menu->items ();
|
MenuList& items = _menu->items ();
|
||||||
items.push_back (MenuElem (_("Edit..."), bind (mem_fun (*this, &GroupTabs::edit_group), t->group)));
|
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)));
|
items.push_back (MenuElem (_("Remove"), bind (mem_fun (*this, &GroupTabs::remove_group), t->group)));
|
||||||
}
|
|
||||||
|
|
||||||
_menu->popup (ev->button, ev->time);
|
_menu->popup (ev->button, ev->time);
|
||||||
|
|
||||||
|
@ -2411,7 +2411,6 @@ void
|
|||||||
RouteTimeAxisView::set_route_group_to_new ()
|
RouteTimeAxisView::set_route_group_to_new ()
|
||||||
{
|
{
|
||||||
RouteGroup* g = new RouteGroup (_session, "", RouteGroup::Active);
|
RouteGroup* g = new RouteGroup (_session, "", RouteGroup::Active);
|
||||||
g->set_active (true, this);
|
|
||||||
|
|
||||||
RouteGroupDialog d (g, Gtk::Stock::NEW);
|
RouteGroupDialog d (g, Gtk::Stock::NEW);
|
||||||
int const r = d.do_run ();
|
int const r = d.do_run ();
|
||||||
|
Loading…
Reference in New Issue
Block a user