diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2010-01-06 21:56:23 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2010-01-06 21:56:23 +0000 |
commit | ed6545eb5b360afc1a11f3dec0bb553a11e64436 (patch) | |
tree | 5c81bbab7de9bfc2ddde49d6bcfa77da12dd7f60 /gtk2_ardour/route_time_axis.cc | |
parent | 285e4c648a794a1bf311621029883b1adbb32c8d (diff) |
screw up MIDI control "automation" tracks quite a bit while trying to improve menu structure BUT add a MIDI tracer window and fix a crashing bug caused by regions prematurely being destroyed
git-svn-id: svn://localhost/ardour2/branches/3.0@6465 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/route_time_axis.cc')
-rw-r--r-- | gtk2_ardour/route_time_axis.cc | 51 |
1 files changed, 45 insertions, 6 deletions
diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc index f25bc47bce..688cace9b4 100644 --- a/gtk2_ardour/route_time_axis.cc +++ b/gtk2_ardour/route_time_axis.cc @@ -23,6 +23,7 @@ #include <algorithm> #include <string> #include <vector> +#include <map> #include <utility> #include <sigc++/bind.h> @@ -32,6 +33,7 @@ #include "pbd/whitespace.h" #include "pbd/memento_command.h" #include "pbd/enumwriter.h" +#include "pbd/stacktrace.h" #include <gtkmm/menu.h> #include <gtkmm/menuitem.h> @@ -415,6 +417,7 @@ RouteTimeAxisView::build_automation_action_menu () using namespace Menu_Helpers; automation_action_menu = manage (new Menu); + cerr << "New AAM @ " << automation_action_menu << endl; MenuList& automation_items = automation_action_menu->items(); automation_action_menu->set_name ("ArdourContextMenu"); @@ -443,15 +446,47 @@ RouteTimeAxisView::build_automation_action_menu () map<Evoral::Parameter, RouteAutomationNode*>::iterator i; + map<string,Menu*> param_menu_map; + for (i = _automation_tracks.begin(); i != _automation_tracks.end(); ++i) { - automation_items.push_back (SeparatorElem()); + string desc = _route->describe_parameter(i->second->param); + string::size_type bracket = desc.find_first_of ('['); + + if (bracket == string::npos) { + + /* item gets its own entry in the menu */ + + automation_items.push_back (CheckMenuElem (desc, sigc::bind (sigc::mem_fun(*this, &RouteTimeAxisView::toggle_automation_track), i->second->param))); + + i->second->menu_item = static_cast<Gtk::CheckMenuItem*>(&automation_items.back()); + i->second->menu_item->set_active (show_automation (i->second->param)); + + automation_items.push_back (SeparatorElem()); - automation_items.push_back(CheckMenuElem (_route->describe_parameter(i->second->param), - sigc::bind (sigc::mem_fun(*this, &RouteTimeAxisView::toggle_automation_track), i->second->param))); + } else { + + /* subgroup related items in their own submenu */ + + string first_part = desc.substr (0, bracket); + Menu* m; + map<string,Menu*>::iterator x; + + if ((x = param_menu_map.find (first_part)) == param_menu_map.end()) { + m = manage (new Menu); + m->set_name ("ArdourContextMenu"); + automation_items.push_back (MenuElem (first_part + "...", *m)); + param_menu_map.insert (pair<string,Menu*>(first_part, m)); + } else { + m = x->second; + } + + MenuList& mi = m->items(); + mi.push_back (CheckMenuElem (desc, sigc::bind (sigc::mem_fun(*this, &RouteTimeAxisView::toggle_automation_track), i->second->param))); - i->second->menu_item = static_cast<Gtk::CheckMenuItem*>(&automation_items.back()); - i->second->menu_item->set_active(show_automation(i->second->param)); + i->second->menu_item = static_cast<Gtk::CheckMenuItem*>(&mi.back()); + i->second->menu_item->set_active(show_automation(i->second->param)); + } } } @@ -481,8 +516,11 @@ RouteTimeAxisView::build_display_menu () if (!Profile->get_sae()) { items.push_back (MenuElem (_("Remote Control ID..."), sigc::mem_fun (*this, &RouteUI::open_remote_control_id_dialog))); /* rebuild this every time */ + cerr << "Build a new AAM, old was " << automation_action_menu << endl; build_automation_action_menu (); + cerr << "Attach AAM @ " << automation_action_menu << endl; items.push_back (MenuElem (_("Automation"), *automation_action_menu)); + cerr << "Attachment is done\n"; items.push_back (SeparatorElem()); } @@ -1636,8 +1674,9 @@ RouteTimeAxisView::toggle_automation_track (Evoral::Parameter param) { RouteAutomationNode* node = automation_track(param); - if (!node) + if (!node) { return; + } bool showit = node->menu_item->get_active(); |