summaryrefslogtreecommitdiff
path: root/gtk2_ardour/route_time_axis.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2010-01-06 21:56:23 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2010-01-06 21:56:23 +0000
commited6545eb5b360afc1a11f3dec0bb553a11e64436 (patch)
tree5c81bbab7de9bfc2ddde49d6bcfa77da12dd7f60 /gtk2_ardour/route_time_axis.cc
parent285e4c648a794a1bf311621029883b1adbb32c8d (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.cc51
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();