Merge with 2.0-ongoing R2883.
git-svn-id: svn://localhost/ardour2/trunk@2885 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
bb457bb960
commit
8a2e30816e
|
@ -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);
|
||||
|
|
|
@ -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"));
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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'/>
|
||||
|
|
|
@ -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" "")
|
||||
|
|
|
@ -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'>
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 ();
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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 ();
|
||||
}
|
||||
|
||||
|
|
|
@ -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 ()
|
||||
{
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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 ();
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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++) {
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
@ -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")),
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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 */
|
||||
|
||||
|
|
|
@ -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];
|
||||
|
||||
|
|
|
@ -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&);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}*/
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue