diff options
author | nick_m <mainsbridge@gmail.com> | 2015-05-16 04:15:52 +1000 |
---|---|---|
committer | nick_m <mainsbridge@gmail.com> | 2015-05-16 04:15:52 +1000 |
commit | 68a8330afc09f75305f927caf4814e3c80148367 (patch) | |
tree | 0ef7402db9fa2b4851a2719e7aae1e55dac5e81d /gtk2_ardour/editor.cc | |
parent | e73b4e6f559edcb13e1baa403d167aec8d3aff5d (diff) |
Relative snap
Diffstat (limited to 'gtk2_ardour/editor.cc')
-rw-r--r-- | gtk2_ardour/editor.cc | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index df1421b6ce..60aa58dbb0 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -177,6 +177,12 @@ static const gchar *_snap_type_strings[] = { 0 }; +static const gchar *_snap_delta_strings[] = { + N_("Absolute"), + N_("Relative"), + 0 +}; + static const gchar *_snap_mode_strings[] = { N_("No Grid"), N_("Grid"), @@ -329,6 +335,7 @@ Editor::Editor () tempo_lines = 0; snap_type_strings = I18N (_snap_type_strings); + snap_delta_strings = I18N (_snap_delta_strings); snap_mode_strings = I18N (_snap_mode_strings); zoom_focus_strings = I18N (_zoom_focus_strings); edit_mode_strings = I18N (_edit_mode_strings); @@ -341,6 +348,7 @@ Editor::Editor () build_edit_mode_menu(); build_zoom_focus_menu(); build_track_count_menu(); + build_snap_delta_menu(); build_snap_mode_menu(); build_snap_type_menu(); build_edit_point_menu(); @@ -678,6 +686,8 @@ Editor::Editor () set_visible_track_count (_visible_track_count); _snap_type = SnapToBeat; set_snap_to (_snap_type); + _snap_delta = SnapAbsolute; + set_snap_delta (_snap_delta); _snap_mode = SnapOff; set_snap_mode (_snap_mode); set_mouse_mode (MouseObject, true); @@ -2036,6 +2046,12 @@ Editor::snap_type() const return _snap_type; } +SnapDelta +Editor::snap_delta() const +{ + return _snap_delta; +} + SnapMode Editor::snap_mode() const { @@ -2115,6 +2131,20 @@ Editor::set_snap_to (SnapType st) } void +Editor::set_snap_delta (SnapDelta delta) +{ + string str = snap_delta_strings[(int)delta]; + + _snap_delta = delta; + + if (str != snap_delta_selector.get_text ()) { + snap_delta_selector.set_text (str); + } + + instant_save (); +} + +void Editor::set_snap_mode (SnapMode mode) { string str = snap_mode_strings[(int)mode]; @@ -2133,6 +2163,7 @@ Editor::set_snap_mode (SnapMode mode) instant_save (); } + void Editor::set_edit_point_preference (EditPoint ep, bool force) { @@ -2272,6 +2303,10 @@ Editor::set_state (const XMLNode& node, int /*version*/) snap_type_selection_done ((SnapType) string_2_enum (prop->value(), _snap_type)); } + if ((prop = node.property ("snap-delta"))) { + snap_delta_selection_done((SnapDelta) string_2_enum (prop->value(), _snap_delta)); + } + if ((prop = node.property ("snap-mode"))) { snap_mode_selection_done((SnapMode) string_2_enum (prop->value(), _snap_mode)); } @@ -2497,6 +2532,7 @@ Editor::get_state () snprintf (buf, sizeof(buf), "%" PRId64, samples_per_pixel); node->add_property ("zoom", buf); node->add_property ("snap-to", enum_2_string (_snap_type)); + node->add_property ("snap-delta", enum_2_string (_snap_delta)); node->add_property ("snap-mode", enum_2_string (_snap_mode)); node->add_property ("internal-snap-to", enum_2_string (internal_snap_type)); node->add_property ("internal-snap-mode", enum_2_string (internal_snap_mode)); @@ -2906,6 +2942,7 @@ Editor::setup_toolbar () mouse_mode_size_group->add_widget (visible_tracks_selector); mouse_mode_size_group->add_widget (snap_type_selector); + mouse_mode_size_group->add_widget (snap_delta_selector); mouse_mode_size_group->add_widget (snap_mode_selector); mouse_mode_size_group->add_widget (edit_point_selector); @@ -3058,10 +3095,12 @@ Editor::setup_toolbar () snap_type_selector.set_name ("mouse mode button"); + snap_delta_selector.set_name ("mouse mode button"); snap_mode_selector.set_name ("mouse mode button"); edit_point_selector.set_name ("mouse mode button"); + snap_box.pack_start (snap_delta_selector, false, false); snap_box.pack_start (snap_mode_selector, false, false); snap_box.pack_start (snap_type_selector, false, false); snap_box.pack_start (edit_point_selector, false, false); @@ -3162,6 +3201,17 @@ Editor::build_edit_mode_menu () } void +Editor::build_snap_delta_menu () +{ + using namespace Menu_Helpers; + + snap_delta_selector.AddMenuElem (MenuElem ( snap_delta_strings[(int)SnapAbsolute], sigc::bind (sigc::mem_fun(*this, &Editor::snap_delta_selection_done), (SnapDelta) SnapAbsolute))); + snap_delta_selector.AddMenuElem (MenuElem ( snap_delta_strings[(int)SnapRelative], sigc::bind (sigc::mem_fun(*this, &Editor::snap_delta_selection_done), (SnapDelta) SnapRelative))); + + set_size_request_to_display_given_text (snap_delta_selector, snap_delta_strings, COMBO_TRIANGLE_WIDTH, 2); +} + +void Editor::build_snap_mode_menu () { using namespace Menu_Helpers; @@ -3236,6 +3286,7 @@ Editor::setup_tooltips () ARDOUR_UI::instance()->set_tip (tav_shrink_button, _("Shrink Tracks")); ARDOUR_UI::instance()->set_tip (visible_tracks_selector, _("Number of visible tracks")); ARDOUR_UI::instance()->set_tip (snap_type_selector, _("Snap/Grid Units")); + ARDOUR_UI::instance()->set_tip (snap_delta_selector, _("Relative Snap Mode")); ARDOUR_UI::instance()->set_tip (snap_mode_selector, _("Snap/Grid Mode")); ARDOUR_UI::instance()->set_tip (edit_point_selector, _("Edit point")); ARDOUR_UI::instance()->set_tip (edit_mode_selector, _("Edit Mode")); @@ -3633,6 +3684,16 @@ Editor::snap_type_selection_done (SnapType snaptype) } void +Editor::snap_delta_selection_done (SnapDelta delta) +{ + RefPtr<RadioAction> ract = snap_delta_action (delta); + + if (ract) { + ract->set_active (true); + } +} + +void Editor::snap_mode_selection_done (SnapMode mode) { RefPtr<RadioAction> ract = snap_mode_action (mode); |