#include <gio/gio.h>
#include <gtk/gtkiconfactory.h>
-#include "pbd/filesystem.h"
#include "pbd/file_utils.h"
-#include "pbd/search_path.h"
#include "gtkmm2ext/tearoff.h"
+#include "gtkmm2ext/utils.h"
#include "ardour/filesystem_paths.h"
#include "ardour/profile.h"
#include "ardour/session.h"
#include "ardour/types.h"
+#include "canvas/canvas.h"
+#include "canvas/pixbuf.h"
+
#include "actions.h"
#include "ardour_ui.h"
#include "editing.h"
reg_sens (editor_actions, "set-playhead", _("Playhead to Mouse"), sigc::mem_fun(*this, &Editor::set_playhead_cursor));
reg_sens (editor_actions, "set-edit-point", _("Active Marker to Mouse"), sigc::mem_fun(*this, &Editor::set_edit_point));
- reg_sens (editor_actions, "duplicate-range", _("Duplicate Range"), sigc::bind (sigc::mem_fun(*this, &Editor::duplicate_dialog), false));
+ reg_sens (editor_actions, "duplicate-range", _("Duplicate Range"), sigc::bind (sigc::mem_fun(*this, &Editor::duplicate_range), false));
undo_action = reg_sens (editor_actions, "undo", S_("Command|Undo"), sigc::bind (sigc::mem_fun(*this, &Editor::undo), 1U));
redo_action = reg_sens (editor_actions, "redo", _("Redo"), sigc::bind (sigc::mem_fun(*this, &Editor::redo), 1U));
radio_reg_sens (zoom_actions, zoom_group, "zoom-focus-mouse", _("Zoom Focus Mouse"), sigc::bind (sigc::mem_fun(*this, &Editor::zoom_focus_chosen), Editing::ZoomFocusMouse));
radio_reg_sens (zoom_actions, zoom_group, "zoom-focus-edit", _("Zoom Focus Edit Point"), sigc::bind (sigc::mem_fun(*this, &Editor::zoom_focus_chosen), Editing::ZoomFocusEdit));
+ ActionManager::register_action (editor_actions, X_("cycle-zoom-focus"), _("Next Zoom Focus"), sigc::mem_fun (*this, &Editor::cycle_zoom_focus));
+
+
Glib::RefPtr<ActionGroup> mouse_mode_actions = ActionGroup::create (X_("MouseMode"));
RadioAction::Group mouse_mode_group;
+ act = ActionManager::register_toggle_action (mouse_mode_actions, "set-mouse-mode-object-range", _("Smart Object Mode"), sigc::mem_fun (*this, &Editor::mouse_mode_object_range_toggled));
+ 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.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.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.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.set_name ("mouse mode button");
- act = ActionManager::register_toggle_action (mouse_mode_actions, "set-mouse-mode-object-range", _("Link Object / Range Tools"), sigc::mem_fun (*this, &Editor::mouse_mode_object_range_toggled));
- smart_mode_action = Glib::RefPtr<ToggleAction>::cast_static (act);
-
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.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.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.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.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));
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.set_name ("mouse mode button");
RadioAction::Group edit_point_group;
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)));
+ 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"), _("Video Monitor"), sigc::mem_fun (*this, &Editor::set_xjadeo_proc)));
+
+ 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 */
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 (false);
+ ruler_range_action->set_active (true);
ruler_loop_punch_action->set_active (true);
ruler_loop_punch_action->set_active (true);
+
+ ruler_video_action->set_active (false);
+ xjadeo_proc_action->set_active (false);
+ xjadeo_proc_action->set_sensitive (false);
+ 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);
Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
tact->set_active (true);
+ ActionManager::register_action (editor_actions, X_("toggle-midi-input-active"), _("Toggle MIDI Input Active for Editor-Selected Tracks/Busses"),
+ sigc::bind (sigc::mem_fun (*this, &Editor::toggle_midi_input_active), false));
+
ActionManager::add_action_group (rl_actions);
ActionManager::add_action_group (ruler_actions);
ActionManager::add_action_group (zoom_actions);
key_bindings.set_action_map (editor_action_map);
- sys::path binding_file;
+ std::string binding_file;
if (find_file_in_search_path (ardour_config_search_path(), "editor.bindings", binding_file)) {
- key_bindings.load (binding_file.to_string());
- info << string_compose (_("Loaded editor bindings from %1"), binding_file.to_string()) << endmsg;
+ key_bindings.load (binding_file);
+ info << string_compose (_("Loaded editor bindings from %1"), binding_file) << endmsg;
} else {
error << string_compose (_("Could not find editor.bindings in search path %1"), ardour_config_search_path().to_string()) << endmsg;
}
case ruler_time_cd_marker:
action = "toggle-cd-marker-ruler";
break;
+ case ruler_video_timeline:
+ action = "toggle-video-ruler";
+ break;
}
Glib::RefPtr<Action> act = ActionManager::get_action (X_("Rulers"), action);
}
}
+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)
+{
+ switch(state) {
+ case 1:
+ xjadeo_proc_action->set_active(true);
+ break;
+ case 0:
+ xjadeo_proc_action->set_active(false);
+ break;
+ default:
+ 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
+Editor::set_xjadeo_proc ()
+{
+ if (xjadeo_proc_action->get_active()) {
+ ARDOUR_UI::instance()->video_timeline->open_video_monitor();
+ } else {
+ ARDOUR_UI::instance()->video_timeline->close_video_monitor();
+ }
+}
+
+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 ()
{
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()));
- } else if (p == "subframes-per-frame") {
- update_just_timecode ();
} else if (p == "show-track-meters") {
toggle_meter_updating();
} else if (p == "show-summary") {
}
}
} else if (p == "show-region-gain") {
- set_gain_envelope_visibility (Config->get_show_region_gain ());
+ set_gain_envelope_visibility ();
+ } else if (p == "remote-model") {
+ if (_routes) {
+ _routes->reset_remote_control_ids ();
+ }
+ } else if (p == "use-tooltips") {
+
+ /* this doesn't really belong here but it has to go somewhere */
+
+ if (Config->get_use_tooltips()) {
+ Gtkmm2ext::enable_tooltips ();
+ } else {
+ Gtkmm2ext::disable_tooltips ();
+ }
}
}
void
Editor::reset_focus ()
{
- track_canvas->grab_focus();
+ _track_canvas->grab_focus();
}
void
/* Toggle `locked' status of selected regions */
toggle_reg_sens (_region_actions, "toggle-region-lock", _("Lock"), sigc::mem_fun(*this, &Editor::toggle_region_lock));
+ toggle_reg_sens (_region_actions, "toggle-region-video-lock", _("Lock to Video"), sigc::mem_fun(*this, &Editor::toggle_region_video_lock));
+
toggle_reg_sens (
_region_actions,
"toggle-region-lock-style",
_region_actions, "toggle-region-fades", _("Fades"), sigc::bind (sigc::mem_fun(*this, &Editor::toggle_region_fades), 0)
);
- /* Open the dialogue to duplicate selected regions */
- reg_sens (_region_actions, "duplicate-region", _("Duplicate"), sigc::bind (sigc::mem_fun (*this, &Editor::duplicate_dialog), false));
+ /* Duplicate selected regions */
+ reg_sens (_region_actions, "duplicate-region", _("Duplicate"), sigc::bind (sigc::mem_fun (*this, &Editor::duplicate_range), false));
/* Open the dialogue to duplicate selected regions multiple times */
reg_sens (
_region_actions,
"multi-duplicate-region",
_("Multi-Duplicate..."),
- sigc::bind (sigc::mem_fun(*this, &Editor::duplicate_dialog), true)
+ sigc::bind (sigc::mem_fun(*this, &Editor::duplicate_range), true)
);
/* Fill tracks with selected regions */
reg_sens (_region_actions, "quantize-region", _("Quantize..."), sigc::mem_fun (*this, &Editor::quantize_region));
reg_sens (_region_actions, "insert-patch-change", _("Insert Patch Change..."), sigc::bind (sigc::mem_fun (*this, &Editor::insert_patch_change), false));
reg_sens (_region_actions, "insert-patch-change-context", _("Insert Patch Change..."), sigc::bind (sigc::mem_fun (*this, &Editor::insert_patch_change), true));
- reg_sens (_region_actions, "fork-region", _("Fork"), sigc::mem_fun (*this, &Editor::fork_region));
+ reg_sens (_region_actions, "fork-region", _("Unlink from other copies"), sigc::mem_fun (*this, &Editor::fork_region));
reg_sens (_region_actions, "strip-region-silence", _("Strip Silence..."), sigc::mem_fun (*this, &Editor::strip_region_silence));
reg_sens (_region_actions, "set-selection-from-region", _("Set Range Selection"), sigc::mem_fun (*this, &Editor::set_selection_from_region));