(1) remove magic number voodoo when saving zoom focus/snap settings to instant.xml etc. (this has a minor breaking-behaviour for existing sessions etc (2) keep track of grid type/settings in and out of note edit mode and switch back and forth, thus allowing independent grids while working at the note or region level

git-svn-id: svn://localhost/ardour2/branches/3.0@11486 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Paul Davis 2012-02-13 14:34:21 +00:00
parent 8ef8bfc64f
commit 671ec99bac
7 changed files with 351 additions and 18 deletions

View file

@ -373,7 +373,10 @@
<menuitem action='snap-magnetic'/>
<separator/>
<menuitem action='cycle-snap-mode'/>
<menuitem action='cycle-snap-choice'/>
<menuitem action='next-snap-choice'/>
<menuitem action='prev-snap-choice'/>
<menuitem action='next-snap-choice-music-only'/>
<menuitem action='prev-snap-choice-music-only'/>
</menu>
<menu name='SnapTo' action='SnapTo'>
<menuitem action='snap-to-cd-frame'/>

View file

@ -647,6 +647,10 @@ Editor::Editor ()
set_snap_mode (_snap_mode);
set_mouse_mode (MouseObject, true);
pre_internal_mouse_mode = MouseObject;
pre_internal_snap_type = _snap_type;
pre_internal_snap_mode = _snap_mode;
internal_snap_type = _snap_type;
internal_snap_mode = _snap_mode;
set_edit_point_preference (EditAtMouse, true);
_playlist_selector = new PlaylistSelector();
@ -2222,7 +2226,7 @@ Editor::set_state (const XMLNode& node, int /*version*/)
}
if ((prop = node.property ("zoom-focus"))) {
set_zoom_focus ((ZoomFocus) atoi (prop->value()));
set_zoom_focus ((ZoomFocus) string_2_enum (prop->value(), zoom_focus));
}
if ((prop = node.property ("zoom"))) {
@ -2232,11 +2236,27 @@ Editor::set_state (const XMLNode& node, int /*version*/)
}
if ((prop = node.property ("snap-to"))) {
set_snap_to ((SnapType) atoi (prop->value()));
set_snap_to ((SnapType) string_2_enum (prop->value(), _snap_type));
}
if ((prop = node.property ("snap-mode"))) {
set_snap_mode ((SnapMode) atoi (prop->value()));
set_snap_mode ((SnapMode) string_2_enum (prop->value(), _snap_mode));
}
if ((prop = node.property ("internal-snap-to"))) {
internal_snap_type = (SnapType) string_2_enum (prop->value(), internal_snap_type);
}
if ((prop = node.property ("internal-snap-mode"))) {
internal_snap_mode = (SnapMode) string_2_enum (prop->value(), internal_snap_mode);
}
if ((prop = node.property ("pre-internal-snap-to"))) {
pre_internal_snap_type = (SnapType) string_2_enum (prop->value(), pre_internal_snap_type);
}
if ((prop = node.property ("pre-internal-snap-mode"))) {
pre_internal_snap_mode = (SnapMode) string_2_enum (prop->value(), pre_internal_snap_mode);
}
if ((prop = node.property ("mouse-mode"))) {
@ -2420,15 +2440,15 @@ Editor::get_state ()
maybe_add_mixer_strip_width (*node);
snprintf (buf, sizeof(buf), "%d", (int) zoom_focus);
node->add_property ("zoom-focus", buf);
node->add_property ("zoom-focus", enum_2_string (zoom_focus));
snprintf (buf, sizeof(buf), "%f", frames_per_unit);
node->add_property ("zoom", buf);
snprintf (buf, sizeof(buf), "%d", (int) _snap_type);
node->add_property ("snap-to", buf);
snprintf (buf, sizeof(buf), "%d", (int) _snap_mode);
node->add_property ("snap-mode", buf);
node->add_property ("snap-to", enum_2_string (_snap_type));
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));
node->add_property ("pre-internal-snap-to", enum_2_string (pre_internal_snap_type));
node->add_property ("pre-internal-snap-mode", enum_2_string (pre_internal_snap_mode));
node->add_property ("edit-point", enum_2_string (_edit_point));
snprintf (buf, sizeof (buf), "%" PRIi64, playhead_cursor->current_frame);

View file

@ -169,7 +169,12 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
}
void cycle_snap_mode ();
void cycle_snap_choice ();
void next_snap_choice ();
void next_snap_choice_music_only ();
void next_snap_choice_music_and_time ();
void prev_snap_choice ();
void prev_snap_choice_music_only ();
void prev_snap_choice_music_and_time ();
void set_snap_to (Editing::SnapType);
void set_snap_mode (Editing::SnapMode);
void set_snap_threshold (double pixel_distance) {snap_threshold = pixel_distance;}
@ -512,6 +517,10 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
Editing::MouseMode mouse_mode;
Editing::MouseMode pre_internal_mouse_mode;
Editing::SnapType pre_internal_snap_type;
Editing::SnapMode pre_internal_snap_mode;
Editing::SnapType internal_snap_type;
Editing::SnapMode internal_snap_mode;
bool _internal_editing;
Editing::MouseMode effective_mouse_mode () const;

View file

@ -473,7 +473,10 @@ Editor::register_actions ()
ActionManager::register_radio_action (editor_actions, snap_mode_group, X_("snap-magnetic"), _("Magnetic"), (sigc::bind (sigc::mem_fun(*this, &Editor::snap_mode_chosen), Editing::SnapMagnetic)));
ActionManager::register_action (editor_actions, X_("cycle-snap-mode"), _("Next Snap Mode"), sigc::mem_fun (*this, &Editor::cycle_snap_mode));
ActionManager::register_action (editor_actions, X_("cycle-snap-choice"), _("Next Snap Choice"), sigc::mem_fun (*this, &Editor::cycle_snap_choice));
ActionManager::register_action (editor_actions, X_("next-snap-choice"), _("Next Snap Choice"), sigc::mem_fun (*this, &Editor::next_snap_choice));
ActionManager::register_action (editor_actions, X_("next-snap-choice-music-only"), _("Next Musical Snap Choice"), sigc::mem_fun (*this, &Editor::next_snap_choice_music_only));
ActionManager::register_action (editor_actions, X_("prev-snap-choice"), _("Previous Snap Choice"), sigc::mem_fun (*this, &Editor::prev_snap_choice));
ActionManager::register_action (editor_actions, X_("prev-snap-choice-music-only"), _("Previous Musical Snap Choice"), sigc::mem_fun (*this, &Editor::prev_snap_choice_music_only));
Glib::RefPtr<ActionGroup> snap_actions = ActionGroup::create (X_("Snap"));
RadioAction::Group snap_choice_group;
@ -853,7 +856,7 @@ Editor::snap_type_action (SnapType type)
}
void
Editor::cycle_snap_choice()
Editor::next_snap_choice ()
{
switch (_snap_type) {
case Editing::SnapToCDFrame:
@ -943,6 +946,239 @@ Editor::cycle_snap_choice()
}
}
void
Editor::prev_snap_choice ()
{
switch (_snap_type) {
case Editing::SnapToCDFrame:
set_snap_to (Editing::SnapToTimecodeFrame);
break;
case Editing::SnapToTimecodeFrame:
set_snap_to (Editing::SnapToTimecodeSeconds);
break;
case Editing::SnapToTimecodeSeconds:
set_snap_to (Editing::SnapToTimecodeMinutes);
break;
case Editing::SnapToTimecodeMinutes:
set_snap_to (Editing::SnapToSeconds);
break;
case Editing::SnapToSeconds:
set_snap_to (Editing::SnapToMinutes);
break;
case Editing::SnapToMinutes:
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::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::SnapToBeatDiv32);
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::SnapToBeatDiv32:
set_snap_to (Editing::SnapToBeat);
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)
{

View file

@ -2705,16 +2705,29 @@ Editor::escape ()
void
Editor::set_internal_edit (bool yn)
{
if (_internal_editing == yn) {
return;
}
_internal_editing = yn;
if (yn) {
pre_internal_mouse_mode = mouse_mode;
pre_internal_snap_type = _snap_type;
pre_internal_snap_mode = _snap_mode;
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
(*i)->enter_internal_edit_mode ();
}
set_snap_to (internal_snap_type);
set_snap_mode (internal_snap_mode);
} else {
internal_snap_mode = _snap_mode;
internal_snap_type = _snap_type;
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
(*i)->leave_internal_edit_mode ();
}
@ -2723,6 +2736,9 @@ Editor::set_internal_edit (bool yn)
/* we were drawing .. flip back to something sensible */
set_mouse_mode (pre_internal_mouse_mode);
}
set_snap_to (pre_internal_snap_type);
set_snap_mode (pre_internal_snap_mode);
}
set_canvas_cursor ();

View file

@ -41,6 +41,9 @@ setup_gtk_ardour_enums ()
EditPoint edit_point;
LayerDisplay layer_display;
RegionListSortType region_list_sort_type;
SnapType snap_type;
SnapMode snap_mode;
ZoomFocus zoom_focus;
#define REGISTER(e) enum_writer.register_distinct (typeid(e).name(), i, s); i.clear(); s.clear()
#define REGISTER_BITS(e) enum_writer.register_bits (typeid(e).name(), i, s); i.clear(); s.clear()
@ -83,4 +86,47 @@ setup_gtk_ardour_enums ()
REGISTER_ENUM (ByStartInFile);
REGISTER_ENUM (ByTimestamp);
REGISTER (region_list_sort_type);
REGISTER_ENUM (SnapToCDFrame);
REGISTER_ENUM (SnapToTimecodeFrame);
REGISTER_ENUM (SnapToTimecodeSeconds);
REGISTER_ENUM (SnapToTimecodeMinutes);
REGISTER_ENUM (SnapToSeconds);
REGISTER_ENUM (SnapToMinutes);
REGISTER_ENUM (SnapToBeatDiv32);
REGISTER_ENUM (SnapToBeatDiv28);
REGISTER_ENUM (SnapToBeatDiv24);
REGISTER_ENUM (SnapToBeatDiv20);
REGISTER_ENUM (SnapToBeatDiv16);
REGISTER_ENUM (SnapToBeatDiv14);
REGISTER_ENUM (SnapToBeatDiv12);
REGISTER_ENUM (SnapToBeatDiv10);
REGISTER_ENUM (SnapToBeatDiv8);
REGISTER_ENUM (SnapToBeatDiv7);
REGISTER_ENUM (SnapToBeatDiv6);
REGISTER_ENUM (SnapToBeatDiv5);
REGISTER_ENUM (SnapToBeatDiv4);
REGISTER_ENUM (SnapToBeatDiv3);
REGISTER_ENUM (SnapToBeatDiv2);
REGISTER_ENUM (SnapToBeat);
REGISTER_ENUM (SnapToBar);
REGISTER_ENUM (SnapToMark);
REGISTER_ENUM (SnapToRegionStart);
REGISTER_ENUM (SnapToRegionEnd);
REGISTER_ENUM (SnapToRegionSync);
REGISTER_ENUM (SnapToRegionBoundary);
REGISTER (snap_type);
REGISTER_ENUM (SnapOff);
REGISTER_ENUM (SnapNormal);
REGISTER_ENUM (SnapMagnetic);
REGISTER (snap_mode);
REGISTER_ENUM (ZoomFocusLeft);
REGISTER_ENUM (ZoomFocusRight);
REGISTER_ENUM (ZoomFocusCenter);
REGISTER_ENUM (ZoomFocusPlayhead);
REGISTER_ENUM (ZoomFocusMouse);
REGISTER_ENUM (ZoomFocusEdit);
REGISTER (zoom_focus);
}

View file

@ -329,10 +329,13 @@ This mode provides many different operations on both regions and control points,
;; numbers
@eep|Editor/cycle-snap-mode|2|cycle to next grid snap mode
@eep|Editor/cycle-snap-choice|3|cycle to next grid unit
@trans|Editor/step-mouse-mode|4|toggle auto play
@trans|Transport/ToggleAutoReturn|5|toggle auto return
@trans|Transport/ToggleClick|6|toggle auto input
@eep|Editor/prev-snap-choice|3|use next grid unit
@eep|Editor/prev-snap-choice-music-only|<@PRIMARY@>3|use previous grid unit
@eep|Editor/next-snap-choice|4|use next grid unit
@eep|Editor/next-snap-choice-music-only|<@PRIMARY@>4|use next musical grid unit
@trans|Transport/ToggleAutoPlay|5|toggle auto play
@trans|Transport/ToggleAutoReturn|6|toggle auto return
@trans|Transport/ToggleClick|7|toggle click (metronome)
@ranges|Editor/set-tempo-from-region|9|set tempo (1 bar) from region(s)
@ranges|Editor/set-tempo-from-edit-range|0|set tempo (1 bar) from edit range