Merge with 2.0-ongoing R2883.

git-svn-id: svn://localhost/ardour2/trunk@2885 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
David Robillard 2008-01-10 22:22:29 +00:00
parent bb457bb960
commit 8a2e30816e
45 changed files with 2346 additions and 701 deletions

View file

@ -426,7 +426,7 @@ else:
keybindings_dict['%SECONDARY%'] = 'Alt' keybindings_dict['%SECONDARY%'] = 'Alt'
keybindings_dict['%TERTIARY%'] = 'Shift' keybindings_dict['%TERTIARY%'] = 'Shift'
keybindings_dict['%LEVEL4%'] = 'Mod2' keybindings_dict['%LEVEL4%'] = 'Mod2'
keybindings_dict['%WINDOW%'] = 'Ctrl' keybindings_dict['%WINDOW%'] = 'Alt'
ardourbindings = env.SubstInFile ('ardour.bindings', 'ardour.bindings.in', SUBST_DICT = keybindings_dict); 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); ardoursaeDEbindings = env.SubstInFile ('ardour-sae-de.bindings', 'ardour-sae-de.bindings.in', SUBST_DICT = keybindings_dict);

View file

@ -155,6 +155,7 @@ static const char* authors[] = {
N_("John Anderson"), N_("John Anderson"),
N_("Nedko Arnaudov"), N_("Nedko Arnaudov"),
N_("Carl Hetherington"), N_("Carl Hetherington"),
N_("Colin Fletcher"),
0 0
}; };
@ -200,7 +201,7 @@ About::About ()
} }
set_translator_credits (t); 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" set_license (_("Ardour comes with ABSOLUTELY NO WARRANTY\n"
"This is free software, and you are welcome to redistribute it\n" "This is free software, and you are welcome to redistribute it\n"
"under certain conditions; see the file COPYING for details.\n")); "under certain conditions; see the file COPYING for details.\n"));

View file

@ -2,12 +2,11 @@ cd `dirname "$0"`/..
#export G_DEBUG=fatal_criticals #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 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. # DYLD_LIBRARY_PATH is for darwin.
export DYLD_FALLBACK_LIBRARY_PATH=$LD_LIBRARY_PATH 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 export GTK_PATH=$PWD/libs/clearlooks:~/.ardour2
EXECUTABLE=gtk2_ardour/ardour-%VERSION% EXECUTABLE=gtk2_ardour/ardour-%VERSION%
ulimit -c unlimited

View file

@ -73,6 +73,7 @@
<menuitem action='set-loop-from-edit-range'/> <menuitem action='set-loop-from-edit-range'/>
<menuitem action='set-loop-from-region'/> <menuitem action='set-loop-from-region'/>
<menuitem action='set-punch-from-edit-range'/> <menuitem action='set-punch-from-edit-range'/>
<menuitem action='set-punch-from-region'/>
<menu action='LocateToMarker'> <menu action='LocateToMarker'>
<menuitem action='goto-mark-1'/> <menuitem action='goto-mark-1'/>
<menuitem action='goto-mark-2'/> <menuitem action='goto-mark-2'/>

View file

@ -1,332 +1,158 @@
; ardour-2.0beta11.1 GtkAccelMap rc-file -*- scheme -*- ; ardour-2.2 GtkAccelMap rc-file -*- scheme -*-
; this file is an automated accelerator map dump ; 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") ;; punctuation
(gtk_accel_path "<Actions>/Common/Save" "<%PRIMARY%>s")
; (gtk_accel_path "<Actions>/Editor/Pullup" "") (gtk_accel_path "<Actions>/Editor/temporal-zoom-in" "equal")
; (gtk_accel_path "<Actions>/Editor/zoom-to-session" "") (gtk_accel_path "<Actions>/Editor/temporal-zoom-out" "minus")
; (gtk_accel_path "<Actions>/JACK/JACKReconnect" "") (gtk_accel_path "<Actions>/Editor/edit-cursor-to-previous-region-sync" "apostrophe")
; (gtk_accel_path "<Actions>/Editor/Autoconnect" "") (gtk_accel_path "<Actions>/Editor/edit-cursor-to-next-region-sync" "semicolon")
; (gtk_accel_path "<Actions>/Editor/Edit" "") (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-boundary" "comma")
(gtk_accel_path "<Actions>/Editor/playhead-to-previous-region-sync" "<%PRIMARY%>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>/Transport/ToggleRollForgetCapture" "<%PRIMARY%>space")
(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>/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>/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/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/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>/Editor/extend-range-to-end-of-region" "rightanglebracket")
(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>/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>/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>/Main/Windows" "")
; (gtk_accel_path "<Actions>/Main/CleanupUnused" "")
; (gtk_accel_path "<Actions>/processormenu/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>/options/FileHeaderFormatBWF" "")
; (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>/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>/Editor/extend-range-to-start-of-region" "leftanglebracket")
; (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>/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>/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>/options/StopTransportAtEndOfSession" "")
; (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>/Transport/ToggleRoll" "space")
; (gtk_accel_path "<Actions>/RegionList/SortBySourceFilesystem" "") (gtk_accel_path "<Actions>/Transport/ToggleRollForgetCapture" "<%PRIMARY%>space")
(gtk_accel_path "<Actions>/Common/ToggleColorManager" "<%WINDOW%>c") (gtk_accel_path "<Actions>/Transport/record-roll" "<%TERTIARY%>space")
; (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>/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>/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>/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-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" "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-from-start" "<%TERTIARY%>braceleft")
(gtk_accel_path "<Actions>/Editor/trim-to-end" "<%TERTIARY%>braceright") (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/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>/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>/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/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/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>/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>/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/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>/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-1" "KP_1")
(gtk_accel_path "<Actions>/Editor/goto-mark-2" "KP_2") (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-3" "KP_3")
@ -336,11 +162,246 @@
(gtk_accel_path "<Actions>/Editor/goto-mark-7" "KP_7") (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-8" "KP_8")
(gtk_accel_path "<Actions>/Editor/goto-mark-9" "KP_9") (gtk_accel_path "<Actions>/Editor/goto-mark-9" "KP_9")
(gtk_accel_path "<Actions>/Transport/ToggleClick" "5")
;; 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/ToggleAutoReturn" "4")
(gtk_accel_path "<Actions>/Transport/focus-on-clock" "KP_Divide") (gtk_accel_path "<Actions>/Transport/ToggleClick" "5")
(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") ;; unbound actions
(gtk_accel_path "<Actions>/Editor/toggle-zoom" "<%TERTIARY%>z") ;;
(gtk_accel_path "<Actions>/Editor/zoom-to-region" "z")
; (gtk_accel_path "<Actions>/RegionList/RegionListSort" "")
; (gtk_accel_path "<Actions>/Main/Windows" "")
; (gtk_accel_path "<Actions>/Main/CleanupUnused" "")
; (gtk_accel_path "<Actions>/redirectmenu/deselectall" "")
; (gtk_accel_path "<Actions>/options/SoloViaBus" "")
; (gtk_accel_path "<Actions>/RegionList/rlAudition" "")
; (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>/RegionList/SortAscending" "")
; (gtk_accel_path "<Actions>/Main/Help" "")
; (gtk_accel_path "<Actions>/options/UseExternalMonitoring" "")
; (gtk_accel_path "<Actions>/Editor/Smpte23976" "")
; (gtk_accel_path "<Actions>/options/ShowSoloMutes" "")
; (gtk_accel_path "<Actions>/Snap/snap-to-eighths" "")
; (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>/RegionList/SortBySourceFileName" "")
; (gtk_accel_path "<Actions>/Editor/CrossfadesFull" "")
; (gtk_accel_path "<Actions>/Transport/ToggleClick" "")
; (gtk_accel_path "<Actions>/options/SendMTC" "")
; (gtk_accel_path "<Actions>/Transport/TogglePunchOut" "")
; (gtk_accel_path "<Actions>/options/SoloInPlace" "")
; (gtk_accel_path "<Actions>/Main/Options" "")
; (gtk_accel_path "<Actions>/options/MeterFalloffMedium" "")
; (gtk_accel_path "<Actions>/Main/SaveTemplate" "")
; (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/LayerMoveAddHigher" "")
; (gtk_accel_path "<Actions>/Editor/Smpte60" "")
; (gtk_accel_path "<Actions>/Main/Open" "")
; (gtk_accel_path "<Actions>/Zoom/zoom-focus-left" "")
; (gtk_accel_path "<Actions>/Main/TransportOptions" "")
; (gtk_accel_path "<Actions>/Main/ControlSurfaces" "")
; (gtk_accel_path "<Actions>/options/FileHeaderFormatBWF" "")
; (gtk_accel_path "<Actions>/Transport/ToggleAutoReturn" "")
; (gtk_accel_path "<Actions>/Editor/Smpte2997" "")
; (gtk_accel_path "<Actions>/Editor/ToggleWaveformVisibility" "")
; (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>/JACK/Latency" "")
; (gtk_accel_path "<Actions>/redirectmenu/rename" "")
; (gtk_accel_path "<Actions>/RegionList/rlShowAuto" "")
; (gtk_accel_path "<Actions>/Main/Session" "")
; (gtk_accel_path "<Actions>/Main/AudioFileFormat" "")
; (gtk_accel_path "<Actions>/Transport/Transport" "")
; (gtk_accel_path "<Actions>/RegionList/SortByRegionName" "")
; (gtk_accel_path "<Actions>/Main/KeyMouse Actions" "")
; (gtk_accel_path "<Actions>/Snap/snap-to-frame" "")
; (gtk_accel_path "<Actions>/Editor/SnapTo" "")
; (gtk_accel_path "<Actions>/Editor/Crossfades" "")
; (gtk_accel_path "<Actions>/Editor/PullupPlus4" "")
; (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>/Editor/PullupMinus4" "")
; (gtk_accel_path "<Actions>/RegionList/SortBySourceFileCreationDate" "")
; (gtk_accel_path "<Actions>/redirectmenu/activate" "")
; (gtk_accel_path "<Actions>/Editor/PullupMinus1" "")
; (gtk_accel_path "<Actions>/Editor/snap-normal" "")
; (gtk_accel_path "<Actions>/Snap/snap-to-asixteenthbeat" "")
; (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>/options/FileHeaderFormatWAVE" "")
; (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>/Editor/PullupMinus4Plus1" "")
; (gtk_accel_path "<Actions>/Editor/MeterHold" "")
; (gtk_accel_path "<Actions>/Snap/snap-to-cd-frame" "")
; (gtk_accel_path "<Actions>/options/StopTransportAtEndOfSession" "")
; (gtk_accel_path "<Actions>/Main/Cleanup" "")
; (gtk_accel_path "<Actions>/Main/Snapshot" "")
; (gtk_accel_path "<Actions>/Transport/ToggleVideoSync" "")
; (gtk_accel_path "<Actions>/RegionList/SortBySourceFilesystem" "")
; (gtk_accel_path "<Actions>/Common/About" "")
; (gtk_accel_path "<Actions>/JACK/JACKLatency32" "")
; (gtk_accel_path "<Actions>/options/FileHeaderFormatWAVE64" "")
; (gtk_accel_path "<Actions>/RegionList/rlShowAll" "")
; (gtk_accel_path "<Actions>/RegionList/SortByRegionTimestamp" "")
; (gtk_accel_path "<Actions>/options/VerifyRemoveLastCapture" "")
; (gtk_accel_path "<Actions>/options/OutputAutoConnectPhysical" "")
; (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/Subframes80" "")
; (gtk_accel_path "<Actions>/options/FileHeaderFormatCAF" "")
; (gtk_accel_path "<Actions>/Editor/ToggleGeneric MIDISurface" "")
; (gtk_accel_path "<Actions>/JACK/JACKLatency256" "")
; (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/toggle-xfades-active" "")
; (gtk_accel_path "<Actions>/Snap/snap-to-bar" "")
; (gtk_accel_path "<Actions>/Editor/LayerLaterHigher" "")
; (gtk_accel_path "<Actions>/redirectmenu/selectall" "")
; (gtk_accel_path "<Actions>/Snap/snap-to-quarters" "")
; (gtk_accel_path "<Actions>/options/UseSoftwareMonitoring" "")
; (gtk_accel_path "<Actions>/Editor/Subframes100" "")
; (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>/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>/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" "")

View file

@ -87,6 +87,7 @@
<menuitem action='set-loop-from-edit-range'/> <menuitem action='set-loop-from-edit-range'/>
<menuitem action='set-loop-from-region'/> <menuitem action='set-loop-from-region'/>
<menuitem action='set-punch-from-edit-range'/> <menuitem action='set-punch-from-edit-range'/>
<menuitem action='set-punch-from-region'/>
</menu> </menu>
<menu name='Edit' action='Edit'> <menu name='Edit' action='Edit'>
<menuitem action='undo'/> <menuitem action='undo'/>
@ -429,7 +430,9 @@
<menuitem action='ShowTrackMeters'/> <menuitem action='ShowTrackMeters'/>
<menuitem action='OnlyCopyImportedFiles'/> <menuitem action='OnlyCopyImportedFiles'/>
<menuitem action='ShowTrackMeters'/> <menuitem action='ShowTrackMeters'/>
<menuitem action='DefaultNarrowMS'/>
<menuitem action='link-region-and-track-selection'/> <menuitem action='link-region-and-track-selection'/>
<separator/> <separator/>
</menu> </menu>
<menu name='Help' action='Help'> <menu name='Help' action='Help'>

View file

@ -741,32 +741,39 @@ ARDOUR_UI::check_memory_locking ()
void void
ARDOUR_UI::finish() ARDOUR_UI::finish()
{ {
if (session && session->dirty()) { if (session) {
switch (ask_about_saving_session(_("quit"))) {
case -1: if (session->transport_rolling()) {
return; session->request_stop ();
break; usleep (2500000);
case 1: }
/* use the default name */
if (save_state_canfail ("")) { if (session->dirty()) {
/* failed - don't quit */ switch (ask_about_saving_session(_("quit"))) {
MessageDialog msg (*editor, 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\ Ardour was unable to save your session.\n\n\
If you still wish to quit, please use the\n\n\ If you still wish to quit, please use the\n\n\
\"Just quit\" option.")); \"Just quit\" option."));
msg.run (); msg.run ();
return; return;
}
break;
case 0:
break;
} }
break;
case 0:
break;
} }
}
if (session) {
session->set_deletion_in_progress (); session->set_deletion_in_progress ();
} }
engine->stop (true); engine->stop (true);
Config->save_state(); Config->save_state();
ARDOUR_UI::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.set_model (recent_session_model);
recent_session_display.append_column (_("Recent Sessions"), recent_session_columns.visible_name); recent_session_display.append_column (_("Recent Sessions"), recent_session_columns.visible_name);
recent_session_display.set_headers_visible (false); 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)); recent_session_display.signal_row_activated().connect (mem_fun (*this, &ARDOUR_UI::recent_session_row_activated));
scroller->add (recent_session_display); scroller->add (recent_session_display);
@ -1099,37 +1105,55 @@ ARDOUR_UI::recent_session_row_activated (const TreePath& path, TreeViewColumn* c
void void
ARDOUR_UI::open_recent_session () ARDOUR_UI::open_recent_session ()
{ {
/* popup selector window */ bool can_return = (session != 0);
if (session_selector_window == 0) { if (session_selector_window == 0) {
build_session_selector (); build_session_selector ();
} }
redisplay_recent_sessions (); 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) { if (recent_session_display.get_selection()->count_selected_rows() == 0) {
case RESPONSE_ACCEPT: continue;
break; }
default:
return; session_selector_window->hide();
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;
}
can_return = false;
} }
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;
load_session (path, state);
} }
bool bool
@ -2239,9 +2263,9 @@ ARDOUR_UI::get_session_parameters (Glib::ustring predetermined_path, bool have_e
goto try_again; goto try_again;
} }
switch (new_session_dialog->get_current_page()) { switch (new_session_dialog->which_page()) {
case 1: /* recent session selector */ case NewSessionDialog::OpenPage:
case 2: /* audio engine control */ case NewSessionDialog::EnginePage:
if (session_name[0] == '/' || if (session_name[0] == '/' ||
(session_name.length() > 2 && session_name[0] == '.' && session_name[1] == '/') || (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; 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()) { if (new_session_dialog->get_current_page() == 0 && ARDOUR_COMMAND_LINE::session_name.empty()) {
should_be_new = true; should_be_new = true;
@ -2525,7 +2551,7 @@ ARDOUR_UI::load_session (const Glib::ustring& path, const Glib::ustring& snap_na
} }
catch (...) { catch (...) {
cerr << "Caught something\n";
MessageDialog msg (string_compose(_("Session \"%1 (snapshot %2)\" did not load successfully"), path, snap_name), MessageDialog msg (string_compose(_("Session \"%1 (snapshot %2)\" did not load successfully"), path, snap_name),
true, true,
Gtk::MESSAGE_INFO, Gtk::MESSAGE_INFO,
@ -3027,7 +3053,7 @@ ARDOUR_UI::pending_state_dialog ()
{ {
HBox* hbox = new HBox(); HBox* hbox = new HBox();
Image* image = new Image (Stock::DIALOG_QUESTION, ICON_SIZE_DIALOG); Image* image = new Image (Stock::DIALOG_QUESTION, ICON_SIZE_DIALOG);
ArdourDialog dialog (_("Crash recovery"), true); ArdourDialog dialog (_("Crash Recovery"), true);
Label message (_("\ Label message (_("\
This session appears to have been in\n\ This session appears to have been in\n\
middle of recording when ardour or\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\ Ardour can recover any captured audio for\n\
you, or it can ignore it. Please decide\n\ you, or it can ignore it. Please decide\n\
what you would like to do.\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_start (*image, PACK_EXPAND_WIDGET, 12);
hbox->pack_end (message, PACK_EXPAND_PADDING, 12); hbox->pack_end (message, PACK_EXPAND_PADDING, 12);
dialog.get_vbox()->pack_start(*hbox, PACK_EXPAND_PADDING, 6); dialog.get_vbox()->pack_start(*hbox, PACK_EXPAND_PADDING, 6);
@ -3047,8 +3073,7 @@ what you would like to do.\n"));
message.show(); message.show();
image->show(); image->show();
hbox->show(); hbox->show();
//dialog.get_vbox()->show();
switch (dialog.run ()) { switch (dialog.run ()) {
case RESPONSE_ACCEPT: case RESPONSE_ACCEPT:
return 1; return 1;

View file

@ -725,6 +725,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI
void toggle_SecondaryClockDeltaEditCursor (); void toggle_SecondaryClockDeltaEditCursor ();
void toggle_ShowTrackMeters (); void toggle_ShowTrackMeters ();
void toggle_only_copy_imported_files (); void toggle_only_copy_imported_files ();
void toggle_use_narrow_ms();
void mtc_port_changed (); void mtc_port_changed ();
void map_solo_model (); void map_solo_model ();

View 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_("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_("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_("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; RadioAction::Group denormal_group;

View 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); 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 void
ARDOUR_UI::mtc_port_changed () ARDOUR_UI::mtc_port_changed ()
{ {
@ -1122,6 +1128,8 @@ ARDOUR_UI::parameter_changed (const char* parameter_name)
} else if (PARAM_IS ("show-track-meters")) { } else if (PARAM_IS ("show-track-meters")) {
ActionManager::map_some_state ("options", "ShowTrackMeters", &Configuration::get_show_track_meters); ActionManager::map_some_state ("options", "ShowTrackMeters", &Configuration::get_show_track_meters);
editor->toggle_meter_updating(); 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 #undef PARAM_IS

View file

@ -52,7 +52,7 @@
#include "i18n.h" #include "i18n.h"
#define MUTED_ALPHA 0x50 #define MUTED_ALPHA 10
using namespace sigc; using namespace sigc;
using namespace ARDOUR; using namespace ARDOUR;
@ -1226,14 +1226,22 @@ AudioRegionView::set_frame_color ()
UINT_TO_RGBA(ARDOUR_UI::config()->canvasvar_FrameBase.get(), &r, &g, &b, &a); 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) { 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 { } else {
UINT_TO_RGBA(ARDOUR_UI::config()->canvasvar_FrameBase.get(), &r, &g, &b, &a); 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); 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) { 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();
}
} }
} }
} }

View file

@ -155,6 +155,18 @@ static const gchar *_zoom_focus_strings[] = {
0 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 */ /* Soundfile drag-n-drop */
Gdk::Cursor* Editor::cross_hair_cursor = 0; Gdk::Cursor* Editor::cross_hair_cursor = 0;
@ -256,7 +268,10 @@ Editor::Editor ()
snap_mode_strings = I18N (_snap_mode_strings); snap_mode_strings = I18N (_snap_mode_strings);
zoom_focus_strings = I18N (_zoom_focus_strings); zoom_focus_strings = I18N (_zoom_focus_strings);
edit_point_strings = I18N (_edit_point_strings); edit_point_strings = I18N (_edit_point_strings);
#ifdef USE_RUBBERBAND
rb_opt_strings = I18N (_rb_opt_strings);
#endif
snap_threshold = 5.0; snap_threshold = 5.0;
bbt_beat_subdivision = 4; bbt_beat_subdivision = 4;
canvas_width = 0; canvas_width = 0;
@ -4224,10 +4239,15 @@ struct EditorOrderTimeAxisSorter {
}; };
void void
Editor::sort_track_selection () Editor::sort_track_selection (TrackSelection* sel)
{ {
EditorOrderTimeAxisSorter cmp; EditorOrderTimeAxisSorter cmp;
selection->tracks.sort (cmp);
if (sel) {
sel->sort (cmp);
} else {
selection->tracks.sort (cmp);
}
} }
nframes64_t nframes64_t

View file

@ -168,6 +168,10 @@ class Editor : public PublicEditor
void hide_a_region (boost::shared_ptr<ARDOUR::Region>); void hide_a_region (boost::shared_ptr<ARDOUR::Region>);
void remove_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 */ /* option editor-access */
void set_show_waveforms (bool yn); void set_show_waveforms (bool yn);
@ -478,7 +482,7 @@ class Editor : public PublicEditor
CrossfadeView* clicked_crossfadeview; CrossfadeView* clicked_crossfadeview;
ControlPoint* clicked_control_point; 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_relevant_tracks (std::set<RouteTimeAxisView*>& relevant_tracks);
void get_equivalent_regions (RegionView* rv, std::vector<RegionView*>&) const; void get_equivalent_regions (RegionView* rv, std::vector<RegionView*>&) const;
@ -1179,7 +1183,8 @@ class Editor : public PublicEditor
void add_location_from_selection (); void add_location_from_selection ();
void set_loop_from_selection (bool play); void set_loop_from_selection (bool play);
void set_punch_from_selection (); void set_punch_from_selection ();
void set_punch_from_region ();
void set_loop_from_edit_range (bool play); void set_loop_from_edit_range (bool play);
void set_loop_from_region (bool play); void set_loop_from_region (bool play);
void set_punch_from_edit_range (); void set_punch_from_edit_range ();
@ -1930,11 +1935,20 @@ class Editor : public PublicEditor
Gtk::SpinButton pitch_cent_spinner; Gtk::SpinButton pitch_cent_spinner;
RegionSelection regions; RegionSelection regions;
Gtk::ProgressBar progress_bar; Gtk::ProgressBar progress_bar;
/* SoundTouch */
Gtk::ToggleButton quick_button; Gtk::ToggleButton quick_button;
Gtk::ToggleButton antialias_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* cancel_button;
Gtk::Button* action_button; Gtk::Button* action_button;
Gtk::HBox upper_button_box;
Gtk::VBox packer; Gtk::VBox packer;
int status; int status;
@ -2061,6 +2075,18 @@ class Editor : public PublicEditor
TimeAxisView* entered_track; TimeAxisView* entered_track;
RegionView* entered_regionview; 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_region_selected (bool op_acts_on_objects = false);
void ensure_entered_track_selected (bool op_acts_on_objects = false); void ensure_entered_track_selected (bool op_acts_on_objects = false);
bool clear_entered_track; bool clear_entered_track;

View file

@ -270,7 +270,8 @@ Editor::register_actions ()
ActionManager::session_sensitive_actions.push_back (act); 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)); 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); 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)); act = ActionManager::register_action (editor_actions, "pitch-shift-region", _("Transpose"), mem_fun(*this, &Editor::pitch_shift_regions));
ActionManager::session_sensitive_actions.push_back (act); ActionManager::session_sensitive_actions.push_back (act);

View file

@ -337,7 +337,7 @@ Editor::track_canvas_size_allocated ()
if (playhead_cursor) playhead_cursor->set_length (canvas_height); if (playhead_cursor) playhead_cursor->set_length (canvas_height);
for (MarkerSelection::iterator x = selection->markers.begin(); x != selection->markers.end(); ++x) { 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) { if (range_marker_drag_rect) {
@ -366,11 +366,17 @@ Editor::track_canvas_size_allocated ()
} }
compute_fixed_ruler_scale (); 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(); update_fixed_rulers();
redisplay_tempo (true); redisplay_tempo (true);
if (logo_item) { if (logo_item) {
// logo_item->property_height() = canvas_height; // logo_item->property_height() = full_canvas_height;
// logo_item->property_width() = canvas_width; // logo_item->property_width() = canvas_width;
} }

View file

@ -1172,7 +1172,7 @@ Editor::marker_selection_changed ()
} }
for (MarkerSelection::iterator x = selection->markers.begin(); x != selection->markers.end(); ++x) { 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 (); (*x)->show_line ();
} }

View file

@ -2389,7 +2389,7 @@ Editor::play_selected_region ()
nframes64_t start = max_frames; nframes64_t start = max_frames;
nframes64_t end = 0; nframes64_t end = 0;
ensure_entered_region_selected (true); ExclusiveRegionSelection esr (*this, entered_regionview);
if (selection->regions.empty()) { if (selection->regions.empty()) {
return; return;
@ -2404,6 +2404,7 @@ Editor::play_selected_region ()
} }
} }
session->request_stop ();
session->request_bounded_roll (start, end); session->request_bounded_roll (start, end);
} }
@ -2567,27 +2568,58 @@ Editor::separate_regions_between (const TimeSelection& ts)
bool in_command = false; bool in_command = false;
boost::shared_ptr<Playlist> playlist; boost::shared_ptr<Playlist> playlist;
RegionSelection new_selection; RegionSelection new_selection;
TrackSelection tmptracks;
sort_track_selection ();
for (TrackSelection::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) { if (selection->tracks.empty()) {
/* use tracks with selected regions */
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; RouteTimeAxisView* rtv;
if ((rtv = dynamic_cast<RouteTimeAxisView*> ((*i))) != 0) { if ((rtv = dynamic_cast<RouteTimeAxisView*> ((*i))) != 0) {
boost::shared_ptr<Track> t = rtv->track(); if (rtv->is_track()) {
if (t != 0 && ! t->diskstream()->destructive()) { /* no edits to destructive tracks */
if (rtv->track()->diskstream()->destructive()) {
continue;
}
if ((playlist = rtv->playlist()) != 0) { if ((playlist = rtv->playlist()) != 0) {
XMLNode *before = &(playlist->get_state()); XMLNode *before;
bool got_some = false; bool got_some;
before = &(playlist->get_state());
got_some = false;
/* XXX need to consider musical time selections here at some point */ /* 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) { 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) { switch (point) {
case Start: 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; break;
case End: 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; break;
case SyncPoint: 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; break;
} }
if (pos > position) { if (pos == r->position()) {
distance = pos - position; return;
dir = -1;
} else {
distance = position - pos;
dir = 1;
} }
begin_reversible_command (_("align selection (relative)")); 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()); boost::shared_ptr<Region> region ((*i)->region());
@ -3100,7 +3162,7 @@ Editor::trim_region_to_punch ()
void void
Editor::trim_region_to_location (const Location& loc, const char* str) 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 ()); RegionSelection& rs (get_regions_for_action ());
@ -3151,6 +3213,8 @@ Editor::trim_region_to_location (const Location& loc, const char* str)
void void
Editor::trim_region_to_edit_point () Editor::trim_region_to_edit_point ()
{ {
ExclusiveRegionSelection ers (*this, entered_regionview);
RegionSelection& rs (get_regions_for_action ()); RegionSelection& rs (get_regions_for_action ());
nframes64_t where = get_preferred_edit_position(); nframes64_t where = get_preferred_edit_position();
@ -3193,6 +3257,8 @@ Editor::trim_region_to_edit_point ()
void void
Editor::trim_region_from_edit_point () Editor::trim_region_from_edit_point ()
{ {
ExclusiveRegionSelection ers (*this, entered_regionview);
RegionSelection& rs (get_regions_for_action ()); RegionSelection& rs (get_regions_for_action ());
nframes64_t where = get_preferred_edit_position(); nframes64_t where = get_preferred_edit_position();
@ -4292,16 +4358,16 @@ Editor::toggle_region_opaque ()
void void
Editor::set_fade_length (bool in) 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 */ /* we need a region to measure the offset from the start */
RegionView* rv; RegionView* rv;
if (entered_regionview) { if (!selection->regions.empty()) {
rv = entered_regionview;
} else if (!selection->regions.empty()) {
rv = selection->regions.front(); rv = selection->regions.front();
} else if (entered_regionview) {
rv = entered_regionview;
} else { } else {
return; return;
} }
@ -4309,6 +4375,11 @@ Editor::set_fade_length (bool in)
nframes64_t pos = get_preferred_edit_position(); nframes64_t pos = get_preferred_edit_position();
nframes_t len; nframes_t len;
char* cmd; char* cmd;
if (pos > rv->region()->last_frame() || pos < rv->region()->first_frame()) {
/* edit point is outside the relevant region */
return;
}
if (in) { if (in) {
if (pos <= rv->region()->position()) { if (pos <= rv->region()->position()) {
@ -4337,7 +4408,13 @@ Editor::set_fade_length (bool in)
return; 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(); XMLNode &before = alist->get_state();
if (in) { if (in) {
@ -4347,13 +4424,12 @@ Editor::set_fade_length (bool in)
} }
XMLNode &after = alist->get_state(); 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 (); commit_reversible_command ();
} }
void void
Editor::toggle_fade_active (bool in) 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")); const char* cmd = (in ? _("toggle fade in active") : _("toggle fade out active"));
bool have_switch = false; bool have_switch = false;
bool yn; bool yn;
bool in_command = false;
begin_reversible_command (cmd); begin_reversible_command (cmd);
@ -4382,25 +4457,31 @@ Editor::toggle_fade_active (bool in)
/* make the behaviour consistent across all regions */ /* make the behaviour consistent across all regions */
if (!have_switch) { if (!have_switch) {
yn = region->fade_in_active(); if (in) {
yn = region->fade_in_active();
} else {
yn = region->fade_out_active();
}
have_switch = true; have_switch = true;
} }
XMLNode &before = region->get_state(); 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(); XMLNode &after = region->get_state();
session->add_command(new MementoCommand<AudioRegion>(*region.get(), &before, &after)); session->add_command(new MementoCommand<AudioRegion>(*region.get(), &before, &after));
in_command = true;
} }
if (in_command) { commit_reversible_command ();
commit_reversible_command ();
}
} }
void void
Editor::set_fade_in_shape (AudioRegion::FadeShape shape) Editor::set_fade_in_shape (AudioRegion::FadeShape shape)
{ {
begin_reversible_command (_("set fade in shape")); begin_reversible_command (_("set fade in shape"));
for (RegionSelection::iterator x = selection->regions.begin(); x != selection->regions.end(); ++x) { 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 (); commit_reversible_command ();
} }
void void
@ -4468,6 +4550,8 @@ Editor::set_fade_in_active (bool yn)
XMLNode &after = ar->get_state(); XMLNode &after = ar->get_state();
session->add_command(new MementoCommand<AudioRegion>(*ar, &before, &after)); session->add_command(new MementoCommand<AudioRegion>(*ar, &before, &after));
} }
commit_reversible_command ();
} }
void void
@ -4491,6 +4575,8 @@ Editor::set_fade_out_active (bool yn)
XMLNode &after = ar->get_state(); XMLNode &after = ar->get_state();
session->add_command(new MementoCommand<AudioRegion>(*ar, &before, &after)); 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 void
Editor::ensure_entered_region_selected (bool op_really_wants_one_region_if_none_are_selected) Editor::ensure_entered_region_selected (bool op_really_wants_one_region_if_none_are_selected)
{ {
if (entered_regionview && mouse_mode == MouseObject) { if (!entered_regionview || mouse_mode != MouseObject) {
return;
}
/* heuristic:
/* heuristic:
- if there is no existing selection, don't change it. the operation will thus apply to "all"
- 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, - if there is an existing selection, but the entered regionview isn't in it, add it. this
but also means that the operation will apply to the pointed-at region. 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()) { if (!selection->regions.empty()) {
selection->add (entered_regionview); if (!selection->selected (entered_regionview)) {
} selection->add (entered_regionview);
} else { }
/* there is no selection, but this operation requires/prefers selected objects */ } 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); if (op_really_wants_one_region_if_none_are_selected) {
} selection->set (entered_regionview, false);
} }
} }
} }
@ -4640,6 +4728,8 @@ Editor::trim_region_back ()
void void
Editor::trim_region (bool front) Editor::trim_region (bool front)
{ {
ExclusiveRegionSelection ers (*this, entered_regionview);
nframes64_t where = get_preferred_edit_position(); nframes64_t where = get_preferred_edit_position();
RegionSelection& rs = get_regions_for_action (); 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)); session->add_command(new MementoCommand<Playlist>(*pl.get(), &before, &after));
} }
} }
commit_reversible_command (); commit_reversible_command ();
} }
@ -4764,7 +4855,7 @@ Editor::set_loop_from_region (bool play)
nframes64_t start = max_frames; nframes64_t start = max_frames;
nframes64_t end = 0; nframes64_t end = 0;
ensure_entered_region_selected (true); ExclusiveRegionSelection esr (*this, entered_regionview);
if (selection->regions.empty()) { if (selection->regions.empty()) {
info << _("cannot set loop: no region selected") << endmsg; 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")); 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 void
Editor::pitch_shift_regions () Editor::pitch_shift_regions ()
{ {

View file

@ -808,7 +808,7 @@ void
Editor::select_all (Selection::Operation op) Editor::select_all (Selection::Operation op)
{ {
list<Selectable *> touched; list<Selectable *> touched;
for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) { for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) {
if ((*iter)->hidden()) { if ((*iter)->hidden()) {
continue; continue;
@ -991,7 +991,15 @@ Editor::select_all_selectables_using_time_selection ()
return; 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()) { if ((*iter)->hidden()) {
continue; continue;
} }
@ -1014,7 +1022,16 @@ Editor::select_all_selectables_using_punch()
return; 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()) { if ((*iter)->hidden()) {
continue; continue;
} }
@ -1036,7 +1053,16 @@ Editor::select_all_selectables_using_loop()
return; 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()) { if ((*iter)->hidden()) {
continue; 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()) { if ((*iter)->hidden()) {
continue; 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()) { if ((*iter)->hidden()) {
continue; continue;
} }
@ -1120,8 +1164,16 @@ Editor::select_all_selectables_between (bool within)
if (!get_edit_op_range (start, end)) { if (!get_edit_op_range (start, end)) {
return; 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()) { if ((*iter)->hidden()) {
continue; continue;
} }
@ -1241,3 +1293,28 @@ Editor::deselect_all ()
{ {
selection->clear (); 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);
}
}

View file

@ -17,6 +17,7 @@
*/ */
#include <iostream>
#include <cstdlib> #include <cstdlib>
#include <cmath> #include <cmath>
@ -27,6 +28,7 @@
#include <pbd/memento_command.h> #include <pbd/memento_command.h>
#include <gtkmm2ext/window_title.h> #include <gtkmm2ext/window_title.h>
#include <gtkmm2ext/utils.h>
#include "editor.h" #include "editor.h"
#include "audio_time_axis.h" #include "audio_time_axis.h"
@ -42,8 +44,14 @@
#include <ardour/stretch.h> #include <ardour/stretch.h>
#include <ardour/pitch.h> #include <ardour/pitch.h>
#ifdef USE_RUBBERBAND
#include <rubberband/RubberBandStretcher.h>
using namespace RubberBand;
#endif
#include "i18n.h" #include "i18n.h"
using namespace std;
using namespace ARDOUR; using namespace ARDOUR;
using namespace PBD; using namespace PBD;
using namespace sigc; using namespace sigc;
@ -54,14 +62,16 @@ Editor::TimeFXDialog::TimeFXDialog (Editor& e, bool pitch)
: ArdourDialog (X_("time fx dialog")), : ArdourDialog (X_("time fx dialog")),
editor (e), editor (e),
pitching (pitch), pitching (pitch),
pitch_octave_adjustment (0.0, 0.0, 4.0, 1, 2.0), pitch_octave_adjustment (0.0, -4.0, 4.0, 1, 2.0),
pitch_semitone_adjustment (0.0, 0.0, 12.0, 1.0, 4.0), pitch_semitone_adjustment (0.0, -12.0, 12.0, 1.0, 4.0),
pitch_cent_adjustment (0.0, 0.0, 150.0, 5.0, 15.0), pitch_cent_adjustment (0.0, -499.0, 500.0, 5.0, 15.0),
pitch_octave_spinner (pitch_octave_adjustment), pitch_octave_spinner (pitch_octave_adjustment),
pitch_semitone_spinner (pitch_semitone_adjustment), pitch_semitone_spinner (pitch_semitone_adjustment),
pitch_cent_spinner (pitch_cent_adjustment), pitch_cent_spinner (pitch_cent_adjustment),
quick_button (_("Quick but Ugly")), 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_modal (true);
set_position (Gtk::WIN_POS_MOUSE); 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_spacing (5);
get_vbox()->set_border_width (12); get_vbox()->set_border_width (12);
get_vbox()->pack_start (upper_button_box, false, false);
get_vbox()->pack_start (progress_bar);
if (pitching) { if (pitching) {
@ -105,19 +113,44 @@ Editor::TimeFXDialog::TimeFXDialog (Editor& e, bool pitch)
add_button (_("Shift"), Gtk::RESPONSE_ACCEPT); add_button (_("Shift"), Gtk::RESPONSE_ACCEPT);
get_vbox()->pack_start (upper_button_box, false, false);
} else { } 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_homogeneous (true);
upper_button_box.set_spacing (5); upper_button_box.set_spacing (5);
upper_button_box.set_border_width (5); upper_button_box.set_border_width (5);
upper_button_box.pack_start (quick_button, true, true); upper_button_box.pack_start (quick_button, true, true);
upper_button_box.pack_start (antialias_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); add_button (_("Stretch/Shrink"), Gtk::RESPONSE_ACCEPT);
} }
quick_button.set_name (N_("TimeFXButton")); get_vbox()->pack_start (progress_bar);
antialias_button.set_name (N_("TimeFXButton"));
progress_bar.set_name (N_("TimeFXProgress")); progress_bar.set_name (N_("TimeFXProgress"));
show_all_children (); show_all_children ();
@ -184,6 +217,7 @@ Editor::time_fx (RegionSelection& regions, float val, bool pitching)
if (pitching) { if (pitching) {
float cents = current_timefx->pitch_octave_adjustment.get_value() * 1200.0; 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_semitone_adjustment.get_value() * 100.0;
cents += current_timefx->pitch_cent_adjustment.get_value(); cents += current_timefx->pitch_cent_adjustment.get_value();
@ -193,19 +227,15 @@ Editor::time_fx (RegionSelection& regions, float val, bool pitching)
return 0; return 0;
} }
// we now have the pitch shift in cents. divide by 1200 to get octaves // one octave == 1200 cents
// then multiply by 2.0 because 1 octave == doubling the frequency // adding one octave doubles the frequency
// ratio is 2^^octaves
cents /= 1200.0;
cents /= 2.0; pitch_fraction = pow(2, cents/1200);
// add 1.0 to convert to RB scale
cents += 1.0;
current_timefx->request.time_fraction = 1.0; current_timefx->request.time_fraction = 1.0;
current_timefx->request.pitch_fraction = cents; current_timefx->request.pitch_fraction = pitch_fraction;
} else { } else {
current_timefx->request.time_fraction = val; current_timefx->request.time_fraction = val;
@ -213,8 +243,70 @@ Editor::time_fx (RegionSelection& regions, float val, bool pitching)
} }
#ifdef USE_RUBBERBAND
/* parse options */
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;
};
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.quick_seek = current_timefx->quick_button.get_active();
current_timefx->request.antialias = !current_timefx->antialias_button.get_active(); current_timefx->request.antialias = !current_timefx->antialias_button.get_active();
#endif
current_timefx->request.progress = 0.0f; current_timefx->request.progress = 0.0f;
current_timefx->request.done = false; current_timefx->request.done = false;
current_timefx->request.cancel = 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); 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 (); gtk_main_iteration ();
} }

View file

@ -1,6 +1,7 @@
#include <vector> #include <vector>
#include <cmath> #include <cmath>
#include <fstream> #include <fstream>
#include <map>
#include <glibmm.h> #include <glibmm.h>
#include <pbd/xml++.h> #include <pbd/xml++.h>
@ -22,6 +23,7 @@
#include <pbd/convert.h> #include <pbd/convert.h>
#include <pbd/error.h> #include <pbd/error.h>
#include <pbd/pathscanner.h>
#ifdef __APPLE #ifdef __APPLE
#include <CFBundle.h> #include <CFBundle.h>
@ -113,7 +115,6 @@ EngineControl::EngineControl ()
strings.push_back (X_("ALSA")); strings.push_back (X_("ALSA"));
strings.push_back (X_("OSS")); strings.push_back (X_("OSS"));
strings.push_back (X_("FFADO")); strings.push_back (X_("FFADO"));
strings.push_back (X_("FreeBoB"));
#endif #endif
strings.push_back (X_("NetJACK")); strings.push_back (X_("NetJACK"));
strings.push_back (X_("Dummy")); strings.push_back (X_("Dummy"));
@ -364,7 +365,7 @@ EngineControl::build_command_line (vector<string>& cmd)
bool using_coreaudio = false; bool using_coreaudio = false;
bool using_netjack = false; bool using_netjack = false;
bool using_ffado = false; bool using_ffado = false;
bool using_freebob = false; bool using_dummy = false;
/* first, path to jackd */ /* first, path to jackd */
@ -427,10 +428,10 @@ EngineControl::build_command_line (vector<string>& cmd)
} else if (driver == X_("FFADO")) { } else if (driver == X_("FFADO")) {
using_ffado = true; using_ffado = true;
cmd.push_back ("firewire"); cmd.push_back ("firewire");
} else if (driver == X_("FreeBoB")) { } else if ( driver == X_("Dummy")) {
using_freebob = true; using_dummy = true;
cmd.push_back ("freebob"); cmd.push_back ("dummy");
} }
/* driver arguments */ /* driver arguments */
@ -454,8 +455,10 @@ EngineControl::build_command_line (vector<string>& cmd)
cmd.push_back ("-C"); cmd.push_back ("-C");
} }
cmd.push_back ("-n"); if (! using_dummy ) {
cmd.push_back (to_string ((uint32_t) floor (periods_spinner.get_value()), std::dec)); cmd.push_back ("-n");
cmd.push_back (to_string ((uint32_t) floor (periods_spinner.get_value()), std::dec));
}
} }
cmd.push_back ("-r"); cmd.push_back ("-r");
@ -572,7 +575,6 @@ EngineControl::enumerate_devices ()
#else #else
devices["ALSA"] = enumerate_alsa_devices (); devices["ALSA"] = enumerate_alsa_devices ();
devices["FFADO"] = enumerate_ffado_devices (); devices["FFADO"] = enumerate_ffado_devices ();
devices["FreeBoB"] = enumerate_freebob_devices ();
devices["OSS"] = enumerate_oss_devices (); devices["OSS"] = enumerate_oss_devices ();
devices["Dummy"] = enumerate_dummy_devices (); devices["Dummy"] = enumerate_dummy_devices ();
devices["NetJACK"] = enumerate_netjack_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 void
EngineControl::find_jack_servers (vector<string>& strings) EngineControl::find_jack_servers (vector<string>& strings)
{ {
@ -838,14 +845,11 @@ EngineControl::find_jack_servers (vector<string>& strings)
_NSGetExecutablePath (execpath, &pathsz); _NSGetExecutablePath (execpath, &pathsz);
cerr << " execpath = " << execpath << endl;
Glib::ustring path (Glib::path_get_dirname (execpath)); Glib::ustring path (Glib::path_get_dirname (execpath));
path += "/jackd"; path += "/jackd";
if (Glib::file_test (path, FILE_TEST_EXISTS)) { if (Glib::file_test (path, FILE_TEST_EXISTS)) {
strings.push_back (path); strings.push_back (path);
cerr << "Found jack in " << path << endl;
} }
if (getenv ("ARDOUR_WITH_JACK")) { if (getenv ("ARDOUR_WITH_JACK")) {
@ -856,29 +860,30 @@ EngineControl::find_jack_servers (vector<string>& strings)
} }
return; return;
} }
#else
string path;
#endif #endif
if (Glib::file_test ("/usr/bin/jackd", FILE_TEST_EXISTS)) { PathScanner scanner;
strings.push_back ("/usr/bin/jackd"); 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);
}
} }
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");
}
} }
string string
EngineControl::get_device_name (const string& driver, const string& human_readable) EngineControl::get_device_name (const string& driver, const string& human_readable)
{ {
@ -1023,9 +1028,18 @@ EngineControl::set_state (const XMLNode& root)
XMLNode* child; XMLNode* child;
XMLProperty* prop; XMLProperty* prop;
bool using_dummy = false;
int val; int val;
string strval; string strval;
if ( (child = root.child("driver"))){
prop = child->property("val");
if (prop && (prop->value() == "Dummy") ) {
using_dummy = true;
}
}
clist = root.children(); clist = root.children();
for (citer = clist.begin(); citer != clist.end(); ++citer) { for (citer = clist.begin(); citer != clist.end(); ++citer) {
@ -1035,6 +1049,8 @@ EngineControl::set_state (const XMLNode& root)
prop = child->property ("val"); prop = child->property ("val");
if (!prop || prop->value().empty()) { 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; error << string_compose (_("AudioSetup value for %1 is missing data"), child->name()) << endmsg;
continue; continue;
} }

View 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 () void GainMeter::clear_meters ()
{ {
for (vector<MeterInfo>::iterator i = meters.begin(); i < meters.end(); i++) { for (vector<MeterInfo>::iterator i = meters.begin(); i < meters.end(); i++) {

View file

@ -75,7 +75,6 @@ class GainMeter : public Gtk::VBox
void set_meter_strip_name (const char * name); void set_meter_strip_name (const char * name);
void set_fader_name (const char * name); void set_fader_name (const char * name);
void setup_atv_meter (int);
void clear_meters (); void clear_meters ();
private: private:

View file

@ -10,6 +10,8 @@
#include <pbd/strsplit.h> #include <pbd/strsplit.h>
#include <pbd/replace_all.h> #include <pbd/replace_all.h>
#include <ardour/profile.h>
#include "actions.h" #include "actions.h"
#include "keyboard.h" #include "keyboard.h"
#include "keyeditor.h" #include "keyeditor.h"
@ -22,7 +24,10 @@ using namespace Gdk;
using namespace PBD; using namespace PBD;
KeyEditor::KeyEditor () KeyEditor::KeyEditor ()
: ArdourDialog (_("Keybinding Editor"), false) : ArdourDialog (_("Shortcut Editor"), false)
, unbind_button (_("Remove shortcut"))
, unbind_box (BUTTONBOX_END)
{ {
can_bind = false; can_bind = false;
last_state = 0; last_state = 0;
@ -31,7 +36,7 @@ KeyEditor::KeyEditor ()
view.set_model (model); view.set_model (model);
view.append_column (_("Action"), columns.action); view.append_column (_("Action"), columns.action);
view.append_column (_("Binding"), columns.binding); view.append_column (_("Shortcut"), columns.binding);
view.set_headers_visible (true); view.set_headers_visible (true);
view.get_selection()->set_mode (SELECTION_SINGLE); view.get_selection()->set_mode (SELECTION_SINGLE);
view.set_reorderable (false); view.set_reorderable (false);
@ -45,11 +50,49 @@ KeyEditor::KeyEditor ()
scroller.add (view); scroller.add (view);
scroller.set_policy (Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC); 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); 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); get_vbox()->set_border_width (12);
scroller.show ();
view.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 void
@ -69,6 +112,28 @@ KeyEditor::on_unmap ()
void void
KeyEditor::action_selected () 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 bool
@ -112,8 +177,6 @@ KeyEditor::on_key_release_event (GdkEventKey* ev)
(*i)[columns.binding] = string(); (*i)[columns.binding] = string();
} }
} }
} }
out: out:

View file

@ -3,6 +3,7 @@
#include <string> #include <string>
#include <gtkmm/buttonbox.h>
#include <gtkmm/treeview.h> #include <gtkmm/treeview.h>
#include <gtkmm/treestore.h> #include <gtkmm/treestore.h>
#include <gtkmm/scrolledwindow.h> #include <gtkmm/scrolledwindow.h>
@ -39,6 +40,10 @@ class KeyEditor : public ArdourDialog
Gtk::TreeView view; Gtk::TreeView view;
Glib::RefPtr<Gtk::TreeStore> model; Glib::RefPtr<Gtk::TreeStore> model;
KeyEditorColumns columns; KeyEditorColumns columns;
Gtk::Button unbind_button;
Gtk::HButtonBox unbind_box;
void unbind ();
bool can_bind; bool can_bind;
guint last_state; guint last_state;

View file

@ -62,7 +62,7 @@ Mixer_UI::Mixer_UI ()
: Window (Gtk::WINDOW_TOPLEVEL) : Window (Gtk::WINDOW_TOPLEVEL)
{ {
session = 0; session = 0;
_strip_width = Wide; Config->get_default_narrow_ms() ? _strip_width = Narrow : _strip_width = Wide;
track_menu = 0; track_menu = 0;
mix_group_context_menu = 0; mix_group_context_menu = 0;
no_track_list_redisplay = false; no_track_list_redisplay = false;
@ -309,6 +309,8 @@ Mixer_UI::add_strip (Session::RouteList& routes)
strip = new MixerStrip (*this, *session, route); strip = new MixerStrip (*this, *session, route);
strips.push_back (strip); strips.push_back (strip);
Config->get_default_narrow_ms() ? _strip_width = Narrow : _strip_width = Wide;
if (strip->width_owner() != strip) { if (strip->width_owner() != strip) {
strip->set_width (_strip_width, this); strip->set_width (_strip_width, this);
} }

View file

@ -42,6 +42,7 @@ using namespace ARDOUR;
using namespace PBD; using namespace PBD;
#include "opts.h" #include "opts.h"
#include "utils.h"
NewSessionDialog::NewSessionDialog() NewSessionDialog::NewSessionDialog()
: ArdourDialog ("session control") : ArdourDialog ("session control")
@ -348,6 +349,30 @@ NewSessionDialog::NewSessionDialog()
get_vbox()->set_spacing(0); get_vbox()->set_spacing(0);
get_vbox()->pack_start(*m_notebook, Gtk::PACK_SHRINK, 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()); WindowTitle title(Glib::get_application_name());
title += _("Session Control"); title += _("Session Control");
set_title(title.get_string()); set_title(title.get_string());
@ -360,7 +385,7 @@ NewSessionDialog::NewSessionDialog()
// add_button(Gtk::Stock::HELP, Gtk::RESPONSE_HELP); // add_button(Gtk::Stock::HELP, Gtk::RESPONSE_HELP);
add_button(Gtk::Stock::QUIT, Gtk::RESPONSE_CANCEL); add_button(Gtk::Stock::QUIT, Gtk::RESPONSE_CANCEL);
add_button(Gtk::Stock::CLEAR, Gtk::RESPONSE_NONE); 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); recent_model = Gtk::TreeStore::create (recent_columns);
m_treeview->set_model (recent_model); 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_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_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_template->signal_selection_changed ().connect (mem_fun (*this, &NewSessionDialog::template_chosen));
m_name->grab_focus();
page_set = Pages (0); 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()); return Glib::filename_from_utf8(m_name->get_text());
} else { } else {
if (m_treeview->get_selection()->count_selected_rows() == 0) { if (m_treeview->get_selection()->count_selected_rows() == 0) {
@ -537,12 +564,13 @@ NewSessionDialog::session_name() const
std::string std::string
NewSessionDialog::session_folder() const NewSessionDialog::session_folder() const
{ {
if (on_newable_page()) { if (m_notebook->get_current_page() == 0) {
return Glib::filename_from_utf8(m_folder->get_filename()); return Glib::filename_from_utf8(m_folder->get_filename());
} else { } else {
if (m_treeview->get_selection()->count_selected_rows() == 0) { if (m_treeview->get_selection()->count_selected_rows() == 0) {
std::string str = Glib::filename_from_utf8(m_open_filechooser->get_filename()); const string filename(Glib::filename_from_utf8(m_open_filechooser->get_filename()));
return Glib::path_get_dirname(str); return Glib::path_get_dirname(filename);
} }
Gtk::TreeModel::iterator i = m_treeview->get_selection()->get_selected(); Gtk::TreeModel::iterator i = m_treeview->get_selection()->get_selected();
return (*i)[recent_columns.fullpath]; return (*i)[recent_columns.fullpath];
@ -634,19 +662,62 @@ NewSessionDialog::connect_outs_to_physical() const
return m_connect_outputs_to_physical->get_active(); 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 int
NewSessionDialog::get_current_page() const NewSessionDialog::get_current_page() const
{ {
return m_notebook->get_current_page(); 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 void
NewSessionDialog::set_current_page(int page) NewSessionDialog::set_current_page(int page)
{ {
@ -678,8 +749,11 @@ NewSessionDialog::notebook_page_changed (GtkNotebookPage* np, uint pagenum)
return; return;
} }
if (!on_newable_page ()) { switch (which_page()) {
case OpenPage:
on_new_session_page = false;
m_okbutton->set_label(_("Open")); 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_NONE, false);
m_okbutton->set_image (*(new Gtk::Image (Gtk::Stock::OPEN, Gtk::ICON_SIZE_BUTTON))); m_okbutton->set_image (*(new Gtk::Image (Gtk::Stock::OPEN, Gtk::ICON_SIZE_BUTTON)));
if (m_treeview->get_selection()->count_selected_rows() == 0) { if (m_treeview->get_selection()->count_selected_rows() == 0) {
@ -687,14 +761,24 @@ NewSessionDialog::notebook_page_changed (GtkNotebookPage* np, uint pagenum)
} else { } else {
set_response_sensitive (Gtk::RESPONSE_OK, true); set_response_sensitive (Gtk::RESPONSE_OK, true);
} }
} else { break;
if (m_name->get_text() != "") {
set_response_sensitive (Gtk::RESPONSE_NONE, true); 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_label(_("New"));
m_okbutton->set_image (*(new Gtk::Image (Gtk::Stock::NEW, Gtk::ICON_SIZE_BUTTON))); m_okbutton->set_image (*(new Gtk::Image (Gtk::Stock::NEW, Gtk::ICON_SIZE_BUTTON)));
if (m_name->get_text() == "") { if (m_name->get_text() == "") {
set_response_sensitive (Gtk::RESPONSE_OK, false); set_response_sensitive (Gtk::RESPONSE_OK, false);
m_name->grab_focus();
} else { } else {
set_response_sensitive (Gtk::RESPONSE_OK, true); set_response_sensitive (Gtk::RESPONSE_OK, true);
} }
@ -718,12 +802,21 @@ NewSessionDialog::treeview_selection_changed ()
void void
NewSessionDialog::file_chosen () 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(); m_treeview->get_selection()->unselect_all();
if (get_window()) Glib::RefPtr<Gdk::Window> win (get_window());
get_window()->set_cursor(Gdk::Cursor(Gdk::WATCH));
if (win) {
win->set_cursor(Gdk::Cursor(Gdk::WATCH));
}
if (!m_open_filechooser->get_filename().empty()) { if (!m_open_filechooser->get_filename().empty()) {
set_response_sensitive (Gtk::RESPONSE_OK, true); set_response_sensitive (Gtk::RESPONSE_OK, true);

View file

@ -54,6 +54,12 @@ class NewSessionDialog : public ArdourDialog
{ {
public: public:
enum Pages {
NewPage = 0x1,
OpenPage = 0x2,
EnginePage = 0x4
};
NewSessionDialog(); NewSessionDialog();
~NewSessionDialog (); ~NewSessionDialog ();
@ -86,9 +92,9 @@ public:
bool connect_outs_to_master() const; bool connect_outs_to_master() const;
bool connect_outs_to_physical() 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 set_current_page (int);
void reset_recent(); void reset_recent();
@ -170,11 +176,6 @@ protected:
Gtk::Notebook* m_notebook; Gtk::Notebook* m_notebook;
private: private:
enum Pages {
NewPage = 0x1,
OpenPage = 0x2,
EnginePage = 0x4
};
Pages page_set; Pages page_set;
@ -213,6 +214,7 @@ protected:
void master_bus_button_clicked (); void master_bus_button_clicked ();
void monitor_bus_button_clicked (); void monitor_bus_button_clicked ();
bool on_new_session_page;
bool have_engine; bool have_engine;
}; };

File diff suppressed because it is too large Load diff

View file

@ -34,10 +34,10 @@ using namespace PBD;
TempoDialog::TempoDialog (TempoMap& map, nframes_t frame, const string & action) TempoDialog::TempoDialog (TempoMap& map, nframes_t frame, const string & action)
: ArdourDialog (_("edit tempo")), : ArdourDialog (_("edit tempo")),
note_frame (_("BPM denominator")),
bpm_adjustment (60.0, 1.0, 999.9, 0.1, 1.0, 1.0), bpm_adjustment (60.0, 1.0, 999.9, 0.1, 1.0, 1.0),
bpm_spinner (bpm_adjustment), bpm_spinner (bpm_adjustment),
bpm_frame (_("Beats per minute")), bpm_frame (_("Beats per minute")),
note_frame (_("BPM denominator")),
ok_button (action), ok_button (action),
cancel_button (_("Cancel")), cancel_button (_("Cancel")),
when_bar_label (_("Bar")), when_bar_label (_("Bar")),

View file

@ -39,10 +39,10 @@ struct TempoDialog : public ArdourDialog
{ {
Gtk::ComboBoxText note_types; Gtk::ComboBoxText note_types;
vector<string> strings; vector<string> strings;
Gtk::Frame note_frame;
Gtk::Adjustment bpm_adjustment; Gtk::Adjustment bpm_adjustment;
Gtk::SpinButton bpm_spinner; Gtk::SpinButton bpm_spinner;
Gtk::Frame bpm_frame; Gtk::Frame bpm_frame;
Gtk::Frame note_frame;
Gtk::VBox vpacker; Gtk::VBox vpacker;
Gtk::Button ok_button; Gtk::Button ok_button;
Gtk::Button cancel_button; Gtk::Button cancel_button;

View file

@ -199,7 +199,7 @@ load_rc_file (const string& filename, bool themechange)
return; 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); Gtkmm2ext::UI::instance()->load_rcfile (rc_file_path.to_string(), themechange);
} }

View 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 (bool, only_copy_imported_files, "only-copy-imported-files", true)
CONFIG_VARIABLE (std::string, keyboard_layout, "keyboard-layout", "ansi") CONFIG_VARIABLE (std::string, keyboard_layout, "keyboard-layout", "ansi")
CONFIG_VARIABLE (std::string, default_bindings, "default-bindings", "ardour") CONFIG_VARIABLE (std::string, default_bindings, "default-bindings", "ardour")
CONFIG_VARIABLE (bool, default_narrow_ms, "default-narrow_ms", false)
/* denormal management */ /* denormal management */

View file

@ -54,6 +54,7 @@ class OSC : public BasicUI, public sigc::trackable
lo_server _osc_server; lo_server _osc_server;
lo_server _osc_unix_server; lo_server _osc_unix_server;
std::string _osc_unix_socket_path; std::string _osc_unix_socket_path;
std::string _osc_url_file;
pthread_t _osc_thread; pthread_t _osc_thread;
int _request_pipe[2]; int _request_pipe[2];

View file

@ -1427,7 +1427,7 @@ class Session : public PBD::StatefulDestructible
SerializedRCUManager<RouteList> routes; SerializedRCUManager<RouteList> routes;
void add_routes (RouteList&, bool save = true); void add_routes (RouteList&, bool save);
uint32_t destructive_index; uint32_t destructive_index;
int load_routes (const XMLNode&); int load_routes (const XMLNode&);

View file

@ -382,8 +382,11 @@ namespace ARDOUR {
struct TimeFXRequest : public InterThreadInfo { struct TimeFXRequest : public InterThreadInfo {
float time_fraction; float time_fraction;
float pitch_fraction; float pitch_fraction;
/* SoundTouch */
bool quick_seek; bool quick_seek;
bool antialias; bool antialias;
/* RubberBand */
int opts; // really RubberBandStretcher::Options
}; };
} // namespace ARDOUR } // namespace ARDOUR

View file

@ -264,7 +264,7 @@ AudioDiskstream::use_new_playlist ()
{ {
string newname; string newname;
boost::shared_ptr<AudioPlaylist> playlist; boost::shared_ptr<AudioPlaylist> playlist;
if (!in_set_state && destructive()) { if (!in_set_state && destructive()) {
return 0; return 0;
} }
@ -1998,8 +1998,6 @@ AudioDiskstream::set_state (const XMLNode& node)
up of the IO that owns this DS (::non_realtime_input_change()) up of the IO that owns this DS (::non_realtime_input_change())
*/ */
in_set_state = false;
return 0; return 0;
} }

View 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); Region::set_live_state (node, what_changed, false);
uint32_t old_flags = _flags; uint32_t old_flags = _flags;
if ((prop = node.property ("flags")) != 0) { if ((prop = node.property ("flags")) != 0) {
_flags = Flag (string_2_enum (prop->value(), _flags)); _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 (); _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 (); 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") { } else if (child->name() == "FadeOut") {
_fade_out->clear (); _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 (); 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);
}
}
} }
} }

View file

@ -18,6 +18,7 @@
*/ */
#include <iostream> #include <iostream>
#include <fstream>
#include <cstdio> #include <cstdio>
#include <cstdlib> #include <cstdlib>
#include <cerrno> #include <cerrno>
@ -28,11 +29,13 @@
#include <fcntl.h> #include <fcntl.h>
#include <pbd/pthread_utils.h> #include <pbd/pthread_utils.h>
#include <pbd/file_utils.h>
#include <ardour/osc.h> #include <ardour/osc.h>
#include <ardour/session.h> #include <ardour/session.h>
#include <ardour/route.h> #include <ardour/route.h>
#include <ardour/audio_track.h> #include <ardour/audio_track.h>
#include <ardour/filesystem_paths.h>
#include "i18n.h" #include "i18n.h"
@ -101,6 +104,24 @@ OSC::start ()
#endif #endif
cerr << "OSC @ " << get_server_url () << endl; 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(); register_callbacks();
@ -131,6 +152,9 @@ OSC::stop ()
unlink(_osc_unix_socket_path.c_str()); unlink(_osc_unix_socket_path.c_str());
} }
if (! _osc_url_file.empty() ) {
unlink(_osc_url_file.c_str() );
}
return 0; return 0;
} }

View file

@ -324,7 +324,7 @@ PluginManager::get_ladspa_category (uint32_t plugin_id)
lrdf_statement* matches1 = lrdf_matches (&pattern); lrdf_statement* matches1 = lrdf_matches (&pattern);
if (!matches1) { if (!matches1) {
return _(""); return "";
} }
pattern.subject = matches1->object; pattern.subject = matches1->object;
@ -336,7 +336,7 @@ PluginManager::get_ladspa_category (uint32_t plugin_id)
lrdf_free_statements(matches1); lrdf_free_statements(matches1);
if (!matches2) { if (!matches2) {
return _(""); return ("");
} }
string label = matches2->object; string label = matches2->object;

View file

@ -75,7 +75,7 @@ RBEffect::run (boost::shared_ptr<AudioRegion> region)
int avail = 0; int avail = 0;
RubberBandStretcher stretcher (session.frame_rate(), region->n_channels(), RubberBandStretcher stretcher (session.frame_rate(), region->n_channels(),
RubberBandStretcher::DefaultOptions, (RubberBandStretcher::Options) tsr.opts,
tsr.time_fraction, tsr.pitch_fraction); tsr.time_fraction, tsr.pitch_fraction);
stretcher.setExpectedInputDuration(region->length()); stretcher.setExpectedInputDuration(region->length());
@ -155,7 +155,7 @@ RBEffect::run (boost::shared_ptr<AudioRegion> region)
pos += this_read; pos += this_read;
done += 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); stretcher.study(buffers, this_read, pos == duration);
} }
@ -193,7 +193,7 @@ RBEffect::run (boost::shared_ptr<AudioRegion> region)
pos += this_read; pos += this_read;
done += 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); stretcher.process(buffers, this_read, pos == duration);

View 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)); new_session = !g_file_test (_path.c_str(), GFileTest (G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR));
if (new_session) { if (new_session) {
if (create (new_session, mix_template, compute_initial_length())) { if (create (new_session, mix_template, compute_initial_length())) {
cerr << "create failed\n";
destroy (); destroy ();
throw failed_constructor (); throw failed_constructor ();
} }
@ -257,7 +256,7 @@ Session::Session (AudioEngine &eng,
} }
if (!rl.empty()) { if (!rl.empty()) {
add_routes (rl); add_routes (rl, false);
} }
} }
@ -270,17 +269,12 @@ Session::Session (AudioEngine &eng,
throw failed_constructor (); 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); _state_of_the_state = StateOfTheState (_state_of_the_state & ~Dirty);
Config->ParameterChanged.connect (mem_fun (*this, &Session::config_changed));
if (was_dirty) { Config->ParameterChanged.connect (mem_fun (*this, &Session::config_changed));
DirtyChanged (); /* EMIT SIGNAL */
}
} }
Session::~Session () Session::~Session ()
@ -298,6 +292,7 @@ Session::destroy ()
remove_pending_capture_state (); remove_pending_capture_state ();
_state_of_the_state = StateOfTheState (CannotSave|Deletion); _state_of_the_state = StateOfTheState (CannotSave|Deletion);
_engine.remove_session (); _engine.remove_session ();
GoingAway (); /* EMIT SIGNAL */ GoingAway (); /* EMIT SIGNAL */
@ -706,6 +701,7 @@ Session::when_engine_running ()
_state_of_the_state = StateOfTheState (_state_of_the_state & ~(CannotSave|Dirty)); _state_of_the_state = StateOfTheState (_state_of_the_state & ~(CannotSave|Dirty));
/* hook us up to the engine */ /* hook us up to the engine */
_engine.set_session (this); _engine.set_session (this);
@ -716,9 +712,6 @@ Session::when_engine_running ()
osc->set_session (*this); osc->set_session (*this);
#endif #endif
_state_of_the_state = Clean;
DirtyChanged (); /* EMIT SIGNAL */
} }
void void
@ -730,6 +723,7 @@ Session::hookup_io ()
_state_of_the_state = StateOfTheState (_state_of_the_state | InitialConnecting); _state_of_the_state = StateOfTheState (_state_of_the_state | InitialConnecting);
if (auditioner == 0) { if (auditioner == 0) {
/* we delay creating the auditioner till now because /* 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); _state_of_the_state = StateOfTheState (_state_of_the_state & ~InitialConnecting);
/* now handle the whole enchilada as if it was one /* now handle the whole enchilada as if it was one
graph reorder event. graph reorder event.
*/ */
@ -1803,8 +1798,7 @@ Session::new_audio_track (int input_channels, int output_channels, TrackMode mod
failed: failed:
if (!new_routes.empty()) { if (!new_routes.empty()) {
add_routes (new_routes, false); add_routes (new_routes, true);
save_state (_current_snapshot_name);
} }
return ret; return ret;
@ -1938,8 +1932,7 @@ Session::new_audio_route (int input_channels, int output_channels, uint32_t how_
failure: failure:
if (!ret.empty()) { if (!ret.empty()) {
add_routes (ret, false); add_routes (ret, true);
save_state (_current_snapshot_name);
} }
return ret; return ret;

View file

@ -257,8 +257,7 @@ Session::butler_thread_work ()
/*IO* io = ds->io(); /*IO* io = ds->io();
if (ds->io() && !ds->io()->active()) { if (io && !io->active()) {
cerr << "Skip inactive diskstream " << ds->io()->name() << endl;
continue; continue;
}*/ }*/

View file

@ -268,10 +268,10 @@ Session::process_with_events (nframes_t nframes)
nframes_t this_nframes; nframes_t this_nframes;
nframes_t end_frame; nframes_t end_frame;
nframes_t offset; nframes_t offset;
bool session_needs_butler = false;
nframes_t stop_limit; nframes_t stop_limit;
long frames_moved; long frames_moved;
bool session_needs_butler = false;
/* make sure the auditioner is silent */ /* make sure the auditioner is silent */
if (auditioner) { if (auditioner) {

View file

@ -47,12 +47,12 @@
#endif #endif
#include <glibmm.h> #include <glibmm.h>
#include <glibmm/thread.h>
#include <midi++/mmc.h> #include <midi++/mmc.h>
#include <midi++/port.h> #include <midi++/port.h>
#include <pbd/error.h>
#include <glibmm/thread.h> #include <pbd/error.h>
#include <pbd/pathscanner.h> #include <pbd/pathscanner.h>
#include <pbd/pthread_utils.h> #include <pbd/pthread_utils.h>
#include <pbd/search_path.h> #include <pbd/search_path.h>
@ -178,7 +178,8 @@ Session::first_stage_init (string fullpath, string snapshot_name)
_worst_output_latency = 0; _worst_output_latency = 0;
_worst_input_latency = 0; _worst_input_latency = 0;
_worst_track_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; _slave = 0;
butler_mixdown_buffer = 0; butler_mixdown_buffer = 0;
butler_gain_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 // set_state() will call setup_raid_path(), but if it's a new session we need
// to call setup_raid_path() here. // to call setup_raid_path() here.
if (state_tree) { if (state_tree) {
if (set_state (*state_tree->root())) { if (set_state (*state_tree->root())) {
return -1; return -1;
@ -321,7 +323,7 @@ Session::second_stage_init (bool new_session)
_state_of_the_state = StateOfTheState (_state_of_the_state|CannotSave|Loading); _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.changed.connect (mem_fun (this, &Session::locations_changed));
_locations.added.connect (mem_fun (this, &Session::locations_added)); _locations.added.connect (mem_fun (this, &Session::locations_added));
setup_click_sounds (0); setup_click_sounds (0);
@ -360,6 +362,17 @@ Session::second_stage_init (bool new_session)
} else { } else {
_end_location_is_free = false; _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; return 0;
} }
@ -1119,6 +1132,7 @@ Session::set_state (const XMLNode& node)
int ret = -1; int ret = -1;
_state_of_the_state = StateOfTheState (_state_of_the_state|CannotSave); _state_of_the_state = StateOfTheState (_state_of_the_state|CannotSave);
if (node.name() != X_("Session")){ if (node.name() != X_("Session")){
fatal << _("programming error: Session: incorrect XML node sent to set_state()") << endmsg; 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 */ 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; return 0;
out: out:
@ -1344,7 +1350,7 @@ Session::load_routes (const XMLNode& node)
new_routes.push_back (route); new_routes.push_back (route);
} }
add_routes (new_routes); add_routes (new_routes, false);
return 0; return 0;
} }
@ -2120,6 +2126,10 @@ Session::commit_reversible_command (Command *cmd)
current_trans->add_command (cmd); current_trans->add_command (cmd);
} }
if (current_trans->empty()) {
return;
}
gettimeofday (&now, 0); gettimeofday (&now, 0);
current_trans->set_timestamp (now); current_trans->set_timestamp (now);
@ -2363,6 +2373,7 @@ Session::cleanup_sources (Session::cleanup_report& rep)
int ret = -1; int ret = -1;
_state_of_the_state = (StateOfTheState) (_state_of_the_state | InCleanup); _state_of_the_state = (StateOfTheState) (_state_of_the_state | InCleanup);
/* step 1: consider deleting all unused playlists */ /* step 1: consider deleting all unused playlists */
@ -2602,6 +2613,7 @@ Session::cleanup_sources (Session::cleanup_report& rep)
out: out:
_state_of_the_state = (StateOfTheState) (_state_of_the_state & ~InCleanup); _state_of_the_state = (StateOfTheState) (_state_of_the_state & ~InCleanup);
return ret; return ret;
} }
@ -2675,6 +2687,7 @@ Session::set_dirty ()
_state_of_the_state = StateOfTheState (_state_of_the_state | Dirty); _state_of_the_state = StateOfTheState (_state_of_the_state | Dirty);
if (!was_dirty) { if (!was_dirty) {
DirtyChanged(); /* EMIT SIGNAL */ DirtyChanged(); /* EMIT SIGNAL */
} }
@ -2688,6 +2701,7 @@ Session::set_clean ()
_state_of_the_state = Clean; _state_of_the_state = Clean;
if (was_dirty) { if (was_dirty) {
DirtyChanged(); /* EMIT SIGNAL */ DirtyChanged(); /* EMIT SIGNAL */
} }
@ -2697,6 +2711,7 @@ void
Session::set_deletion_in_progress () Session::set_deletion_in_progress ()
{ {
_state_of_the_state = StateOfTheState (_state_of_the_state | Deletion); _state_of_the_state = StateOfTheState (_state_of_the_state | Deletion);
} }
void void

View file

@ -55,7 +55,7 @@ Session::request_input_change_handling ()
if (!(_state_of_the_state & (InitialConnecting|Deletion))) { if (!(_state_of_the_state & (InitialConnecting|Deletion))) {
Event* ev = new Event (Event::InputConfigurationChange, Event::Add, Event::Immediate, 0, 0.0); Event* ev = new Event (Event::InputConfigurationChange, Event::Add, Event::Immediate, 0, 0.0);
queue_event (ev); queue_event (ev);
} }
} }
void void