mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-08 07:45:00 +01:00
lollis: no more channel-based choice, just a single check menu item like gain/pan/etc.
This commit is contained in:
parent
60256282e3
commit
744208f556
2 changed files with 46 additions and 4 deletions
|
|
@ -136,6 +136,7 @@ MidiTimeAxisView::MidiTimeAxisView (PublicEditor& ed, Session* sess, ArdourCanva
|
||||||
, _step_edit_item (0)
|
, _step_edit_item (0)
|
||||||
, controller_menu (0)
|
, controller_menu (0)
|
||||||
, _step_editor (0)
|
, _step_editor (0)
|
||||||
|
, velocity_menu_item (nullptr)
|
||||||
{
|
{
|
||||||
_midnam_model_selector.disable_scrolling();
|
_midnam_model_selector.disable_scrolling();
|
||||||
_midnam_custom_device_mode_selector.disable_scrolling();
|
_midnam_custom_device_mode_selector.disable_scrolling();
|
||||||
|
|
@ -194,6 +195,10 @@ MidiTimeAxisView::set_route (std::shared_ptr<Route> rt)
|
||||||
create_automation_child (MuteAutomation, false);
|
create_automation_child (MuteAutomation, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (automation_child (MidiVelocityAutomation) == 0) {
|
||||||
|
create_automation_child (MidiVelocityAutomation, false);
|
||||||
|
}
|
||||||
|
|
||||||
if (_route->panner_shell()) {
|
if (_route->panner_shell()) {
|
||||||
_route->panner_shell()->Changed.connect (*this, invalidator (*this), boost::bind (&MidiTimeAxisView::ensure_pan_views, this, false), gui_context());
|
_route->panner_shell()->Changed.connect (*this, invalidator (*this), boost::bind (&MidiTimeAxisView::ensure_pan_views, this, false), gui_context());
|
||||||
}
|
}
|
||||||
|
|
@ -722,20 +727,21 @@ MidiTimeAxisView::build_automation_action_menu (bool for_selection)
|
||||||
|
|
||||||
uint16_t selected_channels = midi_track()->get_playback_channel_mask();
|
uint16_t selected_channels = midi_track()->get_playback_channel_mask();
|
||||||
|
|
||||||
|
automation_items.push_back (CheckMenuElem (_("Velocity"), sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::toggle_automation_track), MidiVelocityAutomation)));
|
||||||
|
velocity_menu_item = dynamic_cast<Gtk::CheckMenuItem*> (&automation_items.back ());
|
||||||
|
velocity_menu_item->set_active (string_to<bool> (velocity_track->gui_property ("visible")));
|
||||||
|
|
||||||
if (selected_channels != 0) {
|
if (selected_channels != 0) {
|
||||||
|
|
||||||
automation_items.push_back (SeparatorElem());
|
automation_items.push_back (SeparatorElem());
|
||||||
|
|
||||||
/* these 3 MIDI "command" types are semantically more like automation
|
/* these 2 MIDI "command" types are semantically more like automation
|
||||||
* than note data, but they are not MIDI controllers. We give them
|
* than note data, but they are not MIDI controllers. We give them
|
||||||
* special status in this menu, since they will not show up in the
|
* special status in this menu, since they will not show up in the
|
||||||
* controller list and anyone who actually knows something about MIDI
|
* controller list and anyone who actually knows something about MIDI
|
||||||
* (!) would not expect to find them there.
|
* (!) would not expect to find them there.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
add_channel_command_menu_item (automation_items, _("Velocity"), MidiVelocityAutomation, 0);
|
|
||||||
automation_items.back().set_sensitive (!for_selection || _editor.get_selection().tracks.size() == 1);
|
|
||||||
|
|
||||||
add_channel_command_menu_item (automation_items, _("Bender"), MidiPitchBenderAutomation, 0);
|
add_channel_command_menu_item (automation_items, _("Bender"), MidiPitchBenderAutomation, 0);
|
||||||
automation_items.back().set_sensitive (!for_selection || _editor.get_selection().tracks.size() == 1);
|
automation_items.back().set_sensitive (!for_selection || _editor.get_selection().tracks.size() == 1);
|
||||||
|
|
||||||
|
|
@ -1368,6 +1374,9 @@ MidiTimeAxisView::create_automation_child (const Evoral::Parameter& param, bool
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MidiVelocityAutomation:
|
case MidiVelocityAutomation:
|
||||||
|
create_velocity_automation_child (param, show);
|
||||||
|
break;
|
||||||
|
|
||||||
case MidiCCAutomation:
|
case MidiCCAutomation:
|
||||||
case MidiPgmChangeAutomation:
|
case MidiPgmChangeAutomation:
|
||||||
case MidiPitchBenderAutomation:
|
case MidiPitchBenderAutomation:
|
||||||
|
|
@ -1659,6 +1668,10 @@ MidiTimeAxisView::automation_child_menu_item (Evoral::Parameter param)
|
||||||
return m;
|
return m;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (param.type() == MidiVelocityAutomation) {
|
||||||
|
return velocity_menu_item;
|
||||||
|
}
|
||||||
|
|
||||||
ParameterMenuMap::iterator i = _controller_menu_map.find (param);
|
ParameterMenuMap::iterator i = _controller_menu_map.find (param);
|
||||||
if (i != _controller_menu_map.end()) {
|
if (i != _controller_menu_map.end()) {
|
||||||
return i->second;
|
return i->second;
|
||||||
|
|
@ -1811,3 +1824,28 @@ MidiTimeAxisView::get_regions_with_selected_data (RegionSelection& rs)
|
||||||
{
|
{
|
||||||
midi_view()->get_regions_with_selected_data (rs);
|
midi_view()->get_regions_with_selected_data (rs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
MidiTimeAxisView::create_velocity_automation_child (Evoral::Parameter const &, bool show)
|
||||||
|
{
|
||||||
|
std::shared_ptr<AutomationControl> c = midi_track()->velocity_control();
|
||||||
|
|
||||||
|
if (!c) {
|
||||||
|
error << "MidiTrack has no velocity automation, unable to add automation track view." << endmsg;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
velocity_track.reset (new AutomationTimeAxisView (_session,
|
||||||
|
_route, midi_track(), c, c->parameter(),
|
||||||
|
_editor,
|
||||||
|
*this,
|
||||||
|
false,
|
||||||
|
parent_canvas,
|
||||||
|
midi_track()->describe_parameter(c->parameter())));
|
||||||
|
|
||||||
|
if (_view) {
|
||||||
|
_view->foreach_regionview (sigc::mem_fun (*velocity_track.get(), &TimeAxisView::add_ghost));
|
||||||
|
}
|
||||||
|
|
||||||
|
add_automation_child (Evoral::Parameter(MidiVelocityAutomation), velocity_track, show);
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -200,6 +200,10 @@ private:
|
||||||
ParameterMenuMap _controller_menu_map;
|
ParameterMenuMap _controller_menu_map;
|
||||||
|
|
||||||
StepEditor* _step_editor;
|
StepEditor* _step_editor;
|
||||||
|
|
||||||
|
std::shared_ptr<AutomationTimeAxisView> velocity_track;
|
||||||
|
Gtk::CheckMenuItem* velocity_menu_item;
|
||||||
|
void create_velocity_automation_child (Evoral::Parameter const &, bool show);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* __ardour_midi_time_axis_h__ */
|
#endif /* __ardour_midi_time_axis_h__ */
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue