+ case Editing::SnapToSeconds:
+ set_snap_to (Editing::SnapToMinutes);
+ break;
+ case Editing::SnapToMinutes:
+ set_snap_to (Editing::SnapToBeatDiv128);
+ break;
+ case Editing::SnapToBeatDiv128:
+ set_snap_to (Editing::SnapToBeatDiv64);
+ break;
+ case Editing::SnapToBeatDiv64:
+ set_snap_to (Editing::SnapToBeatDiv32);
+ break;
+ case Editing::SnapToBeatDiv32:
+ set_snap_to (Editing::SnapToBeatDiv28);
+ break;
+ case Editing::SnapToBeatDiv28:
+ set_snap_to (Editing::SnapToBeatDiv24);
+ break;
+ case Editing::SnapToBeatDiv24:
+ set_snap_to (Editing::SnapToBeatDiv20);
+ break;
+ case Editing::SnapToBeatDiv20:
+ set_snap_to (Editing::SnapToBeatDiv16);
+ break;
+ case Editing::SnapToBeatDiv16:
+ set_snap_to (Editing::SnapToBeatDiv14);
+ break;
+ case Editing::SnapToBeatDiv14:
+ set_snap_to (Editing::SnapToBeatDiv12);
+ break;
+ case Editing::SnapToBeatDiv12:
+ set_snap_to (Editing::SnapToBeatDiv10);
+ break;
+ case Editing::SnapToBeatDiv10:
+ set_snap_to (Editing::SnapToBeatDiv8);
+ break;
+ case Editing::SnapToBeatDiv8:
+ set_snap_to (Editing::SnapToBeatDiv7);
+ break;
+ case Editing::SnapToBeatDiv7:
+ set_snap_to (Editing::SnapToBeatDiv6);
+ break;
+ case Editing::SnapToBeatDiv6:
+ set_snap_to (Editing::SnapToBeatDiv5);
+ break;
+ case Editing::SnapToBeatDiv5:
+ set_snap_to (Editing::SnapToBeatDiv4);
+ break;
+ case Editing::SnapToBeatDiv4:
+ set_snap_to (Editing::SnapToBeatDiv3);
+ break;
+ case Editing::SnapToBeatDiv3:
+ set_snap_to (Editing::SnapToBeatDiv2);
+ break;
+ case Editing::SnapToBeatDiv2:
+ set_snap_to (Editing::SnapToBeat);
+ break;
+ case Editing::SnapToBeat:
+ set_snap_to (Editing::SnapToBar);
+ break;
+ case Editing::SnapToBar:
+ set_snap_to (Editing::SnapToMark);
+ break;
+ case Editing::SnapToMark:
+ set_snap_to (Editing::SnapToRegionStart);
+ break;
+ case Editing::SnapToRegionStart:
+ set_snap_to (Editing::SnapToRegionEnd);
+ break;
+ case Editing::SnapToRegionEnd:
+ set_snap_to (Editing::SnapToRegionSync);
+ break;
+ case Editing::SnapToRegionSync:
+ set_snap_to (Editing::SnapToRegionBoundary);
+ break;
+ case Editing::SnapToRegionBoundary:
+ set_snap_to (Editing::SnapToCDFrame);
+ break;
+ }
+}
+
+void
+Editor::next_snap_choice_music_only ()
+{
+ switch (_snap_type) {
+ case Editing::SnapToMark:
+ case Editing::SnapToRegionStart:
+ case Editing::SnapToRegionEnd:
+ case Editing::SnapToRegionSync:
+ case Editing::SnapToRegionBoundary:
+ case Editing::SnapToCDFrame:
+ case Editing::SnapToTimecodeFrame:
+ case Editing::SnapToTimecodeSeconds:
+ case Editing::SnapToTimecodeMinutes:
+ case Editing::SnapToSeconds:
+ case Editing::SnapToMinutes:
+ set_snap_to (Editing::SnapToBeatDiv128);
+ break;
+ case Editing::SnapToBeatDiv128:
+ set_snap_to (Editing::SnapToBeatDiv64);
+ break;
+ case Editing::SnapToBeatDiv64:
+ set_snap_to (Editing::SnapToBeatDiv32);
+ break;
+ case Editing::SnapToBeatDiv32:
+ set_snap_to (Editing::SnapToBeatDiv28);
+ break;
+ case Editing::SnapToBeatDiv28:
+ set_snap_to (Editing::SnapToBeatDiv24);
+ break;
+ case Editing::SnapToBeatDiv24:
+ set_snap_to (Editing::SnapToBeatDiv20);
+ break;
+ case Editing::SnapToBeatDiv20:
+ set_snap_to (Editing::SnapToBeatDiv16);
+ break;
+ case Editing::SnapToBeatDiv16:
+ set_snap_to (Editing::SnapToBeatDiv14);
+ break;
+ case Editing::SnapToBeatDiv14:
+ set_snap_to (Editing::SnapToBeatDiv12);
+ break;
+ case Editing::SnapToBeatDiv12:
+ set_snap_to (Editing::SnapToBeatDiv10);
+ break;
+ case Editing::SnapToBeatDiv10:
+ set_snap_to (Editing::SnapToBeatDiv8);
+ break;
+ case Editing::SnapToBeatDiv8:
+ set_snap_to (Editing::SnapToBeatDiv7);
+ break;
+ case Editing::SnapToBeatDiv7:
+ set_snap_to (Editing::SnapToBeatDiv6);
+ break;
+ case Editing::SnapToBeatDiv6:
+ set_snap_to (Editing::SnapToBeatDiv5);
+ break;
+ case Editing::SnapToBeatDiv5:
+ set_snap_to (Editing::SnapToBeatDiv4);
+ break;
+ case Editing::SnapToBeatDiv4:
+ set_snap_to (Editing::SnapToBeatDiv3);
+ break;
+ case Editing::SnapToBeatDiv3:
+ set_snap_to (Editing::SnapToBeatDiv2);
+ break;
+ case Editing::SnapToBeatDiv2:
+ set_snap_to (Editing::SnapToBeat);
+ break;
+ case Editing::SnapToBeat:
+ set_snap_to (Editing::SnapToBar);
+ break;
+ case Editing::SnapToBar:
+ set_snap_to (Editing::SnapToBeatDiv128);
+ break;
+ }
+}
+
+void
+Editor::prev_snap_choice_music_only ()
+{
+ switch (_snap_type) {
+ case Editing::SnapToMark:
+ case Editing::SnapToRegionStart:
+ case Editing::SnapToRegionEnd:
+ case Editing::SnapToRegionSync:
+ case Editing::SnapToRegionBoundary:
+ case Editing::SnapToCDFrame:
+ case Editing::SnapToTimecodeFrame:
+ case Editing::SnapToTimecodeSeconds:
+ case Editing::SnapToTimecodeMinutes:
+ case Editing::SnapToSeconds:
+ case Editing::SnapToMinutes:
+ set_snap_to (Editing::SnapToBar);
+ break;
+ case Editing::SnapToBeatDiv128:
+ set_snap_to (Editing::SnapToBeat);
+ break;
+ case Editing::SnapToBeatDiv64:
+ set_snap_to (Editing::SnapToBeatDiv128);
+ break;
+ case Editing::SnapToBeatDiv32:
+ set_snap_to (Editing::SnapToBeatDiv64);
+ break;
+ case Editing::SnapToBeatDiv28:
+ set_snap_to (Editing::SnapToBeatDiv32);
+ break;
+ case Editing::SnapToBeatDiv24:
+ set_snap_to (Editing::SnapToBeatDiv28);
+ break;
+ case Editing::SnapToBeatDiv20:
+ set_snap_to (Editing::SnapToBeatDiv24);
+ break;
+ case Editing::SnapToBeatDiv16:
+ set_snap_to (Editing::SnapToBeatDiv20);
+ break;
+ case Editing::SnapToBeatDiv14:
+ set_snap_to (Editing::SnapToBeatDiv16);
+ break;
+ case Editing::SnapToBeatDiv12:
+ set_snap_to (Editing::SnapToBeatDiv14);
+ break;
+ case Editing::SnapToBeatDiv10:
+ set_snap_to (Editing::SnapToBeatDiv12);
+ break;
+ case Editing::SnapToBeatDiv8:
+ set_snap_to (Editing::SnapToBeatDiv10);
+ break;
+ case Editing::SnapToBeatDiv7:
+ set_snap_to (Editing::SnapToBeatDiv8);
+ break;
+ case Editing::SnapToBeatDiv6:
+ set_snap_to (Editing::SnapToBeatDiv7);
+ break;
+ case Editing::SnapToBeatDiv5:
+ set_snap_to (Editing::SnapToBeatDiv6);
+ break;
+ case Editing::SnapToBeatDiv4:
+ set_snap_to (Editing::SnapToBeatDiv5);
+ break;
+ case Editing::SnapToBeatDiv3:
+ set_snap_to (Editing::SnapToBeatDiv4);
+ break;
+ case Editing::SnapToBeatDiv2:
+ set_snap_to (Editing::SnapToBeatDiv3);
+ break;
+ case Editing::SnapToBeat:
+ set_snap_to (Editing::SnapToBeatDiv2);
+ break;
+ case Editing::SnapToBar:
+ set_snap_to (Editing::SnapToBeat);
+ break;
+ }
+}
+
+void
+Editor::snap_type_chosen (SnapType type)
+{
+ /* this is driven by a toggle on a radio group, and so is invoked twice,
+ once for the item that became inactive and once for the one that became
+ active.
+ */
+
+ RefPtr<RadioAction> ract = snap_type_action (type);
+
+ if (ract && ract->get_active()) {
+ set_snap_to (type);
+ }
+}
+
+RefPtr<RadioAction>
+Editor::snap_mode_action (SnapMode mode)
+{
+ const char* action = 0;
+ RefPtr<Action> act;
+
+ switch (mode) {
+ case Editing::SnapOff:
+ action = X_("snap-off");
+ break;
+ case Editing::SnapNormal:
+ action = X_("snap-normal");
+ break;
+ case Editing::SnapMagnetic:
+ action = X_("snap-magnetic");
+ break;
+ default:
+ fatal << string_compose (_("programming error: %1: %2"), "Editor: impossible snap mode type", (int) mode) << endmsg;
+ /*NOTREACHED*/
+ }
+
+ act = ActionManager::get_action (X_("Editor"), action);
+
+ if (act) {
+ RefPtr<RadioAction> ract = RefPtr<RadioAction>::cast_dynamic(act);
+ return ract;
+
+ } else {
+ error << string_compose (_("programming error: %1: %2"), "Editor::snap_mode_chosen could not find action to match mode.", action) << endmsg;
+ return RefPtr<RadioAction> ();
+ }
+}
+
+void
+Editor::cycle_snap_mode ()
+{
+ switch (_snap_mode) {
+ case SnapOff:
+ set_snap_mode (SnapNormal);
+ break;
+ case SnapNormal: