Add context menu for control points.
git-svn-id: svn://localhost/ardour2/branches/3.0@9890 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
8786d5c9c2
commit
982bfd08db
@ -5486,3 +5486,19 @@ Editor::notebook_tab_clicked (GdkEventButton* ev, Gtk::Widget* page)
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
Editor::popup_control_point_context_menu (ArdourCanvas::Item* item, GdkEvent* event)
|
||||
{
|
||||
using namespace Menu_Helpers;
|
||||
|
||||
MenuList& items = _control_point_context_menu.items ();
|
||||
items.clear ();
|
||||
|
||||
items.push_back (MenuElem (_("Edit..."), sigc::bind (sigc::mem_fun (*this, &Editor::edit_control_point), item)));
|
||||
items.push_back (MenuElem (_("Delete"), sigc::bind (sigc::mem_fun (*this, &Editor::remove_control_point), item)));
|
||||
if (!can_remove_control_point (item)) {
|
||||
items.back().set_sensitive (false);
|
||||
}
|
||||
|
||||
_control_point_context_menu.popup (event->button.button, event->button.time);
|
||||
}
|
||||
|
@ -686,6 +686,9 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
|
||||
void add_selection_context_items (Gtk::Menu_Helpers::MenuList&);
|
||||
Gtk::MenuItem* _popup_region_menu_item;
|
||||
|
||||
void popup_control_point_context_menu (ArdourCanvas::Item *, GdkEvent *);
|
||||
Gtk::Menu _control_point_context_menu;
|
||||
|
||||
void handle_new_route (ARDOUR::RouteList&);
|
||||
void timeaxisview_deleted (TimeAxisView *);
|
||||
|
||||
@ -1333,8 +1336,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
|
||||
|
||||
void region_view_item_click (AudioRegionView&, GdkEventButton*);
|
||||
|
||||
void remove_gain_control_point (ArdourCanvas::Item*, GdkEvent*);
|
||||
void remove_control_point (ArdourCanvas::Item*, GdkEvent*);
|
||||
bool can_remove_control_point (ArdourCanvas::Item *);
|
||||
void remove_control_point (ArdourCanvas::Item *);
|
||||
|
||||
void mouse_brush_insert_region (RegionView*, framepos_t pos);
|
||||
|
||||
|
@ -1340,6 +1340,10 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
|
||||
popup_track_context_menu (1, event->button.time, item_type, false);
|
||||
break;
|
||||
|
||||
case ControlPointItem:
|
||||
popup_control_point_context_menu (item, event);
|
||||
break;
|
||||
|
||||
#ifdef WITH_CMT
|
||||
case ImageFrameItem:
|
||||
popup_imageframe_edit_menu(1, event->button.time, item, true) ;
|
||||
@ -1389,11 +1393,7 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
|
||||
break;
|
||||
|
||||
case ControlPointItem:
|
||||
if (eff == MouseGain) {
|
||||
remove_gain_control_point (item, event);
|
||||
} else {
|
||||
remove_control_point (item, event);
|
||||
}
|
||||
remove_control_point (item);
|
||||
break;
|
||||
|
||||
case NoteItem:
|
||||
@ -2065,8 +2065,8 @@ Editor::motion_handler (ArdourCanvas::Item* /*item*/, GdkEvent* event, bool from
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
Editor::remove_gain_control_point (ArdourCanvas::Item*item, GdkEvent* /*event*/)
|
||||
bool
|
||||
Editor::can_remove_control_point (ArdourCanvas::Item* item)
|
||||
{
|
||||
ControlPoint* control_point;
|
||||
|
||||
@ -2075,18 +2075,24 @@ Editor::remove_gain_control_point (ArdourCanvas::Item*item, GdkEvent* /*event*/)
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
|
||||
// We shouldn't remove the first or last gain point
|
||||
if (control_point->line().is_last_point(*control_point) ||
|
||||
control_point->line().is_first_point(*control_point)) {
|
||||
return;
|
||||
AutomationLine& line = control_point->line ();
|
||||
if (dynamic_cast<AudioRegionGainLine*> (&line)) {
|
||||
/* we shouldn't remove the first or last gain point in region gain lines */
|
||||
if (line.is_last_point(*control_point) || line.is_first_point(*control_point)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
control_point->line().remove_point (*control_point);
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
Editor::remove_control_point (ArdourCanvas::Item* item, GdkEvent* /*event*/)
|
||||
Editor::remove_control_point (ArdourCanvas::Item* item)
|
||||
{
|
||||
if (!can_remove_control_point (item)) {
|
||||
return;
|
||||
}
|
||||
|
||||
ControlPoint* control_point;
|
||||
|
||||
if ((control_point = reinterpret_cast<ControlPoint *> (item->get_data ("control_point"))) == 0) {
|
||||
|
Loading…
Reference in New Issue
Block a user