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

View File

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

View File

@ -2,12 +2,11 @@ cd `dirname "$0"`/..
#export G_DEBUG=fatal_criticals
export ARDOUR_PATH=.:gtk2_ardour
export ARDOUR_PATH=gtk2_ardour/icons:gtk2_ardour/pixmaps:gtk2_ardour:.
export GTK_PATH=libs/clearlooks
export ARDOUR_SURFACES_PATH=libs/surfaces/frontier:libs/surfaces/generic_midi:libs/surfaces/mackie:libs/surfaces/tranzport
export LD_LIBRARY_PATH=libs/surfaces/control_protocol:libs/ardour:libs/midi++2:libs/pbd:libs/rubberband:libs/soundtouch:libs/gtkmm2ext:libs/sigc++2:libs/glibmm2:libs/gtkmm2/atk:libs/gtkmm2/pango:libs/gtkmm2/gdk:libs/gtkmm2/gtk:libs/libgnomecanvasmm:libs/libsndfile:libs/appleutility:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=libs/vamp-sdk:libs/surfaces/control_protocol:libs/ardour:libs/midi++2:libs/pbd:libs/rubberband:libs/soundtouch:libs/gtkmm2ext:libs/sigc++2:libs/glibmm2:libs/gtkmm2/atk:libs/gtkmm2/pango:libs/gtkmm2/gdk:libs/gtkmm2/gtk:libs/libgnomecanvasmm:libs/libsndfile:libs/appleutility:$LD_LIBRARY_PATH
# DYLD_LIBRARY_PATH is for darwin.
export DYLD_FALLBACK_LIBRARY_PATH=$LD_LIBRARY_PATH
@ -15,5 +14,3 @@ export DYLD_FALLBACK_LIBRARY_PATH=$LD_LIBRARY_PATH
export GTK_PATH=$PWD/libs/clearlooks:~/.ardour2
EXECUTABLE=gtk2_ardour/ardour-%VERSION%
ulimit -c unlimited

View File

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

View File

@ -1,332 +1,158 @@
; ardour-2.0beta11.1 GtkAccelMap rc-file -*- scheme -*-
; this file is an automated accelerator map dump
; ardour-2.2 GtkAccelMap rc-file -*- scheme -*-
; this file is a hand-edited map that is processed by scons
; to produce a real accelmap.
;
; (gtk_accel_path "<Actions>/RegionList/RegionListSort" "")
(gtk_accel_path "<Actions>/Common/Quit" "<%PRIMARY%>q")
(gtk_accel_path "<Actions>/Common/Save" "<%PRIMARY%>s")
; (gtk_accel_path "<Actions>/Editor/Pullup" "")
; (gtk_accel_path "<Actions>/Editor/zoom-to-session" "")
; (gtk_accel_path "<Actions>/JACK/JACKReconnect" "")
; (gtk_accel_path "<Actions>/Editor/Autoconnect" "")
; (gtk_accel_path "<Actions>/Editor/Edit" "")
;; punctuation
(gtk_accel_path "<Actions>/Editor/temporal-zoom-in" "equal")
(gtk_accel_path "<Actions>/Editor/temporal-zoom-out" "minus")
(gtk_accel_path "<Actions>/Editor/edit-cursor-to-previous-region-sync" "apostrophe")
(gtk_accel_path "<Actions>/Editor/edit-cursor-to-next-region-sync" "semicolon")
(gtk_accel_path "<Actions>/Editor/cycle-edit-point" "grave")
(gtk_accel_path "<Actions>/Editor/playhead-to-next-region-boundary" "period")
(gtk_accel_path "<Actions>/Editor/playhead-to-next-region-sync" "<%PRIMARY%>period")
(gtk_accel_path "<Actions>/Editor/playhead-to-previous-region-boundary" "comma")
(gtk_accel_path "<Actions>/Editor/playhead-to-previous-region-sync" "<%PRIMARY%>comma")
; (gtk_accel_path "<Actions>/processormenu/copy" "")
; (gtk_accel_path "<Actions>/options/MeterFalloffFaster" "")
(gtk_accel_path "<Actions>/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/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/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>/RegionList/SortBySourceFilesystem" "")
(gtk_accel_path "<Actions>/Common/ToggleColorManager" "<%WINDOW%>c")
; (gtk_accel_path "<Actions>/Common/About" "")
; (gtk_accel_path "<Actions>/JACK/JACKLatency32" "")
(gtk_accel_path "<Actions>/Editor/playhead-to-edit" "Return")
; (gtk_accel_path "<Actions>/options/FileHeaderFormatWAVE64" "")
(gtk_accel_path "<Actions>/Editor/brush-at-mouse" "<%PRIMARY%>b")
; (gtk_accel_path "<Actions>/RegionList/rlShowAll" "")
(gtk_accel_path "<Actions>/Transport/Rewind" "<%PRIMARY%>leftarrow")
; (gtk_accel_path "<Actions>/RegionList/SortByRegionTimestamp" "")
; (gtk_accel_path "<Actions>/options/VerifyRemoveLastCapture" "")
; (gtk_accel_path "<Actions>/options/OutputAutoConnectPhysical" "")
(gtk_accel_path "<Actions>/Editor/step-tracks-up" "uparrow")
(gtk_accel_path "<Actions>/Editor/playhead-to-next-region-boundary" "period")
; (gtk_accel_path "<Actions>/options/SendMMC" "")
; (gtk_accel_path "<Actions>/Editor/toggle-auto-xfades" "")
; (gtk_accel_path "<Actions>/Main/AudioFileFormatHeader" "")
; (gtk_accel_path "<Actions>/options/MeterHoldShort" "")
; (gtk_accel_path "<Actions>/options/MeterHoldMedium" "")
(gtk_accel_path "<Actions>/Editor/select-all-before-edit-cursor" "<%PRIMARY%>e")
; (gtk_accel_path "<Actions>/Editor/Subframes80" "")
; (gtk_accel_path "<Actions>/options/FileHeaderFormatCAF" "")
(gtk_accel_path "<Actions>/Common/ToggleLocations" "<%WINDOW%>l")
; (gtk_accel_path "<Actions>/Editor/ToggleGeneric MIDISurface" "")
(gtk_accel_path "<Actions>/Editor/editor-delete" "Delete")
; (gtk_accel_path "<Actions>/JACK/JACKLatency256" "")
(gtk_accel_path "<Actions>/Editor/select-all-between-cursors" "u")
; (gtk_accel_path "<Actions>/Editor/LayerAddHigher" "")
; (gtk_accel_path "<Actions>/Editor/Solo" "")
; (gtk_accel_path "<Actions>/JACK/JACKLatency1024" "")
; (gtk_accel_path "<Actions>/Main/ExportRangeMarkers" "")
(gtk_accel_path "<Actions>/Editor/set-playhead" "p")
; (gtk_accel_path "<Actions>/Editor/toggle-xfades-active" "")
; (gtk_accel_path "<Actions>/Snap/snap-to-bar" "")
; (gtk_accel_path "<Actions>/Editor/LayerLaterHigher" "")
; (gtk_accel_path "<Actions>/processormenu/selectall" "")
(gtk_accel_path "<Actions>/Editor/editor-copy" "<%PRIMARY%>c")
; (gtk_accel_path "<Actions>/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>/Transport/ToggleRollForgetCapture" "<%PRIMARY%>space")
(gtk_accel_path "<Actions>/Transport/record-roll" "<%TERTIARY%>space")
(gtk_accel_path "<Actions>/Editor/set-fade-in-length" "slash")
(gtk_accel_path "<Actions>/Editor/set-fade-in-length" "<%SECONDARY%>slash")
(gtk_accel_path "<Actions>/Editor/set-fade-out-length" "backslash")
(gtk_accel_path "<Actions>/Editor/set-fade-out-length" "<%SECONDARY%>backslash")
(gtk_accel_path "<Actions>/Editor/trim-from-start" "<%TERTIARY%>braceleft")
(gtk_accel_path "<Actions>/Editor/trim-to-end" "<%TERTIARY%>braceright")
;(gtk_accel_path "<Actions>/Editor/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-2" "KP_2")
(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-8" "KP_8")
(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/focus-on-clock" "KP_Divide")
(gtk_accel_path "<Actions>/Editor/set-loop-from-edit-range" "bracketright")
(gtk_accel_path "<Actions>/Editor/set-punch-from-edit-range" "bracketleft")
(gtk_accel_path "<Actions>/Editor/set-loop-from-region" "<%PRIMARY%><%SECONDARY%>bracketright")
(gtk_accel_path "<Actions>/Editor/toggle-zoom" "<%TERTIARY%>z")
(gtk_accel_path "<Actions>/Editor/zoom-to-region" "z")
(gtk_accel_path "<Actions>/Transport/ToggleClick" "5")
;;
;; unbound actions
;;
; (gtk_accel_path "<Actions>/RegionList/RegionListSort" "")
; (gtk_accel_path "<Actions>/Main/Windows" "")
; (gtk_accel_path "<Actions>/Main/CleanupUnused" "")
; (gtk_accel_path "<Actions>/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-region'/>
<menuitem action='set-punch-from-edit-range'/>
<menuitem action='set-punch-from-region'/>
</menu>
<menu name='Edit' action='Edit'>
<menuitem action='undo'/>
@ -429,7 +430,9 @@
<menuitem action='ShowTrackMeters'/>
<menuitem action='OnlyCopyImportedFiles'/>
<menuitem action='ShowTrackMeters'/>
<menuitem action='DefaultNarrowMS'/>
<menuitem action='link-region-and-track-selection'/>
<separator/>
</menu>
<menu name='Help' action='Help'>

View File

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

View File

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

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_("ShowTrackMeters"), _("Enable Editor Meters"), mem_fun (*this, &ARDOUR_UI::toggle_ShowTrackMeters));
ActionManager::register_toggle_action (option_actions, X_("OnlyCopyImportedFiles"), _("Always copy imported files"), mem_fun (*this, &ARDOUR_UI::toggle_only_copy_imported_files));
ActionManager::register_toggle_action (option_actions, X_("DefaultNarrowMS"), _("Use narrow mixer strips"), mem_fun (*this, &ARDOUR_UI::toggle_use_narrow_ms));
RadioAction::Group denormal_group;

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

View File

@ -52,7 +52,7 @@
#include "i18n.h"
#define MUTED_ALPHA 0x50
#define MUTED_ALPHA 10
using namespace sigc;
using namespace ARDOUR;
@ -1226,14 +1226,22 @@ AudioRegionView::set_frame_color ()
UINT_TO_RGBA(ARDOUR_UI::config()->canvasvar_FrameBase.get(), &r, &g, &b, &a);
for (vector<ArdourCanvas::WaveView*>::iterator w = waves.begin(); w != waves.end(); ++w) {
(*w)->property_wave_color() = RGBA_TO_UINT(r, g, b, fill_opacity ? fill_opacity : a);// Lets still use the theme's opacity value if Opaque is not set
if (_region->muted()) {
(*w)->property_wave_color() = RGBA_TO_UINT(r, g, b, MUTED_ALPHA);
} else {
(*w)->property_wave_color() = RGBA_TO_UINT(r, g, b, fill_opacity ? fill_opacity : a);// Lets still use the theme's opacity value if Opaque is not set
}
}
} else {
UINT_TO_RGBA(ARDOUR_UI::config()->canvasvar_FrameBase.get(), &r, &g, &b, &a);
frame->property_fill_color_rgba() = RGBA_TO_UINT(r, g, b, fill_opacity ? fill_opacity : a);
for (vector<ArdourCanvas::WaveView*>::iterator w = waves.begin(); w != waves.end(); ++w) {
(*w)->property_wave_color() = ARDOUR_UI::config()->canvasvar_WaveForm.get();
if (_region->muted()) {
(*w)->property_wave_color() = UINT_RGBA_CHANGE_A(ARDOUR_UI::config()->canvasvar_WaveForm.get(), MUTED_ALPHA);
} else {
(*w)->property_wave_color() = ARDOUR_UI::config()->canvasvar_WaveForm.get();
}
}
}
}

View File

@ -155,6 +155,18 @@ static const gchar *_zoom_focus_strings[] = {
0
};
#ifdef USE_RUBBERBAND
static const gchar *_rb_opt_strings[] = {
N_("Mushy"),
N_("Smooth"),
N_("Balanced multitimbral mixture"),
N_("Unpitched percussion with stable notes"),
N_("Crisp monophonic instrumental"),
N_("Unpitched solo percussion"),
0
};
#endif
/* Soundfile drag-n-drop */
Gdk::Cursor* Editor::cross_hair_cursor = 0;
@ -256,7 +268,10 @@ Editor::Editor ()
snap_mode_strings = I18N (_snap_mode_strings);
zoom_focus_strings = I18N (_zoom_focus_strings);
edit_point_strings = I18N (_edit_point_strings);
#ifdef USE_RUBBERBAND
rb_opt_strings = I18N (_rb_opt_strings);
#endif
snap_threshold = 5.0;
bbt_beat_subdivision = 4;
canvas_width = 0;
@ -4224,10 +4239,15 @@ struct EditorOrderTimeAxisSorter {
};
void
Editor::sort_track_selection ()
Editor::sort_track_selection (TrackSelection* sel)
{
EditorOrderTimeAxisSorter cmp;
selection->tracks.sort (cmp);
if (sel) {
sel->sort (cmp);
} else {
selection->tracks.sort (cmp);
}
}
nframes64_t

View File

@ -168,6 +168,10 @@ class Editor : public PublicEditor
void hide_a_region (boost::shared_ptr<ARDOUR::Region>);
void remove_a_region (boost::shared_ptr<ARDOUR::Region>);
#ifdef USE_RUBBERBAND
std::vector<std::string> rb_opt_strings;
#endif
/* option editor-access */
void set_show_waveforms (bool yn);
@ -478,7 +482,7 @@ class Editor : public PublicEditor
CrossfadeView* clicked_crossfadeview;
ControlPoint* clicked_control_point;
void sort_track_selection ();
void sort_track_selection (TrackSelection* sel = 0);
void get_relevant_tracks (std::set<RouteTimeAxisView*>& relevant_tracks);
void get_equivalent_regions (RegionView* rv, std::vector<RegionView*>&) const;
@ -1179,7 +1183,8 @@ class Editor : public PublicEditor
void add_location_from_selection ();
void set_loop_from_selection (bool play);
void set_punch_from_selection ();
void set_punch_from_region ();
void set_loop_from_edit_range (bool play);
void set_loop_from_region (bool play);
void set_punch_from_edit_range ();
@ -1930,11 +1935,20 @@ class Editor : public PublicEditor
Gtk::SpinButton pitch_cent_spinner;
RegionSelection regions;
Gtk::ProgressBar progress_bar;
/* SoundTouch */
Gtk::ToggleButton quick_button;
Gtk::ToggleButton antialias_button;
Gtk::HBox upper_button_box;
/* RubberBand */
Gtk::ComboBoxText stretch_opts_selector;
Gtk::Label stretch_opts_label;
Gtk::ToggleButton precise_button;
Gtk::HBox opts_box;
Gtk::Button* cancel_button;
Gtk::Button* action_button;
Gtk::HBox upper_button_box;
Gtk::VBox packer;
int status;
@ -2061,6 +2075,18 @@ class Editor : public PublicEditor
TimeAxisView* entered_track;
RegionView* entered_regionview;
class ExclusiveRegionSelection {
public:
ExclusiveRegionSelection (Editor&, RegionView*);
~ExclusiveRegionSelection ();
private:
Editor& editor;
RegionView* regionview;
bool remove;
};
void ensure_entered_region_selected (bool op_acts_on_objects = false);
void ensure_entered_track_selected (bool op_acts_on_objects = false);
bool clear_entered_track;

View File

@ -270,7 +270,8 @@ Editor::register_actions ()
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "set-punch-from-edit-range", _("Set Punch From Edit Range"), mem_fun(*this, &Editor::set_punch_from_edit_range));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "set-punch-from-region", _("Set Punch From Region"), mem_fun(*this, &Editor::set_punch_from_region));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "pitch-shift-region", _("Transpose"), mem_fun(*this, &Editor::pitch_shift_regions));
ActionManager::session_sensitive_actions.push_back (act);

View File

@ -337,7 +337,7 @@ Editor::track_canvas_size_allocated ()
if (playhead_cursor) playhead_cursor->set_length (canvas_height);
for (MarkerSelection::iterator x = selection->markers.begin(); x != selection->markers.end(); ++x) {
(*x)->set_line_length (canvas_height);
(*x)->set_line_length (full_canvas_height);
}
if (range_marker_drag_rect) {
@ -366,11 +366,17 @@ Editor::track_canvas_size_allocated ()
}
compute_fixed_ruler_scale ();
range_marker_drag_rect->property_y2() = full_canvas_height;
transport_loop_range_rect->property_y2() = full_canvas_height;
transport_punch_range_rect->property_y2() = full_canvas_height;
transport_punchin_line->property_y2() = full_canvas_height;
transport_punchout_line->property_y2() = full_canvas_height;
update_fixed_rulers();
redisplay_tempo (true);
if (logo_item) {
// logo_item->property_height() = canvas_height;
// logo_item->property_height() = full_canvas_height;
// logo_item->property_width() = canvas_width;
}

View File

@ -1172,7 +1172,7 @@ Editor::marker_selection_changed ()
}
for (MarkerSelection::iterator x = selection->markers.begin(); x != selection->markers.end(); ++x) {
(*x)->add_line (cursor_group, canvas_height);
(*x)->add_line (cursor_group, full_canvas_height);
(*x)->show_line ();
}

View File

@ -2389,7 +2389,7 @@ Editor::play_selected_region ()
nframes64_t start = max_frames;
nframes64_t end = 0;
ensure_entered_region_selected (true);
ExclusiveRegionSelection esr (*this, entered_regionview);
if (selection->regions.empty()) {
return;
@ -2404,6 +2404,7 @@ Editor::play_selected_region ()
}
}
session->request_stop ();
session->request_bounded_roll (start, end);
}
@ -2567,27 +2568,58 @@ Editor::separate_regions_between (const TimeSelection& ts)
bool in_command = false;
boost::shared_ptr<Playlist> playlist;
RegionSelection new_selection;
sort_track_selection ();
TrackSelection tmptracks;
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;
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) {
XMLNode *before = &(playlist->get_state());
bool got_some = false;
XMLNode *before;
bool got_some;
before = &(playlist->get_state());
got_some = false;
/* XXX need to consider musical time selections here at some point */
double speed = t->diskstream()->speed();
double speed = rtv->get_diskstream()->speed();
for (list<AudioRange>::const_iterator t = ts.begin(); t != ts.end(); ++t) {
@ -2986,29 +3018,59 @@ Editor::align_selection_relative (RegionPoint point, nframes_t position, const R
switch (point) {
case Start:
pos = r->first_frame ();
pos = position;
if (position > r->position()) {
distance = position - r->position();
dir = 1;
} else {
distance = r->position() - position;
dir = -1;
}
break;
case End:
pos = r->last_frame();
if (position > r->last_frame()) {
distance = position - r->last_frame();
pos = r->position() + distance;
dir = 1;
} else {
distance = r->last_frame() - position;
pos = r->position() - distance;
dir = -1;
}
break;
case SyncPoint:
pos = r->adjust_to_sync (r->first_frame());
pos = r->adjust_to_sync (position);
if (pos > r->position()) {
distance = pos - r->position();
dir = 1;
} else {
distance = r->position() - pos;
dir = -1;
}
break;
}
if (pos > position) {
distance = pos - position;
dir = -1;
} else {
distance = position - pos;
dir = 1;
if (pos == r->position()) {
return;
}
begin_reversible_command (_("align selection (relative)"));
for (RegionSelection::const_iterator i = rs.begin(); i != rs.end(); ++i) {
/* move first one specially */
XMLNode &before = r->playlist()->get_state();
r->set_position (pos, this);
XMLNode &after = r->playlist()->get_state();
session->add_command(new MementoCommand<Playlist>(*(r->playlist()), &before, &after));
/* move rest by the same amount */
RegionSelection::const_iterator i = rs.begin();
++i;
for (; i != rs.end(); ++i) {
boost::shared_ptr<Region> region ((*i)->region());
@ -3100,7 +3162,7 @@ Editor::trim_region_to_punch ()
void
Editor::trim_region_to_location (const Location& loc, const char* str)
{
ensure_entered_region_selected ();
ExclusiveRegionSelection ers (*this, entered_regionview);
RegionSelection& rs (get_regions_for_action ());
@ -3151,6 +3213,8 @@ Editor::trim_region_to_location (const Location& loc, const char* str)
void
Editor::trim_region_to_edit_point ()
{
ExclusiveRegionSelection ers (*this, entered_regionview);
RegionSelection& rs (get_regions_for_action ());
nframes64_t where = get_preferred_edit_position();
@ -3193,6 +3257,8 @@ Editor::trim_region_to_edit_point ()
void
Editor::trim_region_from_edit_point ()
{
ExclusiveRegionSelection ers (*this, entered_regionview);
RegionSelection& rs (get_regions_for_action ());
nframes64_t where = get_preferred_edit_position();
@ -4292,16 +4358,16 @@ Editor::toggle_region_opaque ()
void
Editor::set_fade_length (bool in)
{
ensure_entered_region_selected (true);
ExclusiveRegionSelection esr (*this, entered_regionview);
/* we need a region to measure the offset from the start */
RegionView* rv;
if (entered_regionview) {
rv = entered_regionview;
} else if (!selection->regions.empty()) {
if (!selection->regions.empty()) {
rv = selection->regions.front();
} else if (entered_regionview) {
rv = entered_regionview;
} else {
return;
}
@ -4309,6 +4375,11 @@ Editor::set_fade_length (bool in)
nframes64_t pos = get_preferred_edit_position();
nframes_t len;
char* cmd;
if (pos > rv->region()->last_frame() || pos < rv->region()->first_frame()) {
/* edit point is outside the relevant region */
return;
}
if (in) {
if (pos <= rv->region()->position()) {
@ -4337,7 +4408,13 @@ Editor::set_fade_length (bool in)
return;
}
boost::shared_ptr<AutomationList> alist = tmp->audio_region()->fade_in();
boost::shared_ptr<AutomationList> alist;
if (in) {
alist = tmp->audio_region()->fade_in();
} else {
alist = tmp->audio_region()->fade_out();
}
XMLNode &before = alist->get_state();
if (in) {
@ -4347,13 +4424,12 @@ Editor::set_fade_length (bool in)
}
XMLNode &after = alist->get_state();
session->add_command(new MementoCommand<AutomationList>(*alist.get(), &before, &after));
session->add_command(new MementoCommand<AutomationList>(*alist, &before, &after));
}
commit_reversible_command ();
}
void
Editor::toggle_fade_active (bool in)
{
@ -4366,7 +4442,6 @@ Editor::toggle_fade_active (bool in)
const char* cmd = (in ? _("toggle fade in active") : _("toggle fade out active"));
bool have_switch = false;
bool yn;
bool in_command = false;
begin_reversible_command (cmd);
@ -4382,25 +4457,31 @@ Editor::toggle_fade_active (bool in)
/* make the behaviour consistent across all regions */
if (!have_switch) {
yn = region->fade_in_active();
if (in) {
yn = region->fade_in_active();
} else {
yn = region->fade_out_active();
}
have_switch = true;
}
XMLNode &before = region->get_state();
region->set_fade_in_active (!yn);
if (in) {
region->set_fade_in_active (!yn);
} else {
region->set_fade_out_active (!yn);
}
XMLNode &after = region->get_state();
session->add_command(new MementoCommand<AudioRegion>(*region.get(), &before, &after));
in_command = true;
}
if (in_command) {
commit_reversible_command ();
}
commit_reversible_command ();
}
void
Editor::set_fade_in_shape (AudioRegion::FadeShape shape)
{
begin_reversible_command (_("set fade in shape"));
for (RegionSelection::iterator x = selection->regions.begin(); x != selection->regions.end(); ++x) {
@ -4420,6 +4501,7 @@ Editor::set_fade_in_shape (AudioRegion::FadeShape shape)
}
commit_reversible_command ();
}
void
@ -4468,6 +4550,8 @@ Editor::set_fade_in_active (bool yn)
XMLNode &after = ar->get_state();
session->add_command(new MementoCommand<AudioRegion>(*ar, &before, &after));
}
commit_reversible_command ();
}
void
@ -4491,6 +4575,8 @@ Editor::set_fade_out_active (bool yn)
XMLNode &after = ar->get_state();
session->add_command(new MementoCommand<AudioRegion>(*ar, &before, &after));
}
commit_reversible_command ();
}
@ -4600,27 +4686,29 @@ Editor::ensure_entered_track_selected (bool op_really_wants_one_track_if_none_ar
void
Editor::ensure_entered_region_selected (bool op_really_wants_one_region_if_none_are_selected)
{
if (entered_regionview && mouse_mode == MouseObject) {
if (!entered_regionview || mouse_mode != MouseObject) {
return;
}
/* heuristic:
- if there is no existing selection, don't change it. the operation will thus apply to "all"
- if there is an existing selection, but the entered regionview isn't in it, add it. this
avoids key-mouse ops on unselected regions from interfering with an existing selection,
but also means that the operation will apply to the pointed-at region.
*/
if (!selection->regions.empty()) {
if (find (selection->regions.begin(), selection->regions.end(), entered_regionview) != selection->regions.end()) {
selection->add (entered_regionview);
}
} else {
/* there is no selection, but this operation requires/prefers selected objects */
if (op_really_wants_one_region_if_none_are_selected) {
selection->set (entered_regionview, false);
}
/* heuristic:
- if there is no existing selection, don't change it. the operation will thus apply to "all"
- if there is an existing selection, but the entered regionview isn't in it, add it. this
avoids key-mouse ops on unselected regions from interfering with an existing selection,
but also means that the operation will apply to the pointed-at region.
*/
if (!selection->regions.empty()) {
if (!selection->selected (entered_regionview)) {
selection->add (entered_regionview);
}
} else {
/* there is no selection, but this operation requires/prefers selected objects */
if (op_really_wants_one_region_if_none_are_selected) {
selection->set (entered_regionview, false);
}
}
}
@ -4640,6 +4728,8 @@ Editor::trim_region_back ()
void
Editor::trim_region (bool front)
{
ExclusiveRegionSelection ers (*this, entered_regionview);
nframes64_t where = get_preferred_edit_position();
RegionSelection& rs = get_regions_for_action ();
@ -4662,6 +4752,7 @@ Editor::trim_region (bool front)
session->add_command(new MementoCommand<Playlist>(*pl.get(), &before, &after));
}
}
commit_reversible_command ();
}
@ -4764,7 +4855,7 @@ Editor::set_loop_from_region (bool play)
nframes64_t start = max_frames;
nframes64_t end = 0;
ensure_entered_region_selected (true);
ExclusiveRegionSelection esr (*this, entered_regionview);
if (selection->regions.empty()) {
info << _("cannot set loop: no region selected") << endmsg;
@ -4818,6 +4909,31 @@ Editor::set_punch_from_edit_range ()
set_punch_range (start, end, _("set punch range from edit range"));
}
void
Editor::set_punch_from_region ()
{
nframes64_t start = max_frames;
nframes64_t end = 0;
ExclusiveRegionSelection esr (*this, entered_regionview);
if (selection->regions.empty()) {
info << _("cannot set punch: no region selected") << endmsg;
return;
}
for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
if ((*i)->region()->position() < start) {
start = (*i)->region()->position();
}
if ((*i)->region()->last_frame() + 1 > end) {
end = (*i)->region()->last_frame() + 1;
}
}
set_punch_range (start, end, _("set punch range from region"));
}
void
Editor::pitch_shift_regions ()
{

View File

@ -808,7 +808,7 @@ void
Editor::select_all (Selection::Operation op)
{
list<Selectable *> touched;
for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) {
if ((*iter)->hidden()) {
continue;
@ -991,7 +991,15 @@ Editor::select_all_selectables_using_time_selection ()
return;
}
for (TrackViewList::iterator iter = selection->tracks.begin(); iter != selection->tracks.end(); ++iter) {
TrackSelection* ts;
if (selection->tracks.empty()) {
ts = &track_views;
} else {
ts = &selection->tracks;
}
for (TrackViewList::iterator iter = ts->begin(); iter != ts->end(); ++iter) {
if ((*iter)->hidden()) {
continue;
}
@ -1014,7 +1022,16 @@ Editor::select_all_selectables_using_punch()
return;
}
for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) {
TrackSelection* ts;
if (selection->tracks.empty()) {
ts = &track_views;
} else {
ts = &selection->tracks;
}
for (TrackViewList::iterator iter = ts->begin(); iter != ts->end(); ++iter) {
if ((*iter)->hidden()) {
continue;
}
@ -1036,7 +1053,16 @@ Editor::select_all_selectables_using_loop()
return;
}
for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) {
TrackSelection* ts;
if (selection->tracks.empty()) {
ts = &track_views;
} else {
ts = &selection->tracks;
}
for (TrackViewList::iterator iter = ts->begin(); iter != ts->end(); ++iter) {
if ((*iter)->hidden()) {
continue;
}
@ -1069,7 +1095,16 @@ Editor::select_all_selectables_using_cursor (Cursor *cursor, bool after)
}
}
for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) {
TrackSelection* ts;
if (selection->tracks.empty()) {
ts = &track_views;
} else {
ts = &selection->tracks;
}
for (TrackViewList::iterator iter = ts->begin(); iter != ts->end(); ++iter) {
if ((*iter)->hidden()) {
continue;
}
@ -1100,7 +1135,16 @@ Editor::select_all_selectables_using_edit (bool after)
}
}
for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) {
TrackSelection* ts;
if (selection->tracks.empty()) {
ts = &track_views;
} else {
ts = &selection->tracks;
}
for (TrackViewList::iterator iter = ts->begin(); iter != ts->end(); ++iter) {
if ((*iter)->hidden()) {
continue;
}
@ -1120,8 +1164,16 @@ Editor::select_all_selectables_between (bool within)
if (!get_edit_op_range (start, end)) {
return;
}
for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) {
TrackSelection* ts;
if (selection->tracks.empty()) {
ts = &track_views;
} else {
ts = &selection->tracks;
}
for (TrackViewList::iterator iter = ts->begin(); iter != ts->end(); ++iter) {
if ((*iter)->hidden()) {
continue;
}
@ -1241,3 +1293,28 @@ Editor::deselect_all ()
{
selection->clear ();
}
Editor::ExclusiveRegionSelection::ExclusiveRegionSelection (Editor& ed, RegionView* rv)
: editor (ed),
regionview (rv)
{
if (!rv || ed.current_mouse_mode() != Editing::MouseObject) {
return;
}
if (ed.get_selection().regions.empty() && !ed.get_selection().selected (rv)) {
ed.get_selection().set (rv, false);
remove = true;
} else {
remove = false;
}
}
Editor::ExclusiveRegionSelection::~ExclusiveRegionSelection ()
{
if (remove) {
editor.get_selection().remove (regionview);
}
}

View File

@ -17,6 +17,7 @@
*/
#include <iostream>
#include <cstdlib>
#include <cmath>
@ -27,6 +28,7 @@
#include <pbd/memento_command.h>
#include <gtkmm2ext/window_title.h>
#include <gtkmm2ext/utils.h>
#include "editor.h"
#include "audio_time_axis.h"
@ -42,8 +44,14 @@
#include <ardour/stretch.h>
#include <ardour/pitch.h>
#ifdef USE_RUBBERBAND
#include <rubberband/RubberBandStretcher.h>
using namespace RubberBand;
#endif
#include "i18n.h"
using namespace std;
using namespace ARDOUR;
using namespace PBD;
using namespace sigc;
@ -54,14 +62,16 @@ Editor::TimeFXDialog::TimeFXDialog (Editor& e, bool pitch)
: ArdourDialog (X_("time fx dialog")),
editor (e),
pitching (pitch),
pitch_octave_adjustment (0.0, 0.0, 4.0, 1, 2.0),
pitch_semitone_adjustment (0.0, 0.0, 12.0, 1.0, 4.0),
pitch_cent_adjustment (0.0, 0.0, 150.0, 5.0, 15.0),
pitch_octave_adjustment (0.0, -4.0, 4.0, 1, 2.0),
pitch_semitone_adjustment (0.0, -12.0, 12.0, 1.0, 4.0),
pitch_cent_adjustment (0.0, -499.0, 500.0, 5.0, 15.0),
pitch_octave_spinner (pitch_octave_adjustment),
pitch_semitone_spinner (pitch_semitone_adjustment),
pitch_cent_spinner (pitch_cent_adjustment),
quick_button (_("Quick but Ugly")),
antialias_button (_("Skip Anti-aliasing"))
antialias_button (_("Skip Anti-aliasing")),
stretch_opts_label (_("Contents:")),
precise_button (_("Strict Linear"))
{
set_modal (true);
set_position (Gtk::WIN_POS_MOUSE);
@ -79,8 +89,6 @@ Editor::TimeFXDialog::TimeFXDialog (Editor& e, bool pitch)
get_vbox()->set_spacing (5);
get_vbox()->set_border_width (12);
get_vbox()->pack_start (upper_button_box, false, false);
get_vbox()->pack_start (progress_bar);
if (pitching) {
@ -105,19 +113,44 @@ Editor::TimeFXDialog::TimeFXDialog (Editor& e, bool pitch)
add_button (_("Shift"), Gtk::RESPONSE_ACCEPT);
get_vbox()->pack_start (upper_button_box, false, false);
} else {
#ifdef USE_RUBBERBAND
opts_box.set_spacing (5);
opts_box.set_border_width (5);
vector<string> strings;
set_popdown_strings (stretch_opts_selector, editor.rb_opt_strings);
/* set default */
stretch_opts_selector.set_active_text (editor.rb_opt_strings[4]);
opts_box.pack_start (precise_button, false, false);
opts_box.pack_start (stretch_opts_label, false, false);
opts_box.pack_start (stretch_opts_selector, false, false);
get_vbox()->pack_start (opts_box, false, false);
#else
upper_button_box.set_homogeneous (true);
upper_button_box.set_spacing (5);
upper_button_box.set_border_width (5);
upper_button_box.pack_start (quick_button, true, true);
upper_button_box.pack_start (antialias_button, true, true);
quick_button.set_name (N_("TimeFXButton"));
antialias_button.set_name (N_("TimeFXButton"));
get_vbox()->pack_start (upper_button_box, false, false);
#endif
add_button (_("Stretch/Shrink"), Gtk::RESPONSE_ACCEPT);
}
quick_button.set_name (N_("TimeFXButton"));
antialias_button.set_name (N_("TimeFXButton"));
get_vbox()->pack_start (progress_bar);
progress_bar.set_name (N_("TimeFXProgress"));
show_all_children ();
@ -184,6 +217,7 @@ Editor::time_fx (RegionSelection& regions, float val, bool pitching)
if (pitching) {
float cents = current_timefx->pitch_octave_adjustment.get_value() * 1200.0;
float pitch_fraction;
cents += current_timefx->pitch_semitone_adjustment.get_value() * 100.0;
cents += current_timefx->pitch_cent_adjustment.get_value();
@ -193,19 +227,15 @@ Editor::time_fx (RegionSelection& regions, float val, bool pitching)
return 0;
}
// we now have the pitch shift in cents. divide by 1200 to get octaves
// then multiply by 2.0 because 1 octave == doubling the frequency
cents /= 1200.0;
cents /= 2.0;
// add 1.0 to convert to RB scale
cents += 1.0;
// one octave == 1200 cents
// adding one octave doubles the frequency
// ratio is 2^^octaves
pitch_fraction = pow(2, cents/1200);
current_timefx->request.time_fraction = 1.0;
current_timefx->request.pitch_fraction = cents;
current_timefx->request.pitch_fraction = pitch_fraction;
} else {
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.antialias = !current_timefx->antialias_button.get_active();
#endif
current_timefx->request.progress = 0.0f;
current_timefx->request.done = false;
current_timefx->request.cancel = false;
@ -239,7 +331,7 @@ Editor::time_fx (RegionSelection& regions, float val, bool pitching)
sigc::connection c = Glib::signal_timeout().connect (mem_fun (current_timefx, &TimeFXDialog::update_progress), 100);
while (!current_timefx->request.done) {
while (!current_timefx->request.done && !current_timefx->request.cancel) {
gtk_main_iteration ();
}

View File

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

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 ()
{
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_fader_name (const char * name);
void setup_atv_meter (int);
void clear_meters ();
private:

View File

@ -10,6 +10,8 @@
#include <pbd/strsplit.h>
#include <pbd/replace_all.h>
#include <ardour/profile.h>
#include "actions.h"
#include "keyboard.h"
#include "keyeditor.h"
@ -22,7 +24,10 @@ using namespace Gdk;
using namespace PBD;
KeyEditor::KeyEditor ()
: ArdourDialog (_("Keybinding Editor"), false)
: ArdourDialog (_("Shortcut Editor"), false)
, unbind_button (_("Remove shortcut"))
, unbind_box (BUTTONBOX_END)
{
can_bind = false;
last_state = 0;
@ -31,7 +36,7 @@ KeyEditor::KeyEditor ()
view.set_model (model);
view.append_column (_("Action"), columns.action);
view.append_column (_("Binding"), columns.binding);
view.append_column (_("Shortcut"), columns.binding);
view.set_headers_visible (true);
view.get_selection()->set_mode (SELECTION_SINGLE);
view.set_reorderable (false);
@ -45,11 +50,49 @@ KeyEditor::KeyEditor ()
scroller.add (view);
scroller.set_policy (Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC);
unbind_box.pack_start (unbind_button, false, false);
unbind_button.signal_clicked().connect (mem_fun (*this, &KeyEditor::unbind));
get_vbox()->set_spacing (6);
get_vbox()->pack_start (scroller);
if (!ARDOUR::Profile->get_sae()) {
get_vbox()->pack_start (unbind_box, false, false);
unbind_box.show ();
unbind_button.show ();
}
get_vbox()->set_border_width (12);
scroller.show ();
view.show ();
scroller.show ();
unbind_button.set_sensitive (false);
}
void
KeyEditor::unbind ()
{
TreeModel::iterator i = view.get_selection()->get_selected();
unbind_button.set_sensitive (false);
if (i != model->children().end()) {
string path = (*i)[columns.path];
if (!(*i)[columns.bindable]) {
return;
}
bool result = AccelMap::change_entry (path,
0,
(ModifierType) 0,
true);
if (result) {
(*i)[columns.binding] = string ();
}
}
}
void
@ -69,6 +112,28 @@ KeyEditor::on_unmap ()
void
KeyEditor::action_selected ()
{
if (view.get_selection()->count_selected_rows() == 0) {
return;
}
TreeModel::iterator i = view.get_selection()->get_selected();
unbind_button.set_sensitive (false);
if (i != model->children().end()) {
string path = (*i)[columns.path];
if (!(*i)[columns.bindable]) {
return;
}
string binding = (*i)[columns.binding];
if (!binding.empty()) {
unbind_button.set_sensitive (true);
}
}
}
bool
@ -112,8 +177,6 @@ KeyEditor::on_key_release_event (GdkEventKey* ev)
(*i)[columns.binding] = string();
}
}
}
out:

View File

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

View File

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

View File

@ -42,6 +42,7 @@ using namespace ARDOUR;
using namespace PBD;
#include "opts.h"
#include "utils.h"
NewSessionDialog::NewSessionDialog()
: ArdourDialog ("session control")
@ -348,6 +349,30 @@ NewSessionDialog::NewSessionDialog()
get_vbox()->set_spacing(0);
get_vbox()->pack_start(*m_notebook, Gtk::PACK_SHRINK, 0);
/*
icon setting is done again in the editor (for the whole app),
but its all chickens and eggs at this point.
*/
list<Glib::RefPtr<Gdk::Pixbuf> > window_icons;
Glib::RefPtr<Gdk::Pixbuf> icon;
if ((icon = ::get_icon ("ardour_icon_16px")) != 0) {
window_icons.push_back (icon);
}
if ((icon = ::get_icon ("ardour_icon_22px")) != 0) {
window_icons.push_back (icon);
}
if ((icon = ::get_icon ("ardour_icon_32px")) != 0) {
window_icons.push_back (icon);
}
if ((icon = ::get_icon ("ardour_icon_48px")) != 0) {
window_icons.push_back (icon);
}
if (!window_icons.empty()) {
set_icon_list (window_icons);
}
WindowTitle title(Glib::get_application_name());
title += _("Session Control");
set_title(title.get_string());
@ -360,7 +385,7 @@ NewSessionDialog::NewSessionDialog()
// add_button(Gtk::Stock::HELP, Gtk::RESPONSE_HELP);
add_button(Gtk::Stock::QUIT, Gtk::RESPONSE_CANCEL);
add_button(Gtk::Stock::CLEAR, Gtk::RESPONSE_NONE);
m_okbutton = add_button(Gtk::Stock::OPEN, Gtk::RESPONSE_OK);
m_okbutton = add_button(Gtk::Stock::NEW, Gtk::RESPONSE_OK);
recent_model = Gtk::TreeStore::create (recent_columns);
m_treeview->set_model (recent_model);
@ -425,7 +450,6 @@ NewSessionDialog::NewSessionDialog()
m_treeview->signal_row_activated().connect (mem_fun (*this, &NewSessionDialog::recent_row_activated));
m_open_filechooser->signal_selection_changed ().connect (mem_fun (*this, &NewSessionDialog::file_chosen));
m_template->signal_selection_changed ().connect (mem_fun (*this, &NewSessionDialog::template_chosen));
m_name->grab_focus();
page_set = Pages (0);
}
@ -523,7 +547,10 @@ NewSessionDialog::session_name() const
}
*/
if (on_newable_page()) {
int page = m_notebook->get_current_page();
if (page == 0 || page == 2) {
/* new or audio setup pages */
return Glib::filename_from_utf8(m_name->get_text());
} else {
if (m_treeview->get_selection()->count_selected_rows() == 0) {
@ -537,12 +564,13 @@ NewSessionDialog::session_name() const
std::string
NewSessionDialog::session_folder() const
{
if (on_newable_page()) {
return Glib::filename_from_utf8(m_folder->get_filename());
if (m_notebook->get_current_page() == 0) {
return Glib::filename_from_utf8(m_folder->get_filename());
} else {
if (m_treeview->get_selection()->count_selected_rows() == 0) {
std::string str = Glib::filename_from_utf8(m_open_filechooser->get_filename());
return Glib::path_get_dirname(str);
const string filename(Glib::filename_from_utf8(m_open_filechooser->get_filename()));
return Glib::path_get_dirname(filename);
}
Gtk::TreeModel::iterator i = m_treeview->get_selection()->get_selected();
return (*i)[recent_columns.fullpath];
@ -634,19 +662,62 @@ NewSessionDialog::connect_outs_to_physical() const
return m_connect_outputs_to_physical->get_active();
}
bool
NewSessionDialog::on_newable_page() const
{
return (m_notebook->get_current_page() == 0 ||
m_notebook->get_current_page() == 2);
}
int
NewSessionDialog::get_current_page() const
{
return m_notebook->get_current_page();
}
NewSessionDialog::Pages
NewSessionDialog::which_page ()
{
int num = m_notebook->get_current_page();
if (page_set == NewPage) {
return NewPage;
} else if (page_set == OpenPage) {
return OpenPage;
} else if (page_set == EnginePage) {
return EnginePage;
} else if (page_set == NewPage|OpenPage) {
switch (num) {
case 0:
return NewPage;
default:
return OpenPage;
}
} else if (page_set == NewPage|EnginePage) {
switch (num) {
case 0:
return NewPage;
default:
return EnginePage;
}
} else if (page_set == NewPage|EnginePage|OpenPage) {
switch (num) {
case 0:
return NewPage;
case 1:
return OpenPage;
default:
return EnginePage;
}
} else if (page_set == OpenPage|EnginePage) {
switch (num) {
case 0:
return OpenPage;
default:
return EnginePage;
}
}
}
void
NewSessionDialog::set_current_page(int page)
{
@ -678,8 +749,11 @@ NewSessionDialog::notebook_page_changed (GtkNotebookPage* np, uint pagenum)
return;
}
if (!on_newable_page ()) {
switch (which_page()) {
case OpenPage:
on_new_session_page = false;
m_okbutton->set_label(_("Open"));
m_okbutton->set_image (*(manage (new Gtk::Image (Gtk::Stock::OPEN, Gtk::ICON_SIZE_BUTTON))));
set_response_sensitive (Gtk::RESPONSE_NONE, false);
m_okbutton->set_image (*(new Gtk::Image (Gtk::Stock::OPEN, Gtk::ICON_SIZE_BUTTON)));
if (m_treeview->get_selection()->count_selected_rows() == 0) {
@ -687,14 +761,24 @@ NewSessionDialog::notebook_page_changed (GtkNotebookPage* np, uint pagenum)
} else {
set_response_sensitive (Gtk::RESPONSE_OK, true);
}
} else {
if (m_name->get_text() != "") {
set_response_sensitive (Gtk::RESPONSE_NONE, true);
}
break;
case EnginePage:
on_new_session_page = false;
m_okbutton->set_label(_("Open"));
m_okbutton->set_image (*(manage (new Gtk::Image (Gtk::Stock::OPEN, Gtk::ICON_SIZE_BUTTON))));
set_response_sensitive (Gtk::RESPONSE_NONE, false);
set_response_sensitive (Gtk::RESPONSE_OK, true);
break;
default:
m_okbutton->set_label(_("New"));
m_okbutton->set_image (*(new Gtk::Image (Gtk::Stock::NEW, Gtk::ICON_SIZE_BUTTON)));
m_okbutton->set_label(_("New"));
m_okbutton->set_image (*(new Gtk::Image (Gtk::Stock::NEW, Gtk::ICON_SIZE_BUTTON)));
if (m_name->get_text() == "") {
set_response_sensitive (Gtk::RESPONSE_OK, false);
m_name->grab_focus();
} else {
set_response_sensitive (Gtk::RESPONSE_OK, true);
}
@ -718,12 +802,21 @@ NewSessionDialog::treeview_selection_changed ()
void
NewSessionDialog::file_chosen ()
{
if (on_newable_page ()) return;
switch (which_page()) {
case OpenPage:
break;
case NewPage:
case EnginePage:
return;
}
m_treeview->get_selection()->unselect_all();
if (get_window())
get_window()->set_cursor(Gdk::Cursor(Gdk::WATCH));
Glib::RefPtr<Gdk::Window> win (get_window());
if (win) {
win->set_cursor(Gdk::Cursor(Gdk::WATCH));
}
if (!m_open_filechooser->get_filename().empty()) {
set_response_sensitive (Gtk::RESPONSE_OK, true);

View File

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

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)
: ArdourDialog (_("edit tempo")),
note_frame (_("BPM denominator")),
bpm_adjustment (60.0, 1.0, 999.9, 0.1, 1.0, 1.0),
bpm_spinner (bpm_adjustment),
bpm_frame (_("Beats per minute")),
note_frame (_("BPM denominator")),
ok_button (action),
cancel_button (_("Cancel")),
when_bar_label (_("Bar")),

View File

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

View File

@ -199,7 +199,7 @@ load_rc_file (const string& filename, bool themechange)
return;
}
info << "Loading ui configuration file " << rc_file_path.to_string() << endmsg;
cerr << "Loading ui configuration file " << rc_file_path.to_string() << endmsg;
Gtkmm2ext::UI::instance()->load_rcfile (rc_file_path.to_string(), themechange);
}

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

View File

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

View File

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

View File

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

View File

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

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);
uint32_t old_flags = _flags;
if ((prop = node.property ("flags")) != 0) {
_flags = Flag (string_2_enum (prop->value(), _flags));
@ -599,17 +599,44 @@ AudioRegion::set_live_state (const XMLNode& node, Change& what_changed, bool sen
_fade_in->clear ();
if ((prop = child->property ("default")) != 0 || (prop = child->property ("steepness")) != 0 || _fade_in->set_state (*child)) {
if ((prop = child->property ("default")) != 0 || (prop = child->property ("steepness")) != 0) {
set_default_fade_in ();
}
} else {
XMLNode* grandchild = child->child ("AutomationList");
if (grandchild) {
_fade_in->set_state (*grandchild);
}
}
if ((prop = child->property ("active")) != 0) {
if (prop->value() == "yes") {
set_fade_in_active (true);
} else {
set_fade_in_active (true);
}
}
} else if (child->name() == "FadeOut") {
_fade_out->clear ();
if ((prop = child->property ("default")) != 0 || (prop = child->property ("steepness")) != 0 || _fade_out->set_state (*child)) {
if ((prop = child->property ("default")) != 0 || (prop = child->property ("steepness")) != 0) {
set_default_fade_out ();
}
} else {
XMLNode* grandchild = child->child ("AutomationList");
if (grandchild) {
_fade_out->set_state (*grandchild);
}
}
if ((prop = child->property ("active")) != 0) {
if (prop->value() == "yes") {
set_fade_out_active (true);
} else {
set_fade_out_active (false);
}
}
}
}

View File

@ -18,6 +18,7 @@
*/
#include <iostream>
#include <fstream>
#include <cstdio>
#include <cstdlib>
#include <cerrno>
@ -28,11 +29,13 @@
#include <fcntl.h>
#include <pbd/pthread_utils.h>
#include <pbd/file_utils.h>
#include <ardour/osc.h>
#include <ardour/session.h>
#include <ardour/route.h>
#include <ardour/audio_track.h>
#include <ardour/filesystem_paths.h>
#include "i18n.h"
@ -101,6 +104,24 @@ OSC::start ()
#endif
cerr << "OSC @ " << get_server_url () << endl;
sys::path url_file;
if (find_file_in_search_path (ardour_search_path() + system_config_search_path(),
"osc_url", url_file)) {
_osc_url_file = url_file.to_string();
ofstream urlfile;
urlfile.open(_osc_url_file.c_str(), ios::trunc);
if ( urlfile )
{
urlfile << get_server_url () << endl;
urlfile.close();
}
else
{
cerr << "Couldn't write '" << _osc_url_file << "'" <<endl;
}
}
register_callbacks();
@ -131,6 +152,9 @@ OSC::stop ()
unlink(_osc_unix_socket_path.c_str());
}
if (! _osc_url_file.empty() ) {
unlink(_osc_url_file.c_str() );
}
return 0;
}

View File

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

View File

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

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

View File

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

View File

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

View File

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

View File

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