comments for BBT math methods; remove chunks from GUI; split location UI into a...
[ardour.git] / gtk2_ardour / editor_actions.cc
index 21edd3828cfb1c09f98ad970cfc1a14f81b72727..25239ef35670782949dd03b59252bbf37c10aafb 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2000-2007 Paul Davis 
+    Copyright (C) 2000-2007 Paul Davis
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -22,6 +22,7 @@
 
 #include "ardour/ardour.h"
 #include "ardour/profile.h"
+#include "ardour/session.h"
 
 #include "actions.h"
 #include "ardour_ui.h"
@@ -50,7 +51,7 @@ Editor::register_actions ()
        RefPtr<Action> act;
 
        editor_actions = ActionGroup::create (X_("Editor"));
-       
+
        /* non-operative menu items for menu bar */
 
        ActionManager::register_action (editor_actions, X_("AlignMenu"), _("Align"));
@@ -143,14 +144,14 @@ Editor::register_actions ()
        act = ActionManager::register_action (editor_actions, "playhead-to-previous-region-sync", _("Playhead to Previous Region Sync"), bind (mem_fun(*this, &Editor::cursor_to_previous_region_point), playhead_cursor, RegionPoint (SyncPoint)));
        ActionManager::session_sensitive_actions.push_back (act);
 
-       act = ActionManager::register_action (editor_actions, "selected-marker-to-next-region-boundary", _("to Next Region Boundary"), bind (mem_fun(*this, &Editor::selected_marker_to_next_region_boundary), true));
-       ActionManager::session_sensitive_actions.push_back (act);
-       act = ActionManager::register_action (editor_actions, "selected-marker-to-next-region-boundary-noselection", _("to Next Region Boundary (No Track Selection)"), bind (mem_fun(*this, &Editor::selected_marker_to_next_region_boundary), false));
-       ActionManager::session_sensitive_actions.push_back (act);
-       act = ActionManager::register_action (editor_actions, "selected-marker-to-previous-region-boundary", _("to Previous Region Boundary"), bind (mem_fun(*this, &Editor::selected_marker_to_previous_region_boundary), true));
-       ActionManager::session_sensitive_actions.push_back (act);
-       act = ActionManager::register_action (editor_actions, "selected-marker-to-previous-region-boundary-noselection", _("to Previous Region Boundary (No Track Selection)"), bind (mem_fun(*this, &Editor::selected_marker_to_previous_region_boundary), false));
-       ActionManager::session_sensitive_actions.push_back (act);
+       act = ActionManager::register_action (editor_actions, "selected-marker-to-next-region-boundary", _("to Next Region Boundary"), bind (mem_fun(*this, &Editor::selected_marker_to_next_region_boundary), true));
+       ActionManager::session_sensitive_actions.push_back (act);
+       act = ActionManager::register_action (editor_actions, "selected-marker-to-next-region-boundary-noselection", _("to Next Region Boundary (No Track Selection)"), bind (mem_fun(*this, &Editor::selected_marker_to_next_region_boundary), false));
+       ActionManager::session_sensitive_actions.push_back (act);
+       act = ActionManager::register_action (editor_actions, "selected-marker-to-previous-region-boundary", _("to Previous Region Boundary"), bind (mem_fun(*this, &Editor::selected_marker_to_previous_region_boundary), true));
+       ActionManager::session_sensitive_actions.push_back (act);
+       act = ActionManager::register_action (editor_actions, "selected-marker-to-previous-region-boundary-noselection", _("to Previous Region Boundary (No Track Selection)"), bind (mem_fun(*this, &Editor::selected_marker_to_previous_region_boundary), false));
+       ActionManager::session_sensitive_actions.push_back (act);
 
        act = ActionManager::register_action (editor_actions, "edit-cursor-to-next-region-start", _("To Next Region Start"), bind (mem_fun(*this, &Editor::selected_marker_to_next_region_point), RegionPoint (Start)));
        ActionManager::session_sensitive_actions.push_back (act);
@@ -166,7 +167,7 @@ Editor::register_actions ()
        act = ActionManager::register_action (editor_actions, "edit-cursor-to-previous-region-sync", _("To Previous Region Sync"), bind (mem_fun(*this, &Editor::selected_marker_to_previous_region_point), RegionPoint (SyncPoint)));
        ActionManager::session_sensitive_actions.push_back (act);
 
-        act = ActionManager::register_action (editor_actions, "edit-cursor-to-range-start", _("To Range Start"), mem_fun(*this, &Editor::selected_marker_to_selection_start));
+       act = ActionManager::register_action (editor_actions, "edit-cursor-to-range-start", _("To Range Start"), mem_fun(*this, &Editor::selected_marker_to_selection_start));
        ActionManager::session_sensitive_actions.push_back (act);
        act = ActionManager::register_action (editor_actions, "edit-cursor-to-range-end", _("To Range End"), mem_fun(*this, &Editor::selected_marker_to_selection_end));
        ActionManager::session_sensitive_actions.push_back (act);
@@ -195,17 +196,17 @@ Editor::register_actions ()
        act = ActionManager::register_action (editor_actions, "select-range-between-cursors", _("Select Edit Range"), mem_fun(*this, &Editor::select_range_between));
        ActionManager::session_sensitive_actions.push_back (act);
 
-               act = ActionManager::register_action (editor_actions, "select-all-in-punch-range", _("Select All in Punch Range"), mem_fun(*this, &Editor::select_all_selectables_using_punch));
+       act = ActionManager::register_action (editor_actions, "select-all-in-punch-range", _("Select All in Punch Range"), mem_fun(*this, &Editor::select_all_selectables_using_punch));
        ActionManager::session_sensitive_actions.push_back (act);
-               act = ActionManager::register_action (editor_actions, "select-all-in-loop-range", _("Select All in Loop Range"), mem_fun(*this, &Editor::select_all_selectables_using_loop));
+       act = ActionManager::register_action (editor_actions, "select-all-in-loop-range", _("Select All in Loop Range"), mem_fun(*this, &Editor::select_all_selectables_using_loop));
        ActionManager::session_sensitive_actions.push_back (act);
-       
-               act = ActionManager::register_action (editor_actions, "select-next-route", _("Select Next Track/Bus"), mem_fun(*this, &Editor::select_next_route));
+
+       act = ActionManager::register_action (editor_actions, "select-next-route", _("Select Next Track/Bus"), mem_fun(*this, &Editor::select_next_route));
        ActionManager::session_sensitive_actions.push_back (act);
-               act = ActionManager::register_action (editor_actions, "select-prev-route", _("Select Previous Track/Bus"), mem_fun(*this, &Editor::select_prev_route));
+       act = ActionManager::register_action (editor_actions, "select-prev-route", _("Select Previous Track/Bus"), mem_fun(*this, &Editor::select_prev_route));
        ActionManager::session_sensitive_actions.push_back (act);
-       
-               act = ActionManager::register_action (editor_actions, "track-record-enable-toggle", _("Toggle Record Enable"), mem_fun(*this, &Editor::toggle_record_enable));
+
+       act = ActionManager::register_action (editor_actions, "track-record-enable-toggle", _("Toggle Record Enable"), mem_fun(*this, &Editor::toggle_record_enable));
        ActionManager::session_sensitive_actions.push_back (act);
 
 
@@ -310,9 +311,9 @@ Editor::register_actions ()
        ActionManager::session_sensitive_actions.push_back (act);
        act = ActionManager::register_action (editor_actions, "zoom-to-session", _("Zoom to Session"), mem_fun(*this, &Editor::temporal_zoom_session));
        ActionManager::session_sensitive_actions.push_back (act);
-       act = ActionManager::register_action (editor_actions, "zoom-to-region", _("Zoom to Region"), bind (mem_fun(*this, &Editor::toggle_zoom_region), false));
+       act = ActionManager::register_action (editor_actions, "zoom-to-region", _("Zoom to Region"), bind (mem_fun(*this, &Editor::zoom_to_region), false));
        ActionManager::session_sensitive_actions.push_back (act);
-       act = ActionManager::register_action (editor_actions, "zoom-to-region-both-axes", _("Zoom to Region (W&H)"), bind (mem_fun(*this, &Editor::toggle_zoom_region), true));
+       act = ActionManager::register_action (editor_actions, "zoom-to-region-both-axes", _("Zoom to Region (W&H)"), bind (mem_fun(*this, &Editor::zoom_to_region), true));
        ActionManager::session_sensitive_actions.push_back (act);
        act = ActionManager::register_action (editor_actions, "toggle-zoom", _("Toggle Zoom State"), mem_fun(*this, &Editor::swap_visual_state));
        ActionManager::session_sensitive_actions.push_back (act);
@@ -404,7 +405,7 @@ Editor::register_actions ()
        act = ActionManager::register_action (editor_actions, "add-range-markers-from-region", _("Add Range Marker(s)"), mem_fun(*this, &Editor::add_locations_from_audio_region));
        ActionManager::session_sensitive_actions.push_back (act);
        ActionManager::region_selection_sensitive_actions.push_back (act);
-       
+
        act = ActionManager::register_action (editor_actions, "set-fade-in-length", _("Set Fade In Length"), bind (mem_fun(*this, &Editor::set_fade_length), true));
        ActionManager::session_sensitive_actions.push_back (act);
        act = ActionManager::register_action (editor_actions, "toggle-fade-in-active", _("Toggle Fade In Active"), bind (mem_fun(*this, &Editor::toggle_fade_active), true));
@@ -434,17 +435,17 @@ Editor::register_actions ()
        ActionManager::session_sensitive_actions.push_back (act);
        ActionManager::region_selection_sensitive_actions.push_back (act);
 
-        act = ActionManager::register_action (editor_actions, "play-from-edit-point", _("Play From Edit Point"), mem_fun(*this, &Editor::play_from_edit_point));
-        ActionManager::session_sensitive_actions.push_back (act);
-        act = ActionManager::register_action (editor_actions, "play-from-edit-point-and-return", _("Play from Edit Point & Return"), mem_fun(*this, &Editor::play_from_edit_point_and_return));
-        ActionManager::session_sensitive_actions.push_back (act);
+       act = ActionManager::register_action (editor_actions, "play-from-edit-point", _("Play From Edit Point"), mem_fun(*this, &Editor::play_from_edit_point));
+       ActionManager::session_sensitive_actions.push_back (act);
+       act = ActionManager::register_action (editor_actions, "play-from-edit-point-and-return", _("Play from Edit Point & Return"), mem_fun(*this, &Editor::play_from_edit_point_and_return));
+       ActionManager::session_sensitive_actions.push_back (act);
 
-        act = ActionManager::register_action (editor_actions, "play-edit-range", _("Play Edit Range"), mem_fun(*this, &Editor::play_edit_range));
-        act = ActionManager::register_action (editor_actions, "play-selected-regions", _("Play Selected Region(s)"), mem_fun(*this, &Editor::play_selected_region));
-        ActionManager::session_sensitive_actions.push_back (act);
+       act = ActionManager::register_action (editor_actions, "play-edit-range", _("Play Edit Range"), mem_fun(*this, &Editor::play_edit_range));
+       act = ActionManager::register_action (editor_actions, "play-selected-regions", _("Play Selected Region(s)"), mem_fun(*this, &Editor::play_selected_region));
+       ActionManager::session_sensitive_actions.push_back (act);
        ActionManager::region_selection_sensitive_actions.push_back (act);
-        act = ActionManager::register_action (editor_actions, "brush-at-mouse", _("Brush at Mouse"), mem_fun(*this, &Editor::kbd_brush));
-        ActionManager::session_sensitive_actions.push_back (act);
+       act = ActionManager::register_action (editor_actions, "brush-at-mouse", _("Brush at Mouse"), mem_fun(*this, &Editor::kbd_brush));
+       ActionManager::session_sensitive_actions.push_back (act);
 
        act = ActionManager::register_action (editor_actions, "set-playhead", _("Playhead to Mouse"), mem_fun(*this, &Editor::set_playhead_cursor));
        ActionManager::session_sensitive_actions.push_back (act);
@@ -479,40 +480,40 @@ Editor::register_actions ()
        ActionManager::session_sensitive_actions.push_back (act);
        ActionManager::region_selection_sensitive_actions.push_back (act);
        act = ActionManager::register_action (editor_actions, "split-region", _("Split Region"), mem_fun(*this, &Editor::split));
-        ActionManager::session_sensitive_actions.push_back (act);
+       ActionManager::session_sensitive_actions.push_back (act);
        ActionManager::region_selection_sensitive_actions.push_back (act);
        act = ActionManager::register_action (editor_actions, "set-region-sync-position", _("Set Region Sync Position"), mem_fun(*this, &Editor::set_region_sync_from_edit_point));
-        ActionManager::session_sensitive_actions.push_back (act);
+       ActionManager::session_sensitive_actions.push_back (act);
        ActionManager::region_selection_sensitive_actions.push_back (act);
        act = ActionManager::register_action (editor_actions, "remove-region-sync", _("Remove Region Sync"), mem_fun(*this, &Editor::remove_region_sync));
-        ActionManager::session_sensitive_actions.push_back (act);
+       ActionManager::session_sensitive_actions.push_back (act);
        ActionManager::region_selection_sensitive_actions.push_back (act);
        act = ActionManager::register_action (editor_actions, "raise-region", _("Raise Region"), mem_fun(*this, &Editor::raise_region));
-        ActionManager::session_sensitive_actions.push_back (act);
+       ActionManager::session_sensitive_actions.push_back (act);
        ActionManager::region_selection_sensitive_actions.push_back (act);
        act = ActionManager::register_action (editor_actions, "lower-region", _("Lower Region"), mem_fun(*this, &Editor::lower_region));
-        ActionManager::session_sensitive_actions.push_back (act);
+       ActionManager::session_sensitive_actions.push_back (act);
        ActionManager::region_selection_sensitive_actions.push_back (act);
        act = ActionManager::register_action (editor_actions, "export-region", _("Export Region"), mem_fun(*this, &Editor::export_region));
-        ActionManager::session_sensitive_actions.push_back (act);
+       ActionManager::session_sensitive_actions.push_back (act);
        ActionManager::region_selection_sensitive_actions.push_back (act);
        act = ActionManager::register_toggle_action (editor_actions, "lock-region", _("Lock Region"), mem_fun(*this, &Editor::toggle_region_lock));
-        ActionManager::session_sensitive_actions.push_back (act);
+       ActionManager::session_sensitive_actions.push_back (act);
        ActionManager::region_selection_sensitive_actions.push_back (act);
        act = ActionManager::register_toggle_action (editor_actions, "glue-region", _("Glue Region to Bars & Beats"), bind (mem_fun (*this, &Editor::set_region_lock_style), Region::MusicTime));
-        ActionManager::session_sensitive_actions.push_back (act);
+       ActionManager::session_sensitive_actions.push_back (act);
        ActionManager::region_selection_sensitive_actions.push_back (act);
        act = ActionManager::register_action (editor_actions, "naturalize-region", _("Move to Original Position"), mem_fun (*this, &Editor::naturalize));
-        ActionManager::session_sensitive_actions.push_back (act);
+       ActionManager::session_sensitive_actions.push_back (act);
        ActionManager::region_selection_sensitive_actions.push_back (act);
        act = ActionManager::register_action (editor_actions, "reverse-region", _("Reverse"), mem_fun (*this, &Editor::reverse_region));
-        ActionManager::session_sensitive_actions.push_back (act);
+       ActionManager::session_sensitive_actions.push_back (act);
        ActionManager::region_selection_sensitive_actions.push_back (act);
        act = ActionManager::register_action (editor_actions, "monoize-region", _("Make mono regions"), (mem_fun(*this, &Editor::split_multichannel_region)));
-        ActionManager::session_sensitive_actions.push_back (act);
+       ActionManager::session_sensitive_actions.push_back (act);
        ActionManager::region_selection_sensitive_actions.push_back (act);
        act = ActionManager::register_action (editor_actions, "region-fill-track", _("Fill Track"), (mem_fun(*this, &Editor::region_fill_track)));
-        ActionManager::session_sensitive_actions.push_back (act);
+       ActionManager::session_sensitive_actions.push_back (act);
        ActionManager::region_selection_sensitive_actions.push_back (act);
        act = ActionManager::register_action (editor_actions, "mute-unmute-region", _("Mute/Unmute Region"), mem_fun(*this, &Editor::kbd_mute_unmute_region));
        ActionManager::session_sensitive_actions.push_back (act);
@@ -553,7 +554,7 @@ Editor::register_actions ()
        act = ActionManager::register_action (editor_actions, "quantize-region", _("Quantize Region"), mem_fun(*this, &Editor::quantize_region));
        ActionManager::session_sensitive_actions.push_back (act);
        ActionManager::region_selection_sensitive_actions.push_back (act);
-       
+
        act = ActionManager::register_action (editor_actions, "set-tempo-from-region", _("Set Tempo from Region=Bar"), mem_fun(*this, &Editor::use_region_as_bar));
        ActionManager::session_sensitive_actions.push_back (act);
        ActionManager::region_selection_sensitive_actions.push_back (act);
@@ -571,6 +572,9 @@ Editor::register_actions ()
        ActionManager::session_sensitive_actions.push_back (act);
        act = ActionManager::register_action (editor_actions, "toggle-midi-connection-manager", _("MIDI Connection Manager"), bind (mem_fun (*this, &Editor::show_global_port_matrix), ARDOUR::DataType::MIDI));
        ActionManager::session_sensitive_actions.push_back (act);
+       act = ActionManager::register_action (editor_actions, "toggle-log-window", _("Log"),
+                       mem_fun (ARDOUR_UI::instance(), &ARDOUR_UI::toggle_errors));
+       ActionManager::session_sensitive_actions.push_back (act);
 
        act = ActionManager::register_action (editor_actions, "tab-to-transient-forwards", _("Move Forward to Transient"), bind (mem_fun(*this, &Editor::tab_to_transient), true));
        ActionManager::session_sensitive_actions.push_back (act);
@@ -579,8 +583,6 @@ Editor::register_actions ()
 
        act = ActionManager::register_action (editor_actions, "crop", _("Crop"), mem_fun(*this, &Editor::crop_region_to_selection));
        ActionManager::session_sensitive_actions.push_back (act);
-       act = ActionManager::register_action (editor_actions, "insert-chunk", _("Insert Chunk"), bind (mem_fun(*this, &Editor::paste_named_selection), 1.0f));
-       ActionManager::session_sensitive_actions.push_back (act);
 
        act = ActionManager::register_action (editor_actions, "start-range", _("Start Range"), mem_fun(*this, &Editor::keyboard_selection_begin));
        ActionManager::session_sensitive_actions.push_back (act);
@@ -617,28 +619,28 @@ Editor::register_actions ()
        act = ActionManager::register_action (editor_actions, "fit-tracks", _("Fit Selected Tracks"), mem_fun(*this, &Editor::fit_selected_tracks));
        ActionManager::session_sensitive_actions.push_back (act);
        act = ActionManager::register_action (editor_actions, "track-height-largest", _("Largest"), bind (
-                       mem_fun(*this, &Editor::set_track_height), TimeAxisView::hLargest));
+                               mem_fun(*this, &Editor::set_track_height), TimeAxisView::hLargest));
        ActionManager::session_sensitive_actions.push_back (act);
        ActionManager::track_selection_sensitive_actions.push_back (act);
        act = ActionManager::register_action (editor_actions, "track-height-larger", _("Larger"), bind (
-                       mem_fun(*this, &Editor::set_track_height), TimeAxisView::hLarger));
+                               mem_fun(*this, &Editor::set_track_height), TimeAxisView::hLarger));
        ActionManager::session_sensitive_actions.push_back (act);
        ActionManager::track_selection_sensitive_actions.push_back (act);
        act = ActionManager::register_action (editor_actions, "track-height-large", _("Large"), bind (
-                       mem_fun(*this, &Editor::set_track_height), TimeAxisView::hLarge));
+                               mem_fun(*this, &Editor::set_track_height), TimeAxisView::hLarge));
        ActionManager::session_sensitive_actions.push_back (act);
        ActionManager::track_selection_sensitive_actions.push_back (act);
        act = ActionManager::register_action (editor_actions, "track-height-normal", _("Normal"), bind (
-                       mem_fun(*this, &Editor::set_track_height), TimeAxisView::hNormal));
+                               mem_fun(*this, &Editor::set_track_height), TimeAxisView::hNormal));
        ActionManager::session_sensitive_actions.push_back (act);
        ActionManager::track_selection_sensitive_actions.push_back (act);
        act = ActionManager::register_action (editor_actions, "track-height-small", _("Small"), bind (
-                       mem_fun(*this, &Editor::set_track_height), TimeAxisView::hSmall));
+                               mem_fun(*this, &Editor::set_track_height), TimeAxisView::hSmall));
        ActionManager::track_selection_sensitive_actions.push_back (act);
        ActionManager::session_sensitive_actions.push_back (act);
        ActionManager::track_selection_sensitive_actions.push_back (act);
        act = ActionManager::register_action (editor_actions, "track-height-smaller", _("Smaller"), bind (
-                       mem_fun(*this, &Editor::set_track_height), TimeAxisView::hSmaller));
+                               mem_fun(*this, &Editor::set_track_height), TimeAxisView::hSmaller));
        ActionManager::session_sensitive_actions.push_back (act);
        ActionManager::track_selection_sensitive_actions.push_back (act);
 
@@ -675,44 +677,51 @@ Editor::register_actions ()
        mouse_move_button.set_image (*(manage (new Image (::get_icon("tool_object")))));
        mouse_move_button.set_label ("");
        mouse_move_button.set_name ("MouseModeButton");
+       mouse_move_button.get_image ()->show ();
 
        act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-range", _("Range Tool"), bind (mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseRange));
        act->connect_proxy (mouse_select_button);
-       mouse_select_button.set_image (*(manage (new Image (::get_xpm("tool_range.xpm")))));
+       mouse_select_button.set_image (*(manage (new Image (::get_icon("tool_range")))));
        mouse_select_button.set_label ("");
        mouse_select_button.set_name ("MouseModeButton");
+       mouse_select_button.get_image ()->show ();
 
        act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-gain", _("Gain Tool"), bind (mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseGain));
        act->connect_proxy (mouse_gain_button);
        mouse_gain_button.set_image (*(manage (new Image (::get_icon("tool_gain")))));
        mouse_gain_button.set_label ("");
        mouse_gain_button.set_name ("MouseModeButton");
+       mouse_gain_button.get_image ()->show ();
 
        act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-zoom", _("Zoom Tool"), bind (mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseZoom));
        act->connect_proxy (mouse_zoom_button);
        mouse_zoom_button.set_image (*(manage (new Image (::get_icon("tool_zoom")))));
        mouse_zoom_button.set_label ("");
        mouse_zoom_button.set_name ("MouseModeButton");
+       mouse_zoom_button.get_image ()->show ();
 
        act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-audition", _("Audition Tool"), bind (mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseAudition));
        act->connect_proxy (mouse_audition_button);
        mouse_audition_button.set_image (*(manage (new Image (::get_icon("tool_audition")))));
        mouse_audition_button.set_label ("");
        mouse_audition_button.set_name ("MouseModeButton");
+       mouse_audition_button.get_image ()->show ();
 
        act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-timefx", _("Timefx Tool"), bind (mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseTimeFX));
        act->connect_proxy (mouse_timefx_button);
        mouse_timefx_button.set_image (*(manage (new Image (::get_icon("tool_stretch")))));
        mouse_timefx_button.set_label ("");
        mouse_timefx_button.set_name ("MouseModeButton");
-       
+       mouse_timefx_button.get_image ()->show ();
+
        ActionManager::register_action (editor_actions, "step-mouse-mode", _("Step Mouse Mode"), bind (mem_fun(*this, &Editor::step_mouse_mode), true));
-       
+
        act = ActionManager::register_toggle_action (mouse_mode_actions, "toggle-internal-edit", _("Edit MIDI"), mem_fun(*this, &Editor::toggle_internal_editing));
        act->connect_proxy (internal_edit_button);
        internal_edit_button.set_image (*(manage (new Image (::get_icon("tool_note")))));
        internal_edit_button.set_label ("");
        internal_edit_button.set_name ("MouseModeButton");
+       internal_edit_button.get_image ()->show ();
 
        RadioAction::Group edit_point_group;
        ActionManager::register_radio_action (editor_actions, edit_point_group, X_("edit-at-playhead"), _("Playhead"), (bind (mem_fun(*this, &Editor::edit_point_chosen), Editing::EditAtPlayhead)));
@@ -743,9 +752,9 @@ Editor::register_actions ()
        RadioAction::Group snap_choice_group;
 
        ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-cd-frame"), _("Snap to CD Frame"), (bind (mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToCDFrame)));
-       ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-smpte-frame"), _("Snap to SMPTE frame"), (bind (mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToSMPTEFrame)));
-       ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-smpte-seconds"), _("Snap to SMPTE seconds"), (bind (mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToSMPTESeconds)));
-       ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-smpte-minutes"), _("Snap to SMPTE minutes"), (bind (mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToSMPTEMinutes)));
+       ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-timecode-frame"), _("Snap to Timecode frame"), (bind (mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToTimecodeFrame)));
+       ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-timecode-seconds"), _("Snap to Timecode seconds"), (bind (mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToTimecodeSeconds)));
+       ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-timecode-minutes"), _("Snap to Timecode minutes"), (bind (mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToTimecodeMinutes)));
        ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-seconds"), _("Snap to Seconds"), (bind (mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToSeconds)));
        ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-minutes"), _("Snap to Minutes"), (bind (mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToMinutes)));
        ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-thirtyseconds"), _("Snap to Thirtyseconds"), (bind (mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToAThirtysecondBeat)));
@@ -762,7 +771,7 @@ Editor::register_actions ()
        ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-region-boundary"), _("Snap to Region Boundary"), (bind (mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToRegionBoundary)));
 
        /* RULERS */
-       
+
        Glib::RefPtr<ActionGroup> ruler_actions = ActionGroup::create (X_("Rulers"));
        ruler_tempo_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-tempo-ruler"), _("Tempo"), bind (mem_fun(*this, &Editor::toggle_ruler_visibility), ruler_time_tempo)));
        ruler_meter_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-meter-ruler"), _("Meter"), bind (mem_fun(*this, &Editor::toggle_ruler_visibility), ruler_time_meter)));
@@ -772,7 +781,7 @@ Editor::register_actions ()
        ruler_loop_punch_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-loop-punch-ruler"), _("Loop/Punch"), bind (mem_fun(*this, &Editor::toggle_ruler_visibility), ruler_time_transport_marker)));
        ruler_bbt_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-bbt-ruler"), _("Bars & Beats"), bind (mem_fun(*this, &Editor::toggle_ruler_visibility), ruler_metric_frames)));
        ruler_samples_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-samples-ruler"), _("Samples"), bind (mem_fun(*this, &Editor::toggle_ruler_visibility), ruler_metric_bbt)));
-       ruler_timecode_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-timecode-ruler"), _("Timecode"), bind (mem_fun(*this, &Editor::toggle_ruler_visibility), ruler_metric_smpte)));
+       ruler_timecode_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-timecode-ruler"), _("Timecode"), bind (mem_fun(*this, &Editor::toggle_ruler_visibility), ruler_metric_timecode)));
        ruler_minsec_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-minsec-ruler"), _("Min:Sec"), bind (mem_fun(*this, &Editor::toggle_ruler_visibility), ruler_metric_minsec)));
 
        /* set defaults here */
@@ -797,7 +806,7 @@ Editor::register_actions ()
        }
        ruler_samples_action->set_active (false);
        no_ruler_shown_update = false;
-       
+
        /* REGION LIST */
 
        Glib::RefPtr<ActionGroup> rl_actions = ActionGroup::create (X_("RegionList"));
@@ -817,61 +826,71 @@ Editor::register_actions ()
        ActionManager::register_toggle_action (rl_actions, X_("rlShowAuto"), _("Show Automatic Regions"), mem_fun (*_regions, &EditorRegions::toggle_show_auto_regions));
 
        ActionManager::register_radio_action (rl_actions, sort_order_group, X_("SortAscending"),  _("Ascending"),
-                              bind (mem_fun (*_regions, &EditorRegions::reset_sort_direction), true));
+                       bind (mem_fun (*_regions, &EditorRegions::reset_sort_direction), true));
        ActionManager::register_radio_action (rl_actions, sort_order_group, X_("SortDescending"),   _("Descending"),
-                                             bind (mem_fun (*_regions, &EditorRegions::reset_sort_direction), false));
-       
+                       bind (mem_fun (*_regions, &EditorRegions::reset_sort_direction), false));
+
        ActionManager::register_radio_action (rl_actions, sort_type_group, X_("SortByRegionName"),  _("By Region Name"),
-                                             bind (mem_fun (*_regions, &EditorRegions::reset_sort_type), ByName, false));
+                       bind (mem_fun (*_regions, &EditorRegions::reset_sort_type), ByName, false));
        ActionManager::register_radio_action (rl_actions, sort_type_group, X_("SortByRegionLength"),  _("By Region Length"),
-                                             bind (mem_fun (*_regions, &EditorRegions::reset_sort_type), ByLength, false));
+                       bind (mem_fun (*_regions, &EditorRegions::reset_sort_type), ByLength, false));
        ActionManager::register_radio_action (rl_actions, sort_type_group, X_("SortByRegionPosition"),  _("By Region Position"),
-                                             bind (mem_fun (*_regions, &EditorRegions::reset_sort_type), ByPosition, false));
+                       bind (mem_fun (*_regions, &EditorRegions::reset_sort_type), ByPosition, false));
        ActionManager::register_radio_action (rl_actions, sort_type_group, X_("SortByRegionTimestamp"),  _("By Region Timestamp"),
-                                             bind (mem_fun (*_regions, &EditorRegions::reset_sort_type), ByTimestamp, false));
+                       bind (mem_fun (*_regions, &EditorRegions::reset_sort_type), ByTimestamp, false));
        ActionManager::register_radio_action (rl_actions, sort_type_group, X_("SortByRegionStartinFile"),  _("By Region Start in File"),
-                                             bind (mem_fun (*_regions, &EditorRegions::reset_sort_type), ByStartInFile, false));
+                       bind (mem_fun (*_regions, &EditorRegions::reset_sort_type), ByStartInFile, false));
        ActionManager::register_radio_action (rl_actions, sort_type_group, X_("SortByRegionEndinFile"),  _("By Region End in File"),
-                                             bind (mem_fun (*_regions, &EditorRegions::reset_sort_type), ByEndInFile, false));
+                       bind (mem_fun (*_regions, &EditorRegions::reset_sort_type), ByEndInFile, false));
        ActionManager::register_radio_action (rl_actions, sort_type_group, X_("SortBySourceFileName"),  _("By Source File Name"),
-                                             bind (mem_fun (*_regions, &EditorRegions::reset_sort_type), BySourceFileName, false));
+                       bind (mem_fun (*_regions, &EditorRegions::reset_sort_type), BySourceFileName, false));
        ActionManager::register_radio_action (rl_actions, sort_type_group, X_("SortBySourceFileLength"),  _("By Source File Length"),
-                                             bind (mem_fun (*_regions, &EditorRegions::reset_sort_type), BySourceFileLength, false));
+                       bind (mem_fun (*_regions, &EditorRegions::reset_sort_type), BySourceFileLength, false));
        ActionManager::register_radio_action (rl_actions, sort_type_group, X_("SortBySourceFileCreationDate"),  _("By Source File Creation Date"),
-                                             bind (mem_fun (*_regions, &EditorRegions::reset_sort_type), BySourceFileCreationDate, false));
+                       bind (mem_fun (*_regions, &EditorRegions::reset_sort_type), BySourceFileCreationDate, false));
        ActionManager::register_radio_action (rl_actions, sort_type_group, X_("SortBySourceFilesystem"),  _("By Source Filesystem"),
-                                             bind (mem_fun (*_regions, &EditorRegions::reset_sort_type), BySourceFileFS, false));
-       
+                       bind (mem_fun (*_regions, &EditorRegions::reset_sort_type), BySourceFileFS, false));
+
 
        /* the next two are duplicate items with different names for use in two different contexts */
 
        act = ActionManager::register_action (editor_actions, X_("addExistingAudioFiles"), _("Import"), mem_fun (*this, &Editor::external_audio_dialog));
        ActionManager::session_sensitive_actions.push_back (act);
+       ActionManager::write_sensitive_actions.push_back (act);
+
        act = ActionManager::register_action (editor_actions, X_("addExternalAudioToRegionList"), _("Import to Region List"), bind (mem_fun(*this, &Editor::add_external_audio_action), ImportAsRegion));
        ActionManager::session_sensitive_actions.push_back (act);
-       
-       ActionManager::register_action (editor_actions, X_("importFromSession"), _("Import From Session"), mem_fun(*this, &Editor::session_import_dialog));
+       ActionManager::write_sensitive_actions.push_back (act);
+
+       act = ActionManager::register_action (editor_actions, X_("importFromSession"), _("Import From Session"), mem_fun(*this, &Editor::session_import_dialog));
+       ActionManager::write_sensitive_actions.push_back (act);
 
        ActionManager::register_toggle_action (editor_actions, X_("ToggleWaveformsWhileRecording"), _("Show Waveforms While Recording"), mem_fun (*this, &Editor::toggle_waveforms_while_recording));
 
        ActionManager::register_toggle_action (editor_actions, X_("ToggleSummary"), _("Show Summary"), mem_fun (*this, &Editor::set_summary));
 
        ActionManager::register_toggle_action (editor_actions, X_("ToggleGroupTabs"), _("Show Group Tabs"), mem_fun (*this, &Editor::set_group_tabs));
-       
+
        ActionManager::register_toggle_action (editor_actions, X_("ToggleMeasureVisibility"), _("Show Measures"), mem_fun (*this, &Editor::toggle_measure_visibility));
-       
+
        /* if there is a logo in the editor canvas, its always visible at startup */
 
        act = ActionManager::register_toggle_action (editor_actions, X_("ToggleLogoVisibility"), _("Show Logo"), mem_fun (*this, &Editor::toggle_logo_visibility));
        Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
        tact->set_active (true);
 
+       /* MIDI */
+
+       Glib::RefPtr<ActionGroup> midi_actions = ActionGroup::create (X_("MIDI"));
+       ActionManager::register_action (midi_actions, X_("panic"), _("Panic"), mem_fun(*this, &Editor::midi_panic));
+
        ActionManager::add_action_group (rl_actions);
        ActionManager::add_action_group (ruler_actions);
        ActionManager::add_action_group (zoom_actions);
        ActionManager::add_action_group (mouse_mode_actions);
        ActionManager::add_action_group (snap_actions);
        ActionManager::add_action_group (editor_actions);
+       ActionManager::add_action_group (midi_actions);
 }
 
 void
@@ -884,7 +903,7 @@ Editor::toggle_ruler_visibility (RulerType rt)
        }
 
        switch (rt) {
-       case ruler_metric_smpte:
+       case ruler_metric_timecode:
                action = "toggle-timecode-ruler";
                break;
        case ruler_metric_bbt:
@@ -987,19 +1006,19 @@ Editor::snap_type_action (SnapType type)
 
        const char* action = 0;
        RefPtr<Action> act;
-       
+
        switch (type) {
        case Editing::SnapToCDFrame:
                action = "snap-to-cd-frame";
                break;
-       case Editing::SnapToSMPTEFrame:
-               action = "snap-to-smpte-frame";
+       case Editing::SnapToTimecodeFrame:
+               action = "snap-to-timecode-frame";
                break;
-       case Editing::SnapToSMPTESeconds:
-               action = "snap-to-smpte-seconds";
+       case Editing::SnapToTimecodeSeconds:
+               action = "snap-to-timecode-seconds";
                break;
-       case Editing::SnapToSMPTEMinutes:
-               action = "snap-to-smpte-minutes";
+       case Editing::SnapToTimecodeMinutes:
+               action = "snap-to-timecode-minutes";
                break;
        case Editing::SnapToSeconds:
                action = "snap-to-seconds";
@@ -1063,17 +1082,17 @@ Editor::snap_type_action (SnapType type)
 void
 Editor::cycle_snap_choice()
 {
-       switch (snap_type) {
+       switch (_snap_type) {
        case Editing::SnapToCDFrame:
-               set_snap_to (Editing::SnapToSMPTEFrame);
+               set_snap_to (Editing::SnapToTimecodeFrame);
                break;
-       case Editing::SnapToSMPTEFrame:
-               set_snap_to (Editing::SnapToSMPTESeconds);
+       case Editing::SnapToTimecodeFrame:
+               set_snap_to (Editing::SnapToTimecodeSeconds);
                break;
-       case Editing::SnapToSMPTESeconds:
-               set_snap_to (Editing::SnapToSMPTEMinutes);
+       case Editing::SnapToTimecodeSeconds:
+               set_snap_to (Editing::SnapToTimecodeMinutes);
                break;
-       case Editing::SnapToSMPTEMinutes:
+       case Editing::SnapToTimecodeMinutes:
                set_snap_to (Editing::SnapToSeconds);
                break;
        case Editing::SnapToSeconds:
@@ -1141,7 +1160,7 @@ Editor::snap_mode_action (SnapMode mode)
 {
        const char* action = 0;
        RefPtr<Action> act;
-       
+
        switch (mode) {
        case Editing::SnapOff:
                action = X_("snap-off");
@@ -1156,13 +1175,13 @@ Editor::snap_mode_action (SnapMode mode)
                fatal << string_compose (_("programming error: %1: %2"), "Editor: impossible snap mode type", (int) mode) << endmsg;
                /*NOTREACHED*/
        }
-       
+
        act = ActionManager::get_action (X_("Editor"), action);
-       
+
        if (act) {
                RefPtr<RadioAction> ract = RefPtr<RadioAction>::cast_dynamic(act);
                return ract;
-               
+
        } else  {
                error << string_compose (_("programming error: %1: %2"), "Editor::snap_mode_chosen could not find action to match mode.", action) << endmsg;
                return RefPtr<RadioAction> ();
@@ -1172,7 +1191,7 @@ Editor::snap_mode_action (SnapMode mode)
 void
 Editor::cycle_snap_mode ()
 {
-       switch (snap_mode) {
+       switch (_snap_mode) {
        case SnapOff:
                set_snap_mode (SnapNormal);
                break;
@@ -1205,7 +1224,7 @@ Editor::edit_point_action (EditPoint ep)
 {
        const char* action = 0;
        RefPtr<Action> act;
-       
+
        switch (ep) {
        case Editing::EditAtPlayhead:
                action = X_("edit-at-playhead");
@@ -1220,13 +1239,13 @@ Editor::edit_point_action (EditPoint ep)
                fatal << string_compose (_("programming error: %1: %2"), "Editor: impossible edit point type", (int) ep) << endmsg;
                /*NOTREACHED*/
        }
-       
+
        act = ActionManager::get_action (X_("Editor"), action);
-       
+
        if (act) {
                RefPtr<RadioAction> ract = RefPtr<RadioAction>::cast_dynamic(act);
                return ract;
-               
+
        } else  {
                error << string_compose (_("programming error: %1: %2"), "Editor::edit_point_action could not find action to match edit point.", action) << endmsg;
                return RefPtr<RadioAction> ();
@@ -1254,7 +1273,7 @@ Editor::zoom_focus_action (ZoomFocus focus)
 {
        const char* action = 0;
        RefPtr<Action> act;
-       
+
        switch (focus) {
        case ZoomFocusLeft:
                action = X_("zoom-focus-left");
@@ -1278,9 +1297,9 @@ Editor::zoom_focus_action (ZoomFocus focus)
                fatal << string_compose (_("programming error: %1: %2"), "Editor: impossible focus type", (int) focus) << endmsg;
                /*NOTREACHED*/
        }
-       
+
        act = ActionManager::get_action (X_("Zoom"), action);
-       
+
        if (act) {
                RefPtr<RadioAction> ract = RefPtr<RadioAction>::cast_dynamic(act);
                return ract;
@@ -1320,8 +1339,8 @@ Editor::parameter_changed (std::string p)
                update_punch_range_view (true);
        } else if (p == "punch-out") {
                update_punch_range_view (true);
-       } else if (p == "smpte-format") {
-               update_just_smpte ();
+       } else if (p == "timecode-format") {
+               update_just_timecode ();
        } else if (p == "xfades-visible") {
                update_xfade_visibility ();
        } else if (p == "show-region-fades") {
@@ -1329,11 +1348,11 @@ Editor::parameter_changed (std::string p)
        } else if (p == "edit-mode") {
                edit_mode_selector.set_active_text (edit_mode_to_string (Config->get_edit_mode()));
        } else if (p == "subframes-per-frame") {
-               update_just_smpte ();
+               update_just_timecode ();
        } else if (p == "show-track-meters") {
                toggle_meter_updating();
        } else if (p == "show-summary") {
-               
+
                bool const s = session->config.get_show_summary ();
                if (s) {
                        _summary->show ();
@@ -1380,7 +1399,7 @@ Editor::reset_canvas_action_sensitivity (bool onoff)
                onoff = true;
        }
 
-       for (vector<Glib::RefPtr<Action> >::iterator x = ActionManager::mouse_edit_point_requires_canvas_actions.begin();  
+       for (vector<Glib::RefPtr<Action> >::iterator x = ActionManager::mouse_edit_point_requires_canvas_actions.begin();
             x != ActionManager::mouse_edit_point_requires_canvas_actions.end(); ++x) {
                (*x)->set_sensitive (onoff);
        }