Merge branch 'cairocanvas' of git.ardour.org:ardour/ardour into cairocanvas
[ardour.git] / gtk2_ardour / editor_actions.cc
index 0fe99582ca36068e0eba4cfd0ee9d0900074f808..48d56193a62226d7df4468ff197f7a95777c5a24 100644 (file)
@@ -414,49 +414,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 +464,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;
@@ -546,11 +546,19 @@ Editor::register_actions ()
        ruler_samples_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-samples-ruler"), _("Samples"), sigc::bind (sigc::mem_fun(*this, &Editor::toggle_ruler_visibility), ruler_metric_samples)));
        ruler_timecode_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-timecode-ruler"), _("Timecode"), sigc::bind (sigc::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"), sigc::bind (sigc::mem_fun(*this, &Editor::toggle_ruler_visibility), ruler_metric_minsec)));
-#ifdef WITH_VIDEOTIMELINE
+
+       ActionManager::register_action (editor_menu_actions, X_("VideoMonitorMenu"), _("Video Monitor"));
+
        ruler_video_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-video-ruler"), _("Video"), sigc::bind (sigc::mem_fun(*this, &Editor::toggle_ruler_visibility), ruler_video_timeline)));
-       xjadeo_proc_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (editor_actions, X_("ToggleJadeo"), _("Show Video Monitor"), sigc::mem_fun (*this, &Editor::set_xjadeo_proc)));
+       xjadeo_proc_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (editor_actions, X_("ToggleJadeo"), _("Video Monitor"), sigc::mem_fun (*this, &Editor::set_xjadeo_proc)));
 
-#endif
+       xjadeo_ontop_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (editor_actions, X_("toggle-vmon-ontop"), _("Always on Top"), sigc::bind (sigc::mem_fun (*this, &Editor::set_xjadeo_viewoption), (int) 1)));
+       xjadeo_timecode_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (editor_actions, X_("toggle-vmon-timecode"), _("Timecode"), sigc::bind (sigc::mem_fun (*this, &Editor::set_xjadeo_viewoption), (int) 2)));
+       xjadeo_frame_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (editor_actions, X_("toggle-vmon-frame"), _("Frame number"), sigc::bind (sigc::mem_fun (*this, &Editor::set_xjadeo_viewoption), (int) 3)));
+       xjadeo_osdbg_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (editor_actions, X_("toggle-vmon-osdbg"), _("Timecode Background"), sigc::bind (sigc::mem_fun (*this, &Editor::set_xjadeo_viewoption), (int) 4)));
+       xjadeo_fullscreen_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (editor_actions, X_("toggle-vmon-fullscreen"), _("Fullscreen"), sigc::bind (sigc::mem_fun (*this, &Editor::set_xjadeo_viewoption), (int) 5)));
+       xjadeo_letterbox_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (editor_actions, X_("toggle-vmon-letterbox"), _("Letterbox"), sigc::bind (sigc::mem_fun (*this, &Editor::set_xjadeo_viewoption), (int) 6)));
+       xjadeo_zoom_100 = reg_sens (editor_actions, "zoom-vmon-100", _("Original Size"), sigc::bind (sigc::mem_fun (*this, &Editor::set_xjadeo_viewoption), (int) 7));
 
        /* set defaults here */
 
@@ -561,11 +569,24 @@ Editor::register_actions ()
        ruler_range_action->set_active (true);
        ruler_loop_punch_action->set_active (true);
        ruler_loop_punch_action->set_active (true);
-#ifdef WITH_VIDEOTIMELINE
+
        ruler_video_action->set_active (false);
        xjadeo_proc_action->set_active (false);
        xjadeo_proc_action->set_sensitive (false);
-#endif
+       xjadeo_ontop_action->set_active (false);
+       xjadeo_ontop_action->set_sensitive (false);
+       xjadeo_timecode_action->set_active (false);
+       xjadeo_timecode_action->set_sensitive (false);
+       xjadeo_frame_action->set_active (false);
+       xjadeo_frame_action->set_sensitive (false);
+       xjadeo_osdbg_action->set_active (false);
+       xjadeo_osdbg_action->set_sensitive (false);
+       xjadeo_fullscreen_action->set_active (false);
+       xjadeo_fullscreen_action->set_sensitive (false);
+       xjadeo_letterbox_action->set_active (false);
+       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);
@@ -721,11 +742,9 @@ Editor::toggle_ruler_visibility (RulerType rt)
        case ruler_time_cd_marker:
                action = "toggle-cd-marker-ruler";
                break;
-#ifdef WITH_VIDEOTIMELINE
        case ruler_video_timeline:
                action = "toggle-video-ruler";
                break;
-#endif
        }
 
        Glib::RefPtr<Action> act = ActionManager::get_action (X_("Rulers"), action);
@@ -757,12 +776,21 @@ Editor::set_group_tabs ()
        }
 }
 
-#ifdef WITH_VIDEOTIMELINE
+void
+Editor::set_close_video_sensitive (bool onoff)
+{
+       Glib::RefPtr<Action> act = ActionManager::get_action (X_("Main"), X_("CloseVideo"));
+       if (act) {
+               act->set_sensitive (onoff);
+       }
+}
+
 void
 Editor::set_xjadeo_sensitive (bool onoff)
 {
        xjadeo_proc_action->set_sensitive(onoff);
 }
+
 void
 Editor::toggle_xjadeo_proc (int state)
 {
@@ -777,6 +805,14 @@ Editor::toggle_xjadeo_proc (int state)
                        xjadeo_proc_action->set_active(!xjadeo_proc_action->get_active());
                        break;
        }
+       bool onoff = xjadeo_proc_action->get_active();
+       xjadeo_ontop_action->set_sensitive(onoff);
+       xjadeo_timecode_action->set_sensitive(onoff);
+       xjadeo_frame_action->set_sensitive(onoff);
+       xjadeo_osdbg_action->set_sensitive(onoff);
+       xjadeo_fullscreen_action->set_sensitive(onoff);
+       xjadeo_letterbox_action->set_sensitive(onoff);
+       xjadeo_zoom_100->set_sensitive(onoff);
 }
 
 void
@@ -788,7 +824,84 @@ Editor::set_xjadeo_proc ()
                ARDOUR_UI::instance()->video_timeline->close_video_monitor();
        }
 }
-#endif
+
+void
+Editor::toggle_xjadeo_viewoption (int what, int state)
+{
+       Glib::RefPtr<Gtk::ToggleAction> action;
+       switch (what) {
+               case 1:
+                       action = xjadeo_ontop_action;
+                       break;
+               case 2:
+                       action = xjadeo_timecode_action;
+                       break;
+               case 3:
+                       action = xjadeo_frame_action;
+                       break;
+               case 4:
+                       action = xjadeo_osdbg_action;
+                       break;
+               case 5:
+                       action = xjadeo_fullscreen_action;
+                       break;
+               case 6:
+                       action = xjadeo_letterbox_action;
+                       break;
+               case 7:
+                       return;
+               default:
+                       return;
+       }
+
+       switch(state) {
+               case 1:
+                       action->set_active(true);
+                       break;
+               case 0:
+                       action->set_active(false);
+                       break;
+               default:
+                       action->set_active(!action->get_active());
+                       break;
+       }
+}
+
+void
+Editor::set_xjadeo_viewoption (int what)
+{
+       Glib::RefPtr<Gtk::ToggleAction> action;
+       switch (what) {
+               case 1:
+                       action = xjadeo_ontop_action;
+                       break;
+               case 2:
+                       action = xjadeo_timecode_action;
+                       break;
+               case 3:
+                       action = xjadeo_frame_action;
+                       break;
+               case 4:
+                       action = xjadeo_osdbg_action;
+                       break;
+               case 5:
+                       action = xjadeo_fullscreen_action;
+                       break;
+               case 6:
+                       action = xjadeo_letterbox_action;
+                       break;
+               case 7:
+                       ARDOUR_UI::instance()->video_timeline->control_video_monitor(what, 0);
+                       return;
+               default:
+                       return;
+       }
+       if (action->get_active()) {
+               ARDOUR_UI::instance()->video_timeline->control_video_monitor(what, 1);
+       } else {
+               ARDOUR_UI::instance()->video_timeline->control_video_monitor(what, 0);
+       }
+}
 
 void
 Editor::toggle_measure_visibility ()
@@ -1033,94 +1146,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;
        }
 }
@@ -1487,17 +1600,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") {
@@ -1537,7 +1650,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"));
 
@@ -1626,9 +1741,7 @@ Editor::register_region_actions ()
        /* Toggle `locked' status of selected regions */
        toggle_reg_sens (_region_actions, "toggle-region-lock", _("Lock"), sigc::mem_fun(*this, &Editor::toggle_region_lock));
 
-#ifdef WITH_VIDEOTIMELINE
        toggle_reg_sens (_region_actions, "toggle-region-video-lock", _("Lock to Video"), sigc::mem_fun(*this, &Editor::toggle_region_video_lock));
-#endif
 
        toggle_reg_sens (
                _region_actions,
@@ -1784,6 +1897,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",