splice mode is undefined, undocumented, and buggy. ripple does most of what we want...
[ardour.git] / gtk2_ardour / editor_actions.cc
index 8b4ec4034a861b590937f096f4ba259afd913452..f49fd06906f67191880bd8f4fc98ca6593f30e03 100644 (file)
@@ -50,6 +50,7 @@ using namespace Gtk;
 using namespace Glib;
 using namespace std;
 using namespace ARDOUR;
+using namespace ARDOUR_UI_UTILS;
 using namespace PBD;
 using namespace Editing;
 
@@ -150,6 +151,11 @@ Editor::register_actions ()
 
        ActionManager::register_action (editor_actions, "escape", _("Break drag or deselect all"), sigc::mem_fun (*this, &Editor::escape));
 
+       /* We don't bother registering "unlock" because it would be insensitive
+          when required. Editor::unlock() must be invoked directly.
+       */
+       ActionManager::register_action (editor_actions, "lock", _("Lock"), sigc::mem_fun (*this, &Editor::lock));
+
        toggle_reg_sens (editor_actions, "show-editor-mixer", _("Show Editor Mixer"), sigc::mem_fun (*this, &Editor::editor_mixer_button_toggled));
        toggle_reg_sens (editor_actions, "show-editor-list", _("Show Editor List"), sigc::mem_fun (*this, &Editor::editor_list_button_toggled));
 
@@ -414,49 +420,49 @@ Editor::register_actions ()
        smart_mode_action = Glib::RefPtr<ToggleAction>::cast_static (act);
        smart_mode_button.set_related_action (smart_mode_action);
        smart_mode_button.set_text (_("Smart"));
-       smart_mode_button.add_elements ( ArdourButton::FlatFace );
+       smart_mode_button.add_elements ( ArdourButton::Inset );
        smart_mode_button.set_name ("mouse mode button");
 
        act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-object", _("Object Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseObject));
        mouse_move_button.set_related_action (act);
        mouse_move_button.set_image (::get_icon("tool_object"));
-       mouse_move_button.add_elements ( ArdourButton::FlatFace );
+       mouse_move_button.add_elements ( ArdourButton::Inset );
        mouse_move_button.set_name ("mouse mode button");
 
        act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-range", _("Range Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseRange));        
        mouse_select_button.set_related_action (act);
        mouse_select_button.set_image (::get_icon("tool_range"));
-       mouse_select_button.add_elements ( ArdourButton::FlatFace );
+       mouse_select_button.add_elements ( ArdourButton::Inset );
        mouse_select_button.set_name ("mouse mode button");
 
        act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-draw", _("Note Drawing Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseDraw));   
        mouse_draw_button.set_related_action (act);
        mouse_draw_button.set_image (::get_icon("midi_tool_pencil"));
-       mouse_draw_button.add_elements ( ArdourButton::FlatFace );
+       mouse_draw_button.add_elements ( ArdourButton::Inset );
        mouse_draw_button.set_name ("mouse mode button");
 
        act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-gain", _("Gain Tool"), sigc::bind (mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseGain)); 
        mouse_gain_button.set_related_action (act);
        mouse_gain_button.set_image (::get_icon("tool_gain"));
-       mouse_gain_button.add_elements ( ArdourButton::FlatFace );
+       mouse_gain_button.add_elements ( ArdourButton::Inset );
        mouse_gain_button.set_name ("mouse mode button");
 
        act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-zoom", _("Zoom Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseZoom));   
        mouse_zoom_button.set_related_action (act);
        mouse_zoom_button.set_image (::get_icon("tool_zoom"));
-       mouse_zoom_button.add_elements ( ArdourButton::FlatFace );
+       mouse_zoom_button.add_elements ( ArdourButton::Inset );
        mouse_zoom_button.set_name ("mouse mode button");
 
        act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-audition", _("Audition Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseAudition));       
        mouse_audition_button.set_related_action (act);
        mouse_audition_button.set_image (::get_icon("tool_audition"));
-       mouse_audition_button.add_elements ( ArdourButton::FlatFace );
+       mouse_audition_button.add_elements ( ArdourButton::Inset );
        mouse_audition_button.set_name ("mouse mode button");
 
        act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-timefx", _("Time FX Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseTimeFX));    
        mouse_timefx_button.set_related_action (act);
        mouse_timefx_button.set_image (::get_icon("tool_stretch"));
-       mouse_timefx_button.add_elements ( ArdourButton::FlatFace );
+       mouse_timefx_button.add_elements ( ArdourButton::Inset );
        mouse_timefx_button.set_name ("mouse mode button");
 
        ActionManager::register_action (editor_actions, "step-mouse-mode", _("Step Mouse Mode"), sigc::bind (sigc::mem_fun(*this, &Editor::step_mouse_mode), true));
@@ -464,7 +470,7 @@ Editor::register_actions ()
        act = ActionManager::register_toggle_action (mouse_mode_actions, "toggle-internal-edit", _("Edit MIDI"), sigc::mem_fun(*this, &Editor::toggle_internal_editing));
        internal_edit_button.set_related_action (act);
        internal_edit_button.set_image (::get_icon("tool_note"));
-       internal_edit_button.add_elements ( ArdourButton::FlatFace );
+       internal_edit_button.add_elements ( ArdourButton::Inset );
        internal_edit_button.set_name ("mouse mode button");
 
        RadioAction::Group edit_point_group;
@@ -474,9 +480,9 @@ Editor::register_actions ()
 
        ActionManager::register_action (editor_actions, "cycle-edit-point", _("Change Edit Point"), sigc::bind (sigc::mem_fun (*this, &Editor::cycle_edit_point), false));
        ActionManager::register_action (editor_actions, "cycle-edit-point-with-marker", _("Change Edit Point Including Marker"), sigc::bind (sigc::mem_fun (*this, &Editor::cycle_edit_point), true));
-       if (!Profile->get_sae()) {
-               ActionManager::register_action (editor_actions, "set-edit-splice", _("Splice"), sigc::bind (sigc::mem_fun (*this, &Editor::set_edit_mode), Splice));
-       }
+
+//     ActionManager::register_action (editor_actions, "set-edit-splice", _("Splice"), sigc::bind (sigc::mem_fun (*this, &Editor::set_edit_mode), Splice));
+       ActionManager::register_action (editor_actions, "set-edit-ripple", _("Ripple"), bind (mem_fun (*this, &Editor::set_edit_mode), Ripple));
        ActionManager::register_action (editor_actions, "set-edit-slide", _("Slide"), sigc::bind (sigc::mem_fun (*this, &Editor::set_edit_mode), Slide));
        ActionManager::register_action (editor_actions, "set-edit-lock", _("Lock"), sigc::bind (sigc::mem_fun (*this, &Editor::set_edit_mode), Lock));
        ActionManager::register_action (editor_actions, "toggle-edit-mode", _("Toggle Edit Mode"), sigc::mem_fun (*this, &Editor::cycle_edit_mode));
@@ -563,12 +569,30 @@ Editor::register_actions ()
        /* set defaults here */
 
        no_ruler_shown_update = true;
-       ruler_meter_action->set_active (true);
-       ruler_tempo_action->set_active (true);
-       ruler_marker_action->set_active (true);
-       ruler_range_action->set_active (true);
-       ruler_loop_punch_action->set_active (true);
-       ruler_loop_punch_action->set_active (true);
+       
+       if (Profile->get_trx()) {
+               ruler_marker_action->set_active (true);
+               ruler_meter_action->set_active (false);
+               ruler_tempo_action->set_active (false);
+               ruler_range_action->set_active (false);
+               ruler_loop_punch_action->set_active (false);
+               ruler_loop_punch_action->set_active (false);
+               ruler_bbt_action->set_active (true);
+               ruler_cd_marker_action->set_active (false);
+               ruler_timecode_action->set_active (false);
+               ruler_minsec_action->set_active (true);
+       } else {        
+               ruler_marker_action->set_active (true);
+               ruler_meter_action->set_active (true);
+               ruler_tempo_action->set_active (true);
+               ruler_range_action->set_active (true);
+               ruler_loop_punch_action->set_active (true);
+               ruler_loop_punch_action->set_active (true);
+               ruler_bbt_action->set_active (false);
+               ruler_cd_marker_action->set_active (true);
+               ruler_timecode_action->set_active (true);
+               ruler_minsec_action->set_active (false);
+       }
 
        ruler_video_action->set_active (false);
        xjadeo_proc_action->set_active (false);
@@ -587,17 +611,6 @@ Editor::register_actions ()
        xjadeo_letterbox_action->set_sensitive (false);
        xjadeo_zoom_100->set_sensitive (false);
 
-       if (Profile->get_sae()) {
-               ruler_bbt_action->set_active (true);
-               ruler_cd_marker_action->set_active (false);
-               ruler_timecode_action->set_active (false);
-               ruler_minsec_action->set_active (true);
-       } else {
-               ruler_bbt_action->set_active (false);
-               ruler_cd_marker_action->set_active (true);
-               ruler_timecode_action->set_active (true);
-               ruler_minsec_action->set_active (false);
-       }
        ruler_samples_action->set_active (false);
        no_ruler_shown_update = false;
 
@@ -694,7 +707,7 @@ Editor::load_bindings ()
 
        std::string binding_file;
 
-       if (find_file_in_search_path (ardour_config_search_path(), "editor.bindings", binding_file)) {
+       if (find_file (ardour_config_search_path(), "editor.bindings", binding_file)) {
                 key_bindings.load (binding_file);
                info << string_compose (_("Loaded editor bindings from %1"), binding_file) << endmsg;
         } else {
@@ -1146,94 +1159,94 @@ Editor::prev_snap_choice ()
 {
        switch (_snap_type) {
        case Editing::SnapToCDFrame:
-               set_snap_to (Editing::SnapToTimecodeFrame);
+               set_snap_to (Editing::SnapToRegionBoundary);
                break;
        case Editing::SnapToTimecodeFrame:
-               set_snap_to (Editing::SnapToTimecodeSeconds);
+               set_snap_to (Editing::SnapToCDFrame);
                break;
        case Editing::SnapToTimecodeSeconds:
-               set_snap_to (Editing::SnapToTimecodeMinutes);
+               set_snap_to (Editing::SnapToTimecodeFrame);
                break;
        case Editing::SnapToTimecodeMinutes:
-               set_snap_to (Editing::SnapToSeconds);
+               set_snap_to (Editing::SnapToTimecodeSeconds);
                break;
        case Editing::SnapToSeconds:
-               set_snap_to (Editing::SnapToMinutes);
+               set_snap_to (Editing::SnapToTimecodeMinutes);
                break;
        case Editing::SnapToMinutes:
-               set_snap_to (Editing::SnapToBeatDiv128);
+               set_snap_to (Editing::SnapToSeconds);
                break;
        case Editing::SnapToBeatDiv128:
-               set_snap_to (Editing::SnapToBeatDiv64);
+               set_snap_to (Editing::SnapToMinutes);
                break;
        case Editing::SnapToBeatDiv64:
-               set_snap_to (Editing::SnapToBeatDiv32);
+               set_snap_to (Editing::SnapToBeatDiv128);
                break;
        case Editing::SnapToBeatDiv32:
-               set_snap_to (Editing::SnapToBeatDiv28);
+               set_snap_to (Editing::SnapToBeatDiv64);
                break;
        case Editing::SnapToBeatDiv28:
-               set_snap_to (Editing::SnapToBeatDiv24);
+               set_snap_to (Editing::SnapToBeatDiv32);
                break;
        case Editing::SnapToBeatDiv24:
-               set_snap_to (Editing::SnapToBeatDiv20);
+               set_snap_to (Editing::SnapToBeatDiv28);
                break;
        case Editing::SnapToBeatDiv20:
-               set_snap_to (Editing::SnapToBeatDiv16);
+               set_snap_to (Editing::SnapToBeatDiv24);
                break;
        case Editing::SnapToBeatDiv16:
-               set_snap_to (Editing::SnapToBeatDiv14);
+               set_snap_to (Editing::SnapToBeatDiv20);
                break;
        case Editing::SnapToBeatDiv14:
-               set_snap_to (Editing::SnapToBeatDiv12);
+               set_snap_to (Editing::SnapToBeatDiv16);
                break;
        case Editing::SnapToBeatDiv12:
-               set_snap_to (Editing::SnapToBeatDiv10);
+               set_snap_to (Editing::SnapToBeatDiv14);
                break;
        case Editing::SnapToBeatDiv10:
-               set_snap_to (Editing::SnapToBeatDiv8);
+               set_snap_to (Editing::SnapToBeatDiv12);
                break;
        case Editing::SnapToBeatDiv8:
-               set_snap_to (Editing::SnapToBeatDiv7);
+               set_snap_to (Editing::SnapToBeatDiv10);
                break;
        case Editing::SnapToBeatDiv7:
-               set_snap_to (Editing::SnapToBeatDiv6);
+               set_snap_to (Editing::SnapToBeatDiv8);
                break;
        case Editing::SnapToBeatDiv6:
-               set_snap_to (Editing::SnapToBeatDiv5);
+               set_snap_to (Editing::SnapToBeatDiv7);
                break;
        case Editing::SnapToBeatDiv5:
-               set_snap_to (Editing::SnapToBeatDiv4);
+               set_snap_to (Editing::SnapToBeatDiv6);
                break;
        case Editing::SnapToBeatDiv4:
-               set_snap_to (Editing::SnapToBeatDiv3);
+               set_snap_to (Editing::SnapToBeatDiv5);
                break;
        case Editing::SnapToBeatDiv3:
-               set_snap_to (Editing::SnapToBeatDiv2);
+               set_snap_to (Editing::SnapToBeatDiv4);
                break;
        case Editing::SnapToBeatDiv2:
-               set_snap_to (Editing::SnapToBeat);
+               set_snap_to (Editing::SnapToBeatDiv3);
                break;
        case Editing::SnapToBeat:
-               set_snap_to (Editing::SnapToBar);
+               set_snap_to (Editing::SnapToBeatDiv2);
                break;
        case Editing::SnapToBar:
-               set_snap_to (Editing::SnapToMark);
+               set_snap_to (Editing::SnapToBeat);
                break;
        case Editing::SnapToMark:
-               set_snap_to (Editing::SnapToRegionStart);
+               set_snap_to (Editing::SnapToBar);
                break;
        case Editing::SnapToRegionStart:
-               set_snap_to (Editing::SnapToRegionEnd);
+               set_snap_to (Editing::SnapToMark);
                break;
        case Editing::SnapToRegionEnd:
-               set_snap_to (Editing::SnapToRegionSync);
+               set_snap_to (Editing::SnapToRegionStart);
                break;
        case Editing::SnapToRegionSync:
-               set_snap_to (Editing::SnapToRegionBoundary);
+               set_snap_to (Editing::SnapToRegionEnd);
                break;
        case Editing::SnapToRegionBoundary:
-               set_snap_to (Editing::SnapToCDFrame);
+               set_snap_to (Editing::SnapToRegionSync);
                break;
        }
 }
@@ -1600,17 +1613,17 @@ Editor::parameter_changed (std::string p)
        ENSURE_GUI_THREAD (*this, &Editor::parameter_changed, p)
 
        if (p == "auto-loop") {
-               update_loop_range_view (true);
+               update_loop_range_view ();
        } else if (p == "punch-in") {
-               update_punch_range_view (true);
+               update_punch_range_view ();
        } else if (p == "punch-out") {
-               update_punch_range_view (true);
+               update_punch_range_view ();
        } else if (p == "timecode-format") {
                update_just_timecode ();
        } else if (p == "show-region-fades") {
                update_region_fade_visibility ();
        } else if (p == "edit-mode") {
-               edit_mode_selector.set_active_text (edit_mode_to_string (Config->get_edit_mode()));
+               edit_mode_selector.set_text (edit_mode_to_string (Config->get_edit_mode()));
        } else if (p == "show-track-meters") {
                toggle_meter_updating();
        } else if (p == "show-summary") {
@@ -1650,7 +1663,9 @@ Editor::parameter_changed (std::string p)
        } else if (p == "timecode-offset" || p == "timecode-offset-negative") {
                update_just_timecode ();
        } else if (p == "show-zoom-tools") {
-               _zoom_tearoff->set_visible (Config->get_show_zoom_tools(), true);
+               if (_zoom_tearoff) {
+                       _zoom_tearoff->set_visible (Config->get_show_zoom_tools(), true);
+               }
        } else if (p == "sound-midi-notes") {
                Glib::RefPtr<Action> act = ActionManager::get_action (X_("Editor"), X_("sound-midi-notes"));
 
@@ -1895,6 +1910,8 @@ Editor::register_region_actions ()
        reg_sens (_region_actions, "nudge-forward", _("Nudge Later"), sigc::bind (sigc::mem_fun (*this, &Editor::nudge_forward), false, false));
        reg_sens (_region_actions, "nudge-backward", _("Nudge Earlier"), sigc::bind (sigc::mem_fun (*this, &Editor::nudge_backward), false, false));
 
+       reg_sens (_region_actions, "sequence-regions", _("Sequence Regions"), sigc::mem_fun (*this, &Editor::sequence_regions));
+
        reg_sens (
                _region_actions,
                "nudge-forward-by-capture-offset",