summaryrefslogtreecommitdiff
path: root/gtk2_ardour/editor.cc
diff options
context:
space:
mode:
authornick_m <mainsbridge@gmail.com>2015-05-16 04:15:52 +1000
committernick_m <mainsbridge@gmail.com>2015-05-16 04:15:52 +1000
commit68a8330afc09f75305f927caf4814e3c80148367 (patch)
tree0ef7402db9fa2b4851a2719e7aae1e55dac5e81d /gtk2_ardour/editor.cc
parente73b4e6f559edcb13e1baa403d167aec8d3aff5d (diff)
Relative snap
Diffstat (limited to 'gtk2_ardour/editor.cc')
-rw-r--r--gtk2_ardour/editor.cc61
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);