gain_automation_item = dynamic_cast<CheckMenuItem*> (&automation_items.back ());
gain_automation_item->set_active (gain_track->marked_for_display ());
- _parameter_menu_map[Evoral::Parameter(GainAutomation)] = gain_automation_item;
+ _main_automation_menu_map[Evoral::Parameter(GainAutomation)] = gain_automation_item;
automation_items.push_back (CheckMenuElem (_("Pan"), sigc::mem_fun (*this, &AudioTimeAxisView::update_pan_track_visibility)));
pan_automation_item = dynamic_cast<CheckMenuItem*> (&automation_items.back ());
set<Evoral::Parameter> const & params = _route->panner()->what_can_be_automated ();
for (set<Evoral::Parameter>::iterator p = params.begin(); p != params.end(); ++p) {
- _parameter_menu_map[*p] = pan_automation_item;
+ _main_automation_menu_map[*p] = pan_automation_item;
}
}
detach_menu (*controller_menu);
}
+ _channel_command_menu_map.clear ();
RouteTimeAxisView::build_automation_action_menu ();
MenuList& automation_items = automation_action_menu->items();
something about MIDI (!) would not expect to find them there.
*/
- add_channel_command_menu_item (automation_items, _("Program Change"), MidiPgmChangeAutomation, MIDI_CMD_PGM_CHANGE);
- add_channel_command_menu_item (automation_items, _("Bender"), MidiPitchBenderAutomation, MIDI_CMD_BENDER);
- add_channel_command_menu_item (automation_items, _("Pressure"), MidiChannelPressureAutomation, MIDI_CMD_CHANNEL_PRESSURE);
+ add_channel_command_menu_item (automation_items, _("Program Change"), MidiPgmChangeAutomation, 0);
+ add_channel_command_menu_item (automation_items, _("Bender"), MidiPitchBenderAutomation, 0);
+ add_channel_command_menu_item (automation_items, _("Pressure"), MidiChannelPressureAutomation, 0);
/* now all MIDI controllers. Always offer the possibility that we will rebuild the controllers menu
since it might need to be updated after a channel mode change or other change. Also detach it
visible = true;
}
}
-
+
CheckMenuItem* cmi = static_cast<CheckMenuItem*>(&chn_items.back());
- _parameter_menu_map[fully_qualified_param] = cmi;
+ _channel_command_menu_map[fully_qualified_param] = cmi;
cmi->set_active (visible);
}
}
}
CheckMenuItem* cmi = static_cast<CheckMenuItem*>(&items.back());
- _parameter_menu_map[fully_qualified_param] = cmi;
+ _channel_command_menu_map[fully_qualified_param] = cmi;
cmi->set_active (visible);
/* one channel only */
}
CheckMenuItem* cmi = static_cast<CheckMenuItem*>(&chn_items.back());
- _parameter_menu_map[fully_qualified_param] = cmi;
+ _controller_menu_map[fully_qualified_param] = cmi;
cmi->set_active (visible);
}
}
}
CheckMenuItem* cmi = static_cast<CheckMenuItem*>(&ctl_items.back());
- _parameter_menu_map[fully_qualified_param] = cmi;
+ _controller_menu_map[fully_qualified_param] = cmi;
cmi->set_active (visible);
/* one channel only */
RouteTimeAxisView::show_existing_automation ();
}
-/** Hide an automation track for the given parameter (pitch bend, channel pressure).
+/** Create an automation track for the given parameter (pitch bend, channel pressure).
*/
void
MidiTimeAxisView::create_automation_child (const Evoral::Parameter& param, bool show)
/* TODO: Bender, PgmChange, Pressure */
/* invalidate the controller menu, so that we rebuilt it next time */
+ _controller_menu_map.clear ();
delete controller_menu;
controller_menu = 0;
_route->gui_changed ("track_height", this);
}
}
+
+Gtk::CheckMenuItem*
+MidiTimeAxisView::automation_child_menu_item (Evoral::Parameter param)
+{
+ Gtk::CheckMenuItem* m = RouteTimeAxisView::automation_child_menu_item (param);
+ if (m) {
+ return m;
+ }
+
+ ParameterMenuMap::iterator i = _controller_menu_map.find (param);
+ if (i != _controller_menu_map.end()) {
+ return i->second;
+ }
+
+ i = _channel_command_menu_map.find (param);
+ if (i != _channel_command_menu_map.end()) {
+ return i->second;
+ }
+
+ return 0;
+}
const MidiMultipleChannelSelector& channel_selector() { return _channel_selector; }
+ Gtk::CheckMenuItem* automation_child_menu_item (Evoral::Parameter);
+
private:
sigc::signal<void, std::string, std::string> _midi_patch_settings_changed;
void add_note_selection_region_view (RegionView* rv, uint8_t note, uint16_t chn_mask);
void extend_note_selection_region_view (RegionView*, uint8_t note, uint16_t chn_mask);
void toggle_note_selection_region_view (RegionView*, uint8_t note, uint16_t chn_mask);
+
+ /** parameter -> menu item map for the channel command items */
+ ParameterMenuMap _channel_command_menu_map;
+ /** parameter -> menu item map for the controller menu */
+ ParameterMenuMap _controller_menu_map;
};
#endif /* __ardour_midi_time_axis_h__ */
update_diskstream_display ();
+ _subplugin_menu_map.clear ();
subplugin_menu.items().clear ();
_route->foreach_processor (sigc::mem_fun (*this, &RouteTimeAxisView::add_processor_to_subplugin_menu));
_route->foreach_processor (sigc::mem_fun (*this, &RouteTimeAxisView::add_existing_processor_automation_curves));
detach_menu (subplugin_menu);
+ _main_automation_menu_map.clear ();
delete automation_action_menu;
automation_action_menu = new Menu;
i->second->get_state_node()->add_property ("shown", X_("yes"));
Gtk::CheckMenuItem* menu = automation_child_menu_item (i->first);
- assert (menu);
- menu->set_active(true);
+ if (menu) {
+ menu->set_active(true);
+ }
}
}
items.push_back (CheckMenuElem (name));
mitem = dynamic_cast<CheckMenuItem*> (&items.back());
- _parameter_menu_map[*i] = mitem;
+ _subplugin_menu_map[*i] = mitem;
if (has_visible_automation.find((*i)) != has_visible_automation.end()) {
mitem->set_active(true);
(*i)->valid = false;
}
+ _subplugin_menu_map.clear ();
subplugin_menu.items().clear ();
_route->foreach_processor (sigc::mem_fun (*this, &RouteTimeAxisView::add_processor_to_subplugin_menu));
Gtk::CheckMenuItem*
RouteTimeAxisView::automation_child_menu_item (Evoral::Parameter param)
{
- ParameterMenuMap::iterator i = _parameter_menu_map.find (param);
- if (i == _parameter_menu_map.end()) {
- return 0;
+ ParameterMenuMap::iterator i = _main_automation_menu_map.find (param);
+ if (i != _main_automation_menu_map.end()) {
+ return i->second;
+ }
+
+ i = _subplugin_menu_map.find (param);
+ if (i != _subplugin_menu_map.end()) {
+ return i->second;
}
- return i->second;
+ return 0;
}
AutomationTracks automation_tracks() { return _automation_tracks; }
boost::shared_ptr<AutomationTimeAxisView> automation_child(Evoral::Parameter param);
- Gtk::CheckMenuItem* automation_child_menu_item (Evoral::Parameter);
+ virtual Gtk::CheckMenuItem* automation_child_menu_item (Evoral::Parameter);
std::string name() const;
StreamView* view() const { return _view; }
AutomationTracks _automation_tracks;
typedef std::map<Evoral::Parameter, Gtk::CheckMenuItem*> ParameterMenuMap;
- ParameterMenuMap _parameter_menu_map;
+ /** parameter -> menu item map for the main automation menu */
+ ParameterMenuMap _main_automation_menu_map;
+ /** parameter -> menu item map for the plugin automation menu */
+ ParameterMenuMap _subplugin_menu_map;
void post_construct ();