diff options
Diffstat (limited to 'gtk2_ardour/automation_time_axis.cc')
-rw-r--r-- | gtk2_ardour/automation_time_axis.cc | 71 |
1 files changed, 57 insertions, 14 deletions
diff --git a/gtk2_ardour/automation_time_axis.cc b/gtk2_ardour/automation_time_axis.cc index 5c5cd53dec..f14e70b52e 100644 --- a/gtk2_ardour/automation_time_axis.cc +++ b/gtk2_ardour/automation_time_axis.cc @@ -77,6 +77,9 @@ AutomationTimeAxisView::AutomationTimeAxisView (Session& s, boost::shared_ptr<Ro auto_touch_item = 0; auto_write_item = 0; auto_play_item = 0; + mode_discrete_item = 0; + mode_line_item = 0; + ignore_state_request = false; first_call_to_set_height = true; @@ -321,6 +324,31 @@ AutomationTimeAxisView::automation_state_changed () } void +AutomationTimeAxisView::interpolation_changed () +{ + AutomationList::InterpolationStyle style = _control->list()->interpolation(); + + if (mode_line_item && mode_discrete_item) { + if (style == AutomationList::Discrete) { + mode_discrete_item->set_active(true); + mode_line_item->set_active(false); + } else { + mode_line_item->set_active(true); + mode_discrete_item->set_active(false); + } + } + + _line->set_interpolation(style); +} + +void +AutomationTimeAxisView::set_interpolation (AutomationList::InterpolationStyle style) +{ + _control->list()->set_interpolation(style); + _line->set_interpolation(style); +} + +void AutomationTimeAxisView::height_clicked () { popup_size_menu (0); @@ -493,6 +521,8 @@ AutomationTimeAxisView::build_display_menu () items.push_back (MenuElem (_("Clear"), mem_fun(*this, &AutomationTimeAxisView::clear_clicked))); items.push_back (SeparatorElem()); + /* state menu */ + Menu* auto_state_menu = manage (new Menu); auto_state_menu->set_name ("ArdourContextMenu"); MenuList& as_items = auto_state_menu->items(); @@ -514,10 +544,35 @@ AutomationTimeAxisView::build_display_menu () auto_touch_item = dynamic_cast<CheckMenuItem*>(&as_items.back()); items.push_back (MenuElem (_("State"), *auto_state_menu)); + + /* mode menu */ + + if (_control->parameter().type() == MidiCCAutomation) { + Menu* auto_mode_menu = manage (new Menu); + auto_mode_menu->set_name ("ArdourContextMenu"); + MenuList& am_items = auto_mode_menu->items(); + + RadioMenuItem::Group group; + + am_items.push_back (RadioMenuElem (group, _("Discrete"), bind ( + mem_fun(*this, &AutomationTimeAxisView::set_interpolation), + AutomationList::Discrete))); + mode_discrete_item = dynamic_cast<CheckMenuItem*>(&am_items.back()); + //mode_discrete_item->set_active(_control->list()->interpolation() == AutomationList::Discrete); + + am_items.push_back (RadioMenuElem (group, _("Line"), bind ( + mem_fun(*this, &AutomationTimeAxisView::set_interpolation), + AutomationList::Linear))); + mode_line_item = dynamic_cast<CheckMenuItem*>(&am_items.back()); + //mode_line_item->set_active(_control->list()->interpolation() == AutomationList::Linear); + + items.push_back (MenuElem (_("Mode"), *auto_mode_menu)); + } /* make sure the automation menu state is correct */ automation_state_changed (); + interpolation_changed (); } void @@ -816,27 +871,15 @@ AutomationTimeAxisView::add_line (boost::shared_ptr<AutomationLine> line) } void -AutomationTimeAxisView::show_all_control_points () -{ - _line->show_all_control_points (); -} - -void -AutomationTimeAxisView::hide_all_but_selected_control_points () -{ - _line->hide_all_but_selected_control_points (); -} - -void AutomationTimeAxisView::entered() { - show_all_control_points (); + _line->track_entered(); } void AutomationTimeAxisView::exited () { - hide_all_but_selected_control_points (); + _line->track_exited(); } void |