Merge with 2.0-ongoing R2883.
authorDavid Robillard <d@drobilla.net>
Thu, 10 Jan 2008 22:22:29 +0000 (22:22 +0000)
committerDavid Robillard <d@drobilla.net>
Thu, 10 Jan 2008 22:22:29 +0000 (22:22 +0000)
git-svn-id: svn://localhost/ardour2/trunk@2885 d708f5d6-7413-0410-9779-e7cbd77b26cf

45 files changed:
gtk2_ardour/SConscript
gtk2_ardour/about.cc
gtk2_ardour/ardev_common.sh.in
gtk2_ardour/ardour-sae.menus
gtk2_ardour/ardour.bindings.in
gtk2_ardour/ardour.menus
gtk2_ardour/ardour_ui.cc
gtk2_ardour/ardour_ui.h
gtk2_ardour/ardour_ui_ed.cc
gtk2_ardour/ardour_ui_options.cc
gtk2_ardour/audio_region_view.cc
gtk2_ardour/editor.cc
gtk2_ardour/editor.h
gtk2_ardour/editor_actions.cc
gtk2_ardour/editor_canvas.cc
gtk2_ardour/editor_markers.cc
gtk2_ardour/editor_ops.cc
gtk2_ardour/editor_selection.cc
gtk2_ardour/editor_timefx.cc
gtk2_ardour/engine_dialog.cc
gtk2_ardour/gain_meter.cc
gtk2_ardour/gain_meter.h
gtk2_ardour/keyeditor.cc
gtk2_ardour/keyeditor.h
gtk2_ardour/mixer_ui.cc
gtk2_ardour/new_session_dialog.cc
gtk2_ardour/new_session_dialog.h
gtk2_ardour/po/sv_SE.po
gtk2_ardour/tempo_dialog.cc
gtk2_ardour/tempo_dialog.h
gtk2_ardour/theme_manager.cc
libs/ardour/ardour/configuration_vars.h
libs/ardour/ardour/osc.h
libs/ardour/ardour/session.h
libs/ardour/ardour/types.h
libs/ardour/audio_diskstream.cc
libs/ardour/audioregion.cc
libs/ardour/osc.cc
libs/ardour/plugin_manager.cc
libs/ardour/rb_effect.cc
libs/ardour/session.cc
libs/ardour/session_butler.cc
libs/ardour/session_process.cc
libs/ardour/session_state.cc
libs/ardour/session_transport.cc

index f3b8788fadf1e8010c64feb7d220e81d593033e4..4d34a461766628cc518fa2546ad7cef51cbd1708 100644 (file)
@@ -426,7 +426,7 @@ else:
        keybindings_dict['%SECONDARY%'] = 'Alt'
        keybindings_dict['%TERTIARY%'] = 'Shift'
        keybindings_dict['%LEVEL4%'] = 'Mod2'
-       keybindings_dict['%WINDOW%'] = 'Ctrl'
+       keybindings_dict['%WINDOW%'] = 'Alt'
 
 ardourbindings = env.SubstInFile ('ardour.bindings', 'ardour.bindings.in', SUBST_DICT = keybindings_dict);
 ardoursaeDEbindings = env.SubstInFile ('ardour-sae-de.bindings', 'ardour-sae-de.bindings.in', SUBST_DICT = keybindings_dict);
index 06845cccd264969a21b4b994fada72bc6f0c5793..a201a1c404a65bf8f469c87b950167716183f9ec 100644 (file)
@@ -155,6 +155,7 @@ static const char* authors[] = {
        N_("John Anderson"),
        N_("Nedko Arnaudov"),
        N_("Carl Hetherington"),
+       N_("Colin Fletcher"),
        0
 };
 
@@ -200,7 +201,7 @@ About::About ()
        }
 
        set_translator_credits (t);
-       set_copyright (_("Copyright (C) 1999-2007 Paul Davis\n"));
+       set_copyright (_("Copyright (C) 1999-2008 Paul Davis\n"));
        set_license (_("Ardour comes with ABSOLUTELY NO WARRANTY\n"
                       "This is free software, and you are welcome to redistribute it\n"
                       "under certain conditions; see the file COPYING for details.\n"));
index 8165b22bc4fdb067dc5b0f247d3dbaf8555cbef2..28c9acb6f2217a400abcda36c9aae177c2423860 100644 (file)
@@ -2,12 +2,11 @@ cd `dirname "$0"`/..
 
 #export G_DEBUG=fatal_criticals
 
-export ARDOUR_PATH=.:gtk2_ardour
+export ARDOUR_PATH=gtk2_ardour/icons:gtk2_ardour/pixmaps:gtk2_ardour:.
 export GTK_PATH=libs/clearlooks
 
-export ARDOUR_SURFACES_PATH=libs/surfaces/frontier:libs/surfaces/generic_midi:libs/surfaces/mackie:libs/surfaces/tranzport
 
-export LD_LIBRARY_PATH=libs/surfaces/control_protocol:libs/ardour:libs/midi++2:libs/pbd:libs/rubberband:libs/soundtouch:libs/gtkmm2ext:libs/sigc++2:libs/glibmm2:libs/gtkmm2/atk:libs/gtkmm2/pango:libs/gtkmm2/gdk:libs/gtkmm2/gtk:libs/libgnomecanvasmm:libs/libsndfile:libs/appleutility:$LD_LIBRARY_PATH
+export LD_LIBRARY_PATH=libs/vamp-sdk:libs/surfaces/control_protocol:libs/ardour:libs/midi++2:libs/pbd:libs/rubberband:libs/soundtouch:libs/gtkmm2ext:libs/sigc++2:libs/glibmm2:libs/gtkmm2/atk:libs/gtkmm2/pango:libs/gtkmm2/gdk:libs/gtkmm2/gtk:libs/libgnomecanvasmm:libs/libsndfile:libs/appleutility:$LD_LIBRARY_PATH
 
 # DYLD_LIBRARY_PATH is for darwin.
 export DYLD_FALLBACK_LIBRARY_PATH=$LD_LIBRARY_PATH
@@ -15,5 +14,3 @@ export DYLD_FALLBACK_LIBRARY_PATH=$LD_LIBRARY_PATH
 export GTK_PATH=$PWD/libs/clearlooks:~/.ardour2
 
 EXECUTABLE=gtk2_ardour/ardour-%VERSION%
-
-ulimit -c unlimited
index a1818a99658d267d711ee61ac20ce8c6211fd220..e3efc7a8492f6ce606f864074173b5d1becb240b 100644 (file)
@@ -73,6 +73,7 @@
               <menuitem action='set-loop-from-edit-range'/>
               <menuitem action='set-loop-from-region'/>
               <menuitem action='set-punch-from-edit-range'/>
+              <menuitem action='set-punch-from-region'/>
               <menu action='LocateToMarker'>
                     <menuitem action='goto-mark-1'/>
                     <menuitem action='goto-mark-2'/>
index fb26ff1b56414a4f9066d3416f22e450e2391ae3..1efdb1cdd4fabf029fb31971f003f64d5f540bb2 100644 (file)
-; ardour-2.0beta11.1 GtkAccelMap rc-file         -*- scheme -*-
-; this file is an automated accelerator map dump
+; ardour-2.2 GtkAccelMap rc-file         -*- scheme -*-
+; this file is a hand-edited map that is processed by scons
+; to produce a real accelmap.
 ;
-; (gtk_accel_path "<Actions>/RegionList/RegionListSort" "")
-(gtk_accel_path "<Actions>/Common/Quit" "<%PRIMARY%>q")
-(gtk_accel_path "<Actions>/Common/Save" "<%PRIMARY%>s")
-; (gtk_accel_path "<Actions>/Editor/Pullup" "")
-; (gtk_accel_path "<Actions>/Editor/zoom-to-session" "")
-; (gtk_accel_path "<Actions>/JACK/JACKReconnect" "")
-; (gtk_accel_path "<Actions>/Editor/Autoconnect" "")
-; (gtk_accel_path "<Actions>/Editor/Edit" "")
+
+;; punctuation
+
+(gtk_accel_path "<Actions>/Editor/temporal-zoom-in" "equal")
+(gtk_accel_path "<Actions>/Editor/temporal-zoom-out" "minus")
+(gtk_accel_path "<Actions>/Editor/edit-cursor-to-previous-region-sync" "apostrophe")
+(gtk_accel_path "<Actions>/Editor/edit-cursor-to-next-region-sync" "semicolon")
+(gtk_accel_path "<Actions>/Editor/cycle-edit-point" "grave")
+
+(gtk_accel_path "<Actions>/Editor/playhead-to-next-region-boundary" "period")
+(gtk_accel_path "<Actions>/Editor/playhead-to-next-region-sync" "<%PRIMARY%>period")
+
 (gtk_accel_path "<Actions>/Editor/playhead-to-previous-region-boundary" "comma")
 (gtk_accel_path "<Actions>/Editor/playhead-to-previous-region-sync" "<%PRIMARY%>comma")
-; (gtk_accel_path "<Actions>/processormenu/copy" "")
-; (gtk_accel_path "<Actions>/options/MeterFalloffFaster" "")
+
+(gtk_accel_path "<Actions>/Editor/extend-range-to-end-of-region" "rightanglebracket")
+(gtk_accel_path "<Actions>/Editor/extend-range-to-start-of-region" "leftanglebracket")
+
+(gtk_accel_path "<Actions>/Transport/ToggleRoll" "space")
 (gtk_accel_path "<Actions>/Transport/ToggleRollForgetCapture" "<%PRIMARY%>space")
+(gtk_accel_path "<Actions>/Transport/record-roll" "<%TERTIARY%>space")
+
+(gtk_accel_path "<Actions>/Editor/set-fade-in-length" "slash")
+(gtk_accel_path "<Actions>/Editor/set-fade-in-length" "<%SECONDARY%>slash")
+(gtk_accel_path "<Actions>/Editor/set-fade-out-length" "backslash")
+(gtk_accel_path "<Actions>/Editor/set-fade-out-length" "<%SECONDARY%>backslash")
+
+(gtk_accel_path "<Actions>/Editor/trim-from-start" "<%TERTIARY%>braceleft")
+(gtk_accel_path "<Actions>/Editor/trim-to-end" "<%TERTIARY%>braceright")
+
+(gtk_accel_path "<Actions>/Editor/set-loop-from-edit-range" "bracketright")
+(gtk_accel_path "<Actions>/Editor/set-loop-from-region" "<%SECONDARY%>bracketright")
+
+(gtk_accel_path "<Actions>/Editor/set-punch-from-edit-range" "bracketleft")
+(gtk_accel_path "<Actions>/Editor/set-punch-from-region" "<%SECONDARY%>bracketleft")
+
+;; letters
+
+;; TOP ROW
+
+(gtk_accel_path "<Actions>/Common/Quit" "<%PRIMARY%>q")
+
+;; note that ctrl-w is special and consumed by the keyboard snooper
+
+(gtk_accel_path "<Actions>/Editor/set-edit-point" "e")
+(gtk_accel_path "<Actions>/Editor/select-all-before-edit-cursor" "<%PRIMARY%>e")
+(gtk_accel_path "<Actions>/Editor/show-editor-mixer" "<%TERTIARY%>e")
+(gtk_accel_path "<Actions>/Common/goto-editor" "<%WINDOW%>e")
+(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-range" "r")
+(gtk_accel_path "<Actions>/Editor/redo" "<%PRIMARY%>r")
 (gtk_accel_path "<Actions>/Transport/Record" "<%TERTIARY%>r")
-; (gtk_accel_path "<Actions>/RegionList/SortByRegionLength" "")
-; (gtk_accel_path "<Actions>/options/MeterFalloffSlowest" "")
-; (gtk_accel_path "<Actions>/Editor/playhead-to-previous-region-sync" "")
-; (gtk_accel_path "<Actions>/processormenu/deactivate_all" "")
-; (gtk_accel_path "<Actions>/RegionList/SortByRegionPosition" "")
-; (gtk_accel_path "<Actions>/Editor/ZoomFocus" "")
+(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-timefx" "t")
+(gtk_accel_path "<Actions>/Editor/select-all-between-cursors" "u")
+(gtk_accel_path "<Actions>/Editor/insert-region" "i")
+(gtk_accel_path "<Actions>/Editor/invert-selection" "<%TERTIARY%>i")
 (gtk_accel_path "<Actions>/Editor/addExistingAudioFiles" "<%SECONDARY%>i")
-; (gtk_accel_path "<Actions>/options/MeterFalloffSlow" "")
-(gtk_accel_path "<Actions>/options/ABAllPlugins" "<Control><Alt>p")
-; (gtk_accel_path "<Actions>/RegionList/rlHide" "")
-; (gtk_accel_path "<Actions>/Main/Metering" "")
-(gtk_accel_path "<Actions>/Editor/playhead-to-next-region-sync" "<%PRIMARY%>period")
-; (gtk_accel_path "<Actions>/Zoom/zoom-focus-playhead" "")
-; (gtk_accel_path "<Actions>/Editor/center-edit-cursor" "")
-; (gtk_accel_path "<Actions>/Editor/Monitoring" "")
-; (gtk_accel_path "<Actions>/processormenu/deactivate" "")
-; (gtk_accel_path "<Actions>/options/LatchedRecordEnable" "")
-; (gtk_accel_path "<Actions>/Transport/TogglePunchIn" "")
-; (gtk_accel_path "<Actions>/ShuttleActions/SetShuttleUnitsPercentage" "")
-(gtk_accel_path "<Actions>/Editor/edit-cursor-to-previous-region-start" "bracketleft")
-; (gtk_accel_path "<Actions>/Main/Close" "")
-; (gtk_accel_path "<Actions>/Main/New" "")
-(gtk_accel_path "<Actions>/Editor/nudge-next-backward" "<%PRIMARY%>KP_Subtract")
-; (gtk_accel_path "<Actions>/Editor/EditSelectRangeOptions" "")
-; (gtk_accel_path "<Actions>/Transport/ToggleTimeMaster" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-thirds" "")
-(gtk_accel_path "<Actions>/Editor/align-regions-start-relative" "<%TERTIARY%>a")
-; (gtk_accel_path "<Actions>/Main/Export" "")
-(gtk_accel_path "<Actions>/Editor/jump-forward-to-mark" "<%PRIMARY%>KP_Right")
-; (gtk_accel_path "<Actions>/Editor/Smpte30" "")
-; (gtk_accel_path "<Actions>/Editor/playhead-to-range-start" "")
-; (gtk_accel_path "<Actions>/Editor/Subframes" "")
-; (gtk_accel_path "<Actions>/Editor/Smpte2997drop" "")
-; (gtk_accel_path "<Actions>/Main/AddTrackBus" "")
-(gtk_accel_path "<Actions>/Editor/align-regions-end" "<%PRIMARY%><%LEVEL4%>a")
-; (gtk_accel_path "<Actions>/JACK/JACKDisconnect" "")
-; (gtk_accel_path "<Actions>/options/MeterFalloffFast" "")
-; (gtk_accel_path "<Actions>/options/FileDataFormatFloat" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-region-end" "")
-(gtk_accel_path "<Actions>/Editor/edit-cursor-to-next-region-sync" "semicolon")
-; (gtk_accel_path "<Actions>/options/StopRecordingOnXrun" "")
-; (gtk_accel_path "<Actions>/Editor/addExternalAudioToRegionList" "")
-; (gtk_accel_path "<Actions>/RegionList/SortDescending" "")
-; (gtk_accel_path "<Actions>/options/DoNotRunPluginsWhileRecording" "")
-; (gtk_accel_path "<Actions>/Editor/PullupNone" "")
-(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-range" "r")
-(gtk_accel_path "<Actions>/Editor/jump-backward-to-mark" "<%PRIMARY%>KP_Left")
-; (gtk_accel_path "<Actions>/Main/AudioFileFormatData" "")
-; (gtk_accel_path "<Actions>/options/MeterFalloffFastest" "")
-; (gtk_accel_path "<Actions>/Editor/audition-at-mouse" "")
-(gtk_accel_path "<Actions>/Transport/Forward" "<%PRIMARY%>rightarrow")
-; (gtk_accel_path "<Actions>/Snap/snap-to-smpte-seconds" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-smpte-frame" "")
-; (gtk_accel_path "<Actions>/Main/ExportSelection" "")
-; (gtk_accel_path "<Actions>/options/StopPluginsWithTransport" "")
+(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-object" "o")
+(gtk_accel_path "<Actions>/Common/ToggleOptionsEditor" "<%WINDOW%>o")
+(gtk_accel_path "<Actions>/Editor/set-playhead" "p")
+(gtk_accel_path "<Actions>/Editor/select-all-before-playhead" "<%PRIMARY%>p")
+
+;; MIDDLE ROW
+
+(gtk_accel_path "<Actions>/Editor/align-regions-sync-relative" "a")
+(gtk_accel_path "<Actions>/Editor/align-regions-start-relative" "<%PRIMARY%>a")
+(gtk_accel_path "<Actions>/Editor/align-regions-end" "<%SECONDARY%>a")
+(gtk_accel_path "<Actions>/Editor/align-regions-sync" "<%TERTIARY%>a")
+(gtk_accel_path "<Actions>/Editor/split-region" "s")
+(gtk_accel_path "<Actions>/Common/Save" "<%PRIMARY%>s")
+(gtk_accel_path "<Actions>/Editor/duplicate-region" "d")
+(gtk_accel_path "<Actions>/Editor/select-all-in-punch-range" "<%PRIMARY%>d")
+
+(gtk_accel_path "<Actions>/Editor/select-all" "<%PRIMARY%>a")
+(gtk_accel_path "<Actions>/Editor/select-all-after-playhead" "<%TERTIARY%><%PRIMARY%>p")
+(gtk_accel_path "<Actions>/Editor/select-all-after-edit-cursor" "<%TERTIARY%><%PRIMARY%>e")
+
+(gtk_accel_path "<Actions>/Editor/toggle-follow-playhead" "f")
+(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-gain" "g")
+(gtk_accel_path "<Actions>/Editor/play-selected-regions" "h")
+(gtk_accel_path "<Actions>/Editor/trim-front" "j")
+(gtk_accel_path "<Actions>/Editor/trim-back" "k")
+(gtk_accel_path "<Actions>/Common/ToggleKeyEditor" "<%WINDOW%>k")
+(gtk_accel_path "<Actions>/Transport/Loop" "l")
+(gtk_accel_path "<Actions>/Editor/select-all-in-loop-range" "<%PRIMARY%>l")
+(gtk_accel_path "<Actions>/Common/ToggleLocations" "<%WINDOW%>l")
+
+;; HOME ROW
+
+(gtk_accel_path "<Actions>/Editor/zoom-to-region" "z")
+(gtk_accel_path "<Actions>/Editor/undo" "<%PRIMARY%>z")
+(gtk_accel_path "<Actions>/Editor/toggle-zoom" "<%TERTIARY%>z")
+(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-zoom" "<%TERTIARY%>z")
+(gtk_accel_path "<Actions>/Editor/editor-cut" "<%PRIMARY%>x")
+(gtk_accel_path "<Actions>/Editor/editor-copy" "<%PRIMARY%>c")
+(gtk_accel_path "<Actions>/Common/ToggleColorManager" "<%WINDOW%>c")
+(gtk_accel_path "<Actions>/Editor/set-region-sync-position" "v")
 (gtk_accel_path "<Actions>/Editor/editor-paste" "<%PRIMARY%>v")
-(gtk_accel_path "<Actions>/Editor/scroll-tracks-down" "Page_Down")
-; (gtk_accel_path "<Actions>/Snap/snap-to-smpte-minutes" "")
-; (gtk_accel_path "<Actions>/Main/FlushWastebasket" "")
+(gtk_accel_path "<Actions>/Editor/brush-at-mouse" "<%PRIMARY%>b")
+(gtk_accel_path "<Actions>/Common/ToggleBigClock" "<%WINDOW%>b")
 (gtk_accel_path "<Actions>/Editor/normalize-region" "n")
-(gtk_accel_path "<Actions>/Editor/nudge-forward" "KP_Add")
-; (gtk_accel_path "<Actions>/RegionList/SortByRegionEndinFile" "")
-; (gtk_accel_path "<Actions>/Editor/ToggleMeasureVisibility" "")
-; (gtk_accel_path "<Actions>/Zoom/zoom-focus-center" "")
-(gtk_accel_path "<Actions>/Editor/nudge-backward" "KP_Subtract")
-; (gtk_accel_path "<Actions>/options/LatchedSolo" "")
-; (gtk_accel_path "<Actions>/options/MeterHoldOff" "")
-; (gtk_accel_path "<Actions>/options/OutputAutoConnectMaster" "")
-; (gtk_accel_path "<Actions>/JACK/JACKLatency64" "")
-(gtk_accel_path "<Actions>/Editor/undo" "<%PRIMARY%>z")
-(gtk_accel_path "<Actions>/Editor/insert-region" "i")
-; (gtk_accel_path "<Actions>/Editor/center-playhead" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-region-start" "")
-; (gtk_accel_path "<Actions>/Editor/View" "")
-; (gtk_accel_path "<Actions>/Editor/Layering" "")
-; (gtk_accel_path "<Actions>/JACK/JACKLatency4096" "")
-(gtk_accel_path "<Actions>/Editor/scroll-tracks-up" "Page_Up")
-(gtk_accel_path "<Actions>/Editor/set-edit-point" "e")
-; (gtk_accel_path "<Actions>/Editor/Smpte30drop" "")
-; (gtk_accel_path "<Actions>/Zoom/zoom-focus-edit" "")
-; (gtk_accel_path "<Actions>/Editor/EditCursorMovementOptions" "")
-; (gtk_accel_path "<Actions>/processormenu/activate_all" "")
-; (gtk_accel_path "<Actions>/Editor/addExternalAudioAsTapeTrack" "")
-; (gtk_accel_path "<Actions>/processormenu/paste" "")
-; (gtk_accel_path "<Actions>/Editor/Smpte25" "")
-; (gtk_accel_path "<Actions>/options/RegionEquivalentsOverlap" "")
-; (gtk_accel_path "<Actions>/Main/MeteringFallOffRate" "")
-; (gtk_accel_path "<Actions>/options/UseHardwareMonitoring" "")
-; (gtk_accel_path "<Actions>/Editor/Smpte24" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-mark" "")
-; (gtk_accel_path "<Actions>/Editor/CrossfadesShort" "")
-; (gtk_accel_path "<Actions>/Editor/Smpte5994" "")
-; (gtk_accel_path "<Actions>/JACK/JACKLatency8192" "")
+(gtk_accel_path "<Actions>/Editor/mute-unmute-region" "m")
+(gtk_accel_path "<Actions>/Common/goto-mixer" "<%WINDOW%>m")
+
+;; arrow keys, navigation etc.
+
+(gtk_accel_path "<Actions>/Editor/step-tracks-up" "uparrow")
+(gtk_accel_path "<Actions>/Transport/TransitionToRoll" "<%PRIMARY%>uparrow")
+(gtk_accel_path "<Actions>/Editor/select-prev-route" "<%SECONDARY%>uparrow")
+
 (gtk_accel_path "<Actions>/Editor/step-tracks-down" "downarrow")
-; (gtk_accel_path "<Actions>/Editor/toggle-xfades-visible" "")
-(gtk_accel_path "<Actions>/Editor/extend-range-to-end-of-region" "rightanglebracket")
+(gtk_accel_path "<Actions>/Transport/TransitionToReverse" "<%PRIMARY%>downarrow")
+(gtk_accel_path "<Actions>/Editor/select-next-route" "<%SECONDARY%>downarrow")
+
 (gtk_accel_path "<Actions>/Editor/scroll-backward" "leftarrow")
-(gtk_accel_path "<Actions>/Editor/start-range" "<%PRIMARY%>KP_Down")
-; (gtk_accel_path "<Actions>/ShuttleActions/SetShuttleUnitsSemitones" "")
-; (gtk_accel_path "<Actions>/JACK/JACKLatency128" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-beat" "")
-; (gtk_accel_path "<Actions>/Editor/RegionEditOps" "")
-; (gtk_accel_path "<Actions>/Editor/snap-magnetic" "")
-; (gtk_accel_path "<Actions>/Editor/playhead-to-range-end" "")
+(gtk_accel_path "<Actions>/Transport/Rewind" "<%PRIMARY%>leftarrow")
+(gtk_accel_path "<Actions>/Editor/scroll-playhead-backward" "<%TERTIARY%>leftarrow")
+
+(gtk_accel_path "<Actions>/Editor/scroll-forward" "rightarrow")
+(gtk_accel_path "<Actions>/Transport/Forward" "<%PRIMARY%>rightarrow")
 (gtk_accel_path "<Actions>/Editor/scroll-playhead-forward" "<%TERTIARY%>rightarrow")
-(gtk_accel_path "<Actions>/Editor/align-regions-sync-relative" "a")
-; (gtk_accel_path "<Actions>/Editor/EditSelectRegionOptions" "")
-(gtk_accel_path "<Actions>/Editor/crop" "c")
-; (gtk_accel_path "<Actions>/processormenu/newsend" "")
-; (gtk_accel_path "<Actions>/Editor/ToggleGeneric MIDISurfaceSubMenu" "")
-; (gtk_accel_path "<Actions>/Editor/MeterFalloff" "")
-; (gtk_accel_path "<Actions>/RegionList/rlRemove" "")
+
+(gtk_accel_path "<Actions>/Editor/scroll-tracks-down" "Page_Down")
+(gtk_accel_path "<Actions>/Editor/scroll-tracks-up" "Page_Up")
 (gtk_accel_path "<Actions>/Transport/GotoStart" "Home")
-(gtk_accel_path "<Actions>/Editor/scroll-playhead-backward" "<%TERTIARY%>leftarrow")
-(gtk_accel_path "<Actions>/Editor/split-region" "s")
-; (gtk_accel_path "<Actions>/Transport/ToggleAutoInput" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-thirtyseconds" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-minutes" "")
-(gtk_accel_path "<Actions>/Editor/align-regions-sync" "<%LEVEL4%>a")
+(gtk_accel_path "<Actions>/Transport/GotoEnd" "End")
+(gtk_accel_path "<Actions>/Editor/editor-delete" "Delete")
+
+(gtk_accel_path "<Actions>/Editor/playhead-to-edit" "Return")
+(gtk_accel_path "<Actions>/Editor/edit-to-playhead" "<%SECONDARY%>Return")
+(gtk_accel_path "<Actions>/Editor/remove-last-capture" "<%PRIMARY%>Delete")
+
+;; keypad
+
+(gtk_accel_path "<Actions>/Editor/nudge-backward" "KP_Subtract")
+(gtk_accel_path "<Actions>/Editor/nudge-next-backward" "<%PRIMARY%>KP_Subtract")
+
+(gtk_accel_path "<Actions>/Editor/jump-forward-to-mark" "<%PRIMARY%>KP_Right")
+(gtk_accel_path "<Actions>/Editor/jump-backward-to-mark" "<%PRIMARY%>KP_Left")
+
+(gtk_accel_path "<Actions>/Editor/nudge-forward" "KP_Add")
+(gtk_accel_path "<Actions>/Editor/nudge-next-forward" "<%PRIMARY%>KP_Add")
+
+(gtk_accel_path "<Actions>/Editor/start-range" "<%PRIMARY%>KP_Down")
+
+(gtk_accel_path "<Actions>/Editor/finish-range" "<%PRIMARY%>KP_Up")
+(gtk_accel_path "<Actions>/Editor/finish-add-range" "<%TERTIARY%><%PRIMARY%>KP_Up")
+
+(gtk_accel_path "<Actions>/Editor/add-location-from-playhead" "KP_Enter")
+(gtk_accel_path "<Actions>/Transport/focus-on-clock" "KP_Divide")
+
+(gtk_accel_path "<Actions>/Transport/GotoZero" "KP_0")
+(gtk_accel_path "<Actions>/Editor/goto-mark-1" "KP_1")
+(gtk_accel_path "<Actions>/Editor/goto-mark-2" "KP_2")
+(gtk_accel_path "<Actions>/Editor/goto-mark-3" "KP_3")
+(gtk_accel_path "<Actions>/Editor/goto-mark-4" "KP_4")
+(gtk_accel_path "<Actions>/Editor/goto-mark-5" "KP_5")
+(gtk_accel_path "<Actions>/Editor/goto-mark-6" "KP_6")
+(gtk_accel_path "<Actions>/Editor/goto-mark-7" "KP_7")
+(gtk_accel_path "<Actions>/Editor/goto-mark-8" "KP_8")
+(gtk_accel_path "<Actions>/Editor/goto-mark-9" "KP_9")
+
+;; F-N keys
+
+(gtk_accel_path "<Actions>/Editor/edit-cursor-to-range-start" "F1")
+(gtk_accel_path "<Actions>/Editor/edit-cursor-to-range-end" "F2")
+(gtk_accel_path "<Actions>/Editor/crop" "F3")
+(gtk_accel_path "<Actions>/Editor/separate" "F4")
+(gtk_accel_path "<Actions>/Editor/pitch-shift-region" "F5")
+(gtk_accel_path "<Actions>/Editor/select-range-between-cursors" "F6")
+(gtk_accel_path "<Actions>/Common/ToggleMaximalEditor" "F11")
+
+;; numbers
+
+(gtk_accel_path "<Actions>/Editor/toggle-edit-mode" "1")
+(gtk_accel_path "<Actions>/Editor/cycle-snap-mode" "2")
+(gtk_accel_path "<Actions>/Editor/cycle-snap-choice" "3")
+(gtk_accel_path "<Actions>/Transport/ToggleAutoReturn" "4")
+(gtk_accel_path "<Actions>/Transport/ToggleClick" "5")
+
+;;
+;; unbound actions
+;;
+
+; (gtk_accel_path "<Actions>/RegionList/RegionListSort" "")
 ; (gtk_accel_path "<Actions>/Main/Windows" "")
 ; (gtk_accel_path "<Actions>/Main/CleanupUnused" "")
-; (gtk_accel_path "<Actions>/processormenu/deselectall" "")
+; (gtk_accel_path "<Actions>/redirectmenu/deselectall" "")
 ; (gtk_accel_path "<Actions>/options/SoloViaBus" "")
-(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-zoom" "<Shift>z")
 ; (gtk_accel_path "<Actions>/RegionList/rlAudition" "")
-(gtk_accel_path "<Actions>/Editor/set-region-sync-position" "v")
 ; (gtk_accel_path "<Actions>/Editor/PullupPlus4Plus1" "")
 ; (gtk_accel_path "<Actions>/Snap/snap-to-region-boundary" "")
 ; (gtk_accel_path "<Actions>/JACK/JACK" "")
-(gtk_accel_path "<Actions>/Editor/editor-cut" "<%PRIMARY%>x")
 ; (gtk_accel_path "<Actions>/RegionList/SortAscending" "")
 ; (gtk_accel_path "<Actions>/Main/Help" "")
 ; (gtk_accel_path "<Actions>/options/UseExternalMonitoring" "")
 ; (gtk_accel_path "<Actions>/Editor/Smpte23976" "")
-(gtk_accel_path "<Actions>/Common/goto-editor" "<%WINDOW%>e")
-(gtk_accel_path "<Actions>/Editor/select-all" "<%PRIMARY%>a")
-(gtk_accel_path "<Actions>/Editor/nudge-next-forward" "<%PRIMARY%>KP_Add")
 ; (gtk_accel_path "<Actions>/options/ShowSoloMutes" "")
 ; (gtk_accel_path "<Actions>/Snap/snap-to-eighths" "")
-(gtk_accel_path "<Actions>/Editor/select-all-after-playhead" "<%TERTIARY%><%PRIMARY%>p")
-(gtk_accel_path "<Actions>/Common/ToggleMaximalEditor" "F11")
 ; (gtk_accel_path "<Actions>/RegionList/SortBySourceFileLength" "")
 ; (gtk_accel_path "<Actions>/Editor/Timecode" "")
 ; (gtk_accel_path "<Actions>/Transport/PlaySelection" "")
 ; (gtk_accel_path "<Actions>/Editor/PullupMinus4Minus1" "")
-(gtk_accel_path "<Actions>/Editor/select-all-after-edit-cursor" "<%TERTIARY%><%PRIMARY%>e")
 ; (gtk_accel_path "<Actions>/RegionList/SortBySourceFileName" "")
-(gtk_accel_path "<Actions>/Editor/finish-range" "<%PRIMARY%>KP_Up")
-(gtk_accel_path "<Actions>/Transport/Loop" "l")
 ; (gtk_accel_path "<Actions>/Editor/CrossfadesFull" "")
-(gtk_accel_path "<Actions>/Editor/finish-add-range" "<%TERTIARY%><%PRIMARY%>KP_Up")
 ; (gtk_accel_path "<Actions>/Transport/ToggleClick" "")
 ; (gtk_accel_path "<Actions>/options/SendMTC" "")
 ; (gtk_accel_path "<Actions>/Transport/TogglePunchOut" "")
-(gtk_accel_path "<Actions>/Editor/select-all-in-loop-range" "<%PRIMARY%>l")
-(gtk_accel_path "<Actions>/Editor/show-editor-mixer" "<%TERTIARY%>e")
-(gtk_accel_path "<Actions>/Editor/show-editor-list" "<Shift>l")
 ; (gtk_accel_path "<Actions>/options/SoloInPlace" "")
 ; (gtk_accel_path "<Actions>/Main/Options" "")
 ; (gtk_accel_path "<Actions>/options/MeterFalloffMedium" "")
-(gtk_accel_path "<Actions>/Editor/toggle-follow-playhead" "f")
 ; (gtk_accel_path "<Actions>/Main/SaveTemplate" "")
-(gtk_accel_path "<Actions>/Transport/TransitionToRoll" "<%PRIMARY%>uparrow")
 ; (gtk_accel_path "<Actions>/RegionList/SortByRegionStartinFile" "")
 ; (gtk_accel_path "<Actions>/options/GainReduceFastTransport" "")
 ; (gtk_accel_path "<Actions>/Common/ToggleInspector" "")
 ; (gtk_accel_path "<Actions>/Transport/ToggleAutoPlay" "")
 ; (gtk_accel_path "<Actions>/Editor/playhead-to-next-region-sync" "")
-(gtk_accel_path "<Actions>/Editor/edit-to-playhead" "<%SECONDARY%>Return")
 ; (gtk_accel_path "<Actions>/Editor/LayerMoveAddHigher" "")
 ; (gtk_accel_path "<Actions>/Editor/Smpte60" "")
 ; (gtk_accel_path "<Actions>/Main/Open" "")
-(gtk_accel_path "<Actions>/Editor/scroll-forward" "rightarrow")
 ; (gtk_accel_path "<Actions>/Zoom/zoom-focus-left" "")
 ; (gtk_accel_path "<Actions>/Main/TransportOptions" "")
 ; (gtk_accel_path "<Actions>/Main/ControlSurfaces" "")
 ; (gtk_accel_path "<Actions>/Transport/ToggleAutoReturn" "")
 ; (gtk_accel_path "<Actions>/Editor/Smpte2997" "")
 ; (gtk_accel_path "<Actions>/Editor/ToggleWaveformVisibility" "")
-(gtk_accel_path "<Actions>/Editor/redo" "<%PRIMARY%>r")
-; (gtk_accel_path "<Actions>/Editor/addExternalAudioAsRegion" "")
 ; (gtk_accel_path "<Actions>/Main/ExportSession" "")
 ; (gtk_accel_path "<Actions>/options/InputAutoConnectPhysical" "")
 ; (gtk_accel_path "<Actions>/Snap/snap-to-edit-cursor" "")
-(gtk_accel_path "<Actions>/Editor/temporal-zoom-in" "minus")
 ; (gtk_accel_path "<Actions>/JACK/Latency" "")
-(gtk_accel_path "<Actions>/Editor/edit-cursor-to-range-end" "F2")
-; (gtk_accel_path "<Actions>/processormenu/rename" "")
+; (gtk_accel_path "<Actions>/redirectmenu/rename" "")
 ; (gtk_accel_path "<Actions>/RegionList/rlShowAuto" "")
-(gtk_accel_path "<Actions>/Editor/select-all-before-playhead" "<%PRIMARY%>p")
-; (gtk_accel_path "<Actions>/Editor/addExistingAudioFiles" "")
 ; (gtk_accel_path "<Actions>/Main/Session" "")
-(gtk_accel_path "<Actions>/Editor/edit-cursor-to-range-start" "F1")
 ; (gtk_accel_path "<Actions>/Main/AudioFileFormat" "")
 ; (gtk_accel_path "<Actions>/Transport/Transport" "")
-(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-timefx" "t")
-(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-note" "n")
 ; (gtk_accel_path "<Actions>/RegionList/SortByRegionName" "")
 ; (gtk_accel_path "<Actions>/Main/KeyMouse Actions" "")
-(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-gain" "g")
 ; (gtk_accel_path "<Actions>/Snap/snap-to-frame" "")
 ; (gtk_accel_path "<Actions>/Editor/SnapTo" "")
-(gtk_accel_path "<Actions>/Transport/TransitionToReverse" "<%PRIMARY%>downarrow")
 ; (gtk_accel_path "<Actions>/Editor/Crossfades" "")
 ; (gtk_accel_path "<Actions>/Editor/PullupPlus4" "")
-(gtk_accel_path "<Actions>/Editor/add-location-from-playhead" "KP_Enter")
-(gtk_accel_path "<Actions>/Editor/edit-cursor-to-previous-region-end" "<%PRIMARY%>bracketleft")
 ; (gtk_accel_path "<Actions>/Main/MeteringHoldTime" "")
 ; (gtk_accel_path "<Actions>/Editor/PullupPlus1" "")
 ; (gtk_accel_path "<Actions>/Editor/Smpte24976" "")
 ; (gtk_accel_path "<Actions>/options/FileDataFormat24bit" "")
 ; (gtk_accel_path "<Actions>/Editor/SnapMode" "")
-(gtk_accel_path "<Actions>/Common/ToggleOptionsEditor" "<%WINDOW%>o")
 ; (gtk_accel_path "<Actions>/Editor/PullupMinus4" "")
-(gtk_accel_path "<Actions>/Common/goto-mixer" "<%WINDOW%>m")
-; (gtk_accel_path "<Actions>/Editor/addExternalAudioToTrack" "")
 ; (gtk_accel_path "<Actions>/RegionList/SortBySourceFileCreationDate" "")
-; (gtk_accel_path "<Actions>/processormenu/activate" "")
-(gtk_accel_path "<Actions>/Editor/extend-range-to-start-of-region" "leftanglebracket")
+; (gtk_accel_path "<Actions>/redirectmenu/activate" "")
 ; (gtk_accel_path "<Actions>/Editor/PullupMinus1" "")
 ; (gtk_accel_path "<Actions>/Editor/snap-normal" "")
-(gtk_accel_path "<Actions>/Common/ToggleBigClock" "<%WINDOW%>b")
-(gtk_accel_path "<Actions>/Common/ToggleKeyEditor" "<%WINDOW%>k")
 ; (gtk_accel_path "<Actions>/Snap/snap-to-asixteenthbeat" "")
-(gtk_accel_path "<Actions>/Editor/select-all-in-punch-range" "<%PRIMARY%>d")
-; (gtk_accel_path "<Actions>/processormenu/edit" "")
-(gtk_accel_path "<Actions>/Editor/duplicate-region" "d")
+; (gtk_accel_path "<Actions>/redirectmenu/edit" "")
 ; (gtk_accel_path "<Actions>/JACK/JACKLatency2048" "")
 ; (gtk_accel_path "<Actions>/Editor/ToggleWaveformsWhileRecording" "")
 ; (gtk_accel_path "<Actions>/Zoom/zoom-focus-right" "")
-(gtk_accel_path "<Actions>/Editor/remove-last-capture" "<%PRIMARY%>Delete")
 ; (gtk_accel_path "<Actions>/options/FileHeaderFormatWAVE" "")
-(gtk_accel_path "<Actions>/Transport/GotoZero" "KP_0")
-(gtk_accel_path "<Actions>/Transport/GotoEnd" "End")
-; (gtk_accel_path "<Actions>/processormenu/cut" "")
-; (gtk_accel_path "<Actions>/processormenu/newinsert" "")
+; (gtk_accel_path "<Actions>/redirectmenu/cut" "")
+; (gtk_accel_path "<Actions>/redirectmenu/newinsert" "")
 ; (gtk_accel_path "<Actions>/options/UseMMC" "")
 ; (gtk_accel_path "<Actions>/options/MeterFalloffOff" "")
-(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-object" "o")
 ; (gtk_accel_path "<Actions>/Editor/PullupMinus4Plus1" "")
 ; (gtk_accel_path "<Actions>/Editor/MeterHold" "")
 ; (gtk_accel_path "<Actions>/Snap/snap-to-cd-frame" "")
 ; (gtk_accel_path "<Actions>/Main/Cleanup" "")
 ; (gtk_accel_path "<Actions>/Main/Snapshot" "")
 ; (gtk_accel_path "<Actions>/Transport/ToggleVideoSync" "")
-(gtk_accel_path "<Actions>/Transport/ToggleRoll" "space")
 ; (gtk_accel_path "<Actions>/RegionList/SortBySourceFilesystem" "")
-(gtk_accel_path "<Actions>/Common/ToggleColorManager" "<%WINDOW%>c")
 ; (gtk_accel_path "<Actions>/Common/About" "")
 ; (gtk_accel_path "<Actions>/JACK/JACKLatency32" "")
-(gtk_accel_path "<Actions>/Editor/playhead-to-edit" "Return")
 ; (gtk_accel_path "<Actions>/options/FileHeaderFormatWAVE64" "")
-(gtk_accel_path "<Actions>/Editor/brush-at-mouse" "<%PRIMARY%>b")
 ; (gtk_accel_path "<Actions>/RegionList/rlShowAll" "")
-(gtk_accel_path "<Actions>/Transport/Rewind" "<%PRIMARY%>leftarrow")
 ; (gtk_accel_path "<Actions>/RegionList/SortByRegionTimestamp" "")
 ; (gtk_accel_path "<Actions>/options/VerifyRemoveLastCapture" "")
 ; (gtk_accel_path "<Actions>/options/OutputAutoConnectPhysical" "")
-(gtk_accel_path "<Actions>/Editor/step-tracks-up" "uparrow")
-(gtk_accel_path "<Actions>/Editor/playhead-to-next-region-boundary" "period")
 ; (gtk_accel_path "<Actions>/options/SendMMC" "")
 ; (gtk_accel_path "<Actions>/Editor/toggle-auto-xfades" "")
 ; (gtk_accel_path "<Actions>/Main/AudioFileFormatHeader" "")
 ; (gtk_accel_path "<Actions>/options/MeterHoldShort" "")
 ; (gtk_accel_path "<Actions>/options/MeterHoldMedium" "")
-(gtk_accel_path "<Actions>/Editor/select-all-before-edit-cursor" "<%PRIMARY%>e")
 ; (gtk_accel_path "<Actions>/Editor/Subframes80" "")
 ; (gtk_accel_path "<Actions>/options/FileHeaderFormatCAF" "")
-(gtk_accel_path "<Actions>/Common/ToggleLocations" "<%WINDOW%>l")
 ; (gtk_accel_path "<Actions>/Editor/ToggleGeneric MIDISurface" "")
-(gtk_accel_path "<Actions>/Editor/editor-delete" "Delete")
 ; (gtk_accel_path "<Actions>/JACK/JACKLatency256" "")
-(gtk_accel_path "<Actions>/Editor/select-all-between-cursors" "u")
 ; (gtk_accel_path "<Actions>/Editor/LayerAddHigher" "")
 ; (gtk_accel_path "<Actions>/Editor/Solo" "")
 ; (gtk_accel_path "<Actions>/JACK/JACKLatency1024" "")
 ; (gtk_accel_path "<Actions>/Main/ExportRangeMarkers" "")
-(gtk_accel_path "<Actions>/Editor/set-playhead" "p")
 ; (gtk_accel_path "<Actions>/Editor/toggle-xfades-active" "")
 ; (gtk_accel_path "<Actions>/Snap/snap-to-bar" "")
 ; (gtk_accel_path "<Actions>/Editor/LayerLaterHigher" "")
-; (gtk_accel_path "<Actions>/processormenu/selectall" "")
-(gtk_accel_path "<Actions>/Editor/editor-copy" "<%PRIMARY%>c")
+; (gtk_accel_path "<Actions>/redirectmenu/selectall" "")
 ; (gtk_accel_path "<Actions>/Snap/snap-to-quarters" "")
-(gtk_accel_path "<Actions>/Editor/temporal-zoom-out" "equal")
 ; (gtk_accel_path "<Actions>/options/UseSoftwareMonitoring" "")
 ; (gtk_accel_path "<Actions>/Editor/Subframes100" "")
-(gtk_accel_path "<Actions>/Editor/mute-unmute-region" "m")
-; (gtk_accel_path "<Actions>/options/OutputAutoConnectManual" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-region-sync" "")
-(gtk_accel_path "<Actions>/Editor/edit-cursor-to-previous-region-sync" "apostrophe")
-; (gtk_accel_path "<Actions>/processormenu/clear" "")
+
+
+; (gtk_accel_path "<Actions>/redirectmenu/clear" "")
 ; (gtk_accel_path "<Actions>/Editor/ToggleGeneric MIDISurfaceFeedback" "")
 ; (gtk_accel_path "<Actions>/Editor/PullupPlus4Minus1" "")
 ; (gtk_accel_path "<Actions>/JACK/JACKLatency512" "")
 ; (gtk_accel_path "<Actions>/Main/Recent" "")
-; (gtk_accel_path "<Actions>/processormenu/newplugin" "")
+; (gtk_accel_path "<Actions>/redirectmenu/newplugin" "")
 ; (gtk_accel_path "<Actions>/options/InputAutoConnectManual" "")
 ; (gtk_accel_path "<Actions>/options/MeterHoldLong" "")
 ; (gtk_accel_path "<Actions>/Snap/snap-to-seconds" "")
-(gtk_accel_path "<Actions>/Editor/cycle-edit-point" "grave")
-(gtk_accel_path "<Actions>/Editor/toggle-edit-mode" "1")
-(gtk_accel_path "<Actions>/Editor/cycle-snap-mode" "2")
-(gtk_accel_path "<Actions>/Editor/cycle-snap-choice" "3")
-(gtk_accel_path "<Actions>/Editor/set-fade-in-length" "slash")
-(gtk_accel_path "<Actions>/Editor/set-fade-out-length" "backslash")
-(gtk_accel_path "<Actions>/Editor/trim-from-start" "<%TERTIARY%>braceleft")
-(gtk_accel_path "<Actions>/Editor/trim-to-end" "<%TERTIARY%>braceright")
-;(gtk_accel_path "<Actions>/Editor/trim-front" "a")
-;(gtk_accel_path "<Actions>/Editor/trim-back" "s")
-(gtk_accel_path "<Actions>/Editor/goto-mark-1" "KP_1")
-(gtk_accel_path "<Actions>/Editor/goto-mark-2" "KP_2")
-(gtk_accel_path "<Actions>/Editor/goto-mark-3" "KP_3")
-(gtk_accel_path "<Actions>/Editor/goto-mark-4" "KP_4")
-(gtk_accel_path "<Actions>/Editor/goto-mark-5" "KP_5")
-(gtk_accel_path "<Actions>/Editor/goto-mark-6" "KP_6")
-(gtk_accel_path "<Actions>/Editor/goto-mark-7" "KP_7")
-(gtk_accel_path "<Actions>/Editor/goto-mark-8" "KP_8")
-(gtk_accel_path "<Actions>/Editor/goto-mark-9" "KP_9")
-(gtk_accel_path "<Actions>/Transport/ToggleClick" "5")
-(gtk_accel_path "<Actions>/Transport/ToggleAutoReturn" "4")
-(gtk_accel_path "<Actions>/Transport/focus-on-clock" "KP_Divide")
-(gtk_accel_path "<Actions>/Editor/set-loop-from-edit-range" "bracketright")
-(gtk_accel_path "<Actions>/Editor/set-punch-from-edit-range" "bracketleft")
-(gtk_accel_path "<Actions>/Editor/set-loop-from-region" "<%PRIMARY%><%SECONDARY%>bracketright")
-(gtk_accel_path "<Actions>/Editor/toggle-zoom" "<%TERTIARY%>z")
-(gtk_accel_path "<Actions>/Editor/zoom-to-region" "z")
+; (gtk_accel_path "<Actions>/options/OutputAutoConnectManual" "")
+; (gtk_accel_path "<Actions>/Snap/snap-to-region-sync" "")
+; (gtk_accel_path "<Actions>/Editor/Pullup" "")
+; (gtk_accel_path "<Actions>/Editor/zoom-to-session" "")
+; (gtk_accel_path "<Actions>/JACK/JACKReconnect" "")
+; (gtk_accel_path "<Actions>/Editor/Autoconnect" "")
+; (gtk_accel_path "<Actions>/Editor/Edit" "")
+; (gtk_accel_path "<Actions>/redirectmenu/copy" "")
+; (gtk_accel_path "<Actions>/options/MeterFalloffFaster" "")
+; (gtk_accel_path "<Actions>/RegionList/SortByRegionLength" "")
+; (gtk_accel_path "<Actions>/options/MeterFalloffSlowest" "")
+; (gtk_accel_path "<Actions>/Editor/playhead-to-previous-region-sync" "")
+; (gtk_accel_path "<Actions>/redirectmenu/deactivate_all" "")
+; (gtk_accel_path "<Actions>/RegionList/SortByRegionPosition" "")
+; (gtk_accel_path "<Actions>/Editor/ZoomFocus" "")
+; (gtk_accel_path "<Actions>/options/MeterFalloffSlow" "")
+; (gtk_accel_path "<Actions>/RegionList/rlHide" "")
+; (gtk_accel_path "<Actions>/Main/Metering" "")
+; (gtk_accel_path "<Actions>/Zoom/zoom-focus-playhead" "")
+; (gtk_accel_path "<Actions>/Editor/center-edit-cursor" "")
+; (gtk_accel_path "<Actions>/Editor/Monitoring" "")
+; (gtk_accel_path "<Actions>/redirectmenu/deactivate" "")
+; (gtk_accel_path "<Actions>/options/LatchedRecordEnable" "")
+; (gtk_accel_path "<Actions>/Transport/TogglePunchIn" "")
+; (gtk_accel_path "<Actions>/ShuttleActions/SetShuttleUnitsPercentage" "")
+; (gtk_accel_path "<Actions>/Main/Close" "")
+; (gtk_accel_path "<Actions>/Main/New" "")
+; (gtk_accel_path "<Actions>/Editor/EditSelectRangeOptions" "")
+; (gtk_accel_path "<Actions>/Transport/ToggleTimeMaster" "")
+; (gtk_accel_path "<Actions>/Snap/snap-to-thirds" "")
+; (gtk_accel_path "<Actions>/Main/Export" "")
+; (gtk_accel_path "<Actions>/Editor/Smpte30" "")
+; (gtk_accel_path "<Actions>/Editor/playhead-to-range-start" "")
+; (gtk_accel_path "<Actions>/Editor/Subframes" "")
+; (gtk_accel_path "<Actions>/Editor/Smpte2997drop" "")
+; (gtk_accel_path "<Actions>/Main/AddTrackBus" "")
+; (gtk_accel_path "<Actions>/JACK/JACKDisconnect" "")
+; (gtk_accel_path "<Actions>/options/MeterFalloffFast" "")
+; (gtk_accel_path "<Actions>/options/FileDataFormatFloat" "")
+; (gtk_accel_path "<Actions>/Snap/snap-to-region-end" "")
+; (gtk_accel_path "<Actions>/options/StopRecordingOnXrun" "")
+; (gtk_accel_path "<Actions>/RegionList/SortDescending" "")
+; (gtk_accel_path "<Actions>/options/DoNotRunPluginsWhileRecording" "")
+; (gtk_accel_path "<Actions>/Editor/PullupNone" "")
+; (gtk_accel_path "<Actions>/Main/AudioFileFormatData" "")
+; (gtk_accel_path "<Actions>/options/MeterFalloffFastest" "")
+; (gtk_accel_path "<Actions>/Editor/audition-at-mouse" "")
+; (gtk_accel_path "<Actions>/Snap/snap-to-smpte-seconds" "")
+; (gtk_accel_path "<Actions>/Snap/snap-to-smpte-frame" "")
+; (gtk_accel_path "<Actions>/Main/ExportSelection" "")
+; (gtk_accel_path "<Actions>/options/StopPluginsWithTransport" "")
+; (gtk_accel_path "<Actions>/Snap/snap-to-smpte-minutes" "")
+; (gtk_accel_path "<Actions>/Main/FlushWastebasket" "")
+; (gtk_accel_path "<Actions>/RegionList/SortByRegionEndinFile" "")
+; (gtk_accel_path "<Actions>/Editor/ToggleMeasureVisibility" "")
+; (gtk_accel_path "<Actions>/Zoom/zoom-focus-center" "")
+; (gtk_accel_path "<Actions>/options/LatchedSolo" "")
+; (gtk_accel_path "<Actions>/options/MeterHoldOff" "")
+; (gtk_accel_path "<Actions>/options/OutputAutoConnectMaster" "")
+; (gtk_accel_path "<Actions>/JACK/JACKLatency64" "")
+; (gtk_accel_path "<Actions>/Editor/center-playhead" "")
+; (gtk_accel_path "<Actions>/Snap/snap-to-region-start" "")
+; (gtk_accel_path "<Actions>/Editor/View" "")
+; (gtk_accel_path "<Actions>/Editor/Layering" "")
+; (gtk_accel_path "<Actions>/JACK/JACKLatency4096" "")
+; (gtk_accel_path "<Actions>/Editor/Smpte30drop" "")
+; (gtk_accel_path "<Actions>/Zoom/zoom-focus-edit" "")
+; (gtk_accel_path "<Actions>/Editor/EditCursorMovementOptions" "")
+; (gtk_accel_path "<Actions>/redirectmenu/activate_all" "")
+; (gtk_accel_path "<Actions>/redirectmenu/paste" "")
+; (gtk_accel_path "<Actions>/Editor/Smpte25" "")
+; (gtk_accel_path "<Actions>/options/RegionEquivalentsOverlap" "")
+; (gtk_accel_path "<Actions>/Main/MeteringFallOffRate" "")
+; (gtk_accel_path "<Actions>/options/UseHardwareMonitoring" "")
+; (gtk_accel_path "<Actions>/Editor/Smpte24" "")
+; (gtk_accel_path "<Actions>/Snap/snap-to-mark" "")
+; (gtk_accel_path "<Actions>/Editor/CrossfadesShort" "")
+; (gtk_accel_path "<Actions>/Editor/Smpte5994" "")
+; (gtk_accel_path "<Actions>/JACK/JACKLatency8192" "")
+; (gtk_accel_path "<Actions>/Editor/toggle-xfades-visible" "")
+; (gtk_accel_path "<Actions>/ShuttleActions/SetShuttleUnitsSemitones" "")
+; (gtk_accel_path "<Actions>/JACK/JACKLatency128" "")
+; (gtk_accel_path "<Actions>/Snap/snap-to-beat" "")
+; (gtk_accel_path "<Actions>/Editor/RegionEditOps" "")
+; (gtk_accel_path "<Actions>/Editor/snap-magnetic" "")
+; (gtk_accel_path "<Actions>/Editor/playhead-to-range-end" "")
+; (gtk_accel_path "<Actions>/Editor/EditSelectRegionOptions" "")
+; (gtk_accel_path "<Actions>/redirectmenu/newsend" "")
+; (gtk_accel_path "<Actions>/Editor/ToggleGeneric MIDISurfaceSubMenu" "")
+; (gtk_accel_path "<Actions>/Editor/MeterFalloff" "")
+; (gtk_accel_path "<Actions>/RegionList/rlRemove" "")
+; (gtk_accel_path "<Actions>/Transport/ToggleAutoInput" "")
+; (gtk_accel_path "<Actions>/Snap/snap-to-thirtyseconds" "")
+; (gtk_accel_path "<Actions>/Snap/snap-to-minutes" "")
+; (gtk_accel_path "<Actions>/RegionList/RegionListSort" "")
+; (gtk_accel_path "<Actions>/Editor/edit-cursor-to-previous-region-start" "")
index 11e75137dd7dbffd9e87bdbffdae8b0ee7a52c4d..1964fb81933d15daf9ba3ff6f7fcba38c78eae25 100644 (file)
@@ -87,6 +87,7 @@
               <menuitem action='set-loop-from-edit-range'/>
               <menuitem action='set-loop-from-region'/>
               <menuitem action='set-punch-from-edit-range'/>
+              <menuitem action='set-punch-from-region'/>
        </menu>
        <menu name='Edit' action='Edit'>
                <menuitem action='undo'/>
                        <menuitem action='ShowTrackMeters'/>
               <menuitem action='OnlyCopyImportedFiles'/>
               <menuitem action='ShowTrackMeters'/>
+                       <menuitem action='DefaultNarrowMS'/>
                <menuitem action='link-region-and-track-selection'/>
+                       
               <separator/>
          </menu>
         <menu name='Help' action='Help'>
index d0261849f6152c80c6991fc2a9858eed040b9a27..70dac73a59fdeff0aff8e692fb5af707da459471 100644 (file)
@@ -741,32 +741,39 @@ ARDOUR_UI::check_memory_locking ()
 void
 ARDOUR_UI::finish()
 {
-       if (session && session->dirty()) {
-               switch (ask_about_saving_session(_("quit"))) {
-               case -1:
-                       return;
-                       break;
-               case 1:
-                       /* use the default name */
-                       if (save_state_canfail ("")) {
-                               /* failed - don't quit */
-                               MessageDialog msg (*editor, 
-                                              _("\
+       if (session) {
+
+               if (session->transport_rolling()) {
+                       session->request_stop ();
+                       usleep (2500000);
+               }
+
+               if (session->dirty()) {
+                       switch (ask_about_saving_session(_("quit"))) {
+                       case -1:
+                               return;
+                               break;
+                       case 1:
+                               /* use the default name */
+                               if (save_state_canfail ("")) {
+                                       /* failed - don't quit */
+                                       MessageDialog msg (*editor, 
+                                                          _("\
 Ardour was unable to save your session.\n\n\
 If you still wish to quit, please use the\n\n\
 \"Just quit\" option."));
-                               msg.run ();
-                               return;
+                                       msg.run ();
+                                       return;
+                               }
+                               break;
+                       case 0:
+                               break;
                        }
-                       break;
-               case 0:
-                       break;
                }
-       }
-
-       if (session) {
+               
                session->set_deletion_in_progress ();
        }
+
        engine->stop (true);
        Config->save_state();
        ARDOUR_UI::config()->save_state();
@@ -1074,8 +1081,7 @@ ARDOUR_UI::build_session_selector ()
        recent_session_display.set_model (recent_session_model);
        recent_session_display.append_column (_("Recent Sessions"), recent_session_columns.visible_name);
        recent_session_display.set_headers_visible (false);
-       recent_session_display.get_selection()->set_mode (SELECTION_SINGLE);
-
+       recent_session_display.get_selection()->set_mode (SELECTION_BROWSE);
        recent_session_display.signal_row_activated().connect (mem_fun (*this, &ARDOUR_UI::recent_session_row_activated));
 
        scroller->add (recent_session_display);
@@ -1099,37 +1105,55 @@ ARDOUR_UI::recent_session_row_activated (const TreePath& path, TreeViewColumn* c
 void
 ARDOUR_UI::open_recent_session ()
 {
-       /* popup selector window */
+       bool can_return = (session != 0);
 
        if (session_selector_window == 0) {
                build_session_selector ();
        }
-
+       
        redisplay_recent_sessions ();
 
-       ResponseType r = (ResponseType) session_selector_window->run ();
+       while (true) {
+               
+               session_selector_window->set_position (WIN_POS_MOUSE);
 
-       session_selector_window->hide();
+               ResponseType r = (ResponseType) session_selector_window->run ();
+               
+               switch (r) {
+               case RESPONSE_ACCEPT:
+                       break;
+               default:
+                       if (can_return) {
+                               session_selector_window->hide();
+                               return;
+                       } else {
+                               exit (1);
+                       }
+               }
 
-       switch (r) {
-       case RESPONSE_ACCEPT:
-               break;
-       default:
-               return;
-       }
+               if (recent_session_display.get_selection()->count_selected_rows() == 0) {
+                       continue;
+               }
+               
+               session_selector_window->hide();
 
-       Gtk::TreeModel::iterator i = recent_session_display.get_selection()->get_selected();
+               Gtk::TreeModel::iterator i = recent_session_display.get_selection()->get_selected();
+               
+               if (i == recent_session_model->children().end()) {
+                       return;
+               }
+               
+               Glib::ustring path = (*i)[recent_session_columns.fullpath];
+               Glib::ustring state = (*i)[recent_session_columns.visible_name];
+               
+               _session_is_new = false;
+               
+               if (load_session (path, state) == 0) {
+                       break;
+               }
 
-       if (i == recent_session_model->children().end()) {
-               return;
+               can_return = false;
        }
-       
-       Glib::ustring path = (*i)[recent_session_columns.fullpath];
-       Glib::ustring state = (*i)[recent_session_columns.visible_name];
-
-       _session_is_new = false;
-
-       load_session (path, state);
 }
 
 bool
@@ -2239,9 +2263,9 @@ ARDOUR_UI::get_session_parameters (Glib::ustring predetermined_path, bool have_e
                                goto try_again;
                        } 
 
-                       switch (new_session_dialog->get_current_page()) {
-                       case 1: /* recent session selector */
-                       case 2: /* audio engine control */
+                       switch (new_session_dialog->which_page()) {
+                       case NewSessionDialog::OpenPage: 
+                       case NewSessionDialog::EnginePage:
 
                                if (session_name[0] == '/' || 
                                    (session_name.length() > 2 && session_name[0] == '.' && session_name[1] == '/') ||
@@ -2262,7 +2286,9 @@ ARDOUR_UI::get_session_parameters (Glib::ustring predetermined_path, bool have_e
                                }
                                break;
 
-                       case 0: /* nominally the "new" session creator, but could be in use for an old session */
+                       case NewSessionDialog::NewPage: /* nominally the "new" session creator, but could be in use for an old session */
+
+                               cerr << "on page zero\n";
 
                                if (new_session_dialog->get_current_page() == 0 && ARDOUR_COMMAND_LINE::session_name.empty()) {
                                        should_be_new = true;
@@ -2525,7 +2551,7 @@ ARDOUR_UI::load_session (const Glib::ustring& path, const Glib::ustring& snap_na
        }
 
        catch (...) {
-               cerr << "Caught something\n";
+
                MessageDialog msg (string_compose(_("Session \"%1 (snapshot %2)\" did not load successfully"), path, snap_name),
                                   true,
                                   Gtk::MESSAGE_INFO,
@@ -3027,7 +3053,7 @@ ARDOUR_UI::pending_state_dialog ()
 {
        HBox* hbox = new HBox();
        Image* image = new Image (Stock::DIALOG_QUESTION, ICON_SIZE_DIALOG);
-       ArdourDialog dialog (_("Crash recovery"), true);
+       ArdourDialog dialog (_("Crash Recovery"), true);
        Label  message (_("\
 This session appears to have been in\n\
 middle of recording when ardour or\n\
@@ -3036,7 +3062,7 @@ the computer was shutdown.\n\
 Ardour can recover any captured audio for\n\
 you, or it can ignore it. Please decide\n\
 what you would like to do.\n"));
-
+       image->set_alignment(ALIGN_CENTER, ALIGN_TOP);
        hbox->pack_start (*image, PACK_EXPAND_WIDGET, 12);
        hbox->pack_end (message, PACK_EXPAND_PADDING, 12);
        dialog.get_vbox()->pack_start(*hbox, PACK_EXPAND_PADDING, 6);
@@ -3047,8 +3073,7 @@ what you would like to do.\n"));
        message.show();
        image->show();
        hbox->show();
-       //dialog.get_vbox()->show();
-       
+
        switch (dialog.run ()) {
        case RESPONSE_ACCEPT:
                return 1;
index 996349c9900e23c85694a4fd4dd36b815299f6ac..5e43b8a64b0c3f52cd656587657171503ad08d67 100644 (file)
@@ -725,6 +725,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI
        void toggle_SecondaryClockDeltaEditCursor ();
        void toggle_ShowTrackMeters ();
        void toggle_only_copy_imported_files ();
+       void toggle_use_narrow_ms();
 
        void mtc_port_changed ();
        void map_solo_model ();
index af8206ceac643740c7960fff8f5b06f4f4e17e0e..f5e4cfa54993a174e2dcfe36b7be7fe3de2a3241 100644 (file)
@@ -428,6 +428,7 @@ ARDOUR_UI::install_actions ()
        ActionManager::register_toggle_action (option_actions, X_("SecondaryClockDeltaEditCursor"), _("Secondary Clock delta to edit point"), mem_fun (*this, &ARDOUR_UI::toggle_SecondaryClockDeltaEditCursor));       
        ActionManager::register_toggle_action (option_actions, X_("ShowTrackMeters"), _("Enable Editor Meters"), mem_fun (*this, &ARDOUR_UI::toggle_ShowTrackMeters));
        ActionManager::register_toggle_action (option_actions, X_("OnlyCopyImportedFiles"), _("Always copy imported files"), mem_fun (*this, &ARDOUR_UI::toggle_only_copy_imported_files));     
+       ActionManager::register_toggle_action (option_actions, X_("DefaultNarrowMS"), _("Use narrow mixer strips"), mem_fun (*this, &ARDOUR_UI::toggle_use_narrow_ms));
 
        RadioAction::Group denormal_group;
 
index a76e3725a0a3f286167ae897832e6c4147e0b4c0..2b730fd585dab80bb01d42886fb9d4a898dc627f 100644 (file)
@@ -517,6 +517,12 @@ ARDOUR_UI::toggle_ShowTrackMeters()
        ActionManager::toggle_config_state ("options", "ShowTrackMeters", &Configuration::set_show_track_meters, &Configuration::get_show_track_meters);
 }
 
+void
+ARDOUR_UI::toggle_use_narrow_ms()
+{
+       ActionManager::toggle_config_state ("options", "DefaultNarrowMS", &Configuration::set_default_narrow_ms, &Configuration::get_default_narrow_ms);
+}
+
 void
 ARDOUR_UI::mtc_port_changed ()
 {
@@ -1122,6 +1128,8 @@ ARDOUR_UI::parameter_changed (const char* parameter_name)
        } else if (PARAM_IS ("show-track-meters")) {
                ActionManager::map_some_state ("options",  "ShowTrackMeters", &Configuration::get_show_track_meters);
                editor->toggle_meter_updating();
+       } else if (PARAM_IS ("default-narrow_ms")) {
+               ActionManager::map_some_state ("options",  "DefaultNarrowMS", &Configuration::get_default_narrow_ms);
        }
 
 #undef PARAM_IS
index 96b8a57261ce48d4250f04e780dd8a35da9fad93..333d7ea87a127d4dadbd90372118b54fbcc073a2 100644 (file)
@@ -52,7 +52,7 @@
 
 #include "i18n.h"
 
-#define MUTED_ALPHA 0x50
+#define MUTED_ALPHA 10
 
 using namespace sigc;
 using namespace ARDOUR;
@@ -1226,14 +1226,22 @@ AudioRegionView::set_frame_color ()
 
                UINT_TO_RGBA(ARDOUR_UI::config()->canvasvar_FrameBase.get(), &r, &g, &b, &a);
                for (vector<ArdourCanvas::WaveView*>::iterator w = waves.begin(); w != waves.end(); ++w) {
-                       (*w)->property_wave_color() = RGBA_TO_UINT(r, g, b, fill_opacity ? fill_opacity : a);// Lets still use the theme's opacity value if Opaque is not set
+                       if (_region->muted()) {
+                               (*w)->property_wave_color() = RGBA_TO_UINT(r, g, b, MUTED_ALPHA);
+                       } else {
+                               (*w)->property_wave_color() = RGBA_TO_UINT(r, g, b, fill_opacity ? fill_opacity : a);// Lets still use the theme's opacity value if Opaque is not set
+                       }
                }
        } else {
                UINT_TO_RGBA(ARDOUR_UI::config()->canvasvar_FrameBase.get(), &r, &g, &b, &a);
                frame->property_fill_color_rgba() = RGBA_TO_UINT(r, g, b, fill_opacity ? fill_opacity : a);
 
                for (vector<ArdourCanvas::WaveView*>::iterator w = waves.begin(); w != waves.end(); ++w) {
-                       (*w)->property_wave_color() = ARDOUR_UI::config()->canvasvar_WaveForm.get();
+                       if (_region->muted()) {
+                               (*w)->property_wave_color() = UINT_RGBA_CHANGE_A(ARDOUR_UI::config()->canvasvar_WaveForm.get(), MUTED_ALPHA);
+                       } else {
+                               (*w)->property_wave_color() = ARDOUR_UI::config()->canvasvar_WaveForm.get();
+                       }
                }
        }
 }
index 613c34f551f3133c48b8f543a416c11c1d4bfbfa..325584f7ed7405d8baacaa12a11e41279f690a1e 100644 (file)
@@ -155,6 +155,18 @@ static const gchar *_zoom_focus_strings[] = {
        0
 };
 
+#ifdef USE_RUBBERBAND
+static const gchar *_rb_opt_strings[] = {
+       N_("Mushy"),
+       N_("Smooth"),
+       N_("Balanced multitimbral mixture"),
+       N_("Unpitched percussion with stable notes"),
+       N_("Crisp monophonic instrumental"),
+       N_("Unpitched solo percussion"),
+       0
+};
+#endif
+
 /* Soundfile  drag-n-drop */
 
 Gdk::Cursor* Editor::cross_hair_cursor = 0;
@@ -256,7 +268,10 @@ Editor::Editor ()
        snap_mode_strings =  I18N (_snap_mode_strings);
        zoom_focus_strings = I18N (_zoom_focus_strings);
        edit_point_strings = I18N (_edit_point_strings);
-
+#ifdef USE_RUBBERBAND
+       rb_opt_strings = I18N (_rb_opt_strings);
+#endif
+       
        snap_threshold = 5.0;
        bbt_beat_subdivision = 4;
        canvas_width = 0;
@@ -4224,10 +4239,15 @@ struct EditorOrderTimeAxisSorter {
 };
        
 void
-Editor::sort_track_selection ()
+Editor::sort_track_selection (TrackSelection* sel)
 {
        EditorOrderTimeAxisSorter cmp;
-       selection->tracks.sort (cmp);
+
+       if (sel) {
+               sel->sort (cmp);
+       } else {
+               selection->tracks.sort (cmp);
+       }
 }
 
 nframes64_t
index 69f7e18a7f4ce46835fdd046aadc06ff177e6b7b..14ed3a46a8d1178ae3901c1dbd501b7c47184f9b 100644 (file)
@@ -168,6 +168,10 @@ class Editor : public PublicEditor
        void hide_a_region (boost::shared_ptr<ARDOUR::Region>);
        void remove_a_region (boost::shared_ptr<ARDOUR::Region>);
 
+#ifdef USE_RUBBERBAND
+       std::vector<std::string> rb_opt_strings;
+#endif
+
        /* option editor-access */
 
        void set_show_waveforms (bool yn);
@@ -478,7 +482,7 @@ class Editor : public PublicEditor
        CrossfadeView*     clicked_crossfadeview;
        ControlPoint*      clicked_control_point;
 
-       void sort_track_selection ();
+       void sort_track_selection (TrackSelection* sel = 0);
 
        void get_relevant_tracks (std::set<RouteTimeAxisView*>& relevant_tracks);
        void get_equivalent_regions (RegionView* rv, std::vector<RegionView*>&) const;
@@ -1179,7 +1183,8 @@ class Editor : public PublicEditor
        void add_location_from_selection ();
        void set_loop_from_selection (bool play);
        void set_punch_from_selection ();
-       
+       void set_punch_from_region ();
+
        void set_loop_from_edit_range (bool play);
        void set_loop_from_region (bool play);
        void set_punch_from_edit_range ();
@@ -1930,11 +1935,20 @@ class Editor : public PublicEditor
            Gtk::SpinButton       pitch_cent_spinner;
            RegionSelection       regions;
            Gtk::ProgressBar      progress_bar;
+
+           /* SoundTouch */
            Gtk::ToggleButton     quick_button;
            Gtk::ToggleButton     antialias_button;
+           Gtk::HBox             upper_button_box;
+
+           /* RubberBand */
+           Gtk::ComboBoxText     stretch_opts_selector;
+           Gtk::Label            stretch_opts_label;
+           Gtk::ToggleButton     precise_button;
+           Gtk::HBox             opts_box;
+
            Gtk::Button*          cancel_button;
            Gtk::Button*          action_button;
-           Gtk::HBox             upper_button_box;
            Gtk::VBox             packer;
            int                   status;
 
@@ -2061,6 +2075,18 @@ class Editor : public PublicEditor
 
        TimeAxisView* entered_track;
        RegionView*   entered_regionview;
+
+       class ExclusiveRegionSelection {
+         public:
+               ExclusiveRegionSelection (Editor&, RegionView*);
+               ~ExclusiveRegionSelection ();
+
+         private:
+               Editor& editor;
+               RegionView* regionview;
+               bool remove;
+       };
+
        void ensure_entered_region_selected (bool op_acts_on_objects = false);
        void ensure_entered_track_selected (bool op_acts_on_objects = false);
        bool clear_entered_track;
index fd95fd46b9d42ace6e92a63d0e75ebf1e1a2752b..e881b02a4eacd081a49ed613c05115dd7a7b360c 100644 (file)
@@ -270,7 +270,8 @@ Editor::register_actions ()
        ActionManager::session_sensitive_actions.push_back (act);
        act = ActionManager::register_action (editor_actions, "set-punch-from-edit-range", _("Set Punch From Edit Range"), mem_fun(*this, &Editor::set_punch_from_edit_range));
        ActionManager::session_sensitive_actions.push_back (act);
-       
+       act = ActionManager::register_action (editor_actions, "set-punch-from-region", _("Set Punch From Region"), mem_fun(*this, &Editor::set_punch_from_region));
+       ActionManager::session_sensitive_actions.push_back (act);
        
        act = ActionManager::register_action (editor_actions, "pitch-shift-region", _("Transpose"), mem_fun(*this, &Editor::pitch_shift_regions));
        ActionManager::session_sensitive_actions.push_back (act);
index 87a92790bc916ca8612c4338e827c2f69b702018..68e0f62be463bc2985c494f881cb2a0403b57fe0 100644 (file)
@@ -337,7 +337,7 @@ Editor::track_canvas_size_allocated ()
        if (playhead_cursor) playhead_cursor->set_length (canvas_height);
        
        for (MarkerSelection::iterator x = selection->markers.begin(); x != selection->markers.end(); ++x) {
-               (*x)->set_line_length (canvas_height);
+               (*x)->set_line_length (full_canvas_height);
        }
 
        if (range_marker_drag_rect) {
@@ -366,11 +366,17 @@ Editor::track_canvas_size_allocated ()
        }
        compute_fixed_ruler_scale ();
        
+       range_marker_drag_rect->property_y2() = full_canvas_height;
+       transport_loop_range_rect->property_y2() = full_canvas_height;
+       transport_punch_range_rect->property_y2() = full_canvas_height;
+       transport_punchin_line->property_y2() = full_canvas_height;
+       transport_punchout_line->property_y2() = full_canvas_height;
+       
        update_fixed_rulers();
        redisplay_tempo (true);
 
        if (logo_item) {
-               // logo_item->property_height() = canvas_height;
+               // logo_item->property_height() = full_canvas_height;
                // logo_item->property_width() = canvas_width;
        }
        
index 68ce914025356e007dbb07eadf091ec4d8a06049..e6fb32feca19000ac3fa91a3cc0b64fdb29cf97a 100644 (file)
@@ -1172,7 +1172,7 @@ Editor::marker_selection_changed ()
        }
 
        for (MarkerSelection::iterator x = selection->markers.begin(); x != selection->markers.end(); ++x) {
-               (*x)->add_line (cursor_group, canvas_height);
+               (*x)->add_line (cursor_group, full_canvas_height);
                (*x)->show_line ();
        }
 
index 9cee32cebbb3de5e0812e588a7ccadf0ad484e94..4919091a620b0625c10a9854a98603fc7048d25b 100644 (file)
@@ -2389,7 +2389,7 @@ Editor::play_selected_region ()
        nframes64_t start = max_frames;
        nframes64_t end = 0;
 
-       ensure_entered_region_selected (true);
+       ExclusiveRegionSelection esr (*this, entered_regionview);
 
        if (selection->regions.empty()) {
                return;
@@ -2404,6 +2404,7 @@ Editor::play_selected_region ()
                }
        }
 
+       session->request_stop ();
        session->request_bounded_roll (start, end);
 }
 
@@ -2567,27 +2568,58 @@ Editor::separate_regions_between (const TimeSelection& ts)
        bool in_command = false;
        boost::shared_ptr<Playlist> playlist;
        RegionSelection new_selection;
+       TrackSelection tmptracks;
+
+       if (selection->tracks.empty()) {
                
-       sort_track_selection ();
+               /* use tracks with selected regions */
 
-       for (TrackSelection::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) {
+               for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
+                       TimeAxisView* tv = &(*i)->get_time_axis_view();
+
+                       if (find (tmptracks.begin(), tmptracks.end(), tv) == tmptracks.end()) {
+                               tmptracks.push_back (tv);
+                       }
+               }
+
+               if (tmptracks.empty()) {
+                       /* no regions selected: use all tracks */
+                       tmptracks = track_views;
+               }
+
+       } else {
+
+               tmptracks = selection->tracks;
+
+       }
+
+       sort_track_selection (&tmptracks);
+
+       for (TrackSelection::iterator i = tmptracks.begin(); i != tmptracks.end(); ++i) {
 
                RouteTimeAxisView* rtv;
-               
+
                if ((rtv = dynamic_cast<RouteTimeAxisView*> ((*i))) != 0) {
 
-                       boost::shared_ptr<Track> t = rtv->track();
+                       if (rtv->is_track()) {
 
-                       if (t != 0 && ! t->diskstream()->destructive()) {
-                               
-                               if ((playlist = rtv->playlist()) != 0) {
+                               /* no edits to destructive tracks */
 
-                                       XMLNode *before = &(playlist->get_state());
-                                       bool got_some = false;  
+                               if (rtv->track()->diskstream()->destructive()) {
+                                       continue;
+                               }
                                        
+                               if ((playlist = rtv->playlist()) != 0) {
+
+                                       XMLNode *before;
+                                       bool got_some;
+
+                                       before = &(playlist->get_state());
+                                       got_some = false;
+
                                        /* XXX need to consider musical time selections here at some point */
 
-                                       double speed = t->diskstream()->speed();
+                                       double speed = rtv->get_diskstream()->speed();
 
 
                                        for (list<AudioRange>::const_iterator t = ts.begin(); t != ts.end(); ++t) {
@@ -2986,29 +3018,59 @@ Editor::align_selection_relative (RegionPoint point, nframes_t position, const R
 
        switch (point) {
        case Start:
-               pos = r->first_frame ();
+               pos = position;
+               if (position > r->position()) {
+                       distance = position - r->position();
+                       dir = 1;
+               } else {
+                       distance = r->position() - position;
+                       dir = -1;
+               }
                break;
-
+               
        case End:
-               pos = r->last_frame();
+               if (position > r->last_frame()) {
+                       distance = position - r->last_frame();
+                       pos = r->position() + distance;
+                       dir = 1;
+               } else {
+                       distance = r->last_frame() - position;
+                       pos = r->position() - distance;
+                       dir = -1;
+               }
                break;
 
        case SyncPoint:
-               pos = r->adjust_to_sync (r->first_frame());
+               pos = r->adjust_to_sync (position);
+               if (pos > r->position()) {
+                       distance = pos - r->position();
+                       dir = 1;
+               } else {
+                       distance = r->position() - pos;
+                       dir = -1;
+               }
                break;  
        }
 
-       if (pos > position) {
-               distance = pos - position;
-               dir = -1;
-       } else {
-               distance = position - pos;
-               dir = 1;
+       if (pos == r->position()) {
+               return;
        }
 
        begin_reversible_command (_("align selection (relative)"));
 
-       for (RegionSelection::const_iterator i = rs.begin(); i != rs.end(); ++i) {
+       /* move first one specially */
+
+       XMLNode &before = r->playlist()->get_state();
+       r->set_position (pos, this);
+       XMLNode &after = r->playlist()->get_state();
+       session->add_command(new MementoCommand<Playlist>(*(r->playlist()), &before, &after));
+
+       /* move rest by the same amount */
+       
+       RegionSelection::const_iterator i = rs.begin();
+       ++i;
+
+       for (; i != rs.end(); ++i) {
 
                boost::shared_ptr<Region> region ((*i)->region());
 
@@ -3100,7 +3162,7 @@ Editor::trim_region_to_punch ()
 void
 Editor::trim_region_to_location (const Location& loc, const char* str)
 {
-       ensure_entered_region_selected ();
+       ExclusiveRegionSelection ers (*this, entered_regionview);
 
        RegionSelection& rs (get_regions_for_action ());
 
@@ -3151,6 +3213,8 @@ Editor::trim_region_to_location (const Location& loc, const char* str)
 void
 Editor::trim_region_to_edit_point ()
 {
+       ExclusiveRegionSelection ers (*this, entered_regionview);
+
        RegionSelection& rs (get_regions_for_action ());
        nframes64_t where = get_preferred_edit_position();
 
@@ -3193,6 +3257,8 @@ Editor::trim_region_to_edit_point ()
 void
 Editor::trim_region_from_edit_point ()
 {
+       ExclusiveRegionSelection ers (*this, entered_regionview);
+
        RegionSelection& rs (get_regions_for_action ());
        nframes64_t where = get_preferred_edit_position();
 
@@ -4292,16 +4358,16 @@ Editor::toggle_region_opaque ()
 void
 Editor::set_fade_length (bool in)
 {
-       ensure_entered_region_selected (true);
+       ExclusiveRegionSelection esr (*this, entered_regionview);
 
        /* we need a region to measure the offset from the start */
 
        RegionView* rv;
 
-       if (entered_regionview) {
-               rv = entered_regionview;
-       } else if (!selection->regions.empty()) {
+       if (!selection->regions.empty()) {
                rv = selection->regions.front();
+       } else if (entered_regionview) {
+               rv = entered_regionview;
        } else {
                return;
        }
@@ -4309,6 +4375,11 @@ Editor::set_fade_length (bool in)
        nframes64_t pos = get_preferred_edit_position();
        nframes_t len;
        char* cmd;
+       
+       if (pos > rv->region()->last_frame() || pos < rv->region()->first_frame()) {
+               /* edit point is outside the relevant region */
+               return;
+       }
 
        if (in) {
                if (pos <= rv->region()->position()) {
@@ -4337,7 +4408,13 @@ Editor::set_fade_length (bool in)
                        return;
                }
 
-               boost::shared_ptr<AutomationList> alist = tmp->audio_region()->fade_in();
+               boost::shared_ptr<AutomationList> alist;
+               if (in) {
+                       alist = tmp->audio_region()->fade_in();
+               } else {
+                       alist = tmp->audio_region()->fade_out();
+               }
+
                XMLNode &before = alist->get_state();
 
                if (in) {
@@ -4347,13 +4424,12 @@ Editor::set_fade_length (bool in)
                }
                
                XMLNode &after = alist->get_state();
-               session->add_command(new MementoCommand<AutomationList>(*alist.get(), &before, &after));
+               session->add_command(new MementoCommand<AutomationList>(*alist, &before, &after));
        }
 
        commit_reversible_command ();
 }
 
-
 void
 Editor::toggle_fade_active (bool in)
 {
@@ -4366,7 +4442,6 @@ Editor::toggle_fade_active (bool in)
        const char* cmd = (in ? _("toggle fade in active") : _("toggle fade out active"));
        bool have_switch = false;
        bool yn;
-       bool in_command = false;
 
        begin_reversible_command (cmd);
 
@@ -4382,25 +4457,31 @@ Editor::toggle_fade_active (bool in)
                /* make the behaviour consistent across all regions */
                
                if (!have_switch) {
-                       yn = region->fade_in_active();
+                       if (in) {
+                               yn = region->fade_in_active();
+                       } else {
+                               yn = region->fade_out_active();
+                       }
                        have_switch = true;
                }
 
                XMLNode &before = region->get_state();
-               region->set_fade_in_active (!yn);
+               if (in) {
+                       region->set_fade_in_active (!yn);
+               } else {
+                       region->set_fade_out_active (!yn);
+               }
                XMLNode &after = region->get_state();
                session->add_command(new MementoCommand<AudioRegion>(*region.get(), &before, &after));
-               in_command = true;
        }
 
-       if (in_command) {
-               commit_reversible_command ();
-       }
+       commit_reversible_command ();
 }
 
 void
 Editor::set_fade_in_shape (AudioRegion::FadeShape shape)
 {
+
        begin_reversible_command (_("set fade in shape"));
 
        for (RegionSelection::iterator x = selection->regions.begin(); x != selection->regions.end(); ++x) {
@@ -4420,6 +4501,7 @@ Editor::set_fade_in_shape (AudioRegion::FadeShape shape)
        }
 
        commit_reversible_command ();
+               
 }
 
 void
@@ -4468,6 +4550,8 @@ Editor::set_fade_in_active (bool yn)
                XMLNode &after = ar->get_state();
                session->add_command(new MementoCommand<AudioRegion>(*ar, &before, &after));
        }
+
+       commit_reversible_command ();
 }
 
 void
@@ -4491,6 +4575,8 @@ Editor::set_fade_out_active (bool yn)
                XMLNode &after = ar->get_state();
                session->add_command(new MementoCommand<AudioRegion>(*ar, &before, &after));
        }
+
+       commit_reversible_command ();
 }
 
 
@@ -4600,27 +4686,29 @@ Editor::ensure_entered_track_selected (bool op_really_wants_one_track_if_none_ar
 void
 Editor::ensure_entered_region_selected (bool op_really_wants_one_region_if_none_are_selected)
 {
-       if (entered_regionview && mouse_mode == MouseObject) {
-
-               /* heuristic:
-
-                  - if there is no existing selection, don't change it. the operation will thus apply to "all"
-
-                  - if there is an existing selection, but the entered regionview isn't in it, add it. this
-                      avoids key-mouse ops on unselected regions from interfering with an existing selection,
-                      but also means that the operation will apply to the pointed-at region.
-               */
-
-               if (!selection->regions.empty()) {
-                       if (find (selection->regions.begin(), selection->regions.end(), entered_regionview) != selection->regions.end()) {
-                               selection->add (entered_regionview);
-                       }
-               } else {
-                       /* there is no selection, but this operation requires/prefers selected objects */
+       if (!entered_regionview || mouse_mode != MouseObject) {
+               return;
+       }
 
-                       if (op_really_wants_one_region_if_none_are_selected) {
-                               selection->set (entered_regionview, false);
-                       }
+       
+       /* heuristic:
+          
+       - if there is no existing selection, don't change it. the operation will thus apply to "all"
+       
+       - if there is an existing selection, but the entered regionview isn't in it, add it. this
+       avoids key-mouse ops on unselected regions from interfering with an existing selection,
+       but also means that the operation will apply to the pointed-at region.
+       */
+       
+       if (!selection->regions.empty()) {
+               if (!selection->selected (entered_regionview)) {
+                       selection->add (entered_regionview);
+               }
+       } else {
+               /* there is no selection, but this operation requires/prefers selected objects */
+               
+               if (op_really_wants_one_region_if_none_are_selected) {
+                       selection->set (entered_regionview, false);
                }
        }
 }
@@ -4640,6 +4728,8 @@ Editor::trim_region_back ()
 void
 Editor::trim_region (bool front)
 {
+       ExclusiveRegionSelection ers (*this, entered_regionview);
+
        nframes64_t where = get_preferred_edit_position();
        RegionSelection& rs = get_regions_for_action ();
 
@@ -4662,6 +4752,7 @@ Editor::trim_region (bool front)
                        session->add_command(new MementoCommand<Playlist>(*pl.get(), &before, &after));
                }
        }
+
        commit_reversible_command ();
 }
 
@@ -4764,7 +4855,7 @@ Editor::set_loop_from_region (bool play)
        nframes64_t start = max_frames;
        nframes64_t end = 0;
 
-       ensure_entered_region_selected (true);
+       ExclusiveRegionSelection esr (*this, entered_regionview);
 
        if (selection->regions.empty()) {
                info << _("cannot set loop: no region selected") << endmsg;
@@ -4818,6 +4909,31 @@ Editor::set_punch_from_edit_range ()
        set_punch_range (start, end,  _("set punch range from edit range"));
 }
 
+void
+Editor::set_punch_from_region ()
+{
+       nframes64_t start = max_frames;
+       nframes64_t end = 0;
+
+       ExclusiveRegionSelection esr (*this, entered_regionview);
+
+       if (selection->regions.empty()) {
+               info << _("cannot set punch: no region selected") << endmsg;
+               return;
+       }
+
+       for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
+               if ((*i)->region()->position() < start) {
+                       start = (*i)->region()->position();
+               }
+               if ((*i)->region()->last_frame() + 1 > end) {
+                       end = (*i)->region()->last_frame() + 1;
+               }
+       }
+
+       set_punch_range (start, end, _("set punch range from region"));
+}
+
 void
 Editor::pitch_shift_regions ()
 {
index 5fcdb8ef327a83129c083653fafd16a571353dda..87b9eba6f72e1ca49de140af38c2dc59fe7bed5d 100644 (file)
@@ -808,7 +808,7 @@ void
 Editor::select_all (Selection::Operation op)
 {
        list<Selectable *> touched;
-       
+
        for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) {
                if ((*iter)->hidden()) {
                        continue;
@@ -991,7 +991,15 @@ Editor::select_all_selectables_using_time_selection ()
                return;
        }
 
-       for (TrackViewList::iterator iter = selection->tracks.begin(); iter != selection->tracks.end(); ++iter) {
+       TrackSelection* ts;
+
+       if (selection->tracks.empty()) {
+               ts = &track_views;
+       } else {
+               ts = &selection->tracks;
+       }
+
+       for (TrackViewList::iterator iter = ts->begin(); iter != ts->end(); ++iter) {
                if ((*iter)->hidden()) {
                        continue;
                }
@@ -1014,7 +1022,16 @@ Editor::select_all_selectables_using_punch()
                return;
        }
 
-       for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) {
+
+       TrackSelection* ts;
+
+       if (selection->tracks.empty()) {
+               ts = &track_views;
+       } else {
+               ts = &selection->tracks;
+       }
+
+       for (TrackViewList::iterator iter = ts->begin(); iter != ts->end(); ++iter) {
                if ((*iter)->hidden()) {
                        continue;
                }
@@ -1036,7 +1053,16 @@ Editor::select_all_selectables_using_loop()
                return;
        }
 
-       for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) {
+
+       TrackSelection* ts;
+
+       if (selection->tracks.empty()) {
+               ts = &track_views;
+       } else {
+               ts = &selection->tracks;
+       }
+
+       for (TrackViewList::iterator iter = ts->begin(); iter != ts->end(); ++iter) {
                if ((*iter)->hidden()) {
                        continue;
                }
@@ -1069,7 +1095,16 @@ Editor::select_all_selectables_using_cursor (Cursor *cursor, bool after)
                }
        }
 
-       for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) {
+
+       TrackSelection* ts;
+
+       if (selection->tracks.empty()) {
+               ts = &track_views;
+       } else {
+               ts = &selection->tracks;
+       }
+
+       for (TrackViewList::iterator iter = ts->begin(); iter != ts->end(); ++iter) {
                if ((*iter)->hidden()) {
                        continue;
                }
@@ -1100,7 +1135,16 @@ Editor::select_all_selectables_using_edit (bool after)
                }
        }
 
-       for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) {
+
+       TrackSelection* ts;
+
+       if (selection->tracks.empty()) {
+               ts = &track_views;
+       } else {
+               ts = &selection->tracks;
+       }
+
+       for (TrackViewList::iterator iter = ts->begin(); iter != ts->end(); ++iter) {
                if ((*iter)->hidden()) {
                        continue;
                }
@@ -1120,8 +1164,16 @@ Editor::select_all_selectables_between (bool within)
        if (!get_edit_op_range (start, end)) {
                return;
        }
-       
-       for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) {
+
+       TrackSelection* ts;
+
+       if (selection->tracks.empty()) {
+               ts = &track_views;
+       } else {
+               ts = &selection->tracks;
+       }
+
+       for (TrackViewList::iterator iter = ts->begin(); iter != ts->end(); ++iter) {
                if ((*iter)->hidden()) {
                        continue;
                }
@@ -1241,3 +1293,28 @@ Editor::deselect_all ()
 {
        selection->clear ();
 }
+
+Editor::ExclusiveRegionSelection::ExclusiveRegionSelection (Editor& ed, RegionView* rv)
+       : editor (ed),
+         regionview (rv)
+{
+
+       if (!rv || ed.current_mouse_mode() != Editing::MouseObject) {
+               return;
+       }
+       
+       if (ed.get_selection().regions.empty() && !ed.get_selection().selected (rv)) {
+               ed.get_selection().set (rv, false);
+               remove = true;
+       } else {
+               remove = false;
+       }
+}
+
+Editor::ExclusiveRegionSelection::~ExclusiveRegionSelection ()
+{
+       if (remove) {
+               editor.get_selection().remove (regionview);
+       }
+}
+
index 015a265a9bd608b13afeaf85f4e48666a92e3f64..2b91c6df2814f0011c7119dae9f8a8489806ecd0 100644 (file)
@@ -17,6 +17,7 @@
 
 */
 
+#include <iostream>
 #include <cstdlib>
 #include <cmath>
 
@@ -27,6 +28,7 @@
 #include <pbd/memento_command.h>
 
 #include <gtkmm2ext/window_title.h>
+#include <gtkmm2ext/utils.h>
 
 #include "editor.h"
 #include "audio_time_axis.h"
 #include <ardour/stretch.h>
 #include <ardour/pitch.h>
 
+#ifdef USE_RUBBERBAND
+#include <rubberband/RubberBandStretcher.h>
+using namespace RubberBand;
+#endif
+
 #include "i18n.h"
 
+using namespace std;
 using namespace ARDOUR;
 using namespace PBD;
 using namespace sigc;
@@ -54,14 +62,16 @@ Editor::TimeFXDialog::TimeFXDialog (Editor& e, bool pitch)
        : ArdourDialog (X_("time fx dialog")),
          editor (e),
          pitching (pitch),
-         pitch_octave_adjustment (0.0, 0.0, 4.0, 1, 2.0),
-         pitch_semitone_adjustment (0.0, 0.0, 12.0, 1.0, 4.0),
-         pitch_cent_adjustment (0.0, 0.0, 150.0, 5.0, 15.0),
+         pitch_octave_adjustment (0.0, -4.0, 4.0, 1, 2.0),
+         pitch_semitone_adjustment (0.0, -12.0, 12.0, 1.0, 4.0),
+         pitch_cent_adjustment (0.0, -499.0, 500.0, 5.0, 15.0),
          pitch_octave_spinner (pitch_octave_adjustment),
          pitch_semitone_spinner (pitch_semitone_adjustment),
          pitch_cent_spinner (pitch_cent_adjustment),
          quick_button (_("Quick but Ugly")),
-         antialias_button (_("Skip Anti-aliasing"))
+         antialias_button (_("Skip Anti-aliasing")),
+         stretch_opts_label (_("Contents:")),
+         precise_button (_("Strict Linear"))
 {
        set_modal (true);
        set_position (Gtk::WIN_POS_MOUSE);
@@ -79,8 +89,6 @@ Editor::TimeFXDialog::TimeFXDialog (Editor& e, bool pitch)
 
        get_vbox()->set_spacing (5);
        get_vbox()->set_border_width (12);
-       get_vbox()->pack_start (upper_button_box, false, false);
-       get_vbox()->pack_start (progress_bar);
 
        if (pitching) {
 
@@ -105,19 +113,44 @@ Editor::TimeFXDialog::TimeFXDialog (Editor& e, bool pitch)
 
                add_button (_("Shift"), Gtk::RESPONSE_ACCEPT);
 
+               get_vbox()->pack_start (upper_button_box, false, false);
+
        } else {
 
+#ifdef USE_RUBBERBAND
+               opts_box.set_spacing (5);
+               opts_box.set_border_width (5);
+               vector<string> strings;
+
+               set_popdown_strings (stretch_opts_selector, editor.rb_opt_strings);
+               /* set default */
+               stretch_opts_selector.set_active_text (editor.rb_opt_strings[4]);
+
+               opts_box.pack_start (precise_button, false, false);
+               opts_box.pack_start (stretch_opts_label, false, false);
+               opts_box.pack_start (stretch_opts_selector, false, false);
+
+               get_vbox()->pack_start (opts_box, false, false);
+
+#else
                upper_button_box.set_homogeneous (true);
                upper_button_box.set_spacing (5);
                upper_button_box.set_border_width (5);
+
                upper_button_box.pack_start (quick_button, true, true);
                upper_button_box.pack_start (antialias_button, true, true);
-       
+
+               quick_button.set_name (N_("TimeFXButton"));
+               antialias_button.set_name (N_("TimeFXButton"));
+
+               get_vbox()->pack_start (upper_button_box, false, false);
+
+#endif 
                add_button (_("Stretch/Shrink"), Gtk::RESPONSE_ACCEPT);
        }
 
-       quick_button.set_name (N_("TimeFXButton"));
-       antialias_button.set_name (N_("TimeFXButton"));
+       get_vbox()->pack_start (progress_bar);
+
        progress_bar.set_name (N_("TimeFXProgress"));
 
        show_all_children ();
@@ -184,6 +217,7 @@ Editor::time_fx (RegionSelection& regions, float val, bool pitching)
        if (pitching) {
 
                float cents = current_timefx->pitch_octave_adjustment.get_value() * 1200.0;
+               float pitch_fraction;
                cents += current_timefx->pitch_semitone_adjustment.get_value() * 100.0;
                cents += current_timefx->pitch_cent_adjustment.get_value();
 
@@ -193,28 +227,86 @@ Editor::time_fx (RegionSelection& regions, float val, bool pitching)
                        return 0;
                }
 
-               // we now have the pitch shift in cents. divide by 1200 to get octaves
-               // then multiply by 2.0 because 1 octave == doubling the frequency
+               // one octave == 1200 cents
+               // adding one octave doubles the frequency
+               // ratio is 2^^octaves
+                               
+               pitch_fraction = pow(2, cents/1200);
+
+               current_timefx->request.time_fraction = 1.0;
+               current_timefx->request.pitch_fraction = pitch_fraction;
                
-               cents /= 1200.0;
-               cents /= 2.0;
+       } else {
+
+               current_timefx->request.time_fraction = val;
+               current_timefx->request.pitch_fraction = 1.0;
 
-               // add 1.0 to convert to RB scale
+       }
 
-               cents += 1.0;
+#ifdef USE_RUBBERBAND
+       /* parse options */
 
-               current_timefx->request.time_fraction = 1.0;
-               current_timefx->request.pitch_fraction = cents;
+       RubberBandStretcher::Options options = 0;
 
+       bool realtime = false;
+       bool precise = false;
+       bool peaklock = true;
+       bool softening = true;
+       bool longwin = false;
+       bool shortwin = false;
+       string txt;
+
+       enum {
+               NoTransients,
+               BandLimitedTransients,
+               Transients
+       } transients = Transients;
+       
+       precise = current_timefx->precise_button.get_active();
+       
+       txt = current_timefx->stretch_opts_selector.get_active_text ();
+
+       if (txt == rb_opt_strings[0]) {
+               transients = NoTransients; peaklock = false; longwin = true; shortwin = false; 
+       } else if (txt == rb_opt_strings[1]) {
+               transients = NoTransients; peaklock = false; longwin = false; shortwin = false; 
+       } else if (txt == rb_opt_strings[2]) {
+               transients = NoTransients; peaklock = true; longwin = false; shortwin = false; 
+       } else if (txt == rb_opt_strings[3]) {
+               transients = BandLimitedTransients; peaklock = true; longwin = false; shortwin = false; 
+       } else if (txt == rb_opt_strings[5]) {
+               transients = Transients; peaklock = false; longwin = false; shortwin = true; 
        } else {
+               /* default/4 */
+
+               transients = Transients; peaklock = true; longwin = false; shortwin = false; 
+       };
 
-               current_timefx->request.time_fraction = val;
-               current_timefx->request.pitch_fraction = 1.0;
 
+       if (realtime)    options |= RubberBandStretcher::OptionProcessRealTime;
+       if (precise)     options |= RubberBandStretcher::OptionStretchPrecise;
+       if (!peaklock)   options |= RubberBandStretcher::OptionPhaseIndependent;
+       if (!softening)  options |= RubberBandStretcher::OptionPhasePeakLocked;
+       if (longwin)     options |= RubberBandStretcher::OptionWindowLong;
+       if (shortwin)    options |= RubberBandStretcher::OptionWindowShort;
+               
+       switch (transients) {
+       case NoTransients:
+               options |= RubberBandStretcher::OptionTransientsSmooth;
+               break;
+       case BandLimitedTransients:
+               options |= RubberBandStretcher::OptionTransientsMixed;
+               break;
+       case Transients:
+               options |= RubberBandStretcher::OptionTransientsCrisp;
+               break;
        }
 
+       current_timefx->request.opts = (int) options;
+#else
        current_timefx->request.quick_seek = current_timefx->quick_button.get_active();
        current_timefx->request.antialias = !current_timefx->antialias_button.get_active();
+#endif
        current_timefx->request.progress = 0.0f;
        current_timefx->request.done = false;
        current_timefx->request.cancel = false;
@@ -239,7 +331,7 @@ Editor::time_fx (RegionSelection& regions, float val, bool pitching)
 
        sigc::connection c = Glib::signal_timeout().connect (mem_fun (current_timefx, &TimeFXDialog::update_progress), 100);
 
-       while (!current_timefx->request.done) {
+       while (!current_timefx->request.done && !current_timefx->request.cancel) {
                gtk_main_iteration ();
        }
 
index 8a8f99f7459542463fc3e4e91278603da23ff675..e511e59af2f8e1037b111008be929f2623ffcf98 100644 (file)
@@ -1,6 +1,7 @@
 #include <vector>
 #include <cmath>
 #include <fstream>
+#include <map>
 
 #include <glibmm.h>
 #include <pbd/xml++.h>
@@ -22,6 +23,7 @@
 
 #include <pbd/convert.h>
 #include <pbd/error.h>
+#include <pbd/pathscanner.h>
 
 #ifdef __APPLE
 #include <CFBundle.h>
@@ -113,7 +115,6 @@ EngineControl::EngineControl ()
        strings.push_back (X_("ALSA"));
        strings.push_back (X_("OSS"));
        strings.push_back (X_("FFADO"));
-       strings.push_back (X_("FreeBoB"));
 #endif
        strings.push_back (X_("NetJACK"));
        strings.push_back (X_("Dummy"));
@@ -364,7 +365,7 @@ EngineControl::build_command_line (vector<string>& cmd)
        bool using_coreaudio = false;
        bool using_netjack = false;
        bool using_ffado = false;
-       bool using_freebob = false;
+       bool using_dummy = false;
 
        /* first, path to jackd */
 
@@ -427,10 +428,10 @@ EngineControl::build_command_line (vector<string>& cmd)
        } else if (driver == X_("FFADO")) {
                using_ffado = true;
                cmd.push_back ("firewire");
-       } else if (driver == X_("FreeBoB")) {
-               using_freebob = true;
-               cmd.push_back ("freebob");
-       }
+       } else if ( driver == X_("Dummy")) {
+      using_dummy = true;
+      cmd.push_back ("dummy");
+   }
 
        /* driver arguments */
 
@@ -454,8 +455,10 @@ EngineControl::build_command_line (vector<string>& cmd)
                        cmd.push_back ("-C");
                }
 
-               cmd.push_back ("-n");
-               cmd.push_back (to_string ((uint32_t) floor (periods_spinner.get_value()), std::dec));
+      if (! using_dummy ) {
+                  cmd.push_back ("-n");
+                  cmd.push_back (to_string ((uint32_t) floor (periods_spinner.get_value()), std::dec));
+      }
        }
 
        cmd.push_back ("-r");
@@ -572,7 +575,6 @@ EngineControl::enumerate_devices ()
 #else
        devices["ALSA"] = enumerate_alsa_devices ();
        devices["FFADO"] = enumerate_ffado_devices ();
-       devices["FreeBoB"] = enumerate_freebob_devices ();
        devices["OSS"] = enumerate_oss_devices ();
        devices["Dummy"] = enumerate_dummy_devices ();
        devices["NetJACK"] = enumerate_netjack_devices ();
@@ -825,6 +827,11 @@ EngineControl::audio_mode_changed ()
        }
 }
 
+static bool jack_server_filter(const string& str, void *arg)
+{
+   return str == "jackd" || str == "jackdmp";
+}
+
 void
 EngineControl::find_jack_servers (vector<string>& strings)
 {
@@ -838,14 +845,11 @@ EngineControl::find_jack_servers (vector<string>& strings)
 
        _NSGetExecutablePath (execpath, &pathsz);
        
-       cerr << " execpath = " << execpath << endl;
-
        Glib::ustring path (Glib::path_get_dirname (execpath));
        path += "/jackd";
 
        if (Glib::file_test (path, FILE_TEST_EXISTS)) {
                strings.push_back (path);
-               cerr << "Found jack in " << path << endl;
        } 
 
        if (getenv ("ARDOUR_WITH_JACK")) {
@@ -856,29 +860,30 @@ EngineControl::find_jack_servers (vector<string>& strings)
                }
                return;
        }
+#else
+       string path;
 #endif
        
-       if (Glib::file_test ("/usr/bin/jackd", FILE_TEST_EXISTS)) {
-               strings.push_back ("/usr/bin/jackd");
-       }
-       if (Glib::file_test ("/usr/local/bin/jackd", FILE_TEST_EXISTS)) {
-               strings.push_back ("/usr/local/bin/jackd");
-       }
-       if (Glib::file_test ("/opt/bin/jackd", FILE_TEST_EXISTS)) {
-               strings.push_back ("/opt/bin/jackd");
-       }
-       if (Glib::file_test ("/usr/bin/jackdmp", FILE_TEST_EXISTS)) {
-               strings.push_back ("/usr/bin/jackd");
-       }
-       if (Glib::file_test ("/usr/local/bin/jackdmp", FILE_TEST_EXISTS)) {
-               strings.push_back ("/usr/local/bin/jackd");
-       }
-       if (Glib::file_test ("/opt/bin/jackdmp", FILE_TEST_EXISTS)) {
-               strings.push_back ("/opt/bin/jackd");
+       PathScanner scanner;
+       vector<string *> *jack_servers;
+       std::map<string,int> un;
+       
+       path = getenv ("PATH");
+       
+       jack_servers = scanner (path, jack_server_filter, 0, false, true);
+       
+       vector<string *>::iterator iter;
+       
+       for (iter = jack_servers->begin(); iter != jack_servers->end(); iter++) {
+               string p = **iter;
+               
+               if (un[p]++ == 0) {
+                       strings.push_back(p);
+               }
        }
-
 }
 
+
 string
 EngineControl::get_device_name (const string& driver, const string& human_readable)
 {
@@ -1023,9 +1028,18 @@ EngineControl::set_state (const XMLNode& root)
        XMLNode* child;
        XMLProperty* prop;
 
+   bool using_dummy = false;
+
        int val;
        string strval;
 
+   if ( (child = root.child("driver"))){
+      prop = child->property("val");
+      if (prop && (prop->value() == "Dummy") ) {
+         using_dummy = true;
+      }
+   }
+
        clist = root.children();
 
        for (citer = clist.begin(); citer != clist.end(); ++citer) {
@@ -1035,6 +1049,8 @@ EngineControl::set_state (const XMLNode& root)
                prop = child->property ("val");
 
                if (!prop || prop->value().empty()) {
+         if ( using_dummy && ( child->name() == "interface" || child->name() == "inputdevice" || child->name() == "outputdevice" ))
+               continue;
                        error << string_compose (_("AudioSetup value for %1 is missing data"), child->name()) << endmsg;
                        continue;
                }
index a20d8b90198fc8d69fb755b6c17f92ff19260903..8406e21aa35bd39a430e8342280b41f327570aed 100644 (file)
@@ -971,22 +971,6 @@ GainMeter::gain_automation_state_changed ()
        }
 }
 
-void GainMeter::setup_atv_meter (int len)
-{
-       set_no_show_all();
-       regular_meter_width = 3;
-       set_width(Narrow, len);
-       hide_all();
-
-       //cerr << "Config->get_show_track_meters() = " << Config->get_show_track_meters() << endl;//DEBUG
-
-       if (Config->get_show_track_meters()) {
-               meter_packer.show_all();
-               hbox.show();            
-               show();
-       }
-}
-
 void GainMeter::clear_meters ()
 {
        for (vector<MeterInfo>::iterator i = meters.begin(); i < meters.end(); i++) {
index 669ed50906d54726d27f6d0a63256f514f98e05d..af4f55709c335bea4cba6da66170b7f03520a179 100644 (file)
@@ -75,7 +75,6 @@ class GainMeter : public Gtk::VBox
        void set_meter_strip_name (const char * name);
        void set_fader_name (const char * name);
 
-       void setup_atv_meter (int);
        void clear_meters ();
 
   private:
index 4f378d2dbc71151c0152e74f03a1da309372de8b..c914b6282bc3c2e4d19d3926d04f8d95f2b568fc 100644 (file)
@@ -10,6 +10,8 @@
 #include <pbd/strsplit.h>
 #include <pbd/replace_all.h>
 
+#include <ardour/profile.h>
+
 #include "actions.h"
 #include "keyboard.h"
 #include "keyeditor.h"
@@ -22,7 +24,10 @@ using namespace Gdk;
 using namespace PBD;
 
 KeyEditor::KeyEditor ()
-       : ArdourDialog (_("Keybinding Editor"), false)
+       : ArdourDialog (_("Shortcut Editor"), false)
+       , unbind_button (_("Remove shortcut"))
+       , unbind_box (BUTTONBOX_END)
+       
 {
        can_bind = false;
        last_state = 0;
@@ -31,7 +36,7 @@ KeyEditor::KeyEditor ()
 
        view.set_model (model);
        view.append_column (_("Action"), columns.action);
-       view.append_column (_("Binding"), columns.binding);
+       view.append_column (_("Shortcut"), columns.binding);
        view.set_headers_visible (true);
        view.get_selection()->set_mode (SELECTION_SINGLE);
        view.set_reorderable (false);
@@ -45,11 +50,49 @@ KeyEditor::KeyEditor ()
        scroller.add (view);
        scroller.set_policy (Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC);
 
+       unbind_box.pack_start (unbind_button, false, false);
+
+       unbind_button.signal_clicked().connect (mem_fun (*this, &KeyEditor::unbind));
+
+       get_vbox()->set_spacing (6);
        get_vbox()->pack_start (scroller);
+
+       if (!ARDOUR::Profile->get_sae()) {
+               get_vbox()->pack_start (unbind_box, false, false);
+               unbind_box.show ();
+               unbind_button.show ();
+       }
+
        get_vbox()->set_border_width (12);
 
-       scroller.show ();
        view.show ();
+       scroller.show ();
+
+       unbind_button.set_sensitive (false);
+}
+
+void
+KeyEditor::unbind ()
+{
+       TreeModel::iterator i = view.get_selection()->get_selected();
+       
+       unbind_button.set_sensitive (false);
+
+       if (i != model->children().end()) {
+               string path = (*i)[columns.path];
+               
+               if (!(*i)[columns.bindable]) {
+                       return;
+               } 
+
+               bool result = AccelMap::change_entry (path,
+                                                     0,
+                                                     (ModifierType) 0,
+                                                     true);
+               if (result) {
+                       (*i)[columns.binding] = string ();
+               }
+       }
 }
 
 void
@@ -69,6 +112,28 @@ KeyEditor::on_unmap ()
 void
 KeyEditor::action_selected ()
 {
+       if (view.get_selection()->count_selected_rows() == 0) {
+               return;
+       }
+
+       TreeModel::iterator i = view.get_selection()->get_selected();
+       
+       unbind_button.set_sensitive (false);
+
+       if (i != model->children().end()) {
+
+               string path = (*i)[columns.path];
+               
+               if (!(*i)[columns.bindable]) {
+                       return;
+               } 
+
+               string binding = (*i)[columns.binding];
+
+               if (!binding.empty()) {
+                       unbind_button.set_sensitive (true);
+               }
+       }
 }
 
 bool
@@ -112,8 +177,6 @@ KeyEditor::on_key_release_event (GdkEventKey* ev)
                                (*i)[columns.binding] = string();
                        }
                }
-
-               
        }
 
   out:
index 9fd129ca312c6757d3c6fd5a76afb4cd6f637bfe..085bfbb6d91da17b478ccefc2feca6395575214d 100644 (file)
@@ -3,6 +3,7 @@
 
 #include <string>
 
+#include <gtkmm/buttonbox.h>
 #include <gtkmm/treeview.h>
 #include <gtkmm/treestore.h>
 #include <gtkmm/scrolledwindow.h>
@@ -39,6 +40,10 @@ class KeyEditor : public ArdourDialog
        Gtk::TreeView view;
        Glib::RefPtr<Gtk::TreeStore> model;
        KeyEditorColumns columns;
+       Gtk::Button unbind_button;
+       Gtk::HButtonBox unbind_box;
+
+       void unbind ();
 
        bool can_bind;
        guint last_state;
index 8d349d8dc89a9400a47538b93fc2838012e1e6df..94c687f829ef71caf24de848843b4659257906e9 100644 (file)
@@ -62,7 +62,7 @@ Mixer_UI::Mixer_UI ()
        : Window (Gtk::WINDOW_TOPLEVEL)
 {
        session = 0;
-       _strip_width = Wide;
+       Config->get_default_narrow_ms() ? _strip_width = Narrow : _strip_width = Wide;
        track_menu = 0;
        mix_group_context_menu = 0;
        no_track_list_redisplay = false;
@@ -309,6 +309,8 @@ Mixer_UI::add_strip (Session::RouteList& routes)
                strip = new MixerStrip (*this, *session, route);
                strips.push_back (strip);
                
+               Config->get_default_narrow_ms() ? _strip_width = Narrow : _strip_width = Wide;
+
                if (strip->width_owner() != strip) {
                        strip->set_width (_strip_width, this);
                }
index 9ecc7ea2f5bc5933a46beb0e4f58b5956b92d1c9..820a614ecc793906ee62aeba98ae6befd3eb2688 100644 (file)
@@ -42,6 +42,7 @@ using namespace ARDOUR;
 using namespace PBD;
 
 #include "opts.h"
+#include "utils.h"
 
 NewSessionDialog::NewSessionDialog()
        : ArdourDialog ("session control")
@@ -348,6 +349,30 @@ NewSessionDialog::NewSessionDialog()
        get_vbox()->set_spacing(0);
        get_vbox()->pack_start(*m_notebook, Gtk::PACK_SHRINK, 0);
 
+       /* 
+          icon setting is done again in the editor (for the whole app),
+          but its all chickens and eggs at this point.
+       */
+
+       list<Glib::RefPtr<Gdk::Pixbuf> > window_icons;
+       Glib::RefPtr<Gdk::Pixbuf> icon;
+
+       if ((icon = ::get_icon ("ardour_icon_16px")) != 0) {
+               window_icons.push_back (icon);
+       }
+       if ((icon = ::get_icon ("ardour_icon_22px")) != 0) {
+               window_icons.push_back (icon);
+       }
+       if ((icon = ::get_icon ("ardour_icon_32px")) != 0) {
+               window_icons.push_back (icon);
+       }
+       if ((icon = ::get_icon ("ardour_icon_48px")) != 0) {
+               window_icons.push_back (icon);
+       }
+       if (!window_icons.empty()) {
+               set_icon_list (window_icons);
+       }
+
        WindowTitle title(Glib::get_application_name());
        title += _("Session Control");
        set_title(title.get_string());
@@ -360,7 +385,7 @@ NewSessionDialog::NewSessionDialog()
        // add_button(Gtk::Stock::HELP, Gtk::RESPONSE_HELP);
        add_button(Gtk::Stock::QUIT, Gtk::RESPONSE_CANCEL);
        add_button(Gtk::Stock::CLEAR, Gtk::RESPONSE_NONE);
-       m_okbutton = add_button(Gtk::Stock::OPEN, Gtk::RESPONSE_OK);
+       m_okbutton = add_button(Gtk::Stock::NEW, Gtk::RESPONSE_OK);
 
        recent_model = Gtk::TreeStore::create (recent_columns);
        m_treeview->set_model (recent_model);
@@ -425,7 +450,6 @@ NewSessionDialog::NewSessionDialog()
        m_treeview->signal_row_activated().connect (mem_fun (*this, &NewSessionDialog::recent_row_activated));
        m_open_filechooser->signal_selection_changed ().connect (mem_fun (*this, &NewSessionDialog::file_chosen));
        m_template->signal_selection_changed ().connect (mem_fun (*this, &NewSessionDialog::template_chosen));
-       m_name->grab_focus();
        
        page_set = Pages (0);
 }
@@ -523,7 +547,10 @@ NewSessionDialog::session_name() const
        }         
        */
 
-       if (on_newable_page()) {
+       int page = m_notebook->get_current_page();
+
+       if (page == 0 || page == 2) {
+               /* new or audio setup pages */
                return Glib::filename_from_utf8(m_name->get_text());
        } else {
                if (m_treeview->get_selection()->count_selected_rows() == 0) {
@@ -537,12 +564,13 @@ NewSessionDialog::session_name() const
 std::string
 NewSessionDialog::session_folder() const
 {
-       if (on_newable_page()) {
-               return Glib::filename_from_utf8(m_folder->get_filename());
+       if (m_notebook->get_current_page() == 0) {
+               return Glib::filename_from_utf8(m_folder->get_filename());
        } else {
+              
                if (m_treeview->get_selection()->count_selected_rows() == 0) {
-                       std::string str = Glib::filename_from_utf8(m_open_filechooser->get_filename());
-                       return Glib::path_get_dirname(str);
+                       const string filename(Glib::filename_from_utf8(m_open_filechooser->get_filename()));
+                       return Glib::path_get_dirname(filename);
                }
                Gtk::TreeModel::iterator i = m_treeview->get_selection()->get_selected();
                return (*i)[recent_columns.fullpath];
@@ -634,19 +662,62 @@ NewSessionDialog::connect_outs_to_physical() const
        return m_connect_outputs_to_physical->get_active();
 }
 
-bool
-NewSessionDialog::on_newable_page() const
-{
-       return (m_notebook->get_current_page() == 0 ||
-               m_notebook->get_current_page() == 2);
-}
-
 int
 NewSessionDialog::get_current_page() const
 {
        return m_notebook->get_current_page();
 }
 
+NewSessionDialog::Pages
+NewSessionDialog::which_page ()
+{
+       int num = m_notebook->get_current_page();
+
+       if (page_set == NewPage) {
+               return NewPage;
+
+       } else if (page_set == OpenPage) {
+               return OpenPage;
+
+       } else if (page_set == EnginePage) {
+               return EnginePage;
+
+       } else if (page_set == NewPage|OpenPage) {
+               switch (num) {
+               case 0:
+                       return NewPage;
+               default:
+                       return OpenPage;
+               }
+
+       } else if (page_set == NewPage|EnginePage) {
+               switch (num) {
+               case 0:
+                       return NewPage;
+               default:
+                       return EnginePage;
+               }
+
+       } else if (page_set == NewPage|EnginePage|OpenPage) {
+               switch (num) {
+               case 0:
+                       return NewPage;
+               case 1:
+                       return OpenPage;
+               default:
+                       return EnginePage;
+               }
+
+       } else if (page_set == OpenPage|EnginePage) {
+               switch (num) {
+               case 0:
+                       return OpenPage;
+               default:
+                       return EnginePage;
+               }
+       }
+}
+
 void
 NewSessionDialog::set_current_page(int page)
 {
@@ -678,8 +749,11 @@ NewSessionDialog::notebook_page_changed (GtkNotebookPage* np, uint pagenum)
                return;
        }
 
-       if (!on_newable_page ()) {
+       switch (which_page()) {
+       case OpenPage:
+               on_new_session_page = false;
                m_okbutton->set_label(_("Open"));
+               m_okbutton->set_image (*(manage (new Gtk::Image (Gtk::Stock::OPEN, Gtk::ICON_SIZE_BUTTON))));
                set_response_sensitive (Gtk::RESPONSE_NONE, false);
                m_okbutton->set_image (*(new Gtk::Image (Gtk::Stock::OPEN, Gtk::ICON_SIZE_BUTTON)));
                if (m_treeview->get_selection()->count_selected_rows() == 0) {
@@ -687,14 +761,24 @@ NewSessionDialog::notebook_page_changed (GtkNotebookPage* np, uint pagenum)
                } else {
                        set_response_sensitive (Gtk::RESPONSE_OK, true);
                }
-       } else {
-               if (m_name->get_text() != "") {
-                       set_response_sensitive (Gtk::RESPONSE_NONE, true);
-               }
+               break;
+
+       case EnginePage:
+               on_new_session_page = false;
+               m_okbutton->set_label(_("Open"));
+               m_okbutton->set_image (*(manage (new Gtk::Image (Gtk::Stock::OPEN, Gtk::ICON_SIZE_BUTTON))));
+               set_response_sensitive (Gtk::RESPONSE_NONE, false);
+               set_response_sensitive (Gtk::RESPONSE_OK, true);
+               break;
+
+       default:
+               m_okbutton->set_label(_("New"));
+               m_okbutton->set_image (*(new Gtk::Image (Gtk::Stock::NEW, Gtk::ICON_SIZE_BUTTON)));
                m_okbutton->set_label(_("New"));
                m_okbutton->set_image (*(new Gtk::Image (Gtk::Stock::NEW, Gtk::ICON_SIZE_BUTTON)));
                if (m_name->get_text() == "") {
                        set_response_sensitive (Gtk::RESPONSE_OK, false);
+                       m_name->grab_focus();
                } else {
                        set_response_sensitive (Gtk::RESPONSE_OK, true);
                }
@@ -718,12 +802,21 @@ NewSessionDialog::treeview_selection_changed ()
 void
 NewSessionDialog::file_chosen ()
 {
-       if (on_newable_page ()) return;
+       switch (which_page()) {
+      case OpenPage:
+         break;
+          case NewPage:
+          case EnginePage:
+                  return;
+       }
 
        m_treeview->get_selection()->unselect_all();
 
-       if (get_window())
-               get_window()->set_cursor(Gdk::Cursor(Gdk::WATCH));
+       Glib::RefPtr<Gdk::Window> win (get_window());
+
+       if (win) {
+               win->set_cursor(Gdk::Cursor(Gdk::WATCH));
+       }
 
        if (!m_open_filechooser->get_filename().empty()) {
                set_response_sensitive (Gtk::RESPONSE_OK, true);
index 0998f8a39a532401b68439481a49846af4c9d2b3..6f0820168b97fc8a939e15d48f5708e3f537b182 100644 (file)
@@ -54,6 +54,12 @@ class NewSessionDialog : public ArdourDialog
 {
 public:
                
+       enum Pages {
+               NewPage = 0x1,
+               OpenPage = 0x2,
+               EnginePage = 0x4
+       };
+
        NewSessionDialog();
        ~NewSessionDialog ();
 
@@ -86,9 +92,9 @@ public:
 
        bool connect_outs_to_master() const;
        bool connect_outs_to_physical() const ;
+       Pages which_page ();
 
-       bool on_newable_page() const;
-       int  get_current_page () const;
+       int get_current_page() const;
        void set_current_page (int);
        void reset_recent();
 
@@ -170,11 +176,6 @@ protected:
        Gtk::Notebook* m_notebook;
 
  private:
-       enum Pages {
-               NewPage = 0x1,
-               OpenPage = 0x2,
-               EnginePage = 0x4
-       };
 
        Pages page_set;
 
@@ -213,6 +214,7 @@ protected:
        void master_bus_button_clicked ();
        void monitor_bus_button_clicked ();
 
+       bool on_new_session_page;
        bool have_engine;
 };
 
index 2bf641b0890cac1f5bf8478bad7d1d9a43d9e55c..9804869d9510956f1b40ffc7f24981a966268c1f 100644 (file)
@@ -661,7 +661,7 @@ msgstr ""
 "datorn stängdes av.\n"
 "\n"
 "Ardour kan Ã¥terhämta inspelade ljud Ã¥t\n"
-"dig, eller ignorera dem. Välj\n"
+"dig, eller ignorera dem. Markera\n"
 "vad du vill göra.\n"
 
 #: ../ardour_ui.cc:2292
@@ -775,7 +775,7 @@ msgstr "Shuttle-hastighetskontrol"
 #: ../ardour_ui2.cc:305
 #, c-format
 msgid "Select semitones or %%-age for speed display"
-msgstr "Välj halvtoner eller %% för hastighetsvisning"
+msgstr "Markera halvtoner eller %% för hastighetsvisning"
 
 #: ../ardour_ui2.cc:306
 msgid "Current transport speed"
@@ -991,6 +991,10 @@ msgstr "Stor klocka"
 msgid "About"
 msgstr "Om"
 
+#: gtk2_ardour/ardour_ui_ed.cc:207
+msgid "Theme Manager"
+msgstr "Färgtema"
+
 #: ../ardour_ui_ed.cc:194
 msgid "Colors"
 msgstr "Färger"
@@ -1374,6 +1378,15 @@ msgstr "Inspelningsläge Ã¤ndras ej vid stopp"
 msgid "Region equivalents overlap"
 msgstr "Likvärda regioner Ã¶verlappar"
 
+#: gtk2_ardour/ardour_ui_ed.cc:416
+msgid "Primary Clock delta to edit cursor"
+msgstr "Primär klockdelta till redigeringspunkten"
+
+#: gtk2_ardour/ardour_ui_ed.cc:417
+msgid "Secondary Clock delta to edit cursor"
+msgstr "Sekundär klockdelta till redigeringspunkten"
+
+
 #. session options
 #: ../ardour_ui_ed.cc:418
 msgid "Do not run plugins while recording"
@@ -1561,6 +1574,18 @@ msgstr "Visa existerande automatisering"
 msgid "Hide all automation"
 msgstr "Göm all automatisering"
 
+#: gtk2_ardour/route_time_axis.cc:509
+msgid "Overlaid"
+msgstr "Överlappande"
+
+#: gtk2_ardour/route_time_axis.cc:511
+msgid "Stacked"
+msgstr "I trappa"
+
+#: gtk2_ardour/route_time_axis.cc:514
+msgid "Layers"
+msgstr "Lager"
+
 #: ../audio_time_axis.cc:728
 msgid "Fader"
 msgstr "Volym"
@@ -1666,7 +1691,7 @@ msgstr "Rensa aktuell"
 
 #: ../audio_time_axis.cc:1858 ../editor.cc:2023 ../editor.cc:2099
 msgid "Select"
-msgstr "Välj"
+msgstr "Markera"
 
 #: ../automation_line.cc:883
 msgid "automation event move"
@@ -2015,7 +2040,7 @@ msgstr "Markörer"
 
 #: gtk2_ardour/editor.cc:126 gtk2_ardour/editor.cc:3550
 msgid "Edit Cursor"
-msgstr "Redigeringsmarkör"
+msgstr "Redigeringspunkten"
 
 #: gtk2_ardour/editor.cc:127 gtk2_ardour/editor.cc:3552
 msgid "Region starts"
@@ -2055,11 +2080,11 @@ msgstr "Fokus: mitten"
 
 #: gtk2_ardour/editor.cc:135
 msgid "Focus Play"
-msgstr "Fokus: spelhuvud"
+msgstr "Fokus: startmarkören"
 
 #: gtk2_ardour/editor.cc:136
 msgid "Focus Edit"
-msgstr "Fokus: redigeringsmarkör"
+msgstr "Fokus: redigeringspunkten"
 
 #. time display buttons
 #: ../editor.cc:185
@@ -2134,12 +2159,6 @@ msgstr "Fästläge"
 msgid "Zoom Focus"
 msgstr "Zoomfokus"
 
-#. </CMT Additions>
-#. nudge
-#: ../editor.cc:236 ../editor.cc:1899 ../editor.cc:2065 ../editor.cc:2121
-msgid "Nudge"
-msgstr "Knuffa"
-
 #: ../editor.cc:469
 msgid "Zoom in"
 msgstr "Zooma in"
@@ -2288,6 +2307,14 @@ msgstr "Visa regionsredigerare"
 msgid "Raise to top layer"
 msgstr "Höj till Ã¶versta lagret"
 
+#: gtk2_ardour/editor.cc:1483
+msgid "Edit..."
+msgstr "Redigera..."
+
+#: gtk2_ardour/editor.cc:1491
+msgid "Define"
+msgstr "Definiera"
+
 #: ../editor.cc:1828
 msgid "Lower to bottom layer"
 msgstr "Sänk till lägsta lagret"
@@ -2304,6 +2331,10 @@ msgstr "Ta bort synk.-punkt"
 msgid "Bounce"
 msgstr "Skriv till disk"
 
+#: gtk2_ardour/editor.cc:1494
+msgid "Sync points"
+msgstr "Synkpunkter"
+
 #: ../editor.cc:1839
 msgid "Analyze region"
 msgstr "Analysera regioner"
@@ -2312,10 +2343,23 @@ msgstr "Analysera regioner"
 msgid "Lock"
 msgstr "LÃ¥s"
 
+#: gtk2_ardour/editor.cc:1510
+msgid "Lock Position"
+msgstr "LÃ¥s position"
+
+#: gtk2_ardour/editor.cc:1511
+msgid "Unlock Position"
+msgstr "Frigör position"
+
+
 #: gtk2_ardour/editor.cc:1755
 msgid "Opaque"
 msgstr "Ogenomskinlig"
 
+#: gtk2_ardour/editor.cc:1515
+msgid "Transparent"
+msgstr "Genomskinlig"
+
 #: ../editor.cc:1852
 msgid "Unlock"
 msgstr "LÃ¥s upp"
@@ -2352,6 +2396,38 @@ msgstr "Avnormalisera"
 msgid "Normalize"
 msgstr "Normalisera"
 
+#: gtk2_ardour/editor.cc:1563
+msgid "Quantize"
+msgstr "Kvantisera"
+
+#: gtk2_ardour/editor.cc:1570 gtk2_ardour/editor.cc:1638
+msgid "Add range markers"
+msgstr "Lägg till omfÃ¥ngsmarkörer"
+
+#: gtk2_ardour/editor.cc:1572
+msgid "Set range selection"
+msgstr "Ställ in omfÃ¥ngsmarkering"
+
+#: gtk2_ardour/editor.cc:1582
+msgid "Nudge forward"
+msgstr "Knuffa framÃ¥t"
+
+#: gtk2_ardour/editor.cc:1583
+msgid "Nudge backward"
+msgstr "Knuffa bakÃ¥t"
+
+#: gtk2_ardour/editor.cc:1584
+msgid "Nudge forward by capture offset"
+msgstr "Knuffa framÃ¥t utifrÃ¥n inspelningskompensation"
+
+#: gtk2_ardour/editor.cc:1585
+msgid "Nudge backward by capture offset"
+msgstr "Knuffa bakÃ¥t utifrÃ¥n inspelningskompensation"
+
+#: gtk2_ardour/editor.cc:1587 gtk2_ardour/editor.cc:1788
+msgid "Nudge"
+msgstr "Knuffa"
+
 #: ../editor.cc:1878
 msgid "Reverse"
 msgstr "Motsatt riktning"
@@ -2387,11 +2463,11 @@ msgstr "Knuffa bakÃ¥t utifrÃ¥n inspelningskompensation"
 
 #: ../editor.cc:1906
 msgid "Start to edit cursor"
-msgstr "Början till redigeringsmarkören"
+msgstr "Början till redigeringspunkten"
 
 #: ../editor.cc:1907
 msgid "Edit cursor to end"
-msgstr "Redigeringsmarkör till slutet"
+msgstr "Redigeringspunkten till slutet"
 
 #: ../editor.cc:1909 ../gain_meter.cc:180 ../gain_meter.cc:808
 #: ../panner_ui.cc:97 ../panner_ui.cc:802
@@ -2410,6 +2486,11 @@ msgstr "Skapa monoregioner"
 msgid "Duplicate"
 msgstr "Duplicera"
 
+#: gtk2_ardour/editor.cc:1600
+msgid "Fill track"
+msgstr "Fyll spÃ¥ret"
+
+
 #: ../editor.cc:1919
 msgid "Fill Track"
 msgstr "Fyll spÃ¥ret"
@@ -2440,11 +2521,11 @@ msgstr "Separera omfÃ¥ng till regionlista"
 
 #: ../editor.cc:1966
 msgid "Select all in range"
-msgstr "Välj allt i omfÃ¥ng"
+msgstr "Markera allt i omfÃ¥ng"
 
 #: gtk2_ardour/editor_markers.cc:515
 msgid "Select Range"
-msgstr "Välj omfÃ¥ng"
+msgstr "Markera omfÃ¥ng"
 
 #: ../editor.cc:1968 ../editor.cc:2013
 msgid "Set range to loop range"
@@ -2484,7 +2565,7 @@ msgstr "OmfÃ¥ng"
 
 #: ../editor.cc:1994 ../editor.cc:2079
 msgid "Play from edit cursor"
-msgstr "Spela frÃ¥n redigeringsmarkören"
+msgstr "Spela frÃ¥n redigeringspunkten"
 
 #: ../editor.cc:1995 ../editor.cc:2080
 msgid "Play from start"
@@ -2498,41 +2579,53 @@ msgstr "Spela region"
 msgid "Loop Region"
 msgstr "Loopa region"
 
+#: gtk2_ardour/editor.cc:1691
+msgid "Loop region"
+msgstr "Loopa region"
+
+#: gtk2_ardour/editor.cc:1701
+msgid "Select all in track"
+msgstr "Markera allt i spÃ¥ret"
+
+#: gtk2_ardour/editor.cc:1701
+msgid "Select all in tracks"
+msgstr "Markera allt i spÃ¥ren"
+
+#: gtk2_ardour/editor.cc:1705
+msgid "Select all"
+msgstr "Markera allt"
+
 #: ../editor.cc:2008 ../editor.cc:2089
 msgid "Select All in track"
-msgstr "Välj allt i spÃ¥ret"
+msgstr "Markera allt i spÃ¥ret"
 
 #: ../editor.cc:2009 ../editor.cc:2090 ../redirect_box.cc:1066
 msgid "Select All"
-msgstr "Välj allt"
+msgstr "Markera allt"
 
 #: ../editor.cc:2010 ../editor.cc:2091
 msgid "Invert selection in track"
 msgstr "Invertera i spÃ¥ret"
 
-#: ../editor.cc:2011 ../editor.cc:2092
-msgid "Invert selection"
-msgstr "Invertera"
-
 #: ../editor.cc:2016 ../editor.cc:2094
 msgid "Select all after edit cursor"
-msgstr "Välj allt efter redigeringsmarkören"
+msgstr "Markera allt efter redigeringspunkten"
 
 #: ../editor.cc:2017 ../editor.cc:2095
 msgid "Select all before edit cursor"
-msgstr "Välj allt innan redigeringsmarkören"
+msgstr "Markera allt innan redigeringspunkten"
 
 #: ../editor.cc:2018 ../editor.cc:2096
 msgid "Select all after playhead"
-msgstr "Välj allt efter startmarkören"
+msgstr "Markera allt efter startmarkören"
 
 #: ../editor.cc:2019 ../editor.cc:2097
 msgid "Select all before playhead"
-msgstr "Välj allt innan startmarkören"
+msgstr "Markera allt innan startmarkören"
 
 #: ../editor.cc:2020
 msgid "Select all between cursors"
-msgstr "Välj allt mellan markörerna"
+msgstr "Markera allt mellan markörerna"
 
 #. standard editing stuff
 #: ../editor.cc:2031 ../editor.cc:2107 ../editor.cc:3482
@@ -2547,7 +2640,7 @@ msgstr "Kopiera"
 
 #: ../editor.cc:2033
 msgid "Paste at edit cursor"
-msgstr "Klistra in vid redigeringsmarkören"
+msgstr "Klistra in vid redigeringspunkten"
 
 #: ../editor.cc:2034
 msgid "Paste at mouse"
@@ -2561,6 +2654,10 @@ msgstr "Justera"
 msgid "Align Relative"
 msgstr "Justera relativt"
 
+#: gtk2_ardour/editor.cc:1747
+msgid "Align relative"
+msgstr "Justera relativt"
+
 #: ../editor.cc:2043
 msgid "Insert chunk"
 msgstr "Infoga bit"
@@ -2575,19 +2672,19 @@ msgstr "Infoga ljudfil"
 
 #: ../editor.cc:2060 ../editor.cc:2116
 msgid "Nudge entire track fwd"
-msgstr "Knuffa hela spÃ¥ret framÃ¥t"
+msgstr "Knuffa spÃ¥ret framÃ¥t"
 
 #: ../editor.cc:2061 ../editor.cc:2117
 msgid "Nudge track after edit cursor fwd"
-msgstr "Knuffa spÃ¥ret framÃ¥t efter redigeringsmarkören"
+msgstr "Knuffa spÃ¥ret framÃ¥t efter redigeringspunkten"
 
 #: ../editor.cc:2062 ../editor.cc:2118
 msgid "Nudge entire track bwd"
-msgstr "Knuffa hela spÃ¥ret bakÃ¥t"
+msgstr "Knuffa spÃ¥ret bakÃ¥t"
 
 #: ../editor.cc:2063 ../editor.cc:2119
 msgid "Nudge track after edit cursor bwd"
-msgstr "Knuffa spÃ¥ret bakÃ¥t efter redigeringsmarkören"
+msgstr "Knuffa spÃ¥ret bakÃ¥t efter redigeringspunkten"
 
 #: ../editor.cc:2109 ../editor.cc:3486 ../editor_actions.cc:220
 #: ../redirect_box.cc:1063
@@ -2596,11 +2693,11 @@ msgstr "Klistra in"
 
 #: gtk2_ardour/editor.cc:2608
 msgid "Select/Move Objects"
-msgstr "Välj/flytta objekt"
+msgstr "Markera/flytta objekt"
 
 #: gtk2_ardour/editor.cc:2609
 msgid "Select/Move Ranges"
-msgstr "Välj/flytta omfÃ¥ng"
+msgstr "Markera/flytta omfÃ¥ng"
 
 #: gtk2_ardour/editor.cc:2610
 msgid "Draw Gain Automation"
@@ -2608,7 +2705,7 @@ msgstr "Rita volymautomatisering"
 
 #: gtk2_ardour/editor.cc:2611
 msgid "Select Zoom Range"
-msgstr "Välj zoom-omfÃ¥ng"
+msgstr "Markera zoom-omfÃ¥ng"
 
 #: gtk2_ardour/editor.cc:2612
 msgid "Stretch/Shrink Regions"
@@ -2618,6 +2715,11 @@ msgstr "Förläng/förkorta regioner"
 msgid "Listen to Specific Regions"
 msgstr "Lyssna pÃ¥ specifika regioner"
 
+#: gtk2_ardour/editor.cc:2454
+msgid "Edit MIDI Notes"
+msgstr "Redigera MIDI-noter"
+
+
 
 #: ../editor.cc:2745
 msgid "Start:"
@@ -2706,15 +2808,15 @@ msgstr "rensa spellistor"
 
 #: ../editor_actions.cc:27
 msgid "Select regions"
-msgstr "Välj regioner"
+msgstr "Markera regioner"
 
 #: ../editor_actions.cc:28
 msgid "Select range operations"
-msgstr "Välj omfÃ¥ngsÃ¥tgärder"
+msgstr "Markera omfÃ¥ngsÃ¥tgärder"
 
 #: ../editor_actions.cc:29
 msgid "Move edit cursor"
-msgstr "Flytta redigeringsmarkör"
+msgstr "Flytta redigeringspunkten"
 
 #: ../editor_actions.cc:30
 msgid "Region operations"
@@ -2819,7 +2921,7 @@ msgstr "Startmarkören till nästa regionslut"
 
 #: ../editor_actions.cc:70
 msgid "Playhead to Next Region Sync"
-msgstr "Startmarkören till nästa regionsynk.-punkt"
+msgstr "Startmarkören till nästa regionsynk.-punkten"
 
 #: ../editor_actions.cc:73
 msgid "Playhead to Previous Region Start"
@@ -2835,27 +2937,27 @@ msgstr "Startmarkören till förra regionsynk.-punkten"
 
 #: ../editor_actions.cc:80
 msgid "Edit Cursor to Next Region Start"
-msgstr "Redigeringsmarkören till nästa regionstart"
+msgstr "Redigeringspunkten till nästa regionstart"
 
 #: ../editor_actions.cc:82
 msgid "Edit Cursor to Next Region End"
-msgstr "Redigeringsmarkören till nästa regionslut"
+msgstr "Redigeringspunkten till nästa regionslut"
 
 #: ../editor_actions.cc:84
 msgid "Edit Cursor to Next Region Sync"
-msgstr "Redigeringsmarkören till nästa regionssynk.-punkt"
+msgstr "Redigeringspunkten till nästa regionssynk.-punkt"
 
 #: ../editor_actions.cc:87
 msgid "Edit Cursor to Previous Region Start"
-msgstr "Redigeringsmarkören till förra regionstart"
+msgstr "Redigeringspunkten till förra regionstart"
 
 #: ../editor_actions.cc:89
 msgid "Edit Cursor to Previous Region End"
-msgstr "Redigeringsmarkören till förra regionslutet"
+msgstr "Redigeringspunkten till förra regionslutet"
 
 #: ../editor_actions.cc:91
 msgid "Edit Cursor to Previous Region Sync"
-msgstr "Redigeringsmarkören till förra regionssynk.-punkten"
+msgstr "Redigeringspunkten till förra regionssynk.-punkten"
 
 #: ../editor_actions.cc:94
 msgid "Playhead to Range Start"
@@ -2867,43 +2969,43 @@ msgstr "Startmarkören till omfÃ¥ngslutet"
 
 #: ../editor_actions.cc:99
 msgid "Edit Cursor to Range Start"
-msgstr "Redigeringsmarkören till omfÃ¥ngstarten"
+msgstr "Redigeringspunkten till omfÃ¥ngstarten"
 
 #: ../editor_actions.cc:101
 msgid "Edit Cursor to Range End"
-msgstr "Redigeringsmarkören till omfÃ¥ngslutet"
+msgstr "Redigeringspunkten till omfÃ¥ngslutet"
 
 #: ../editor_actions.cc:104 ../editor_ops.cc:1364
 msgid "select all"
-msgstr "Välj allt"
+msgstr "Markera allt"
 
 #: ../editor_actions.cc:106
 msgid "Select All After Edit Cursor"
-msgstr "Välj allt efter redigeringsmarkören"
+msgstr "Markera allt efter redigeringspunkten"
 
 #: ../editor_actions.cc:108
 msgid "Select All Before Edit Cursor"
-msgstr "Välj allt innan redigeringsmarkören"
+msgstr "Markera allt innan redigeringspunkten"
 
 #: ../editor_actions.cc:111
 msgid "Select All After Playhead"
-msgstr "Välj allt efter startmarkören"
+msgstr "Markera allt efter startmarkören"
 
 #: ../editor_actions.cc:113
 msgid "Select All Before Playhead"
-msgstr "Välj allt innan startmarkören"
+msgstr "Markera allt innan startmarkören"
 
 #: ../editor_actions.cc:115
 msgid "Select All Between Cursors"
-msgstr "Välj allt mellan markörerna"
+msgstr "Markera allt mellan markörerna"
 
 #: ../editor_actions.cc:118
 msgid "Select All in Punch Range"
-msgstr "Välj allt i inslagsomfÃ¥nget"
+msgstr "Markera allt i inslagsomfÃ¥nget"
 
 #: ../editor_actions.cc:120
 msgid "Select All in Loop Range"
-msgstr "Välj allt i loop-omfÃ¥nget"
+msgstr "Markera allt i loop-omfÃ¥nget"
 
 #: ../editor_actions.cc:123
 msgid "Jump Forward to Mark"
@@ -2983,7 +3085,7 @@ msgstr "Centrera startmarkören"
 
 #: ../editor_actions.cc:163
 msgid "Center Edit Cursor"
-msgstr "Centrera redigeringsmarkören"
+msgstr "Centrera redigeringspunkten"
 
 #: ../editor_actions.cc:165
 msgid "Playhead Forward"
@@ -2999,11 +3101,11 @@ msgstr "Startmarkören bakÃ¥t"
 
 #: ../editor_actions.cc:169
 msgid "Playhead to Edit"
-msgstr "Startmarkören till redigeringsmarkören"
+msgstr "Startmarkören till redigeringspunkten"
 
 #: ../editor_actions.cc:171
 msgid "Edit to Playhead"
-msgstr "Redigeringsmarkören till Startmarkören"
+msgstr "Redigeringspunkten till Startmarkören"
 
 #: ../editor_actions.cc:174
 msgid "Align Regions Start"
@@ -3039,7 +3141,7 @@ msgstr "MÃ¥la vid mus"
 
 #: ../editor_actions.cc:192
 msgid "Set Edit Cursor"
-msgstr "Placera redigeringsmarkör"
+msgstr "Placera redigeringspunkten"
 
 #: ../editor_actions.cc:194
 msgid "Mute/Unmute Region"
@@ -3087,8 +3189,12 @@ msgid "Reverse Region"
 msgstr "Motsatt riktning"
 
 #: ../editor_actions.cc:230
-msgid "Normalize Region"
-msgstr "Normalisera region"
+msgid "Normalize Regions"
+msgstr "Normalisera regioner"
+
+#: gtk2_ardour/editor_actions.cc:257
+msgid "Quantize Regions"
+msgstr "Kvantisera regioner"
 
 #: ../editor_actions.cc:232
 msgid "crop"
@@ -3100,7 +3206,7 @@ msgstr "Infoga bit"
 
 #: ../editor_actions.cc:237
 msgid "Split at edit cursor"
-msgstr "Dela vid redigeringsmarkör"
+msgstr "Dela vid redigeringspunkten"
 
 #: ../editor_actions.cc:240
 msgid "Start Range"
@@ -3144,7 +3250,7 @@ msgstr "Zoomfokus: startmarkören"
 
 #: ../editor_actions.cc:268
 msgid "Zoom Focus Edit"
-msgstr "Zoomfokus: redigeringsmarkör"
+msgstr "Zoomfokus: redigeringspunkten"
 
 #: ../editor_actions.cc:274
 msgid "Object Tool"
@@ -3228,7 +3334,7 @@ msgstr "Fäst mot markörer"
 
 #: ../editor_actions.cc:300
 msgid "Snap to edit cursor"
-msgstr "Fäst mot redigeringsmarkören"
+msgstr "Fäst mot redigeringspunkten"
 
 #: ../editor_actions.cc:301
 msgid "Snap to region start"
@@ -3457,7 +3563,7 @@ msgid ""
 msgstr ""
 "Det finns ingen markering att exportera.\n"
 "\n"
-"Välj en markering i omfÃ¥ngsläget"
+"Markera en markering i omfÃ¥ngsläget"
 
 #: ../editor_export_audio.cc:109
 msgid ""
@@ -3564,7 +3670,7 @@ msgstr "Separera regioner i omfÃ¥nget"
 
 #: ../editor_markers.cc:493 ../editor_markers.cc:542
 msgid "Select All in Range"
-msgstr "Välj allt i omfÃ¥nget"
+msgstr "Markera allt i omfÃ¥nget"
 
 #: ../editor_markers.cc:519
 msgid "Set Loop Range"
@@ -3797,7 +3903,7 @@ msgstr ""
 
 #: ../editor_ops.cc:1421
 msgid "select all within"
-msgstr "välj allt inom"
+msgstr "markera allt inom"
 
 #: ../editor_ops.cc:1453
 msgid "set selection from region"
@@ -3809,27 +3915,27 @@ msgstr "ställ markering frÃ¥n omfÃ¥ng"
 
 #: ../editor_ops.cc:1516
 msgid "select all from range"
-msgstr "välj allt inom omfÃ¥ng"
+msgstr "markera allt inom omfÃ¥ng"
 
 #: ../editor_ops.cc:1538
 msgid "select all from punch"
-msgstr "välj allt frÃ¥n inslag"
+msgstr "markera allt frÃ¥n inslag"
 
 #: ../editor_ops.cc:1560
 msgid "select all from loop"
-msgstr "välj allt frÃ¥n loop"
+msgstr "markera allt frÃ¥n loop"
 
 #: ../editor_ops.cc:1574
 msgid "select all after cursor"
-msgstr "välj allt efter markör"
+msgstr "markera allt efter markör"
 
 #: ../editor_ops.cc:1579
 msgid "select all before cursor"
-msgstr "välj allt före markör"
+msgstr "markera allt före markör"
 
 #: ../editor_ops.cc:1609
 msgid "select all between cursors"
-msgstr "välj allt mellan markörerna"
+msgstr "markera allt mellan markörerna"
 
 #: ../editor_ops.cc:1740
 msgid "clear markers"
@@ -3889,7 +3995,7 @@ msgstr "Placera redigerinsmarkören pÃ¥ avsedd synk.-punkt"
 
 #: ../editor_ops.cc:2532
 msgid "set sync from edit cursor"
-msgstr "ställ synk. frÃ¥n redigeringsmarkör"
+msgstr "ställ synk. frÃ¥n redigeringspunkten"
 
 #: ../editor_ops.cc:2544
 msgid "remove sync"
@@ -4103,7 +4209,7 @@ msgstr "ta bort tempomarkör"
 
 #: ../editor_timefx.cc:50
 msgid "Quick but Ugly"
-msgstr "Snabbt men Fult"
+msgstr "Snabbt men fult"
 
 #: ../editor_timefx.cc:51
 msgid "Skip Anti-aliasing"
@@ -4121,6 +4227,10 @@ msgstr "TidsTänjningsDialog"
 msgid "Stretch/Shrink it"
 msgstr "Förläng/Förkorta den"
 
+#: gtk2_ardour/editor_timefx.cc:116
+msgid "Stretch/Shrink"
+msgstr "Förläng/Förkorta"
+
 #: ../editor_timefx.cc:72 ../editor_timefx.cc:73
 msgid "TimeStretchButton"
 msgstr "TidsTänjningsKnapp"
@@ -4594,11 +4704,11 @@ msgstr ""
 
 #: ../location_ui.cc:603
 msgid "Location (CD Index) Markers"
-msgstr "Plats-markörer (CD-Index)"
+msgstr "Platsmarkörer (CD-Index)"
 
 #: ../location_ui.cc:623
 msgid "Range (CD Track) Markers"
-msgstr "OmfÃ¥ng-markörer (CD-spÃ¥r)"
+msgstr "OmfÃ¥ngsmarkörer (CD-spÃ¥r)"
 
 #: ../location_ui.cc:789
 msgid "add range marker"
@@ -4936,7 +5046,7 @@ msgstr "Namn:"
 
 #: gtk2_ardour/new_session_dialog.cc:79
 msgid "Create Folder In :"
-msgstr "Skapa katalog i:"
+msgstr "Skapa i:"
 
 #: gtk2_ardour/new_session_dialog.cc:72
 msgid "Template :"
@@ -5139,11 +5249,11 @@ msgstr "frÃ¥nkopplad"
 
 #: ../option_editor.cc:669
 msgid "Choose Click"
-msgstr "Välj klick"
+msgstr "Markera klick"
 
 #: ../option_editor.cc:688
 msgid "Choose Click Emphasis"
-msgstr "Välj klickbetoning"
+msgstr "Markera klickbetoning"
 
 #: ../option_editor.cc:802
 msgid "Click audio file"
@@ -5692,7 +5802,7 @@ msgstr "ardour: spÃ¥r/buss-inspektör"
 
 #: ../route_params_ui.cc:698
 msgid "No Route Selected"
-msgstr "Ingen Rutt Vald"
+msgstr "Ingen rutt vald"
 
 #: ../route_params_ui.cc:699
 msgid "ardour: track/bus/inspector: no route selected"
@@ -6086,3 +6196,869 @@ msgstr "stopp"
 msgid "Logarithmic"
 msgstr "Logaritmisk"
 
+#: gtk2_ardour/ardour_ui_ed.cc:98
+msgid "Denormal Handling"
+msgstr "Denormal-hantering"
+
+#: gtk2_ardour/ardour_ui_ed.cc:423
+msgid "Use DC bias"
+msgstr "Använd DC-bias"
+
+#: gtk2_ardour/ardour_ui_ed.cc:427
+msgid "No processor handling"
+msgstr "Ingen processorhantering"
+
+#: gtk2_ardour/ardour_ui_ed.cc:429
+msgid "Use FlushToZero"
+msgstr "Använd FlushToZero"
+
+#: gtk2_ardour/ardour_ui_ed.cc:433
+msgid "Use DenormalsAreZero"
+msgstr "Använda DenormalsAreZero"
+
+#: gtk2_ardour/ardour_ui_ed.cc:437
+msgid "Use FlushToZero & DenormalsAreZero"
+msgstr "Använd FlushToZero och DenormalsAreZero"
+
+#: gtk2_ardour/midi_time_axis.cc:181
+msgid "Note range"
+msgstr "NotomfÃ¥ng"
+
+#: gtk2_ardour/midi_time_axis.cc:173
+msgid "Show Full Range"
+msgstr "Visa hela omfÃ¥nget"
+
+#: gtk2_ardour/midi_time_axis.cc:177
+msgid "Fit Contents"
+msgstr "Anpassa innehÃ¥llet"
+
+
+#: gtk2_ardour/midi_time_axis.cc:163
+msgid "Controller..."
+msgstr "Kontrollerare..."
+
+#: gtk2_ardour/midi_controller_time_axis.cc:65
+msgid "add midi controller automation event"
+msgstr "lägg till automatiseringshändelse för midi-kontroller"
+
+#: gtk2_ardour/ardour_ui_ed.cc:450
+msgid "Disable All Plugins"
+msgstr "Avaktivera alla insticksprogram"
+
+#: gtk2_ardour/ardour_ui_ed.cc:452
+msgid "A/B All Plugins"
+msgstr "A/B:a alla insticksprogram"
+
+#: gtk2_ardour/engine_dialog.cc:46
+msgid "Realtime"
+msgstr "Realtid"
+
+#: gtk2_ardour/engine_dialog.cc:47
+msgid "Do not lock memory"
+msgstr "LÃ¥s ej minnet"
+
+#: gtk2_ardour/engine_dialog.cc:48
+msgid "Unlock memory"
+msgstr "Frigör minnet"
+
+#: gtk2_ardour/engine_dialog.cc:49
+msgid "No zombies"
+msgstr "Inga zombies"
+
+#: gtk2_ardour/engine_dialog.cc:50
+msgid "Provide monitor ports"
+msgstr "Skapa medhörningsportar"
+
+#: gtk2_ardour/engine_dialog.cc:51
+msgid "Force 16 bit"
+msgstr "Tvinga 16 bit"
+
+#: gtk2_ardour/engine_dialog.cc:52
+msgid "H/W monitoring"
+msgstr "HÃ¥rdvarumedhörning"
+
+#: gtk2_ardour/engine_dialog.cc:53
+msgid "H/W metering"
+msgstr "HÃ¥rdvarunivÃ¥mätning"
+
+#: gtk2_ardour/engine_dialog.cc:54
+msgid "Verbose output"
+msgstr "Utförlig information"
+
+#: gtk2_ardour/engine_dialog.cc:55
+msgid "Start"
+msgstr ""
+
+#: gtk2_ardour/engine_dialog.cc:74
+msgid "8000Hz"
+msgstr ""
+
+#: gtk2_ardour/engine_dialog.cc:75
+msgid "22050Hz"
+msgstr ""
+
+#: gtk2_ardour/engine_dialog.cc:76
+msgid "44100Hz"
+msgstr ""
+
+#: gtk2_ardour/engine_dialog.cc:77
+msgid "48000Hz"
+msgstr ""
+
+#: gtk2_ardour/engine_dialog.cc:78
+msgid "88200Hz"
+msgstr ""
+
+#: gtk2_ardour/engine_dialog.cc:79
+msgid "96000Hz"
+msgstr ""
+
+#: gtk2_ardour/engine_dialog.cc:80
+msgid "192000Hz"
+msgstr ""
+
+
+#: gtk2_ardour/engine_dialog.cc:129 gtk2_ardour/engine_dialog.cc:435
+#: gtk2_ardour/engine_dialog.cc:824
+msgid "Playback/Recording on 1 Device"
+msgstr "Upp-/inspelning pÃ¥ 1 enhet"
+
+#: gtk2_ardour/engine_dialog.cc:130 gtk2_ardour/engine_dialog.cc:439
+#: gtk2_ardour/engine_dialog.cc:464 gtk2_ardour/engine_dialog.cc:827
+msgid "Playback/Recording on 2 Devices"
+msgstr "Upp-/inspelning pÃ¥ 2 enheter"
+
+#: gtk2_ardour/engine_dialog.cc:131 gtk2_ardour/engine_dialog.cc:446
+#: gtk2_ardour/engine_dialog.cc:830
+msgid "Playback only"
+msgstr "Uppspelning endast"
+
+#: gtk2_ardour/engine_dialog.cc:132 gtk2_ardour/engine_dialog.cc:448
+#: gtk2_ardour/engine_dialog.cc:832
+msgid "Recording only"
+msgstr "Inspelning endast"
+
+#: gtk2_ardour/engine_dialog.cc:141
+msgid "Driver"
+msgstr "Drivrutin"
+
+#: gtk2_ardour/engine_dialog.cc:146
+msgid "Interface"
+msgstr "Enhet"
+
+#: gtk2_ardour/engine_dialog.cc:162
+msgid "Number of buffers"
+msgstr "Antal buffertar"
+
+#: gtk2_ardour/engine_dialog.cc:169
+msgid "Approximate latency"
+msgstr "Ungefärlig fördröjning"
+
+#: gtk2_ardour/engine_dialog.cc:183
+msgid "Audio Mode"
+msgstr "Audio-läge"
+
+#: gtk2_ardour/engine_dialog.cc:222
+msgid "Realtime Priority"
+msgstr "Realtidsprioritering"
+
+#: gtk2_ardour/engine_dialog.cc:251 gtk2_ardour/engine_dialog.cc:374
+msgid "Ignore"
+msgstr "Ignorera"
+
+#: gtk2_ardour/engine_dialog.cc:259
+msgid "Client timeout"
+msgstr "Klient-timeout"
+
+#: gtk2_ardour/engine_dialog.cc:265
+msgid "Number of ports"
+msgstr "Antal portar"
+
+#: gtk2_ardour/engine_dialog.cc:272
+msgid "Dither"
+msgstr ""
+
+#: gtk2_ardour/engine_dialog.cc:282
+msgid ""
+"No JACK server found anywhere on this system. Please install JACK and restart"
+msgstr ""
+"Ingen JACK-server hittades. Installera JACK och starta om"
+
+#: gtk2_ardour/engine_dialog.cc:290
+msgid "Server:"
+msgstr ""
+
+#: gtk2_ardour/engine_dialog.cc:303
+msgid "Input device"
+msgstr "Inljudsenhet"
+
+#: gtk2_ardour/engine_dialog.cc:308
+msgid "Output device"
+msgstr "Utljudsenhet"
+
+#: gtk2_ardour/engine_dialog.cc:314
+msgid "Input channels"
+msgstr "IngÃ¥ngar"
+
+#: gtk2_ardour/engine_dialog.cc:319
+msgid "Output channels"
+msgstr "UtgÃ¥ngar"
+
+#: gtk2_ardour/engine_dialog.cc:324
+msgid "Hardware input latency (samples)"
+msgstr "HÃ¥rdvarans ingÃ¥ngsfördröjning (smpl)"
+
+#: gtk2_ardour/engine_dialog.cc:329
+msgid "Hardware output latency (samples)"
+msgstr "HÃ¥rdvarans utgÃ¥ngsfördröjning (smpl)"
+
+#: gtk2_ardour/engine_dialog.cc:342
+msgid "Device"
+msgstr "Enhet"
+
+#: gtk2_ardour/engine_dialog.cc:344
+msgid "Advanced"
+msgstr "Avancerat"
+
+#: gtk2_ardour/engine_dialog.cc:537
+msgid "cannot open JACK rc file %1 to store parameters"
+msgstr "kan ej Ã¶ppna JACKs rc-fil %1 för att lagra parametrar"
+
+#: gtk2_ardour/engine_dialog.cc:559
+msgid "could not start JACK server: "
+msgstr "kunde inte starta JACK-servern:"
+
+#: gtk2_ardour/engine_dialog.cc:863
+msgid "JACK appears to be missing from the Ardour bundle"
+msgstr "JACK tycks saknas frÃ¥n Ardours bundle"
+
+#: gtk2_ardour/engine_dialog.cc:1047
+msgid "AudioSetup value for %1 is missing data"
+msgstr "AudioSetup-värde för %1 saknar data"
+
+#: gtk2_ardour/engine_dialog.cc:1127
+msgid "configuration files contain a JACK server path that doesn't exist (%1)"
+msgstr "konfigurationsfilerna anger en JACK-serversökväg som inte existerar"
+
+#: gtk2_ardour/engine_dialog.cc:101 gtk2_ardour/engine_dialog.cc:484
+msgid "Shaped"
+msgstr "Formad"
+
+#: gtk2_ardour/ardour_ui_ed.cc:300
+msgid "Focus On Clock"
+msgstr "Fokus pÃ¥ klockan"
+
+#: gtk2_ardour/editor_markers.cc:467
+#msgid "Locate to Mark"
+#msgstr "Flytta startmarkören till platsmarkör"
+
+#: gtk2_ardour/editor_actions.cc:295
+msgid "Separate"
+msgstr "Separera"
+
+#: gtk2_ardour/editor_actions.cc:297 gtk2_ardour/editor_actions.cc:320
+msgid "Crop"
+msgstr "Beskär"
+
+#: gtk2_ardour/editor_actions.cc:302 gtk2_ardour/redirect_box.cc:1208
+#: gtk2_ardour/connection_editor.cc:55
+#msgid "Delete"
+#msgstr "Radera"
+
+#: gtk2_ardour/editor_actions.cc:51
+msgid "Move Selected Marker"
+msgstr "Flytta vald platsmarkör"
+
+#: gtk2_ardour/editor_actions.cc:106
+msgid "to Next Region Start"
+msgstr "till nästa regions början"
+
+#: gtk2_ardour/editor_actions.cc:108
+msgid "to Next Region End"
+msgstr "till nästa regions slut"
+
+#: gtk2_ardour/editor_actions.cc:110
+msgid "to Next Region Sync"
+msgstr "till nästa regions synk.-punkt"
+
+#: gtk2_ardour/editor_actions.cc:113
+msgid "to Previous Region Start"
+msgstr "till förra regionens början"
+
+#: gtk2_ardour/editor_actions.cc:115
+msgid "to Previous Region End"
+msgstr "till förra regionens slut"
+
+#: gtk2_ardour/editor_actions.cc:117
+msgid "to Previous Region Sync"
+msgstr "till förra regionens synk.-punkt"
+
+#: gtk2_ardour/editor_actions.cc:120
+msgid "to Range Start"
+msgstr "till omfÃ¥ngsmarkeringens början"
+
+#: gtk2_ardour/editor_actions.cc:122
+msgid "to Range End"
+msgstr "till omfÃ¥ngsmarkeringens slut"
+
+#: gtk2_ardour/editor_actions.cc:223
+msgid "Center Edit Point"
+msgstr "Redigeringspunktens mitt"
+
+#: gtk2_ardour/editor_actions.cc:278
+msgid "Set Edit Point"
+msgstr "Markera redigeringspunkten"
+
+#: gtk2_ardour/editor_actions.cc:375
+msgid "Change edit point"
+msgstr "Ändra redigeringspunkten"
+
+#: gtk2_ardour/editor_actions.cc:379
+msgid "Toggle Edit Mode"
+msgstr "Skifta redigeringsläge"
+
+#: gtk2_ardour/editor.cc:1949 gtk2_ardour/editor_actions.cc:150
+msgid "Select Range Between Playhead & Edit Point"
+msgstr "Markera omfÃ¥ng mellan startmarkör & redigeringspunkten"
+
+#: gtk2_ardour/editor_actions.cc:134
+msgid "Invert Selection"
+msgstr "Invertera"
+
+#: gtk2_ardour/editor.cc:1943 gtk2_ardour/editor_actions.cc:136
+msgid "Select All After Edit Point"
+msgstr "Markera allt efter redigeringspunkten"
+
+#: gtk2_ardour/editor.cc:1944 gtk2_ardour/editor_actions.cc:138
+msgid "Select All Before Edit Point"
+msgstr "Markera allt innan redigeringspunkten"
+
+#: gtk2_ardour/editor.cc:1945 gtk2_ardour/editor_actions.cc:141
+#msgid "Select All After Playhead"
+#msgstr "Markera allt efter startmarkören"
+
+#: gtk2_ardour/editor.cc:1946 gtk2_ardour/editor_actions.cc:143
+#msgid "Select All Before Playhead"
+#msgstr "Markera allt efter startmarkören"
+
+#: gtk2_ardour/editor.cc:1947 gtk2_ardour/editor_actions.cc:145
+msgid "Select All Between Playhead & Edit Point"
+msgstr "Markera allt mellan startmarkör & redigeringspunkten"
+
+#: gtk2_ardour/editor.cc:1948 gtk2_ardour/editor_actions.cc:147
+msgid "Select All Within Playhead & Edit Point"
+msgstr "Markera allt inom startmarkör & redigeringspunkten"
+
+#: gtk2_ardour/editor.cc:1949 gtk2_ardour/editor_actions.cc:150
+#msgid "Select Range Between Playhead & Edit Point"
+#msgstr "Markera omfÃ¥ng mellan startmarkör & redigeringspunkten"
+
+#: gtk2_ardour/editor_actions.cc:310
+msgid "Multi-Duplicate Region"
+msgstr "Multiduplicera region"
+
+
+#: gtk2_ardour/editor_actions.cc:318
+msgid "Normalize Region"
+msgstr "Normalisera region"
+
+#: gtk2_ardour/editor_actions.cc:236
+msgid "Trim front at edit point"
+msgstr "Beskär början vid redingeringspunkt"
+
+#: gtk2_ardour/editor_actions.cc:238
+msgid "Trim back at edit point"
+msgstr "Beskär slutet vid redingerspunkt"
+
+#: gtk2_ardour/editor.cc:1830 gtk2_ardour/editor_actions.cc:241
+msgid "Start to edit point"
+msgstr "Början till redigeringspunkten"
+
+#: gtk2_ardour/editor.cc:1831 gtk2_ardour/editor_actions.cc:243
+msgid "Edit point to end"
+msgstr "Redigeringspunkt till slutet"
+
+#: gtk2_ardour/editor.cc:1832 gtk2_ardour/editor_actions.cc:245
+msgid "Trim To Loop"
+msgstr "Beskär till loop"
+
+#: gtk2_ardour/editor.cc:1833 gtk2_ardour/editor_actions.cc:247
+msgid "Trim To Punch"
+msgstr "Beskär till in-/utslag"
+
+#: gtk2_ardour/ardour_ui_ed.cc:413
+msgid "Sync Editor and Mixer track order"
+msgstr "Matcha Redigerare och Mixers spÃ¥rordning"
+
+
+#: gtk2_ardour/ardour_ui_ed.cc:212
+msgid "Keybindings"
+msgstr "Kortkommandon"
+
+#: gtk2_ardour/keyeditor.cc:21
+msgid "Keybinding Editor"
+msgstr "Kortkommandon"
+
+#: gtk2_ardour/keyeditor.cc:29
+msgid "Action"
+msgstr "Händelse"
+
+#: gtk2_ardour/keyeditor.cc:30
+msgid "Binding"
+msgstr "Bindning"
+
+#: gtk2_ardour/ardour_ui_ed.cc:422
+msgid "Primary Clock delta to edit point"
+msgstr "Primär klock-delta till redigeringspunkten"
+
+#: gtk2_ardour/ardour_ui_ed.cc:423
+msgid "Secondary Clock delta to edit point"
+msgstr "Sekundär klock-delta till redigeringspunkta"
+
+#: gtk2_ardour/ardour_ui_ed.cc:424
+msgid "Enable Editor Meters"
+msgstr "Sätt pÃ¥ nivÃ¥mätare i redigeraren"
+
+#: gtk2_ardour/ardour_ui_ed.cc:425
+msgid "Always copy imported files"
+msgstr "Kopiera alltid importerade filer"
+
+#: gtk2_ardour/ardour_ui_ed.cc:201 gtk2_ardour/option_editor.cc:117
+msgid "Preferences"
+msgstr "Inställningar"
+
+#: gtk2_ardour/option_editor.cc:84
+msgid "Timecode source is sample-clock synced"
+msgstr "Tidskodens källa Ã¤r samplingsklocka-synkad"
+
+#: gtk2_ardour/option_editor.cc:149
+msgid "Misc"
+msgstr "Diverse"
+
+#: gtk2_ardour/option_editor.cc:77
+msgid "Limit undo history"
+msgstr "Begränsa Ã¥ngrahistoriken"
+
+#: gtk2_ardour/option_editor.cc:78
+msgid "Save undo history"
+msgstr "Spara Ã¥ngrahistorik"
+
+#: gtk2_ardour/option_editor.cc:288
+msgid "History depth (commands)"
+msgstr "Historikdjup (kommandon)"
+
+#: gtk2_ardour/option_editor.cc:309
+msgid "Saved history depth (commands)"
+msgstr "Sparad historiks djup (kommando)"
+
+#: gtk2_ardour/new_session_dialog.cc:460
+msgid "Audio Setup"
+msgstr "Ljudinställningar"
+
+#: gtk2_ardour/editor.cc:131 gtk2_ardour/editor.cc:3237
+#: gtk2_ardour/editor_actions.cc:401
+msgid "No Grid"
+msgstr "Inget rutnät"
+
+#: gtk2_ardour/editor.cc:132 gtk2_ardour/editor.cc:3239
+#: gtk2_ardour/editor_actions.cc:402
+msgid "Grid"
+msgstr "Rutnät"
+
+#: gtk2_ardour/editor.cc:140 gtk2_ardour/editor.cc:149
+#: gtk2_ardour/editor.cc:3307 gtk2_ardour/editor_actions.cc:387
+msgid "Mouse"
+msgstr "Mus"
+
+#: gtk2_ardour/editor.cc:2734
+msgid "Zoom focus"
+msgstr "Zoom-fokus"
+
+#: gtk2_ardour/editor.cc:2748
+msgid "Snap/Grid Units"
+msgstr "Fästläge/rutnätsenheter"
+
+#: gtk2_ardour/editor.cc:2754
+msgid "Snap/Grid Mode"
+msgstr "Fästläge/rutnätsläge"
+
+#: gtk2_ardour/editor.cc:2760
+msgid "Edit point"
+msgstr "redigeringspunkten"
+
+#: gtk2_ardour/ardour_ui2.cc:347
+msgid ""
+"When active, something is soloed.\n"
+"Click to de-solo everything"
+msgstr ""
+"I aktivt läge Ã¤r valda kanaler i sololäge.\n"
+"Klicka för att stänga av"
+
+#: gtk2_ardour/ardour_ui2.cc:348
+msgid ""
+"When active, auditioning is taking place\n"
+"Click to stop the audition"
+msgstr ""
+"I aktivt läge avlyssnas nÃ¥got\n"
+"Klicka för att stoppa avlyssningen"
+
+#: gtk2_ardour/editor.cc:1846
+msgid "Multi-Duplicate"
+msgstr "Multiduplicera"
+
+#: gtk2_ardour/editor.cc:186 gtk2_ardour/editor_rulers.cc:430
+msgid "CD Markers"
+msgstr "CD-markörer"
+
+#: gtk2_ardour/editor.cc:1939 gtk2_ardour/editor.cc:2022
+msgid "Invert selection"
+msgstr "Invertera markeringen"
+
+#: gtk2_ardour/editor.cc:1991 gtk2_ardour/editor.cc:2047
+msgid "Nudge track after edit point fwd"
+msgstr "Knuffa spÃ¥ret framÃ¥t efter redigeringspunkten"
+
+#: gtk2_ardour/editor.cc:1993 gtk2_ardour/editor.cc:2049
+msgid "Nudge track after edit point bwd"
+msgstr "Knuffa spÃ¥ret bakÃ¥t efter redigeringspunkten"
+
+#: gtk2_ardour/ardour_ui.cc:2082
+msgid "Starting audio engine"
+msgstr "Startar ljudsystemet"
+
+#: gtk2_ardour/ardour_ui.cc:2352
+msgid "Please wait while Ardour loads your session"
+msgstr "Vänta medan Ardour laddar din session"
+
+#: gtk2_ardour/editor_ops.cc:2170
+msgid "Rename Region"
+msgstr "Byt namn pÃ¥ region"
+
+#: gtk2_ardour/editor_ops.cc:2174
+msgid "New name:"
+msgstr "Nytt namn:"
+
+
+#: gtk2_ardour/editor_actions.cc:226 gtk2_ardour/editor_actions.cc:228
+msgid "to Center"
+msgstr "Startmarkören till mitten"
+
+#: gtk2_ardour/editor_actions.cc:236
+msgid "to Edit"
+msgstr "Startmarkören till redigeringspunkten"
+
+#: gtk2_ardour/editor_actions.cc:241
+msgid "Trim start at edit point"
+msgstr "Beskär början vid redigeringspunkten"
+
+#: gtk2_ardour/editor_actions.cc:243
+msgid "Trim end at edit point"
+msgstr "Beskär slutet vid redigeringspunkten"
+
+#: gtk2_ardour/editor_actions.cc:169
+msgid "Locate to Mark 1"
+msgstr "Hoppa till markör 1"
+
+#: gtk2_ardour/editor_actions.cc:171
+msgid "Locate to Mark 2"
+msgstr "Hoppa till markör 2"
+
+#: gtk2_ardour/editor_actions.cc:173
+msgid "Locate to Mark 3"
+msgstr "Hoppa till markör 3"
+
+#: gtk2_ardour/editor_actions.cc:175
+msgid "Locate to Mark 4"
+msgstr "Hoppa till markör 4"
+
+#: gtk2_ardour/editor_actions.cc:177
+msgid "Locate to Mark 5"
+msgstr "Hoppa till markör 5"
+
+#: gtk2_ardour/editor_actions.cc:179
+msgid "Locate to Mark 6"
+msgstr "Hoppa till markör 6"
+
+#: gtk2_ardour/editor_actions.cc:181
+msgid "Locate to Mark 7"
+msgstr "Hoppa till markör 7"
+
+#: gtk2_ardour/editor_actions.cc:183
+msgid "Locate to Mark 8"
+msgstr "Hoppa till markör 8"
+
+#: gtk2_ardour/editor_actions.cc:185
+msgid "Locate to Mark 9"
+msgstr "Hoppa till markör 9"
+
+#: gtk2_ardour/audio_clock.cc:1888 gtk2_ardour/editor.cc:180
+#: gtk2_ardour/editor_rulers.cc:390
+msgid "Samples"
+msgstr "Samplingar"
+
+#: gtk2_ardour/editor.cc:1924 gtk2_ardour/editor.cc:2011
+msgid "Play from edit point"
+msgstr "Spela frÃ¥n redigeringspunkten"
+
+#: gtk2_ardour/editor_actions.cc:70
+msgid "Link Region/Track Selection"
+msgstr "LÃ¥s region/spÃ¥r-markeringen"
+
+#: gtk2_ardour/sfdb_ui.cc:425
+msgid "Browse Files"
+msgstr "Bläddra"
+
+#: gtk2_ardour/sfdb_ui.cc:426
+msgid "Search Tags"
+msgstr "Sök taggar"
+
+#: gtk2_ardour/sfdb_ui.cc:434
+msgid "Audio files"
+msgstr "Ljudfiler"
+
+#: gtk2_ardour/sfdb_ui.cc:437
+msgid "All files"
+msgstr "Alla filer"
+
+#: gtk2_ardour/sfdb_ui.cc:1002
+msgid "Add files:"
+msgstr "Lägg till:"
+
+#: gtk2_ardour/sfdb_ui.cc:1024
+msgid "Insert:"
+msgstr "Infoga:"
+
+#: gtk2_ardour/sfdb_ui.cc:1037
+msgid "Mapping:"
+msgstr "Lägg som:"
+
+#: gtk2_ardour/sfdb_ui.cc:1055
+msgid "Conversion Quality:"
+msgstr "Konverteringskvalitet:"
+
+#: gtk2_ardour/sfdb_ui.cc:91 gtk2_ardour/sfdb_ui.cc:100
+msgid "as new tracks"
+msgstr "som nya spÃ¥r"
+
+#: gtk2_ardour/sfdb_ui.cc:93
+msgid "to selected tracks"
+msgstr "till valda spÃ¥r"
+
+#: gtk2_ardour/sfdb_ui.cc:95
+msgid "to region list"
+msgstr "till regionslistan"
+
+#: gtk2_ardour/sfdb_ui.cc:97
+msgid "as new tape tracks"
+msgstr "som nya bandspÃ¥r"
+
+#: gtk2_ardour/sfdb_ui.cc:109
+msgid "Auto-play"
+msgstr "Spela automatiskt"
+
+#: gtk2_ardour/sfdb_ui.cc:994 gtk2_ardour/sfdb_ui.cc:1129
+msgid "use file timestamp"
+msgstr "använd timestamp i filen"
+
+#: gtk2_ardour/sfdb_ui.cc:995 gtk2_ardour/sfdb_ui.cc:1131
+msgid "at edit point"
+msgstr "vid redigeringspunkten"
+
+#: gtk2_ardour/sfdb_ui.cc:996 gtk2_ardour/sfdb_ui.cc:1133
+msgid "at playhead"
+msgstr "vid startmarkören"
+
+#: gtk2_ardour/sfdb_ui.cc:997
+msgid "at session start"
+msgstr "vid början"
+
+#: gtk2_ardour/sfdb_ui.cc:118 gtk2_ardour/sfdb_ui.cc:228
+msgid "<b>Soundfile Info</b>"
+msgstr "<b>Information</b>"
+
+#: gtk2_ardour/sfdb_ui.cc:129
+msgid "Length:"
+msgstr "Längd:"
+
+#: gtk2_ardour/sfdb_ui.cc:130
+msgid "Timestamp:"
+msgstr ""
+
+#: gtk2_ardour/sfdb_ui.cc:131
+msgid "Format:"
+msgstr ""
+
+#: gtk2_ardour/sfdb_ui.cc:132
+msgid "Channels:"
+msgstr "Kanaler:"
+
+#: gtk2_ardour/sfdb_ui.cc:133 gtk2_ardour/sfdb_ui.cc:248
+#: gtk2_ardour/sfdb_ui.cc:253
+msgid "Sample rate:"
+msgstr "Samplingsfrekvens:"
+
+#: gtk2_ardour/sfdb_ui.cc:165
+msgid "Tags:"
+msgstr "Taggar:"
+
+#: gtk2_ardour/sfdb_ui.cc:175
+msgid "Play (double click)"
+msgstr "Spela (dblklicka)"
+
+#: gtk2_ardour/sfdb_ui.cc:847
+msgid ""
+"One or more of the selected files\n"
+"cannot be used by Ardour"
+msgstr ""
+"En eller flera filer kunde\n"
+"inte användas av Ardour"
+
+#: gtk2_ardour/sfdb_ui.cc:978
+msgid "Copy files to session"
+msgstr "Kopiera filer till sessionen"
+
+#: gtk2_ardour/keyeditor.cc:28
+msgid "Remove shortcut"
+msgstr "Ta bort kortkommando"
+
+#: gtk2_ardour/keyeditor.cc:39
+msgid "Shortcut"
+msgstr "Kortkommando"
+
+#: gtk2_ardour/keyeditor.cc:27
+msgid "Shortcut Editor"
+msgstr "Kortkommandon"
+
+#: gtk2_ardour/editor_actions.cc:262
+msgid "Set Loop From Edit Range"
+msgstr "Sätt loop frÃ¥n redigeringsomfÃ¥ng"
+
+#: gtk2_ardour/editor_actions.cc:264
+msgid "Set Loop From Region"
+msgstr "Sätt loop frÃ¥n region"
+
+#: gtk2_ardour/editor_actions.cc:268
+msgid "Set Punch From Edit Range"
+msgstr "Sätt inslag frÃ¥n redigeringsomfÃ¥ng"
+
+#: gtk2_ardour/editor_actions.cc:298
+msgid "Play From Edit Point"
+msgstr "Spela frÃ¥n redigeringspunkten"
+
+#: gtk2_ardour/editor_actions.cc:300
+msgid "Play from Edit Point & Return"
+msgstr "Spela frÃ¥n redigeringspunkten & Ã¥tervänd"
+
+#: gtk2_ardour/editor_actions.cc:303
+msgid "Play Edit Range"
+msgstr "Spela redigeringsomfÃ¥nget"
+
+#: gtk2_ardour/editor_actions.cc:89
+msgid "Playhead to Next Region Boundary"
+msgstr "Startmarkören till nästa regiongränsen"
+
+#: gtk2_ardour/editor_actions.cc:91
+msgid "Playhead to Previous Region Boundary"
+msgstr "Startmarkören till förra regiongränsen"
+
+#: gtk2_ardour/editor_actions.cc:245
+msgid "to Playhead"
+msgstr "till startmarkören"
+
+#: gtk2_ardour/editor_actions.cc:304
+msgid "Play Selected Region(s)"
+msgstr "Spela valda regioner"
+
+#: gtk2_ardour/editor_actions.cc:411
+msgid "Change edit point (w/Marker)"
+msgstr "Ändra redigeringspunkten (med platsmarkör)"
+
+#: gtk2_ardour/editor_actions.cc:277
+msgid "Toggle Fade In Active"
+msgstr "Intoning av/pÃ¥"
+
+#: gtk2_ardour/editor_actions.cc:275
+msgid "Set Fade In Length"
+msgstr "Välj intoningslängd"
+
+#: gtk2_ardour/editor_actions.cc:279
+msgid "Set Fade Out Length"
+msgstr "Välj uttoningslängd"
+
+#: gtk2_ardour/editor_actions.cc:281
+msgid "Toggle Fade Out Active"
+msgstr "Uttoning av/pÃ¥"
+
+#: gtk2_ardour/editor_actions.cc:165
+msgid "Select Next Track/Bus"
+msgstr "Välj nästa spÃ¥r/buss"
+
+#: gtk2_ardour/editor_actions.cc:167
+msgid "Select Previous Track/Bus"
+msgstr "Välj tidigare spÃ¥r/buss"
+
+#: gtk2_ardour/editor_actions.cc:272
+msgid "Transpose"
+msgstr "Transponera"
+
+#: gtk2_ardour/editor_actions.cc:215
+msgid "Toggle Zoom State"
+msgstr "Växla zoomtillstÃ¥nd"
+
+#: gtk2_ardour/editor_actions.cc:213
+msgid "Zoom to Region"
+msgstr "Zooma till region"
+
+#: gtk2_ardour/editor_timefx.cc:72
+msgid "Pitch Shift"
+msgstr "Tonhöjdsändring"
+
+#: gtk2_ardour/editor_timefx.cc:92
+msgid "Octaves"
+msgstr "Oktaver"
+
+#: gtk2_ardour/editor_timefx.cc:96
+msgid "Semitones (12TET)"
+msgstr "Halvtoner (12TET)"
+
+#: gtk2_ardour/editor_timefx.cc:100
+msgid "Cents"
+msgstr "Cent"
+
+#: gtk2_ardour/editor_timefx.cc:106
+msgid "Shift"
+msgstr "Ändra"
+
+#: gtk2_ardour/ardour_ui_ed.cc:803
+msgid "Clock"
+msgstr "Klocka"
+
+#: gtk2_ardour/editor.cc:150 gtk2_ardour/editor.cc:3312
+msgid "Edit Point"
+msgstr "Redigeringspunkten"
+
+
+#: gtk2_ardour/ardour_ui_ed.cc:271
+msgid "Start Recording"
+msgstr "Börja inspelning"
+
+#: gtk2_ardour/ardour_ui_ed.cc:428
+msgid "Use narrow mixer strips"
+msgstr "Använd smala mixerremsor"
+
+#: gtk2_ardour/sfdb_ui.cc:766 gtk2_ardour/sfdb_ui.cc:1049
+#: gtk2_ardour/sfdb_ui.cc:1091
+msgid "one track per file"
+msgstr "ett spÃ¥r per fil"
+
+#: gtk2_ardour/sfdb_ui.cc:1067 gtk2_ardour/sfdb_ui.cc:1145
+msgid "Best"
+msgstr "Bäst"
+
+#: gtk2_ardour/sfdb_ui.cc:1068 gtk2_ardour/sfdb_ui.cc:1147
+msgid "Good"
+msgstr "Bra"
+
+#: gtk2_ardour/sfdb_ui.cc:1069 gtk2_ardour/sfdb_ui.cc:1149
+msgid "Quick"
+msgstr "Snabb"
index 61adb7c0fe37a79b693656c64dc476032087e05b..9d5ba926c559c16569251eeb4ea5e631617313d7 100644 (file)
@@ -34,10 +34,10 @@ using namespace PBD;
 
 TempoDialog::TempoDialog (TempoMap& map, nframes_t frame, const string & action)
        : ArdourDialog (_("edit tempo")),
-         note_frame (_("BPM denominator")),
          bpm_adjustment (60.0, 1.0, 999.9, 0.1, 1.0, 1.0),
          bpm_spinner (bpm_adjustment),
          bpm_frame (_("Beats per minute")),
+         note_frame (_("BPM denominator")),
          ok_button (action),
          cancel_button (_("Cancel")),
          when_bar_label (_("Bar")),
index a92f26f8e3664a4be4d18b480bbe75847e8442f0..47baa0cd42520ef3012a618972b20b1772539240 100644 (file)
@@ -39,10 +39,10 @@ struct TempoDialog : public ArdourDialog
 {
     Gtk::ComboBoxText note_types;
     vector<string> strings;
-    Gtk::Frame   note_frame;
     Gtk::Adjustment   bpm_adjustment;
     Gtk::SpinButton   bpm_spinner;
     Gtk::Frame        bpm_frame;
+    Gtk::Frame   note_frame;
     Gtk::VBox    vpacker;
     Gtk::Button  ok_button;
     Gtk::Button  cancel_button;
index 2de1e2b653c6ab6cd1f289ea31b7e4aa2e630af3..d7b4c99f924a456955158f84be51133191b3d94e 100644 (file)
@@ -199,7 +199,7 @@ load_rc_file (const string& filename, bool themechange)
                return;
        }
 
-       info << "Loading ui configuration file " << rc_file_path.to_string() << endmsg;
+       cerr << "Loading ui configuration file " << rc_file_path.to_string() << endmsg;
 
        Gtkmm2ext::UI::instance()->load_rcfile (rc_file_path.to_string(), themechange);
 }
index aa27a3ef24e982dec1a9c84f17069c1b2a195d56..99776929a4f5d460d59bf401a3eda889b52041a9 100644 (file)
@@ -152,6 +152,7 @@ CONFIG_VARIABLE (bool, sync_all_route_ordering, "sync-all-route-ordering", true)
 CONFIG_VARIABLE (bool, only_copy_imported_files, "only-copy-imported-files", true)
 CONFIG_VARIABLE (std::string, keyboard_layout, "keyboard-layout", "ansi")
 CONFIG_VARIABLE (std::string, default_bindings, "default-bindings", "ardour")
+CONFIG_VARIABLE (bool, default_narrow_ms, "default-narrow_ms", false)
 
 /* denormal management */
 
index ca2f4488ddd077c84eb1acc5d6d70a0ef3efa486..3f1ce03445f50c975d906dd9e618fe7df2788375 100644 (file)
@@ -54,6 +54,7 @@ class OSC : public BasicUI, public sigc::trackable
        lo_server _osc_server;
        lo_server _osc_unix_server;
        std::string _osc_unix_socket_path;
+   std::string _osc_url_file;
        pthread_t _osc_thread;
        int _request_pipe[2];
 
index 90a9563ad1be021a0a97a9512b38e08f9eda55f0..c6b913b9793ee4df7b2fcf3b4911ad9bab2fb4c0 100644 (file)
@@ -1427,7 +1427,7 @@ class Session : public PBD::StatefulDestructible
 
        SerializedRCUManager<RouteList>  routes;
 
-       void   add_routes (RouteList&, bool save = true);
+       void   add_routes (RouteList&, bool save);
        uint32_t destructive_index;
 
        int load_routes (const XMLNode&);
index d7961babbd7c8f860d65bdf630dafb826d33aecd..48b41cbd96a2ffac4673523736e104f61ecec73f 100644 (file)
@@ -382,8 +382,11 @@ namespace ARDOUR {
        struct TimeFXRequest : public InterThreadInfo {
            float time_fraction;
            float pitch_fraction;
+           /* SoundTouch */
            bool  quick_seek; 
            bool  antialias;  
+           /* RubberBand */
+           int   opts; // really RubberBandStretcher::Options
        };
 
 } // namespace ARDOUR
index bc4a352c45f1134e9ad1f30406f6c9db1a3a4b99..c36c9de184fbacf0c1cad87104ca4b2a2a542ce1 100644 (file)
@@ -264,7 +264,7 @@ AudioDiskstream::use_new_playlist ()
 {
        string newname;
        boost::shared_ptr<AudioPlaylist> playlist;
-
+       
        if (!in_set_state && destructive()) {
                return 0;
        }
@@ -1998,8 +1998,6 @@ AudioDiskstream::set_state (const XMLNode& node)
           up of the IO that owns this DS (::non_realtime_input_change())
        */
                
-       in_set_state = false;
-
        return 0;
 }
 
index 301351fe719d2246ba4ce23eb5076d668b47725b..f1534827fde2cf232736373c08812a78289b695b 100644 (file)
@@ -548,7 +548,7 @@ AudioRegion::set_live_state (const XMLNode& node, Change& what_changed, bool sen
        Region::set_live_state (node, what_changed, false);
 
        uint32_t old_flags = _flags;
-               
+
        if ((prop = node.property ("flags")) != 0) {
                _flags = Flag (string_2_enum (prop->value(), _flags));
 
@@ -599,17 +599,44 @@ AudioRegion::set_live_state (const XMLNode& node, Change& what_changed, bool sen
                        
                        _fade_in->clear ();
                        
-                       if ((prop = child->property ("default")) != 0 || (prop = child->property ("steepness")) != 0 || _fade_in->set_state (*child)) {
+                       if ((prop = child->property ("default")) != 0 || (prop = child->property ("steepness")) != 0) {
                                set_default_fade_in ();
-                       } 
+                       } else {
+                               XMLNode* grandchild = child->child ("AutomationList");
+                               if (grandchild) {
+                                       _fade_in->set_state (*grandchild);
+                               }
+                       }
+
+                       if ((prop = child->property ("active")) != 0) {
+                               if (prop->value() == "yes") {
+                                       set_fade_in_active (true);
+                               } else {
+                                       set_fade_in_active (true);
+                               }
+                       }
 
                } else if (child->name() == "FadeOut") {
                        
                        _fade_out->clear ();
 
-                       if ((prop = child->property ("default")) != 0 || (prop = child->property ("steepness")) != 0 || _fade_out->set_state (*child)) {
+                       if ((prop = child->property ("default")) != 0 || (prop = child->property ("steepness")) != 0) {
                                set_default_fade_out ();
-                       } 
+                       } else {
+                               XMLNode* grandchild = child->child ("AutomationList");
+                               if (grandchild) {
+                                       _fade_out->set_state (*grandchild);
+                               } 
+                       }
+
+                       if ((prop = child->property ("active")) != 0) {
+                               if (prop->value() == "yes") {
+                                       set_fade_out_active (true);
+                               } else {
+                                       set_fade_out_active (false);
+                               }
+                       }
+               
                } 
        }
 
index 8903c3781a01334325a6d6fa166cef0b7a1f041b..b0bd35b8c69faa6c673336a93828ef1cca17a60e 100644 (file)
@@ -18,6 +18,7 @@
  */
 
 #include <iostream>
+#include <fstream>
 #include <cstdio>
 #include <cstdlib>
 #include <cerrno>
 #include <fcntl.h>
 
 #include <pbd/pthread_utils.h>
+#include <pbd/file_utils.h>
 
 #include <ardour/osc.h>
 #include <ardour/session.h>
 #include <ardour/route.h>
 #include <ardour/audio_track.h>
+#include <ardour/filesystem_paths.h>
 
 #include "i18n.h"
 
@@ -101,6 +104,24 @@ OSC::start ()
 #endif
        
        cerr << "OSC @ " << get_server_url () << endl;
+
+       sys::path url_file;
+
+       if (find_file_in_search_path (ardour_search_path() + system_config_search_path(),
+                               "osc_url", url_file)) {
+               _osc_url_file = url_file.to_string();
+               ofstream urlfile;
+               urlfile.open(_osc_url_file.c_str(), ios::trunc);
+               if ( urlfile )
+               {
+                       urlfile << get_server_url () << endl;
+                       urlfile.close();
+               }
+               else
+               {  
+                       cerr << "Couldn't write '" <<  _osc_url_file << "'" <<endl;
+               }
+       }
        
        register_callbacks();
        
@@ -131,6 +152,9 @@ OSC::stop ()
                unlink(_osc_unix_socket_path.c_str());
        }
        
+   if (!  _osc_url_file.empty() ) {
+      unlink(_osc_url_file.c_str() );
+   }
        return 0;
 }
 
index d866a0d49fd7adfef656c0c1f6372b156b4ed076..f0465d0ad5c4ffc6ea1691c4e143e67dc76916d1 100644 (file)
@@ -324,7 +324,7 @@ PluginManager::get_ladspa_category (uint32_t plugin_id)
        lrdf_statement* matches1 = lrdf_matches (&pattern);
 
        if (!matches1) {
-               return _("");
+               return "";
        }
 
        pattern.subject = matches1->object;
@@ -336,7 +336,7 @@ PluginManager::get_ladspa_category (uint32_t plugin_id)
        lrdf_free_statements(matches1);
 
        if (!matches2) {
-               return _("");
+               return ("");
        }
 
        string label = matches2->object;
index 0de5a5bf4a402730903f1c6fa947ff367e29d2b6..7a948f60043958fb4a9fe0ccd98562414a22fb79 100644 (file)
@@ -75,7 +75,7 @@ RBEffect::run (boost::shared_ptr<AudioRegion> region)
        int avail = 0;
 
        RubberBandStretcher stretcher (session.frame_rate(), region->n_channels(),
-                                      RubberBandStretcher::DefaultOptions,
+                                      (RubberBandStretcher::Options) tsr.opts,
                                       tsr.time_fraction, tsr.pitch_fraction);
        
        stretcher.setExpectedInputDuration(region->length());
@@ -155,7 +155,7 @@ RBEffect::run (boost::shared_ptr<AudioRegion> region)
                        pos += this_read;
                        done += this_read;
 
-                       tsr.progress = ((float) done / duration) * 0.75;
+                       tsr.progress = ((float) done / duration) * 0.25;
 
                        stretcher.study(buffers, this_read, pos == duration);
                }
@@ -193,7 +193,7 @@ RBEffect::run (boost::shared_ptr<AudioRegion> region)
                        pos += this_read;
                        done += this_read;
 
-                       tsr.progress = 0.75 + ((float) done / duration) * 0.25;
+                       tsr.progress = 0.25 + ((float) done / duration) * 0.75;
 
                        stretcher.process(buffers, this_read, pos == duration);
 
index a7f85a5c84bcfdcbecdeb4cc11b6c05a09972af2..cef5c7df485fddd9becf38585663d1a3872b8330 100644 (file)
@@ -151,7 +151,6 @@ Session::Session (AudioEngine &eng,
        new_session = !g_file_test (_path.c_str(), GFileTest (G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR));
        if (new_session) {
                if (create (new_session, mix_template, compute_initial_length())) {
-                       cerr << "create failed\n";
                        destroy ();
                        throw failed_constructor ();
                }
@@ -257,7 +256,7 @@ Session::Session (AudioEngine &eng,
                }
                
                if (!rl.empty()) {
-                       add_routes (rl);
+                       add_routes (rl, false);
                }
                
        }
@@ -270,17 +269,12 @@ Session::Session (AudioEngine &eng,
                throw failed_constructor ();
        }
        
-       store_recent_sessions(_name, _path);
+       store_recent_sessions (_name, _path);
        
-       bool was_dirty = dirty ();
-
        _state_of_the_state = StateOfTheState (_state_of_the_state & ~Dirty);
 
-       Config->ParameterChanged.connect (mem_fun (*this, &Session::config_changed));
 
-       if (was_dirty) {
-               DirtyChanged (); /* EMIT SIGNAL */
-       }
+       Config->ParameterChanged.connect (mem_fun (*this, &Session::config_changed));
 }
 
 Session::~Session ()
@@ -298,6 +292,7 @@ Session::destroy ()
        remove_pending_capture_state ();
 
        _state_of_the_state = StateOfTheState (CannotSave|Deletion);
+
        _engine.remove_session ();
 
        GoingAway (); /* EMIT SIGNAL */
@@ -706,6 +701,7 @@ Session::when_engine_running ()
        
        _state_of_the_state = StateOfTheState (_state_of_the_state & ~(CannotSave|Dirty));
 
+
        /* hook us up to the engine */
 
        _engine.set_session (this);
@@ -716,9 +712,6 @@ Session::when_engine_running ()
        osc->set_session (*this);
 #endif
 
-       _state_of_the_state = Clean;
-
-       DirtyChanged (); /* EMIT SIGNAL */
 }
 
 void
@@ -730,6 +723,7 @@ Session::hookup_io ()
 
        _state_of_the_state = StateOfTheState (_state_of_the_state | InitialConnecting);
 
+
        if (auditioner == 0) {
                
                /* we delay creating the auditioner till now because
@@ -805,6 +799,7 @@ Session::hookup_io ()
 
        _state_of_the_state = StateOfTheState (_state_of_the_state & ~InitialConnecting);
 
+
        /* now handle the whole enchilada as if it was one
           graph reorder event.
        */
@@ -1803,8 +1798,7 @@ Session::new_audio_track (int input_channels, int output_channels, TrackMode mod
 
   failed:
        if (!new_routes.empty()) {
-               add_routes (new_routes, false);
-               save_state (_current_snapshot_name);
+               add_routes (new_routes, true);
        }
 
        return ret;
@@ -1938,8 +1932,7 @@ Session::new_audio_route (int input_channels, int output_channels, uint32_t how_
 
   failure:
        if (!ret.empty()) {
-               add_routes (ret, false);
-               save_state (_current_snapshot_name);
+               add_routes (ret, true);
        }
 
        return ret;
index 148ff9273993cf50fbf9dd7b6d358ccdc1c6d013..ccbc08248df56101a20a01785a8108d16e039ba1 100644 (file)
@@ -257,8 +257,7 @@ Session::butler_thread_work ()
 
                        /*IO* io = ds->io();
                        
-                       if (ds->io() && !ds->io()->active()) {
-                               cerr << "Skip inactive diskstream " << ds->io()->name() << endl;
+                       if (io && !io->active()) {
                                continue;
                        }*/
 
index 6476ab30f7f1ba9678d2d5f59e685e9c0189b75c..40a70c686202546b3d2c6368e636d6c29bb6acbc 100644 (file)
@@ -268,10 +268,10 @@ Session::process_with_events (nframes_t nframes)
        nframes_t this_nframes;
        nframes_t end_frame;
        nframes_t offset;
+       bool session_needs_butler = false;
        nframes_t stop_limit;
        long           frames_moved;
-       bool           session_needs_butler = false;
-
+       
        /* make sure the auditioner is silent */
 
        if (auditioner) {
index fa4b103958b9630d2741640385972adb6500e33a..a08d09d94946f56d50b1dae12ca2dbcbf9ec6363 100644 (file)
 #endif
 
 #include <glibmm.h>
+#include <glibmm/thread.h>
 
 #include <midi++/mmc.h>
 #include <midi++/port.h>
-#include <pbd/error.h>
 
-#include <glibmm/thread.h>
+#include <pbd/error.h>
 #include <pbd/pathscanner.h>
 #include <pbd/pthread_utils.h>
 #include <pbd/search_path.h>
@@ -178,7 +178,8 @@ Session::first_stage_init (string fullpath, string snapshot_name)
        _worst_output_latency = 0;
        _worst_input_latency = 0;
        _worst_track_latency = 0;
-       _state_of_the_state = StateOfTheState(CannotSave|InitialConnecting|Loading|Deletion);
+       _state_of_the_state = StateOfTheState(CannotSave|InitialConnecting|Loading);
+
        _slave = 0;
        butler_mixdown_buffer = 0;
        butler_gain_buffer = 0;
@@ -301,6 +302,7 @@ Session::second_stage_init (bool new_session)
 
        // set_state() will call setup_raid_path(), but if it's a new session we need
        // to call setup_raid_path() here.
+
        if (state_tree) {
                if (set_state (*state_tree->root())) {
                        return -1;
@@ -321,7 +323,7 @@ Session::second_stage_init (bool new_session)
 
        _state_of_the_state = StateOfTheState (_state_of_the_state|CannotSave|Loading);
 
-       // set_auto_input (true);
+
        _locations.changed.connect (mem_fun (this, &Session::locations_changed));
        _locations.added.connect (mem_fun (this, &Session::locations_added));
        setup_click_sounds (0);
@@ -360,6 +362,17 @@ Session::second_stage_init (bool new_session)
        } else {
                _end_location_is_free = false;
        }
+
+       _state_of_the_state = Clean;
+
+       
+       DirtyChanged (); /* EMIT SIGNAL */
+
+       if (state_was_pending) {
+               save_state (_current_snapshot_name);
+               remove_pending_capture_state ();
+               state_was_pending = false;
+       }
        
        return 0;
 }
@@ -1119,6 +1132,7 @@ Session::set_state (const XMLNode& node)
        int ret = -1;
 
        _state_of_the_state = StateOfTheState (_state_of_the_state|CannotSave);
+
        
        if (node.name() != X_("Session")){
                fatal << _("programming error: Session: incorrect XML node sent to set_state()") << endmsg;
@@ -1307,14 +1321,6 @@ Session::set_state (const XMLNode& node)
 
        StateReady (); /* EMIT SIGNAL */
 
-       _state_of_the_state = Clean;
-
-       if (state_was_pending) {
-               save_state (_current_snapshot_name);
-               remove_pending_capture_state ();
-               state_was_pending = false;
-       }
-
        return 0;
 
   out:
@@ -1344,7 +1350,7 @@ Session::load_routes (const XMLNode& node)
                new_routes.push_back (route);
        }
 
-       add_routes (new_routes);
+       add_routes (new_routes, false);
 
        return 0;
 }
@@ -2120,6 +2126,10 @@ Session::commit_reversible_command (Command *cmd)
                current_trans->add_command (cmd);
        }
 
+       if (current_trans->empty()) {
+               return;
+       }
+
        gettimeofday (&now, 0);
        current_trans->set_timestamp (now);
 
@@ -2363,6 +2373,7 @@ Session::cleanup_sources (Session::cleanup_report& rep)
        int ret = -1;
                
        _state_of_the_state = (StateOfTheState) (_state_of_the_state | InCleanup);
+
        
        /* step 1: consider deleting all unused playlists */
 
@@ -2602,6 +2613,7 @@ Session::cleanup_sources (Session::cleanup_report& rep)
 
   out:
        _state_of_the_state = (StateOfTheState) (_state_of_the_state & ~InCleanup);
+
        return ret;
 }
 
@@ -2675,6 +2687,7 @@ Session::set_dirty ()
 
        _state_of_the_state = StateOfTheState (_state_of_the_state | Dirty);
 
+
        if (!was_dirty) {
                DirtyChanged(); /* EMIT SIGNAL */
        }
@@ -2688,6 +2701,7 @@ Session::set_clean ()
        
        _state_of_the_state = Clean;
 
+
        if (was_dirty) {
                DirtyChanged(); /* EMIT SIGNAL */
        }
@@ -2697,6 +2711,7 @@ void
 Session::set_deletion_in_progress ()
 {
        _state_of_the_state = StateOfTheState (_state_of_the_state | Deletion);
+
 }
 
 void
index 1398872b36194933238ba9cfefb17e5e82f367b8..d422698f302c2e626c4b4961e13d31edea8bbdf4 100644 (file)
@@ -55,7 +55,7 @@ Session::request_input_change_handling ()
        if (!(_state_of_the_state & (InitialConnecting|Deletion))) {
                Event* ev = new Event (Event::InputConfigurationChange, Event::Add, Event::Immediate, 0, 0.0);
                queue_event (ev);
-       }
+       } 
 }
 
 void