Merge with 2.0-ongoing R3082.

Superficial generification of export stuff.


git-svn-id: svn://localhost/ardour2/branches/3.0@3088 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
David Robillard 2008-02-19 22:10:27 +00:00
parent 4cbd7f0eab
commit a2a6cc0404
31 changed files with 657 additions and 367 deletions

View file

@ -7,7 +7,7 @@
(gtk_accel_path "<Actions>/Transport/ToggleRoll" "space") (gtk_accel_path "<Actions>/Transport/ToggleRoll" "space")
(gtk_accel_path "<Actions>/Transport/ToggleRollForgetCapture" "<%PRIMARY%>space") (gtk_accel_path "<Actions>/Transport/ToggleRollForgetCapture" "<%PRIMARY%>space")
(gtk_accel_path "<Actions>/Transport/record-roll" "<%TERTIARY%>space") (gtk_accel_path "<Actions>/Transport/record-roll" "<%PRIMARY%>space")
(gtk_accel_path "<Actions>/Editor/align-regions-end" "<%PRIMARY%><%SECONDARY%>less") (gtk_accel_path "<Actions>/Editor/align-regions-end" "<%PRIMARY%><%SECONDARY%>less")
(gtk_accel_path "<Actions>/Editor/align-regions-end-relative" "<%PRIMARY%>less") (gtk_accel_path "<Actions>/Editor/align-regions-end-relative" "<%PRIMARY%>less")
@ -43,17 +43,18 @@
;; note that ctrl-w is special and consumed by the keyboard snooper ;; note that ctrl-w is special and consumed by the keyboard snooper
(gtk_accel_path "<Actions>/Editor/audition-at-mouse" "w") (gtk_accel_path "<Actions>/Editor/play-from-edit-point-and-return" "<%LEVEL4%>space")
(gtk_accel_path "<Actions>/Editor/play-edit-range" "<%SECONDARY%>space")
(gtk_accel_path "<Actions>/Editor/play-selected-regions" "s")
(gtk_accel_path "<Actions>/Main/Close" "<%PRIMARY%>w") (gtk_accel_path "<Actions>/Main/Close" "<%PRIMARY%>w")
(gtk_accel_path "<Actions>/Editor/set-fade-out-length" "e") (gtk_accel_path "<Actions>/Editor/set-fade-out-length" "e")
(gtk_accel_path "<Actions>/Main/ExportSession" "<%PRIMARY%>e") (gtk_accel_path "<Actions>/Main/ExportSession" "<%PRIMARY%>e")
(gtk_accel_path "<Actions>/Editor/select-all-before-edit-cursor" "<%PRIMARY%>e") (gtk_accel_path "<Actions>/Editor/select-all-before-edit-cursor" "<%PRIMARY%>e")
(gtk_accel_path "<Actions>/Editor/toggle-fade-out-active" "<%SECONDARY%>e") (gtk_accel_path "<Actions>/Editor/toggle-fade-out-active" "<%SECONDARY%>e")
(gtk_accel_path "<Actions>/Editor/show-editor-mixer" "<%TERTIARY%>e") (gtk_accel_path "<Actions>/Editor/show-editor-mixer" "<%TERTIARY%>e")
(gtk_accel_path "<Actions>/Common/goto-editor" "<%WINDOW%>e") ; (gtk_accel_path "<Actions>/Common/goto-editor" "<%SECONDARY%>e")
(gtk_accel_path "<Actions>/Editor/select-all-after-edit-cursor" "<%TERTIARY%><%PRIMARY%>e") (gtk_accel_path "<Actions>/Editor/select-all-after-edit-cursor" "<%TERTIARY%><%PRIMARY%>e")
(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-range" "r") (gtk_accel_path "<Actions>/Editor/redo" "<%PRIMARY%><%TERTIARY%>z")
(gtk_accel_path "<Actions>/Editor/redo" "<%PRIMARY%>r")
(gtk_accel_path "<Actions>/Transport/Record" "<%TERTIARY%>r") (gtk_accel_path "<Actions>/Transport/Record" "<%TERTIARY%>r")
(gtk_accel_path "<Actions>/Editor/temporal-zoom-out" "r") (gtk_accel_path "<Actions>/Editor/temporal-zoom-out" "r")
(gtk_accel_path "<Actions>/Editor/temporal-zoom-in" "t") (gtk_accel_path "<Actions>/Editor/temporal-zoom-in" "t")
@ -62,28 +63,28 @@
(gtk_accel_path "<Actions>/Editor/insert-region" "i") (gtk_accel_path "<Actions>/Editor/insert-region" "i")
(gtk_accel_path "<Actions>/Editor/addExistingAudioFiles" "<%PRIMARY%>i") (gtk_accel_path "<Actions>/Editor/addExistingAudioFiles" "<%PRIMARY%>i")
(gtk_accel_path "<Actions>/Editor/invert-selection" "<%TERTIARY%>i") (gtk_accel_path "<Actions>/Editor/invert-selection" "<%TERTIARY%>i")
(gtk_accel_path "<Actions>/Common/ToggleOptionsEditor" "<%WINDOW%>o") (gtk_accel_path "<Actions>/Common/ToggleOptionsEditor" "<%SECONDARY%>o")
(gtk_accel_path "<Actions>/Main/Open" "<%PRIMARY%>o") (gtk_accel_path "<Actions>/Main/Open" "<%PRIMARY%>o")
(gtk_accel_path "<Actions>/Main/Recent" "<%PRIMARY%><%TERTIARY%>o") (gtk_accel_path "<Actions>/Main/Recent" "<%PRIMARY%><%TERTIARY%>o")
(gtk_accel_path "<Actions>/Editor/set-playhead" "p") (gtk_accel_path "<Actions>/Editor/set-playhead" "w")
(gtk_accel_path "<Actions>/Editor/select-all-in-punch-range" "<%TERTIARY%>p") (gtk_accel_path "<Actions>/Editor/select-all-in-punch-range" "<%TERTIARY%>p")
;; MITTELZEILE ;; MITTELZEILE
(gtk_accel_path "<Actions>/Editor/trim-front" "a") (gtk_accel_path "<Actions>/Editor/trim-front" "a")
(gtk_accel_path "<Actions>/Editor/select-all" "<%PRIMARY%>a") (gtk_accel_path "<Actions>/Editor/select-all" "<%PRIMARY%>a")
(gtk_accel_path "<Actions>/Editor/trim-back" "s") (gtk_accel_path "<Actions>/Editor/trim-back" "d")
(gtk_accel_path "<Actions>/Common/Save" "<%PRIMARY%>s") (gtk_accel_path "<Actions>/Common/Save" "<%PRIMARY%>s")
(gtk_accel_path "<Actions>/Main/Snapshot" "<%PRIMARY%><%TERTIARY%>s") (gtk_accel_path "<Actions>/Main/Snapshot" "<%PRIMARY%><%TERTIARY%>s")
(gtk_accel_path "<Actions>/Editor/duplicate-region" "d") (gtk_accel_path "<Actions>/Editor/duplicate-region" "<%PRIMARY%>d")
(gtk_accel_path "<Actions>/Editor/multi-duplicate-region" "<%SECONDARY%>d") (gtk_accel_path "<Actions>/Editor/multi-duplicate-region" "<%PRIMARY%><%TERTIARY%>d")
(gtk_accel_path "<Actions>/Editor/toggle-follow-playhead" "f") (gtk_accel_path "<Actions>/Editor/toggle-follow-playhead" "f")
(gtk_accel_path "<Actions>/Editor/set-edit-point" "g") ; (gtk_accel_path "<Actions>/Editor/set-edit-point" "g")
(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-gain" "g") ; (gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-gain" "g")
(gtk_accel_path "<Actions>/Editor/nudge-backward" "g") (gtk_accel_path "<Actions>/Editor/nudge-backward" "g")
(gtk_accel_path "<Actions>/Editor/nudge-forward" "h") (gtk_accel_path "<Actions>/Editor/nudge-forward" "h")
(gtk_accel_path "<Actions>/Common/ToggleKeyEditor" "<%WINDOW%>k") (gtk_accel_path "<Actions>/Common/ToggleKeyEditor" "<%SECONDARY%>k")
(gtk_accel_path "<Actions>/Common/ToggleLocations" "<%WINDOW%>l") (gtk_accel_path "<Actions>/Common/ToggleLocations" "<%SECONDARY%>l")
(gtk_accel_path "<Actions>/Transport/Loop" "l") (gtk_accel_path "<Actions>/Transport/Loop" "l")
(gtk_accel_path "<Actions>/Editor/select-all-in-loop-range" "<%TERTIARY%>l") (gtk_accel_path "<Actions>/Editor/select-all-in-loop-range" "<%TERTIARY%>l")
@ -97,14 +98,14 @@
(gtk_accel_path "<Actions>/Editor/editor-cut" "<%PRIMARY%>x") (gtk_accel_path "<Actions>/Editor/editor-cut" "<%PRIMARY%>x")
(gtk_accel_path "<Actions>/Editor/crop" "c") (gtk_accel_path "<Actions>/Editor/crop" "c")
(gtk_accel_path "<Actions>/Editor/editor-copy" "<%PRIMARY%>c") (gtk_accel_path "<Actions>/Editor/editor-copy" "<%PRIMARY%>c")
(gtk_accel_path "<Actions>/Common/ToggleColorManager" "<%WINDOW%>c") (gtk_accel_path "<Actions>/Common/ToggleColorManager" "<%SECONDARY%>c")
(gtk_accel_path "<Actions>/Editor/editor-paste" "<%PRIMARY%>v") (gtk_accel_path "<Actions>/Editor/editor-paste" "<%PRIMARY%>v")
(gtk_accel_path "<Actions>/Common/ToggleBigClock" "<%WINDOW%>b") (gtk_accel_path "<Actions>/Common/ToggleBigClock" "<%SECONDARY%>b")
(gtk_accel_path "<Actions>/Editor/normalize-region" "n") (gtk_accel_path "<Actions>/Editor/normalize-region" "n")
(gtk_accel_path "<Actions>/Main/New" "<%PRIMARY%>n") (gtk_accel_path "<Actions>/Main/New" "<%PRIMARY%>n")
(gtk_accel_path "<Actions>/Main/AddTrackBus" "<%PRIMARY%><%TERTIARY%>n") (gtk_accel_path "<Actions>/Main/AddTrackBus" "<%PRIMARY%><%TERTIARY%>n")
(gtk_accel_path "<Actions>/Common/goto-mixer" "<%WINDOW%>m") (gtk_accel_path "<Actions>/Common/goto-mixer" "<%SECONDARY%>m")
(gtk_accel_path "<Actions>/Editor/add-location-from-playhead" "m") (gtk_accel_path "<Actions>/Editor/add-location-from-playhead" "KP_Enter")
(gtk_accel_path "<Actions>/Editor/mute-unmute-region" "<%SECONDARY%>m") (gtk_accel_path "<Actions>/Editor/mute-unmute-region" "<%SECONDARY%>m")
;; arrow keys, navigation etc. ;; arrow keys, navigation etc.

View file

@ -80,7 +80,8 @@ ActionManager::init ()
ui_manager->add_ui_from_file (ui_file.to_string()); ui_manager->add_ui_from_file (ui_file.to_string());
loaded = true; loaded = true;
} catch (Glib::MarkupError& err) { } catch (Glib::MarkupError& err) {
error << _("badly formatted UI definition file") << endmsg; error << string_compose (_("badly formatted UI definition file: %1"), err.what()) << endmsg;
cerr << string_compose (_("badly formatted UI definition file: %1"), err.what()) << endl;
} catch (...) { } catch (...) {
error << _("Ardour menu definition file not found") << endmsg; error << _("Ardour menu definition file not found") << endmsg;
} }

View file

@ -1,12 +1,11 @@
<ui> <ui>
<menubar name='Main' action='MainMenu'> <menubar name='Main' action='MainMenu'>
<menu name='Session' action='Session'> <menu name='Session' action='Session'>
<menuitem action='New'/> <menuitem action='New'/>
<menuitem action='Open'/> <menuitem action='Open'/>
<menuitem action='Recent'/> <menuitem action='Recent'/>
<menuitem action='Close'/> <menuitem action='Close'/>
<menuitem action='Quit'/>
<separator/> <separator/>
<menuitem action='Save'/> <menuitem action='Save'/>
<menuitem action='Snapshot'/> <menuitem action='Snapshot'/>
@ -18,6 +17,7 @@
<menuitem action='addExistingAudioFiles'/> <menuitem action='addExistingAudioFiles'/>
<separator/> <separator/>
<menuitem action='ExportSession'/> <menuitem action='ExportSession'/>
<menuitem action='export-region'/>
</menu> </menu>
<separator/> <separator/>
@ -28,57 +28,67 @@
<menuitem action='ToggleOptionsEditor'/> <menuitem action='ToggleOptionsEditor'/>
<menuitem action='About'/> <menuitem action='About'/>
</menu> </menu>
<menu name='Transport' action='Transport'> <menu name='Transport' action='Transport'>
<menuitem action='ToggleRoll'/> <menuitem action='ToggleRoll'/>
<menuitem action='play-from-edit-point-and-return'/> <menu action="PlayMenu">
<menuitem action='play-selected-regions'/>
<menuitem action='play-edit-range'/> <menuitem action='play-edit-range'/>
<menuitem action='record-roll'/> <menuitem action='play-from-edit-point-and-return'/>
<menuitem action='ToggleRollForgetCapture'/>
<menuitem action='Loop'/> <menuitem action='Loop'/>
<menuitem action='loop-region'/> </menu>
<menuitem action='set-playhead'/> <menuitem action='record-roll'/>
<menuitem action='Record'/>
<menuitem action='ToggleRollForgetCapture'/>
<menuitem action='remove-last-capture'/>
<menu action="SetLoopMenu">
<menuitem action='set-loop-from-edit-range'/>
<menuitem action='set-loop-from-region'/>
</menu>
<menu action="SetPunchMenu">
<menuitem action='set-punch-from-edit-range'/>
<menuitem action='set-punch-from-region'/>
</menu>
<menuitem action='Forward'/> <menuitem action='Forward'/>
<menuitem action='Rewind'/> <menuitem action='Rewind'/>
<menuitem action='GotoZero'/>
<menuitem action='GotoStart'/>
<menuitem action='GotoEnd'/>
<separator/>
<menuitem action='tab-to-transient-forwards'/>
<menuitem action='tab-to-transient-backwards'/>
<menuitem action='nudge-playhead-forward'/>
<menuitem action='nudge-playhead-backward'/>
<separator/>
<menuitem action='Record'/>
<separator/>
<menuitem action='TransitionToRoll'/> <menuitem action='TransitionToRoll'/>
<menuitem action='TransitionToReverse'/> <menuitem action='TransitionToReverse'/>
<menuitem action='center-playhead'/>
<menuitem action='set-playhead'/>
<menuitem action='playhead-to-edit'/>
<menuitem action='nudge-playhead-forward'/>
<menuitem action='nudge-playhead-backward'/>
<menu action="MovePlayHeadMenu">
<menuitem action='tab-to-transient-forwards'/>
<menuitem action='tab-to-transient-backwards'/>
<separator/> <separator/>
<menuitem action='jump-forward-to-mark'/> <menuitem action='playhead-forward-to-grid'/>
<menuitem action='jump-backward-to-mark'/> <menuitem action='playhead-backward-to-grid'/>
<menuitem action='add-location-from-playhead'/>
<separator/> <separator/>
<menuitem action='playhead-to-next-region-boundary'/> <menuitem action='playhead-to-next-region-boundary'/>
<menuitem action='playhead-to-previous-region-boundary'/> <menuitem action='playhead-to-previous-region-boundary'/>
<menuitem action='playhead-to-next-region-sync'/> <menuitem action='playhead-to-next-region-sync'/>
<menuitem action='playhead-to-previous-region-sync'/> <menuitem action='playhead-to-previous-region-sync'/>
<menuitem action='center-playhead'/>
<separator/> <separator/>
<menuitem action='playhead-to-edit'/> <menuitem action='jump-forward-to-mark'/>
<menuitem action='focus-on-clock'/> <menuitem action='jump-backward-to-mark'/>
</menu>
<menu action="MoveActiveMarkMenu">
<menuitem action='selected-marker-to-next-region-boundary'/>
<menuitem action='selected-marker-to-previous-region-boundary'/>
<menuitem action='edit-cursor-to-next-region-sync'/>
<menuitem action='edit-cursor-to-previous-region-sync'/>
<separator/> <separator/>
<menuitem action='TogglePunchIn'/> <menuitem action='edit-to-playhead'/>
<menuitem action='TogglePunchOut'/> <menuitem action='set-edit-point'/>
<menuitem action='ToggleAutoInput'/> </menu>
<menuitem action='ToggleAutoPlay'/>
<menuitem action='ToggleAutoReturn'/> <menu action="MarkerMenu">
<menuitem action='ToggleClick'/> <menuitem action='add-location-from-playhead'/>
<menuitem action='toggle-follow-playhead'/>
<separator/> <separator/>
<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-1'/>
<menuitem action='goto-mark-2'/> <menuitem action='goto-mark-2'/>
<menuitem action='goto-mark-3'/> <menuitem action='goto-mark-3'/>
@ -89,19 +99,64 @@
<menuitem action='goto-mark-8'/> <menuitem action='goto-mark-8'/>
<menuitem action='goto-mark-9'/> <menuitem action='goto-mark-9'/>
</menu> </menu>
<separator/>
<menuitem action='TogglePunchIn'/>
<menuitem action='TogglePunchOut'/>
<menuitem action='ToggleAutoInput'/>
<menuitem action='ToggleAutoPlay'/>
<menuitem action='ToggleAutoReturn'/>
<menuitem action='ToggleClick'/>
<menuitem action='toggle-follow-playhead'/>
<separator/>
<menu action='LocateToMarker'>
</menu> </menu>
<menu name='Edit' action='Edit'> </menu>
<menu action='Edit'>
<menuitem action='undo'/> <menuitem action='undo'/>
<menuitem action='redo'/> <menuitem action='redo'/>
<menuitem action='editor-cut'/> <menuitem action='editor-cut'/>
<menuitem action='editor-delete'/>
<menuitem action='editor-copy'/> <menuitem action='editor-copy'/>
<menuitem action='editor-paste'/> <menuitem action='editor-paste'/>
<menuitem action='set-edit-point'/> <separator/>
<menuitem action='editor-delete'/>
<menuitem action='split-region'/>
<menu action="SeparateMenu">
<menuitem action='editor-separate'/> <menuitem action='editor-separate'/>
<menuitem action='separate-from-loop'/>
<menuitem action='separate-from-punch'/>
</menu>
<separator/> <separator/>
<menuitem action='remove-last-capture'/> <menuitem action='duplicate-region'/>
<separator/> <menuitem action='multi-duplicate-region'/>
<menuitem action='region-fill-track'/>
<menu action="AlignMenu">
<menuitem action='align-regions-start'/>
<menuitem action='align-regions-start-relative'/>
<menuitem action='align-regions-end'/>
<menuitem action='align-regions-end-relative'/>
<menuitem action='align-regions-sync'/>
<menuitem action='align-regions-sync-relative'/>
</menu>
<menu action="NudgeRegionMenu">
<menuitem action="nudge-forward"/>
<menuitem action="nudge-backward"/>
</menu>
<menu action="TrimMenu">
<menuitem action='trim-front'/>
<menuitem action='trim-back'/>
<menuitem action='crop'/>
<menuitem action='trim-region-to-loop'/>
<menuitem action='trim-region-to-punch'/>
</menu>
<menu action="FadeMenu">
<menuitem action='set-fade-in-length'/>
<menuitem action='toggle-fade-in-active'/>
<menuitem action='set-fade-out-length'/>
<menuitem action='toggle-fade-out-active'/>
</menu>
<menu action="SelectMenu">
<menuitem action='select-all'/> <menuitem action='select-all'/>
<menuitem action='deselect-all'/> <menuitem action='deselect-all'/>
<menuitem action='invert-selection'/> <menuitem action='invert-selection'/>
@ -111,129 +166,76 @@
<menuitem action='select-all-within-cursors'/> <menuitem action='select-all-within-cursors'/>
<menuitem action='select-all-in-punch-range'/> <menuitem action='select-all-in-punch-range'/>
<menuitem action='select-all-in-loop-range'/> <menuitem action='select-all-in-loop-range'/>
<separator/>
<menuitem action='select-next-route'/>
<menuitem action='select-prev-route'/>
<separator/>
<menu action='EditCursorMovementOptions'>
<menuitem action='selected-marker-to-next-region-boundary'/>
<menuitem action='selected-marker-to-previous-region-boundary'/>
<menuitem action='edit-cursor-to-next-region-sync'/>
<menuitem action='edit-cursor-to-previous-region-sync'/>
<menuitem action='center-edit-cursor'/>
<menuitem action='edit-to-playhead'/>
</menu> </menu>
<menu name='KeyMouse Actions' action='KeyMouse Actions'> </menu>
<menuitem action='play-selected-regions'/>
<menuitem action='brush-at-mouse'/> <menu name='Regions' action='Regions'>
<menuitem action='insert-region'/>
<menuitem action='rename-region'/>
<menuitem action='auto-rename-region'/>
<menuitem action='raise-region'/>
<menuitem action='lower-region'/>
<menuitem action='naturalize-region'/>
<menuitem action='lock-region'/>
<menuitem action='set-region-sync-position'/>
<menuitem action='remove-region-sync'/>
<menuitem action='mute-unmute-region'/> <menuitem action='mute-unmute-region'/>
<separator/> <separator/>
<menuitem action='set-mouse-mode-object'/> <menuitem action='monoize-region'/>
<menuitem action='set-mouse-mode-range'/>
<menuitem action='set-mouse-mode-gain'/>
<menuitem action='set-mouse-mode-zoom'/>
<menuitem action='set-mouse-mode-timefx'/>
<separator/>
<menuitem action='cycle-edit-point'/>
<menuitem action='cycle-edit-point-with-marker'/>
<menuitem action='toggle-edit-mode'/>
<separator/>
<menuitem action='boost-region-gain'/>
<menuitem action='cut-region-gain'/>
</menu>
</menu>
<menu name='Regions' action='Regions'>
<menuitem action='crop'/>
<menuitem action='duplicate-region'/>
<menuitem action='insert-region'/>
<menuitem action='normalize-region'/> <menuitem action='normalize-region'/>
<menuitem action='split-region-at-transients'/> <menuitem action='split-region-at-transients'/>
<separator/> <separator/>
<menuitem action="nudge-forward"/> <menu action="RegionGainMenu">
<menuitem action="nudge-backward"/> <menuitem action='boost-region-gain'/>
<menuitem action='split-region'/> <menuitem action='cut-region-gain'/>
<menuitem action='set-region-sync-position'/>
<separator/>
<menuitem action='align-regions-start'/>
<menuitem action='align-regions-start-relative'/>
<menuitem action='align-regions-end'/>
<menuitem action='align-regions-end-relative'/>
<menuitem action='align-regions-sync'/>
<menuitem action='align-regions-sync-relative'/>
<separator/>
<menuitem action='set-fade-in-length'/>
<menuitem action='toggle-fade-in-active'/>
<menuitem action='set-fade-out-length'/>
<menuitem action='toggle-fade-out-active'/>
<separator/>
<menuitem action='trim-front'/>
<menuitem action='trim-back'/>
<menuitem action='trim-region-to-loop'/>
<menuitem action='trim-region-to-punch'/>
<separator/>
<menuitem action='pitch-shift-region'/>
<menuitem action='set-tempo-from-region'/>
<menuitem action='set-tempo-from-edit-range'/>
</menu> </menu>
<menuitem action='pitch-shift-region'/>
<menuitem action='reverse-region'/>
</menu>
<menu name='View' action = 'View'> <menu name='View' action = 'View'>
<menuitem action='ToggleMaximalEditor'/> <menuitem action='ToggleMaximalEditor'/>
<separator/> <menuitem action='show-editor-mixer'/>
<menu name='ZoomFocus' action='ZoomFocus'> <menuitem action='ToggleMeasureVisibility'/>
<menuitem action='zoom-focus-playhead'/> <menuitem action='ToggleLogoVisibility'/>
<menuitem action='zoom-focus-edit'/> <menu action="PrimaryClockMenu">
<menuitem action='zoom-focus-mouse'/> <menuitem action="primary-clock-bbt"/>
<menuitem action="primary-clock-minsec"/>
<menuitem action="primary-clock-samples"/>
<menuitem action="primary-clock-off"/>
</menu> </menu>
<menu name='SnapMode' action='SnapMode'> <menu action="SecondaryClockMenu">
<menuitem action='snap-off'/> <menuitem action="secondary-clock-bbt"/>
<menuitem action='snap-normal'/> <menuitem action="secondary-clock-minsec"/>
<menuitem action='snap-magnetic'/> <menuitem action="secondary-clock-samples"/>
<separator/> <menuitem action="secondary-clock-off"/>
<menuitem action='cycle-snap-mode'/>
</menu>
<menu name='SnapTo' action='SnapTo'>
<menuitem action='snap-to-cd-frame'/>
<menuitem action='snap-to-smpte-frame'/>
<menuitem action='snap-to-smpte-seconds'/>
<menuitem action='snap-to-smpte-minutes'/>
<menuitem action='snap-to-seconds'/>
<menuitem action='snap-to-minutes'/>
<menuitem action='snap-to-thirtyseconds'/>
<menuitem action='snap-to-asixteenthbeat'/>
<menuitem action='snap-to-eighths'/>
<menuitem action='snap-to-quarters'/>
<menuitem action='snap-to-thirds'/>
<menuitem action='snap-to-beat'/>
<menuitem action='snap-to-bar'/>
<menuitem action='snap-to-mark'/>
<menuitem action='snap-to-region-start'/>
<menuitem action='snap-to-region-end'/>
<menuitem action='snap-to-region-sync'/>
<menuitem action='snap-to-region-boundary'/>
<menuitem action='cycle-snap-choice'/>
</menu> </menu>
<menu action="RulerMenu">
<menuitem action="toggle-bbt-ruler"/>
<menuitem action="toggle-minsec-ruler"/>
<menuitem action="toggle-samples-ruler"/>
<separator/> <separator/>
<menuitem action="toggle-meter-ruler"/>
<menuitem action="toggle-tempo-ruler"/>
<menuitem action="toggle-range-ruler"/>
<menuitem action="toggle-cd-marker-ruler"/>
<menuitem action="toggle-loop-punch-ruler"/>
</menu>
<menu action="ZoomMenu">
<menuitem action='temporal-zoom-in'/> <menuitem action='temporal-zoom-in'/>
<menuitem action='temporal-zoom-out'/> <menuitem action='temporal-zoom-out'/>
<menuitem action='zoom-to-session'/> <menuitem action='zoom-to-session'/>
<menuitem action='zoom-to-region'/> <menuitem action='zoom-to-region'/>
<menuitem action='toggle-zoom'/> <menuitem action='toggle-zoom'/>
</menu>
<menu action="ScrollMenu">
<menuitem action='scroll-tracks-down'/> <menuitem action='scroll-tracks-down'/>
<menuitem action='scroll-tracks-up'/> <menuitem action='scroll-tracks-up'/>
<menuitem action='scroll-tracks-down'/>
<menuitem action='step-tracks-up'/>
<menuitem action='step-tracks-down'/>
<separator/>
<menuitem action='scroll-forward'/> <menuitem action='scroll-forward'/>
<menuitem action='scroll-backward'/> <menuitem action='scroll-backward'/>
</menu>
<separator/> <separator/>
<menuitem action='scroll-playhead-forward'/> <menu action="Windows">
<menuitem action='scroll-playhead-backward'/>
<separator/>
<menuitem action='show-editor-mixer'/>
<menuitem action='SyncEditorAndMixerTrackOrder'/>
<menuitem action='ToggleMeasureVisibility'/>
<menuitem action='ToggleLogoVisibility'/>
<separator/>
<menuitem action='goto-editor'/> <menuitem action='goto-editor'/>
<menuitem action='goto-mixer'/> <menuitem action='goto-mixer'/>
<menuitem action='ToggleLocations'/> <menuitem action='ToggleLocations'/>
@ -242,14 +244,56 @@
<menuitem action='ToggleBigClock'/> <menuitem action='ToggleBigClock'/>
<menuitem action='toggle-rhythm-ferret'/> <menuitem action='toggle-rhythm-ferret'/>
</menu> </menu>
</menu>
<menu name='Options' action='Options'> <menu name='Options' action='Options'>
<menu action='Monitoring'> <menu action='Monitoring'>
<menuitem action='UseSoftwareMonitoring'/> <menuitem action='UseSoftwareMonitoring'/>
<menuitem action='UseExternalMonitoring'/> <menuitem action='UseExternalMonitoring'/>
</menu> </menu>
<menu action="TempoMenu">
<menuitem action='set-tempo-from-region'/>
<menuitem action='set-tempo-from-edit-range'/>
</menu>
<menu action="LatchMenu">
<menuitem action='LatchedSolo'/> <menuitem action='LatchedSolo'/>
</menu>
<menu action="Link">
<menuitem action='link-region-and-track-selection'/> <menuitem action='link-region-and-track-selection'/>
</menu> </menu>
<menu action='ZoomFocusMenu'>
<menuitem action='zoom-focus-playhead'/>
<menuitem action='zoom-focus-edit'/>
<menuitem action='zoom-focus-mouse'/>
</menu>
<menu action="EditPointMenu">
<menuitem action='edit-point-playhead'/>
<menuitem action='edit-point-mouse'/>
<menuitem action='edit-point-marker'/>
</menu>
<menu action='KeyMouseActions'>
<menuitem action='select-next-route'/>
<menuitem action='select-prev-route'/>
<menuitem action='focus-on-clock'/>
<menuitem action='GotoZero'/>
<menuitem action='GotoStart'/>
<menuitem action='GotoEnd'/>
<menuitem action='set-mouse-mode-object'/>
<menuitem action='set-mouse-mode-range'/>
<menuitem action='set-mouse-mode-gain'/>
<menuitem action='set-mouse-mode-zoom'/>
<menuitem action='set-mouse-mode-timefx'/>
<menuitem action='cycle-edit-point'/>
<menuitem action='cycle-edit-point-with-marker'/>
<menuitem action='toggle-edit-mode'/>
<menuitem action='snap-off'/>
<menuitem action='snap-normal'/>
<menuitem action='snap-magnetic'/>
<menuitem action='cycle-snap-mode'/>
<menuitem action='cycle-snap-choice'/>
</menu>
</menu>
</menubar> </menubar>
<popup name='redirectmenu'> <popup name='redirectmenu'>

View file

@ -123,7 +123,7 @@
</menu> </menu>
<menuitem action='set-tempo-from-region'/> <menuitem action='set-tempo-from-region'/>
<menuitem action='set-tempo-from-edit-range'/> <menuitem action='set-tempo-from-edit-range'/>
<menu name='KeyMouse Actions' action='KeyMouse Actions'> <menu action='KeyMouseActions'>
<menuitem action='play-selected-regions'/> <menuitem action='play-selected-regions'/>
<menuitem action='brush-at-mouse'/> <menuitem action='brush-at-mouse'/>
<menuitem action='set-edit-point'/> <menuitem action='set-edit-point'/>

View file

@ -92,7 +92,7 @@ ARDOUR_UI::install_actions ()
ActionManager::register_action (main_actions, X_("Options"), _("Options")); ActionManager::register_action (main_actions, X_("Options"), _("Options"));
ActionManager::register_action (main_actions, X_("TransportOptions"), _("Options")); ActionManager::register_action (main_actions, X_("TransportOptions"), _("Options"));
ActionManager::register_action (main_actions, X_("Help"), _("Help")); ActionManager::register_action (main_actions, X_("Help"), _("Help"));
ActionManager::register_action (main_actions, X_("KeyMouse Actions"), _("KeyMouse Actions")); ActionManager::register_action (main_actions, X_("KeyMouseActions"), _("Misc. Shortcuts"));
ActionManager::register_action (main_actions, X_("AudioFileFormat"), _("Audio File Format")); ActionManager::register_action (main_actions, X_("AudioFileFormat"), _("Audio File Format"));
ActionManager::register_action (main_actions, X_("AudioFileFormatHeader"), _("Header")); ActionManager::register_action (main_actions, X_("AudioFileFormatHeader"), _("Header"));
ActionManager::register_action (main_actions, X_("AudioFileFormatData"), _("Data")); ActionManager::register_action (main_actions, X_("AudioFileFormatData"), _("Data"));
@ -310,6 +310,24 @@ ARDOUR_UI::install_actions ()
ActionManager::session_sensitive_actions.push_back (act); ActionManager::session_sensitive_actions.push_back (act);
ActionManager::transport_sensitive_actions.push_back (act); ActionManager::transport_sensitive_actions.push_back (act);
act = ActionManager::register_action (transport_actions, X_("primary-clock-bbt"), _("Bars & Beats"), bind (mem_fun(primary_clock, &AudioClock::set_mode), AudioClock::BBT));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (transport_actions, X_("primary-clock-minsec"), _("Minutes & Seconds"), bind (mem_fun(primary_clock, &AudioClock::set_mode), AudioClock::MinSec));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (transport_actions, X_("primary-clock-samples"), _("Samples"), bind (mem_fun(primary_clock, &AudioClock::set_mode), AudioClock::Frames));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (transport_actions, X_("primary-clock-off"), _("Off"), bind (mem_fun(primary_clock, &AudioClock::set_mode), AudioClock::Off));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (transport_actions, X_("secondary-clock-bbt"), _("Bars & Beats"), bind (mem_fun(secondary_clock, &AudioClock::set_mode), AudioClock::BBT));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (transport_actions, X_("secondary-clock-minsec"), _("Minutes & Seconds"), bind (mem_fun(secondary_clock, &AudioClock::set_mode), AudioClock::MinSec));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (transport_actions, X_("secondary-clock-samples"), _("Samples"), bind (mem_fun(secondary_clock, &AudioClock::set_mode), AudioClock::Frames));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (transport_actions, X_("secondary-clock-off"), _("Off"), bind (mem_fun(secondary_clock, &AudioClock::set_mode), AudioClock::Off));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_toggle_action (transport_actions, X_("TogglePunchIn"), _("Punch In"), mem_fun(*this, &ARDOUR_UI::toggle_punch_in)); act = ActionManager::register_toggle_action (transport_actions, X_("TogglePunchIn"), _("Punch In"), mem_fun(*this, &ARDOUR_UI::toggle_punch_in));
ActionManager::session_sensitive_actions.push_back (act); ActionManager::session_sensitive_actions.push_back (act);
ActionManager::transport_sensitive_actions.push_back (act); ActionManager::transport_sensitive_actions.push_back (act);

View file

@ -809,8 +809,8 @@ AudioRegionView::create_waves ()
ChanCount nchans = atv.get_diskstream()->n_channels(); ChanCount nchans = atv.get_diskstream()->n_channels();
cerr << "creating waves for " << _region->name() << " with wfd = " << wait_for_data // cerr << "creating waves for " << _region->name() << " with wfd = " << wait_for_data
<< " and channels = " << nchans.n_audio() << endl; // << " and channels = " << nchans.n_audio() << endl;
/* in tmp_waves, set up null pointers for each channel so the vector is allocated */ /* in tmp_waves, set up null pointers for each channel so the vector is allocated */
for (uint32_t n = 0; n < nchans.n_audio(); ++n) { for (uint32_t n = 0; n < nchans.n_audio(); ++n) {
@ -825,21 +825,21 @@ AudioRegionView::create_waves ()
wave_caches.push_back (WaveView::create_cache ()); wave_caches.push_back (WaveView::create_cache ());
cerr << "\tchannel " << n << endl; // cerr << "\tchannel " << n << endl;
if (wait_for_data) { if (wait_for_data) {
if (audio_region()->audio_source(n)->peaks_ready (bind (mem_fun(*this, &AudioRegionView::peaks_ready_handler), n), data_ready_connection)) { if (audio_region()->audio_source(n)->peaks_ready (bind (mem_fun(*this, &AudioRegionView::peaks_ready_handler), n), data_ready_connection)) {
cerr << "\tData is ready\n"; // cerr << "\tData is ready\n";
cerr << "\tData is ready\n"; cerr << "\tData is ready\n";
create_one_wave (n, true); create_one_wave (n, true);
} else { } else {
cerr << "\tdata is not ready\n"; // cerr << "\tdata is not ready\n";
// we'll get a PeaksReady signal from the source in the future // we'll get a PeaksReady signal from the source in the future
// and will call create_one_wave(n) then. // and will call create_one_wave(n) then.
} }
} else { } else {
cerr << "\tdon't delay, display today!\n"; // cerr << "\tdon't delay, display today!\n";
create_one_wave (n, true); create_one_wave (n, true);
} }

View file

@ -153,7 +153,7 @@ static const gchar *_zoom_focus_strings[] = {
N_("Center"), N_("Center"),
N_("Playhead"), N_("Playhead"),
N_("Mouse"), N_("Mouse"),
N_("Edit Point"), N_("Active Mark"),
0 0
}; };
@ -1289,8 +1289,19 @@ Editor::connect_to_session (Session *t)
redisplay_route_list (); redisplay_route_list ();
} }
/* register for undo history */ switch (snap_type) {
case SnapToRegionStart:
case SnapToRegionEnd:
case SnapToRegionSync:
case SnapToRegionBoundary:
build_region_boundary_cache ();
break;
default:
break;
}
/* register for undo history */
session->register_with_memento_command_factory(_id, this); session->register_with_memento_command_factory(_id, this);
start_updating (); start_updating ();
@ -2163,8 +2174,6 @@ Editor::add_bus_context_items (Menu_Helpers::MenuList& edit_items)
edit_items.push_back (MenuElem (_("Nudge"), *nudge_menu)); edit_items.push_back (MenuElem (_("Nudge"), *nudge_menu));
} }
/* CURSOR SETTING AND MARKS AND STUFF */
void void
Editor::set_snap_to (SnapType st) Editor::set_snap_to (SnapType st)
{ {
@ -2193,6 +2202,14 @@ Editor::set_snap_to (SnapType st)
compute_bbt_ruler_scale (leftmost_frame, leftmost_frame + (nframes_t)(canvas_width * frames_per_unit)); compute_bbt_ruler_scale (leftmost_frame, leftmost_frame + (nframes_t)(canvas_width * frames_per_unit));
update_tempo_based_rulers (); update_tempo_based_rulers ();
break; break;
case SnapToRegionStart:
case SnapToRegionEnd:
case SnapToRegionSync:
case SnapToRegionBoundary:
build_region_boundary_cache ();
break;
default: default:
/* relax */ /* relax */
break; break;
@ -2229,8 +2246,6 @@ Editor::set_edit_point_preference (EditPoint ep)
return; return;
} }
if (Profile->get_sae()) {
switch (zoom_focus) { switch (zoom_focus) {
case ZoomFocusMouse: case ZoomFocusMouse:
case ZoomFocusPlayhead: case ZoomFocusPlayhead:
@ -2250,7 +2265,6 @@ Editor::set_edit_point_preference (EditPoint ep)
default: default:
break; break;
} }
}
instant_save (); instant_save ();
} }
@ -2527,13 +2541,19 @@ Editor::trackview_by_y_position (double y)
void void
Editor::snap_to (nframes64_t& start, int32_t direction, bool for_mark) Editor::snap_to (nframes64_t& start, int32_t direction, bool for_mark)
{ {
Location* before = 0;
Location* after = 0;
if (!session || snap_mode == SnapOff) { if (!session || snap_mode == SnapOff) {
return; return;
} }
snap_to_internal (start, direction, for_mark);
}
void
Editor::snap_to_internal (nframes64_t& start, int32_t direction, bool for_mark)
{
Location* before = 0;
Location* after = 0;
const nframes64_t one_second = session->frame_rate(); const nframes64_t one_second = session->frame_rate();
const nframes64_t one_minute = session->frame_rate() * 60; const nframes64_t one_minute = session->frame_rate() * 60;
const nframes64_t one_smpte_second = (nframes64_t)(rint(session->smpte_frames_per_second()) * session->frames_per_smpte_frame()); const nframes64_t one_smpte_second = (nframes64_t)(rint(session->smpte_frames_per_second()) * session->frames_per_smpte_frame());
@ -2542,7 +2562,7 @@ Editor::snap_to (nframes64_t& start, int32_t direction, bool for_mark)
switch (snap_type) { switch (snap_type) {
case SnapToCDFrame: case SnapToCDFrame:
if (direction) { if (((direction == 0) && (start % (one_second/75) > (one_second/75) / 2)) || (direction > 0)) {
start = (nframes_t) ceil ((double) start / (one_second / 75)) * (one_second / 75); start = (nframes_t) ceil ((double) start / (one_second / 75)) * (one_second / 75);
} else { } else {
start = (nframes_t) floor ((double) start / (one_second / 75)) * (one_second / 75); start = (nframes_t) floor ((double) start / (one_second / 75)) * (one_second / 75);
@ -2550,7 +2570,7 @@ Editor::snap_to (nframes64_t& start, int32_t direction, bool for_mark)
break; break;
case SnapToSMPTEFrame: case SnapToSMPTEFrame:
if (fmod((double)start, (double)session->frames_per_smpte_frame()) > (session->frames_per_smpte_frame() / 2)) { if (((direction == 0) && (fmod((double)start, (double)session->frames_per_smpte_frame()) > (session->frames_per_smpte_frame() / 2))) || (direction > 0)) {
start = (nframes_t) (ceil ((double) start / session->frames_per_smpte_frame()) * session->frames_per_smpte_frame()); start = (nframes_t) (ceil ((double) start / session->frames_per_smpte_frame()) * session->frames_per_smpte_frame());
} else { } else {
start = (nframes_t) (floor ((double) start / session->frames_per_smpte_frame()) * session->frames_per_smpte_frame()); start = (nframes_t) (floor ((double) start / session->frames_per_smpte_frame()) * session->frames_per_smpte_frame());
@ -2564,7 +2584,7 @@ Editor::snap_to (nframes64_t& start, int32_t direction, bool for_mark)
} else { } else {
start -= session->smpte_offset (); start -= session->smpte_offset ();
} }
if (start % one_smpte_second > one_smpte_second / 2) { if (((direction == 0) && (start % one_smpte_second > one_smpte_second / 2)) || direction > 0) {
start = (nframes_t) ceil ((double) start / one_smpte_second) * one_smpte_second; start = (nframes_t) ceil ((double) start / one_smpte_second) * one_smpte_second;
} else { } else {
start = (nframes_t) floor ((double) start / one_smpte_second) * one_smpte_second; start = (nframes_t) floor ((double) start / one_smpte_second) * one_smpte_second;
@ -2585,7 +2605,7 @@ Editor::snap_to (nframes64_t& start, int32_t direction, bool for_mark)
} else { } else {
start -= session->smpte_offset (); start -= session->smpte_offset ();
} }
if (start % one_smpte_minute > one_smpte_minute / 2) { if (((direction == 0) && (start % one_smpte_minute > one_smpte_minute / 2)) || direction > 0) {
start = (nframes_t) ceil ((double) start / one_smpte_minute) * one_smpte_minute; start = (nframes_t) ceil ((double) start / one_smpte_minute) * one_smpte_minute;
} else { } else {
start = (nframes_t) floor ((double) start / one_smpte_minute) * one_smpte_minute; start = (nframes_t) floor ((double) start / one_smpte_minute) * one_smpte_minute;
@ -2599,7 +2619,7 @@ Editor::snap_to (nframes64_t& start, int32_t direction, bool for_mark)
break; break;
case SnapToSeconds: case SnapToSeconds:
if (start % one_second > one_second / 2) { if (((direction == 0) && (start % one_second > one_second / 2)) || (direction > 0)) {
start = (nframes_t) ceil ((double) start / one_second) * one_second; start = (nframes_t) ceil ((double) start / one_second) * one_second;
} else { } else {
start = (nframes_t) floor ((double) start / one_second) * one_second; start = (nframes_t) floor ((double) start / one_second) * one_second;
@ -2607,7 +2627,7 @@ Editor::snap_to (nframes64_t& start, int32_t direction, bool for_mark)
break; break;
case SnapToMinutes: case SnapToMinutes:
if (start % one_minute > one_minute / 2) { if (((direction == 0) && (start % one_minute > one_minute / 2)) || (direction > 0)) {
start = (nframes_t) ceil ((double) start / one_minute) * one_minute; start = (nframes_t) ceil ((double) start / one_minute) * one_minute;
} else { } else {
start = (nframes_t) floor ((double) start / one_minute) * one_minute; start = (nframes_t) floor ((double) start / one_minute) * one_minute;
@ -2696,7 +2716,15 @@ Editor::snap_to (nframes64_t& start, int32_t direction, bool for_mark)
} }
if (i != region_boundary_cache.end()) { if (i != region_boundary_cache.end()) {
/* lower bound doesn't quite to the right thing for our purposes */
if (direction < 0 && i != region_boundary_cache.begin()) {
--i;
}
start = *i; start = *i;
} else { } else {
start = region_boundary_cache.back(); start = region_boundary_cache.back();
} }
@ -3596,7 +3624,7 @@ Editor::zoom_focus_selection_done ()
focus_type = ZoomFocusPlayhead; focus_type = ZoomFocusPlayhead;
} else if (choice == _("Edit")) { } else if (choice == _("Edit")) {
focus_type = ZoomFocusEdit; focus_type = ZoomFocusEdit;
} else if (choice == _("Edit Point")) { } else if (choice == _("Active Mark")) {
focus_type = ZoomFocusEdit; focus_type = ZoomFocusEdit;
} else { } else {
focus_type = ZoomFocusMouse; focus_type = ZoomFocusMouse;

View file

@ -189,6 +189,8 @@ class Editor : public PublicEditor
void new_region_from_selection (); void new_region_from_selection ();
void separate_regions_between (const TimeSelection&); void separate_regions_between (const TimeSelection&);
void separate_region_from_selection (); void separate_region_from_selection ();
void separate_region_from_punch ();
void separate_region_from_loop ();
void separate_regions_using_location (ARDOUR::Location&); void separate_regions_using_location (ARDOUR::Location&);
void toggle_playback (bool with_abort); void toggle_playback (bool with_abort);
void transition_to_rolling (bool forward); void transition_to_rolling (bool forward);
@ -1188,6 +1190,8 @@ class Editor : public PublicEditor
void center_edit_point (); void center_edit_point ();
void edit_cursor_backward (); void edit_cursor_backward ();
void edit_cursor_forward (); void edit_cursor_forward ();
void playhead_forward_to_grid ();
void playhead_backward_to_grid ();
void playhead_backward (); void playhead_backward ();
void playhead_forward (); void playhead_forward ();
void scroll_playhead (bool forward); void scroll_playhead (bool forward);
@ -2196,6 +2200,8 @@ public:
void select_next_route (); void select_next_route ();
void select_prev_route (); void select_prev_route ();
void snap_to_internal (nframes64_t& first, int32_t direction = 0, bool for_mark = false);
RhythmFerret* rhythm_ferret; RhythmFerret* rhythm_ferret;
}; };

View file

@ -44,26 +44,49 @@ Editor::register_actions ()
/* non-operative menu items for menu bar */ /* non-operative menu items for menu bar */
ActionManager::register_action (editor_actions, X_("Edit"), _("Edit")); ActionManager::register_action (editor_actions, X_("AlignMenu"), _("Align"));
ActionManager::register_action (editor_actions, X_("Select"), _("Select"));
ActionManager::register_action (editor_actions, X_("EditSelectRegionOptions"), _("Select Regions"));
ActionManager::register_action (editor_actions, X_("EditSelectRangeOptions"), _("Select Range Operations"));
ActionManager::register_action (editor_actions, X_("EditCursorMovementOptions"), _("Move Selected Marker"));
ActionManager::register_action (editor_actions, X_("RegionEditOps"), _("Region operations"));
ActionManager::register_action (editor_actions, X_("Tools"), _("Tools"));
ActionManager::register_action (editor_actions, X_("View"), _("View"));
ActionManager::register_action (editor_actions, X_("ZoomFocus"), _("Zoom Focus"));
ActionManager::register_action (editor_actions, X_("MeterHold"), _("Meter hold"));
ActionManager::register_action (editor_actions, X_("MeterFalloff"), _("Meter falloff"));
ActionManager::register_action (editor_actions, X_("Solo"), _("Solo"));
ActionManager::register_action (editor_actions, X_("Crossfades"), _("Crossfades"));
ActionManager::register_action (editor_actions, X_("Monitoring"), _("Monitoring"));
ActionManager::register_action (editor_actions, X_("Autoconnect"), _("Autoconnect")); ActionManager::register_action (editor_actions, X_("Autoconnect"), _("Autoconnect"));
ActionManager::register_action (editor_actions, X_("Crossfades"), _("Crossfades"));
ActionManager::register_action (editor_actions, X_("Edit"), _("Edit"));
ActionManager::register_action (editor_actions, X_("EditCursorMovementOptions"), _("Move Selected Marker"));
ActionManager::register_action (editor_actions, X_("EditSelectRangeOptions"), _("Select Range Operations"));
ActionManager::register_action (editor_actions, X_("EditSelectRegionOptions"), _("Select Regions"));
ActionManager::register_action (editor_actions, X_("EditPointMenu"), _("Edit Point"));
ActionManager::register_action (editor_actions, X_("FadeMenu"), _("Fade"));
ActionManager::register_action (editor_actions, X_("LatchMenu"), _("Latch"));
ActionManager::register_action (editor_actions, X_("Layering"), _("Layering")); ActionManager::register_action (editor_actions, X_("Layering"), _("Layering"));
ActionManager::register_action (editor_actions, X_("Timecode"), _("Timecode fps")); ActionManager::register_action (editor_actions, X_("Link"), _("Link"));
ActionManager::register_action (editor_actions, X_("Pullup"), _("Pullup / Pulldown"));
ActionManager::register_action (editor_actions, X_("Subframes"), _("Subframes"));
ActionManager::register_action (editor_actions, X_("LocateToMarker"), _("Locate To Markers")); ActionManager::register_action (editor_actions, X_("LocateToMarker"), _("Locate To Markers"));
ActionManager::register_action (editor_actions, X_("MarkerMenu"), _("Markers"));
ActionManager::register_action (editor_actions, X_("MeterFalloff"), _("Meter falloff"));
ActionManager::register_action (editor_actions, X_("MeterHold"), _("Meter hold"));
ActionManager::register_action (editor_actions, X_("Monitoring"), _("Monitoring"));
ActionManager::register_action (editor_actions, X_("MoveActiveMarkMenu"), _("Active Mark"));
ActionManager::register_action (editor_actions, X_("MovePlayHeadMenu"), _("Playhead"));
ActionManager::register_action (editor_actions, X_("NudgeRegionMenu"), _("Nudge"));
ActionManager::register_action (editor_actions, X_("PlayMenu"), _("Play"));
ActionManager::register_action (editor_actions, X_("PrimaryClockMenu"), _("Primary Clock"));
ActionManager::register_action (editor_actions, X_("Pullup"), _("Pullup / Pulldown"));
ActionManager::register_action (editor_actions, X_("RegionEditOps"), _("Region operations"));
ActionManager::register_action (editor_actions, X_("RegionGainMenu"), _("Gain"));
ActionManager::register_action (editor_actions, X_("RulerMenu"), _("Rulers"));
ActionManager::register_action (editor_actions, X_("ScrollMenu"), _("Scroll"));
ActionManager::register_action (editor_actions, X_("SecondaryClockMenu"), _("Secondary Clock"));
ActionManager::register_action (editor_actions, X_("Select"), _("Select"));
ActionManager::register_action (editor_actions, X_("SelectMenu"), _("Select"));
ActionManager::register_action (editor_actions, X_("SeparateMenu"), _("Separate"));
ActionManager::register_action (editor_actions, X_("SetLoopMenu"), _("Loop"));
ActionManager::register_action (editor_actions, X_("SetPunchMenu"), _("Punch"));
ActionManager::register_action (editor_actions, X_("Solo"), _("Solo"));
ActionManager::register_action (editor_actions, X_("Subframes"), _("Subframes"));
ActionManager::register_action (editor_actions, X_("TempoMenu"), _("Tempo"));
ActionManager::register_action (editor_actions, X_("Timecode"), _("Timecode fps"));
ActionManager::register_action (editor_actions, X_("Tools"), _("Tools"));
ActionManager::register_action (editor_actions, X_("TrimMenu"), _("Trim"));
ActionManager::register_action (editor_actions, X_("View"), _("View"));
ActionManager::register_action (editor_actions, X_("ZoomFocus"), _("Zoom"));
ActionManager::register_action (editor_actions, X_("ZoomMenu"), _("Zoom"));
ActionManager::register_action (editor_actions, X_("ZoomFocusMenu"), _("Zoom Focus"));
/* add named actions for the editor */ /* add named actions for the editor */
@ -210,6 +233,10 @@ Editor::register_actions ()
ActionManager::session_sensitive_actions.push_back (act); ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "nudge-playhead-backward", _("Nudge Playhead Backward"), bind (mem_fun(*this, &Editor::nudge_backward), false, true)); act = ActionManager::register_action (editor_actions, "nudge-playhead-backward", _("Nudge Playhead Backward"), bind (mem_fun(*this, &Editor::nudge_backward), false, true));
ActionManager::session_sensitive_actions.push_back (act); ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "playhead-forward-to-grid", _("Forward To Grid"), mem_fun(*this, &Editor::playhead_forward_to_grid));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "playhead-backward-to-grid", _("Backward To Grid"), mem_fun(*this, &Editor::playhead_backward_to_grid));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "temporal-zoom-out", _("Zoom Out"), bind (mem_fun(*this, &Editor::temporal_zoom_step), true)); act = ActionManager::register_action (editor_actions, "temporal-zoom-out", _("Zoom Out"), bind (mem_fun(*this, &Editor::temporal_zoom_step), true));
@ -255,31 +282,39 @@ Editor::register_actions ()
act = ActionManager::register_action (editor_actions, "trim-front", _("Trim start at edit point"), mem_fun(*this, &Editor::trim_region_front)); act = ActionManager::register_action (editor_actions, "trim-front", _("Trim start at edit point"), mem_fun(*this, &Editor::trim_region_front));
ActionManager::session_sensitive_actions.push_back (act); ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "trim-back", _("Trim end at edit point"), mem_fun(*this, &Editor::trim_region_back)); act = ActionManager::register_action (editor_actions, "trim-back", _("Trim end at edit point"), mem_fun(*this, &Editor::trim_region_back));
ActionManager::session_sensitive_actions.push_back (act); ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "trim-from-start", _("Start to edit point"), mem_fun(*this, &Editor::trim_region_from_edit_point)); act = ActionManager::register_action (editor_actions, "trim-from-start", _("Start to edit point"), mem_fun(*this, &Editor::trim_region_from_edit_point));
ActionManager::session_sensitive_actions.push_back (act); ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "trim-to-end", _("Edit point to end"), mem_fun(*this, &Editor::trim_region_to_edit_point)); act = ActionManager::register_action (editor_actions, "trim-to-end", _("Edit point to end"), mem_fun(*this, &Editor::trim_region_to_edit_point));
ActionManager::session_sensitive_actions.push_back (act); ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "trim-region-to-loop", _("Trim To Loop"), mem_fun(*this, &Editor::trim_region_to_loop)); act = ActionManager::register_action (editor_actions, "trim-region-to-loop", _("Trim To Loop"), mem_fun(*this, &Editor::trim_region_to_loop));
ActionManager::session_sensitive_actions.push_back (act); ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "trim-region-to-punch", _("Trim To Punch"), mem_fun(*this, &Editor::trim_region_to_punch)); act = ActionManager::register_action (editor_actions, "trim-region-to-punch", _("Trim To Punch"), mem_fun(*this, &Editor::trim_region_to_punch));
ActionManager::session_sensitive_actions.push_back (act); ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "set-loop-from-edit-range", _("Set Loop From Edit Range"), bind (mem_fun(*this, &Editor::set_loop_from_edit_range), false)); act = ActionManager::register_action (editor_actions, "set-loop-from-edit-range", _("Set Loop From Edit Range"), bind (mem_fun(*this, &Editor::set_loop_from_edit_range), false));
ActionManager::session_sensitive_actions.push_back (act); ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "set-loop-from-region", _("Set Loop From Region"), bind (mem_fun(*this, &Editor::set_loop_from_region), false)); act = ActionManager::register_action (editor_actions, "set-loop-from-region", _("Set Loop From Region"), bind (mem_fun(*this, &Editor::set_loop_from_region), false));
ActionManager::session_sensitive_actions.push_back (act); ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "loop-region", _("Loop Region"), bind (mem_fun(*this, &Editor::set_loop_from_region), true)); act = ActionManager::register_action (editor_actions, "loop-region", _("Loop Region"), bind (mem_fun(*this, &Editor::set_loop_from_region), true));
ActionManager::session_sensitive_actions.push_back (act); ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "set-punch-from-edit-range", _("Set Punch From Edit Range"), mem_fun(*this, &Editor::set_punch_from_edit_range)); act = ActionManager::register_action (editor_actions, "set-punch-from-edit-range", _("Set Punch From Edit Range"), mem_fun(*this, &Editor::set_punch_from_edit_range));
ActionManager::session_sensitive_actions.push_back (act); ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "set-punch-from-region", _("Set Punch From Region"), mem_fun(*this, &Editor::set_punch_from_region)); 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); ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "pitch-shift-region", _("Transpose"), mem_fun(*this, &Editor::pitch_shift_regions)); act = ActionManager::register_action (editor_actions, "pitch-shift-region", _("Transpose"), mem_fun(*this, &Editor::pitch_shift_regions));
ActionManager::session_sensitive_actions.push_back (act); ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "set-fade-in-length", _("Set Fade In Length"), bind (mem_fun(*this, &Editor::set_fade_length), true)); act = ActionManager::register_action (editor_actions, "set-fade-in-length", _("Set Fade In Length"), bind (mem_fun(*this, &Editor::set_fade_length), true));
ActionManager::session_sensitive_actions.push_back (act); ActionManager::session_sensitive_actions.push_back (act);
@ -292,17 +327,23 @@ Editor::register_actions ()
act = ActionManager::register_action (editor_actions, "align-regions-start", _("Align Regions Start"), bind (mem_fun(*this, &Editor::align), ARDOUR::Start)); act = ActionManager::register_action (editor_actions, "align-regions-start", _("Align Regions Start"), bind (mem_fun(*this, &Editor::align), ARDOUR::Start));
ActionManager::session_sensitive_actions.push_back (act); ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "align-regions-start-relative", _("Align Regions Start Relative"), bind (mem_fun(*this, &Editor::align_relative), ARDOUR::Start)); act = ActionManager::register_action (editor_actions, "align-regions-start-relative", _("Align Regions Start Relative"), bind (mem_fun(*this, &Editor::align_relative), ARDOUR::Start));
ActionManager::session_sensitive_actions.push_back (act); ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "align-regions-end", _("Align Regions End"), bind (mem_fun(*this, &Editor::align), ARDOUR::End)); act = ActionManager::register_action (editor_actions, "align-regions-end", _("Align Regions End"), bind (mem_fun(*this, &Editor::align), ARDOUR::End));
ActionManager::session_sensitive_actions.push_back (act); ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "align-regions-end-relative", _("Align Regions End Relative"), bind (mem_fun(*this, &Editor::align_relative), ARDOUR::End)); act = ActionManager::register_action (editor_actions, "align-regions-end-relative", _("Align Regions End Relative"), bind (mem_fun(*this, &Editor::align_relative), ARDOUR::End));
ActionManager::session_sensitive_actions.push_back (act); ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "align-regions-sync", _("Align Regions Sync"), bind (mem_fun(*this, &Editor::align), ARDOUR::SyncPoint)); act = ActionManager::register_action (editor_actions, "align-regions-sync", _("Align Regions Sync"), bind (mem_fun(*this, &Editor::align), ARDOUR::SyncPoint));
ActionManager::session_sensitive_actions.push_back (act); ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "align-regions-sync-relative", _("Align Regions Sync Relative"), bind (mem_fun(*this, &Editor::align_relative), ARDOUR::SyncPoint)); act = ActionManager::register_action (editor_actions, "align-regions-sync-relative", _("Align Regions Sync Relative"), bind (mem_fun(*this, &Editor::align_relative), ARDOUR::SyncPoint));
ActionManager::session_sensitive_actions.push_back (act); ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "play-from-edit-point", _("Play From Edit Point"), mem_fun(*this, &Editor::play_from_edit_point)); act = ActionManager::register_action (editor_actions, "play-from-edit-point", _("Play From Edit Point"), mem_fun(*this, &Editor::play_from_edit_point));
ActionManager::session_sensitive_actions.push_back (act); ActionManager::session_sensitive_actions.push_back (act);
@ -312,19 +353,81 @@ Editor::register_actions ()
act = ActionManager::register_action (editor_actions, "play-edit-range", _("Play Edit Range"), mem_fun(*this, &Editor::play_edit_range)); act = ActionManager::register_action (editor_actions, "play-edit-range", _("Play Edit Range"), mem_fun(*this, &Editor::play_edit_range));
act = ActionManager::register_action (editor_actions, "play-selected-regions", _("Play Selected Region(s)"), mem_fun(*this, &Editor::play_selected_region)); act = ActionManager::register_action (editor_actions, "play-selected-regions", _("Play Selected Region(s)"), mem_fun(*this, &Editor::play_selected_region));
ActionManager::session_sensitive_actions.push_back (act); ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "brush-at-mouse", _("Brush at Mouse"), mem_fun(*this, &Editor::kbd_brush)); act = ActionManager::register_action (editor_actions, "brush-at-mouse", _("Brush at Mouse"), mem_fun(*this, &Editor::kbd_brush));
ActionManager::session_sensitive_actions.push_back (act); ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "mute-unmute-region", _("Mute/Unmute Region"), mem_fun(*this, &Editor::kbd_mute_unmute_region));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "set-playhead", _("Set Playhead"), mem_fun(*this, &Editor::set_playhead_cursor)); act = ActionManager::register_action (editor_actions, "set-playhead", _("Set Playhead"), mem_fun(*this, &Editor::set_playhead_cursor));
ActionManager::session_sensitive_actions.push_back (act); ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "set-edit-point", _("Set Edit Point"), mem_fun(*this, &Editor::set_edit_point)); act = ActionManager::register_action (editor_actions, "set-edit-point", _("Set Edit Point"), mem_fun(*this, &Editor::set_edit_point));
ActionManager::session_sensitive_actions.push_back (act); ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "duplicate-region", _("Duplicate Region"), bind (mem_fun(*this, &Editor::duplicate_dialog), false));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "multi-duplicate-region", _("Multi-Duplicate Region"), bind (mem_fun(*this, &Editor::duplicate_dialog), true));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "duplicate-range", _("Duplicate Range"), bind (mem_fun(*this, &Editor::duplicate_dialog), false));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "insert-region", _("Insert Region"), mem_fun(*this, &Editor::keyboard_insert_region_list_selection));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "normalize-region", _("Normalize Region"), mem_fun(*this, &Editor::normalize_region));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "rename-region", _("Rename"), mem_fun(*this, &Editor::rename_region));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "auto-rename-region", _("Auto-Rename"), mem_fun(*this, &Editor::rename_region));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "boost-region-gain", _("Boost Region Gain"), bind (mem_fun(*this, &Editor::adjust_region_scale_amplitude), true));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "cut-region-gain", _("Cut Region Gain"), bind (mem_fun(*this, &Editor::adjust_region_scale_amplitude), false));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "split-region", _("Split Region"), mem_fun(*this, &Editor::split)); act = ActionManager::register_action (editor_actions, "split-region", _("Split Region"), mem_fun(*this, &Editor::split));
ActionManager::session_sensitive_actions.push_back (act); ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "set-region-sync-position", _("Set Region Sync Position"), mem_fun(*this, &Editor::set_region_sync_from_edit_point)); act = ActionManager::register_action (editor_actions, "set-region-sync-position", _("Set Region Sync Position"), mem_fun(*this, &Editor::set_region_sync_from_edit_point));
ActionManager::session_sensitive_actions.push_back (act); ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "remove-region-sync", _("Remove Region Sync"), mem_fun(*this, &Editor::remove_region_sync));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "raise-region", _("Raise Region"), mem_fun(*this, &Editor::raise_region));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "lower-region", _("Lower Region"), mem_fun(*this, &Editor::lower_region));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "export-region", _("Export Region"), mem_fun(*this, &Editor::export_region));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_toggle_action (editor_actions, "lock-region", _("Lock Region"), mem_fun(*this, &Editor::toggle_region_lock));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_toggle_action (editor_actions, "glue-region", _("Glue Region To Bars&Beats"), bind (mem_fun (*this, &Editor::set_region_lock_style), Region::MusicTime));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "naturalize-region", _("Move To Original Position"), mem_fun (*this, &Editor::naturalize));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "reverse-region", _("Reverse"), mem_fun (*this, &Editor::reverse_region));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "monoize-region", _("Make mono regions"), (mem_fun(*this, &Editor::split_multichannel_region)));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "region-fill-track", _("Fill Track"), (mem_fun(*this, &Editor::region_fill_track)));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "mute-unmute-region", _("Mute/Unmute Region"), mem_fun(*this, &Editor::kbd_mute_unmute_region));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
undo_action = act = ActionManager::register_action (editor_actions, "undo", _("Undo"), bind (mem_fun(*this, &Editor::undo), 1U)); undo_action = act = ActionManager::register_action (editor_actions, "undo", _("Undo"), bind (mem_fun(*this, &Editor::undo), 1U));
ActionManager::session_sensitive_actions.push_back (act); ActionManager::session_sensitive_actions.push_back (act);
@ -338,8 +441,16 @@ Editor::register_actions ()
act = ActionManager::register_action (editor_actions, "editor-separate", _("Separate"), mem_fun(*this, &Editor::separate_region_from_selection)); act = ActionManager::register_action (editor_actions, "editor-separate", _("Separate"), mem_fun(*this, &Editor::separate_region_from_selection));
ActionManager::session_sensitive_actions.push_back (act); ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "separate-from-punch", _("Separate Using Punch Range"), mem_fun(*this, &Editor::separate_region_from_punch));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "separate-from-loop", _("Separate Using Loop Range"), mem_fun(*this, &Editor::separate_region_from_loop));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "editor-crop", _("Crop"), mem_fun(*this, &Editor::crop_region_to_selection)); act = ActionManager::register_action (editor_actions, "editor-crop", _("Crop"), mem_fun(*this, &Editor::crop_region_to_selection));
ActionManager::session_sensitive_actions.push_back (act); ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "editor-cut", _("Cut"), mem_fun(*this, &Editor::cut)); act = ActionManager::register_action (editor_actions, "editor-cut", _("Cut"), mem_fun(*this, &Editor::cut));
ActionManager::session_sensitive_actions.push_back (act); ActionManager::session_sensitive_actions.push_back (act);
/* Note: for now, editor-delete does the exact same thing as editor-cut */ /* Note: for now, editor-delete does the exact same thing as editor-cut */
@ -349,23 +460,6 @@ Editor::register_actions ()
ActionManager::session_sensitive_actions.push_back (act); ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "editor-paste", _("Paste"), mem_fun(*this, &Editor::keyboard_paste)); act = ActionManager::register_action (editor_actions, "editor-paste", _("Paste"), mem_fun(*this, &Editor::keyboard_paste));
ActionManager::session_sensitive_actions.push_back (act); ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "duplicate-region", _("Duplicate Region"), bind (mem_fun(*this, &Editor::duplicate_dialog), false));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "multi-duplicate-region", _("Multi-Duplicate Region"), bind (mem_fun(*this, &Editor::duplicate_dialog), true));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "duplicate-range", _("Duplicate Range"), bind (mem_fun(*this, &Editor::duplicate_dialog), false));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "insert-region", _("Insert Region"), mem_fun(*this, &Editor::keyboard_insert_region_list_selection));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "reverse-region", _("Reverse Region"), mem_fun(*this, &Editor::reverse_region));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "normalize-region", _("Normalize Region"), mem_fun(*this, &Editor::normalize_region));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "boost-region-gain", _("Boost Region Gain"), bind (mem_fun(*this, &Editor::adjust_region_scale_amplitude), true));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "cut-region-gain", _("Cut Region Gain"), bind (mem_fun(*this, &Editor::adjust_region_scale_amplitude), false));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "quantize-region", _("Quantize Region"), mem_fun(*this, &Editor::quantize_region)); act = ActionManager::register_action (editor_actions, "quantize-region", _("Quantize Region"), mem_fun(*this, &Editor::quantize_region));
ActionManager::session_sensitive_actions.push_back (act); ActionManager::session_sensitive_actions.push_back (act);
@ -377,6 +471,7 @@ Editor::register_actions ()
act = ActionManager::register_action (editor_actions, "split-region-at-transients", _("Split Regions At Percussion Onsets"), mem_fun(*this, &Editor::split_region_at_transients)); act = ActionManager::register_action (editor_actions, "split-region-at-transients", _("Split Regions At Percussion Onsets"), mem_fun(*this, &Editor::split_region_at_transients));
ActionManager::session_sensitive_actions.push_back (act); ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "toggle-rhythm-ferret", _("Rhythm Ferret"), mem_fun(*this, &Editor::show_rhythm_ferret)); act = ActionManager::register_action (editor_actions, "toggle-rhythm-ferret", _("Rhythm Ferret"), mem_fun(*this, &Editor::show_rhythm_ferret));
ActionManager::session_sensitive_actions.push_back (act); ActionManager::session_sensitive_actions.push_back (act);
@ -441,6 +536,10 @@ Editor::register_actions ()
ActionManager::register_radio_action (editor_actions, edit_point_group, X_("edit-at-mouse"), _("Mouse"), (bind (mem_fun(*this, &Editor::edit_point_chosen), Editing::EditAtPlayhead))); ActionManager::register_radio_action (editor_actions, edit_point_group, X_("edit-at-mouse"), _("Mouse"), (bind (mem_fun(*this, &Editor::edit_point_chosen), Editing::EditAtPlayhead)));
ActionManager::register_radio_action (editor_actions, edit_point_group, X_("edit-at-selected-marker"), _("Marker"), (bind (mem_fun(*this, &Editor::edit_point_chosen), Editing::EditAtPlayhead))); ActionManager::register_radio_action (editor_actions, edit_point_group, X_("edit-at-selected-marker"), _("Marker"), (bind (mem_fun(*this, &Editor::edit_point_chosen), Editing::EditAtPlayhead)));
ActionManager::register_action (editor_actions, "edit-point-marker", _("Marker"), bind (mem_fun (*this, &Editor::set_edit_point_preference), EditAtSelectedMarker));
ActionManager::register_action (editor_actions, "edit-point-playhead", _("Playhead"), bind (mem_fun (*this, &Editor::set_edit_point_preference), EditAtPlayhead));
ActionManager::register_action (editor_actions, "edit-point-mouse", _("Mouse"), bind (mem_fun (*this, &Editor::set_edit_point_preference), EditAtMouse));
ActionManager::register_action (editor_actions, "cycle-edit-point", _("Change edit point"), bind (mem_fun (*this, &Editor::cycle_edit_point), false)); ActionManager::register_action (editor_actions, "cycle-edit-point", _("Change edit point"), bind (mem_fun (*this, &Editor::cycle_edit_point), false));
ActionManager::register_action (editor_actions, "cycle-edit-point-with-marker", _("Change edit point (w/Marker)"), bind (mem_fun (*this, &Editor::cycle_edit_point), true)); ActionManager::register_action (editor_actions, "cycle-edit-point-with-marker", _("Change edit point (w/Marker)"), bind (mem_fun (*this, &Editor::cycle_edit_point), true));
@ -482,6 +581,20 @@ Editor::register_actions ()
ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-region-sync"), _("Snap to region sync"), (bind (mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToRegionSync))); ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-region-sync"), _("Snap to region sync"), (bind (mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToRegionSync)));
ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-region-boundary"), _("Snap to region boundary"), (bind (mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToRegionBoundary))); ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-region-boundary"), _("Snap to region boundary"), (bind (mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToRegionBoundary)));
/* RULERS */
Glib::RefPtr<ActionGroup> ruler_actions = ActionGroup::create (X_("Rulers"));
ActionManager::register_toggle_action (ruler_actions, X_("toggle-tempo-ruler"), _("Tempo"), bind (mem_fun(*this, &Editor::ruler_toggled), (int)ruler_time_tempo));
ActionManager::register_toggle_action (ruler_actions, X_("toggle-meter-ruler"), _("Meter"), bind (mem_fun(*this, &Editor::ruler_toggled), (int)ruler_time_meter));
ActionManager::register_toggle_action (ruler_actions, X_("toggle-range-ruler"), _("Ranges"), bind (mem_fun(*this, &Editor::ruler_toggled), (int)ruler_time_range_marker));
ActionManager::register_toggle_action (ruler_actions, X_("toggle-marker-ruler"), _("Markers"), bind (mem_fun(*this, &Editor::ruler_toggled), (int)ruler_time_marker));
ActionManager::register_toggle_action (ruler_actions, X_("toggle-cd-marker-ruler"), _("CD Markers"), bind (mem_fun(*this, &Editor::ruler_toggled), (int)ruler_time_cd_marker));
ActionManager::register_toggle_action (ruler_actions, X_("toggle-loop-punch-ruler"), _("Loop/Punch"), bind (mem_fun(*this, &Editor::ruler_toggled), (int)ruler_time_transport_marker));
ActionManager::register_toggle_action (ruler_actions, X_("toggle-bbt-ruler"), _("Bars & Beats"), bind (mem_fun(*this, &Editor::ruler_toggled), (int)ruler_metric_frames));
ActionManager::register_toggle_action (ruler_actions, X_("toggle-samples-ruler"), _("Samples"), bind (mem_fun(*this, &Editor::ruler_toggled), (int)ruler_metric_bbt));
ActionManager::register_toggle_action (ruler_actions, X_("toggle-timecode-ruler"), _("Timecode"), bind (mem_fun(*this, &Editor::ruler_toggled), (int)ruler_metric_smpte));
ActionManager::register_toggle_action (ruler_actions, X_("toggle-minsec-ruler"), _("Timecode"), bind (mem_fun(*this, &Editor::ruler_toggled), (int)ruler_metric_minsec));
/* REGION LIST */ /* REGION LIST */
Glib::RefPtr<ActionGroup> rl_actions = ActionGroup::create (X_("RegionList")); Glib::RefPtr<ActionGroup> rl_actions = ActionGroup::create (X_("RegionList"));
@ -583,6 +696,7 @@ Editor::register_actions ()
&Editor::subframes_per_frame_chosen), 100)); &Editor::subframes_per_frame_chosen), 100));
ActionManager::add_action_group (rl_actions); ActionManager::add_action_group (rl_actions);
ActionManager::add_action_group (ruler_actions);
ActionManager::add_action_group (zoom_actions); ActionManager::add_action_group (zoom_actions);
ActionManager::add_action_group (mouse_mode_actions); ActionManager::add_action_group (mouse_mode_actions);
ActionManager::add_action_group (snap_actions); ActionManager::add_action_group (snap_actions);

View file

@ -2820,6 +2820,24 @@ Editor::separate_region_from_selection ()
} }
} }
void
Editor::separate_region_from_punch ()
{
Location* loc = session->locations()->auto_punch_location();
if (loc) {
separate_regions_using_location (*loc);
}
}
void
Editor::separate_region_from_loop ()
{
Location* loc = session->locations()->auto_loop_location();
if (loc) {
separate_regions_using_location (*loc);
}
}
void void
Editor::separate_regions_using_location (Location& loc) Editor::separate_regions_using_location (Location& loc)
{ {
@ -5487,3 +5505,29 @@ Editor::tab_to_transient (bool forward)
} }
} }
} }
void
Editor::playhead_forward_to_grid ()
{
if (!session) return;
nframes64_t pos = playhead_cursor->current_frame;
if (pos < max_frames) {
pos++;
snap_to_internal (pos, 1, false);
session->request_locate (pos);
}
}
void
Editor::playhead_backward_to_grid ()
{
if (!session) return;
nframes64_t pos = playhead_cursor->current_frame;
if (pos > 1) {
pos--;
snap_to_internal (pos, -1, false);
session->request_locate (pos);
}
}

View file

@ -795,6 +795,27 @@ Editor::region_selection_changed ()
(*i)->set_selected_regionviews (selection->regions); (*i)->set_selected_regionviews (selection->regions);
} }
bool have_selected_regions = !selection->regions.empty();
for (vector<Glib::RefPtr<Action> >::iterator x = ActionManager::region_selection_sensitive_actions.begin();
x != ActionManager::region_selection_sensitive_actions.end(); ++x) {
string accel_path = (*x)->get_accel_path ();
AccelKey key;
/* if there is an accelerator, it should always be sensitive
to allow for keyboard ops on entered regions.
*/
bool known = ActionManager::lookup_entry (accel_path, key);
if (known && ((key.get_key() != GDK_VoidSymbol) && (key.get_key() != 0))) {
(*x)->set_sensitive (true);
} else {
(*x)->set_sensitive (have_selected_regions);
}
}
zoomed_to_region = false; zoomed_to_region = false;
} }

View file

@ -975,7 +975,7 @@ ExportDialog::do_export ()
progress_connection = Glib::signal_timeout().connect (mem_fun(*this, &ExportDialog::progress_timeout), 100); progress_connection = Glib::signal_timeout().connect (mem_fun(*this, &ExportDialog::progress_timeout), 100);
cancel_label.set_text (_("Stop Export")); cancel_label.set_text (_("Stop Export"));
export_audio_data(); export_data();
progress_connection.disconnect (); progress_connection.disconnect ();
end_dialog (); end_dialog ();

View file

@ -48,7 +48,7 @@ class ExportDialog : public ArdourDialog
virtual Gtk::FileChooserAction browse_action() const { return Gtk::FILE_CHOOSER_ACTION_SAVE; } virtual Gtk::FileChooserAction browse_action() const { return Gtk::FILE_CHOOSER_ACTION_SAVE; }
protected: protected:
ARDOUR::AudioExportSpecification spec; ARDOUR::ExportSpecification spec;
Gtk::Frame file_frame; Gtk::Frame file_frame;
struct ExportModelColumns : public Gtk::TreeModel::ColumnRecord struct ExportModelColumns : public Gtk::TreeModel::ColumnRecord
@ -77,7 +77,7 @@ class ExportDialog : public ArdourDialog
// Gets called from within do_export. Is responsible for exporting the // Gets called from within do_export. Is responsible for exporting the
// audio data. spec has already been filled with user input before calling // audio data. spec has already been filled with user input before calling
// this method. The dialog will be closed after this function exited. // this method. The dialog will be closed after this function exited.
virtual void export_audio_data() = 0; virtual void export_data() = 0;
virtual bool wants_dir() { return false; } virtual bool wants_dir() { return false; }

View file

@ -54,7 +54,7 @@ ExportRangeMarkersDialog::browse_action () const
} }
void void
ExportRangeMarkersDialog::export_audio_data () ExportRangeMarkersDialog::export_data ()
{ {
getSession().locations()->apply(*this, &ExportRangeMarkersDialog::process_range_markers_export); getSession().locations()->apply(*this, &ExportRangeMarkersDialog::process_range_markers_export);
} }
@ -83,7 +83,7 @@ ExportRangeMarkersDialog::process_range_markers_export(Locations::LocationList&
getSession().request_locate(spec.start_frame, false); getSession().request_locate(spec.start_frame, false);
if (getSession().start_audio_export(spec)){ if (getSession().start_export(spec)){
// if export fails // if export fails
return; return;
} }

View file

@ -35,7 +35,7 @@ class ExportRangeMarkersDialog : public ExportDialog
protected: protected:
virtual bool is_filepath_valid(string &filepath); virtual bool is_filepath_valid(string &filepath);
void export_audio_data(); void export_data();
bool wants_dir() { return true; } bool wants_dir() { return true; }

View file

@ -28,14 +28,14 @@
#include "i18n.h" #include "i18n.h"
ExportRegionDialog::ExportRegionDialog (PublicEditor& editor, boost::shared_ptr<ARDOUR::Region> region) ExportRegionDialog::ExportRegionDialog (PublicEditor& editor, boost::shared_ptr<ARDOUR::Region> reg)
: ExportDialog(editor) : ExportDialog(editor)
, region(reg)
{ {
set_title (_("ardour: export region")); assert(region);
file_frame.set_label (_("Export to File")),
audio_region = boost::dynamic_pointer_cast<ARDOUR::AudioRegion>(region); set_title (_("Ardour: Export Region"));
assert(audio_region); file_frame.set_label (_("Export to File")),
do_not_allow_track_and_master_selection(); do_not_allow_track_and_master_selection();
do_not_allow_channel_count_selection(); do_not_allow_channel_count_selection();
@ -43,7 +43,7 @@ ExportRegionDialog::ExportRegionDialog (PublicEditor& editor, boost::shared_ptr<
void void
ExportRegionDialog::export_audio_data() ExportRegionDialog::export_data()
{ {
pthread_t thr; pthread_t thr;
pthread_create_and_store ("region export", &thr, 0, ExportRegionDialog::_export_region_thread, this); pthread_create_and_store ("region export", &thr, 0, ExportRegionDialog::_export_region_thread, this);
@ -71,5 +71,6 @@ ExportRegionDialog::_export_region_thread (void *arg)
void void
ExportRegionDialog::export_region () ExportRegionDialog::export_region ()
{ {
audio_region->exportme (getSession(), spec); region->exportme (getSession(), spec);
} }

View file

@ -33,10 +33,10 @@ class ExportRegionDialog : public ExportDialog
void export_region (); void export_region ();
protected: protected:
void export_audio_data(); void export_data();
private: private:
boost::shared_ptr<ARDOUR::AudioRegion> audio_region; boost::shared_ptr<ARDOUR::Region> region;
}; };

View file

@ -30,9 +30,9 @@ ExportSessionDialog::ExportSessionDialog (PublicEditor& editor)
} }
void void
ExportSessionDialog::export_audio_data () ExportSessionDialog::export_data ()
{ {
if (getSession().start_audio_export (spec)) { if (getSession().start_export (spec)) {
return; return;
} }

View file

@ -30,7 +30,7 @@ class ExportSessionDialog : public ExportDialog
void set_range (nframes_t start, nframes_t end); void set_range (nframes_t start, nframes_t end);
protected: protected:
void export_audio_data(); void export_data();
}; };

View file

@ -38,7 +38,7 @@
namespace ARDOUR { namespace ARDOUR {
class Session; class Session;
class AudioExportSpecification; class ExportSpecification;
class Region; class Region;
class Playlist; class Playlist;
class RouteGroup; class RouteGroup;

View file

@ -125,7 +125,7 @@ class AudioRegion : public Region
/* export */ /* export */
int exportme (ARDOUR::Session&, ARDOUR::AudioExportSpecification&); int exportme (ARDOUR::Session&, ARDOUR::ExportSpecification&);
/* xfade/fade interactions */ /* xfade/fade interactions */

View file

@ -42,12 +42,12 @@ namespace ARDOUR
class Port; class Port;
typedef pair<Port *, uint32_t> PortChannelPair; typedef pair<Port *, uint32_t> PortChannelPair;
typedef map<uint32_t, vector<PortChannelPair> > AudioExportPortMap; typedef map<uint32_t, vector<PortChannelPair> > ExportPortMap;
struct AudioExportSpecification : public SF_INFO, public sigc::trackable { struct ExportSpecification : public SF_INFO, public sigc::trackable {
AudioExportSpecification(); ExportSpecification();
~AudioExportSpecification (); ~ExportSpecification ();
void init (); void init ();
void clear (); void clear ();
@ -65,7 +65,7 @@ namespace ARDOUR
int src_quality; int src_quality;
SNDFILE* out; SNDFILE* out;
uint32_t channels; uint32_t channels;
AudioExportPortMap port_map; ExportPortMap port_map;
nframes_t start_frame; nframes_t start_frame;
nframes_t end_frame; nframes_t end_frame;
GDitherType dither_type; GDitherType dither_type;
@ -100,8 +100,8 @@ namespace ARDOUR
volatile bool running; /* audio thread sets to false when export is done */ volatile bool running; /* audio thread sets to false when export is done */
int status; int status;
}; };
} // namespace ARDOUR } // namespace ARDOUR
#endif /* __ardour_export_h__ */ #endif /* __ardour_export_h__ */

View file

@ -85,6 +85,8 @@ class MidiRegion : public Region
boost::shared_ptr<const AutomationControl> control(Parameter id) const boost::shared_ptr<const AutomationControl> control(Parameter id) const
{ return midi_source()->model()->control(id); } { return midi_source()->model()->control(id); }
int exportme (ARDOUR::Session&, ARDOUR::ExportSpecification&);
private: private:
friend class RegionFactory; friend class RegionFactory;

View file

@ -37,6 +37,7 @@ namespace ARDOUR {
class Playlist; class Playlist;
class Filter; class Filter;
class ExportSpecification;
enum RegionEditState { enum RegionEditState {
EditChangesNothing = 0, EditChangesNothing = 0,
@ -222,6 +223,8 @@ class Region : public Automatable, public boost::enable_shared_from_this<Region>
virtual bool is_dependent() const { return false; } virtual bool is_dependent() const { return false; }
virtual bool depends_on (boost::shared_ptr<Region> other) const { return false; } virtual bool depends_on (boost::shared_ptr<Region> other) const { return false; }
virtual int exportme (ARDOUR::Session&, ARDOUR::ExportSpecification&) = 0;
virtual int get_transients (AnalysisFeatureList&, bool force_new = false) { virtual int get_transients (AnalysisFeatureList&, bool force_new = false) {
// no transients, but its OK // no transients, but its OK
return 0; return 0;

View file

@ -109,7 +109,7 @@ class SMFSource;
class SessionDirectory; class SessionDirectory;
struct AudioExportSpecification; struct ExportSpecification;
struct RouteGroup; struct RouteGroup;
using std::vector; using std::vector;
@ -606,8 +606,8 @@ class Session : public PBD::StatefulDestructible
SlaveSource post_export_slave; SlaveSource post_export_slave;
nframes_t post_export_position; nframes_t post_export_position;
int start_audio_export (ARDOUR::AudioExportSpecification&); int start_export (ARDOUR::ExportSpecification&);
int stop_audio_export (ARDOUR::AudioExportSpecification&); int stop_export (ARDOUR::ExportSpecification&);
void finalize_audio_export (); void finalize_audio_export ();
void add_source (boost::shared_ptr<Source>); void add_source (boost::shared_ptr<Source>);
@ -1037,7 +1037,7 @@ class Session : public PBD::StatefulDestructible
void process_without_events (nframes_t); void process_without_events (nframes_t);
void process_with_events (nframes_t); void process_with_events (nframes_t);
void process_audition (nframes_t); void process_audition (nframes_t);
int process_export (nframes_t, ARDOUR::AudioExportSpecification*); int process_export (nframes_t, ARDOUR::ExportSpecification*);
/* slave tracking */ /* slave tracking */
@ -1062,7 +1062,7 @@ class Session : public PBD::StatefulDestructible
void set_slave_source (SlaveSource); void set_slave_source (SlaveSource);
bool _exporting; bool _exporting;
int prepare_to_export (ARDOUR::AudioExportSpecification&); int prepare_to_export (ARDOUR::ExportSpecification&);
void prepare_diskstreams (); void prepare_diskstreams ();
void commit_diskstreams (nframes_t, bool& session_requires_butler); void commit_diskstreams (nframes_t, bool& session_requires_butler);

View file

@ -119,7 +119,7 @@ AudioAnalyser::analyse (const string& path, Readable* src, uint32_t channel)
/* zero fill buffer if necessary */ /* zero fill buffer if necessary */
if (to_read != bufsize) { if (to_read != bufsize) {
memset (data + to_read, 0, (bufsize - to_read)); memset (data + to_read, 0, (bufsize - to_read) * sizeof (Sample));
} }
features = plugin->process (bufs, RealTime::fromSeconds ((double) pos / sample_rate)); features = plugin->process (bufs, RealTime::fromSeconds ((double) pos / sample_rate));
@ -128,7 +128,7 @@ AudioAnalyser::analyse (const string& path, Readable* src, uint32_t channel)
goto out; goto out;
} }
pos += stepsize; pos += min (stepsize, to_read);
if (pos >= len) { if (pos >= len) {
done = true; done = true;

View file

@ -1022,7 +1022,7 @@ AudioRegion::read_raw_internal (Sample* buf, nframes_t pos, nframes_t cnt) const
int int
AudioRegion::exportme (Session& session, AudioExportSpecification& spec) AudioRegion::exportme (Session& session, ARDOUR::ExportSpecification& spec)
{ {
const nframes_t blocksize = 4096; const nframes_t blocksize = 4096;
nframes_t to_read; nframes_t to_read;

View file

@ -310,6 +310,12 @@ MidiRegion::separate_by_channel (Session& session, vector<MidiRegion*>& v) const
return -1; return -1;
} }
int
MidiRegion::exportme (ARDOUR::Session&, ARDOUR::ExportSpecification&)
{
return -1;
}
boost::shared_ptr<MidiSource> boost::shared_ptr<MidiSource>
MidiRegion::midi_source (uint32_t n) const MidiRegion::midi_source (uint32_t n) const
{ {

View file

@ -57,7 +57,7 @@ using namespace ARDOUR;
using namespace PBD; using namespace PBD;
static int static int
convert_spec_to_info (AudioExportSpecification& spec, SF_INFO& sfinfo) convert_spec_to_info (ExportSpecification& spec, SF_INFO& sfinfo)
{ {
if (spec.path.length() == 0) { if (spec.path.length() == 0) {
error << _("Export: no output file specified") << endmsg; error << _("Export: no output file specified") << endmsg;
@ -76,18 +76,18 @@ convert_spec_to_info (AudioExportSpecification& spec, SF_INFO& sfinfo)
return 0; return 0;
} }
AudioExportSpecification::AudioExportSpecification () ExportSpecification::ExportSpecification ()
{ {
init (); init ();
} }
AudioExportSpecification::~AudioExportSpecification () ExportSpecification::~ExportSpecification ()
{ {
clear (); clear ();
} }
void void
AudioExportSpecification::init () ExportSpecification::init ()
{ {
src_state = 0; src_state = 0;
pos = 0; pos = 0;
@ -113,7 +113,7 @@ AudioExportSpecification::init ()
} }
void void
AudioExportSpecification::clear () ExportSpecification::clear ()
{ {
if (out) { if (out) {
sf_close (out); sf_close (out);
@ -153,7 +153,7 @@ AudioExportSpecification::clear ()
} }
int int
AudioExportSpecification::prepare (nframes_t blocksize, nframes_t frate) ExportSpecification::prepare (nframes_t blocksize, nframes_t frate)
{ {
char errbuf[256]; char errbuf[256];
GDitherSize dither_size; GDitherSize dither_size;
@ -161,7 +161,7 @@ AudioExportSpecification::prepare (nframes_t blocksize, nframes_t frate)
frame_rate = frate; frame_rate = frate;
if (channels == 0) { if (channels == 0) {
error << _("illegal frame range in export specification") << endmsg; error << _("illegal channel count in export specification") << endmsg;
return -1; return -1;
} }
@ -258,7 +258,7 @@ AudioExportSpecification::prepare (nframes_t blocksize, nframes_t frate)
} }
int int
AudioExportSpecification::process (nframes_t nframes) ExportSpecification::process (nframes_t nframes)
{ {
float* float_buffer = 0; float* float_buffer = 0;
uint32_t chn; uint32_t chn;
@ -426,7 +426,7 @@ AudioExportSpecification::process (nframes_t nframes)
} }
int int
Session::start_audio_export (AudioExportSpecification& spec) Session::start_export (ExportSpecification& spec)
{ {
if (!_engine.connected()) { if (!_engine.connected()) {
return -1; return -1;
@ -448,7 +448,7 @@ Session::start_audio_export (AudioExportSpecification& spec)
} }
int int
Session::stop_audio_export (AudioExportSpecification& spec) Session::stop_export (ExportSpecification& spec)
{ {
/* don't stop freewheeling but do stop paying attention to it for now */ /* don't stop freewheeling but do stop paying attention to it for now */
@ -459,7 +459,7 @@ Session::stop_audio_export (AudioExportSpecification& spec)
} }
int int
Session::prepare_to_export (AudioExportSpecification& spec) Session::prepare_to_export (ExportSpecification& spec)
{ {
int ret = -1; int ret = -1;
@ -521,7 +521,7 @@ Session::prepare_to_export (AudioExportSpecification& spec)
} }
int int
Session::process_export (nframes_t nframes, AudioExportSpecification* spec) Session::process_export (nframes_t nframes, ExportSpecification* spec)
{ {
uint32_t chn; uint32_t chn;
uint32_t x; uint32_t x;
@ -551,7 +551,7 @@ Session::process_export (nframes_t nframes, AudioExportSpecification* spec)
if (!spec->running || spec->stop || (this_nframes = min ((spec->end_frame - spec->pos), nframes)) == 0) { if (!spec->running || spec->stop || (this_nframes = min ((spec->end_frame - spec->pos), nframes)) == 0) {
process_without_events (nframes); process_without_events (nframes);
return stop_audio_export (*spec); return stop_export (*spec);
} }
/* make sure we've caught up with disk i/o, since /* make sure we've caught up with disk i/o, since
@ -574,7 +574,7 @@ Session::process_export (nframes_t nframes, AudioExportSpecification* spec)
for (chn = 0; chn < spec->channels; ++chn) { for (chn = 0; chn < spec->channels; ++chn) {
AudioExportPortMap::iterator mi = spec->port_map.find (chn); ExportPortMap::iterator mi = spec->port_map.find (chn);
if (mi == spec->port_map.end()) { if (mi == spec->port_map.end()) {
/* no ports exported to this channel */ /* no ports exported to this channel */
@ -588,18 +588,19 @@ Session::process_export (nframes_t nframes, AudioExportSpecification* spec)
/* OK, this port's output is supposed to appear on this channel /* OK, this port's output is supposed to appear on this channel
*/ */
AudioPort* const port = dynamic_cast<AudioPort*>((*t).first); AudioPort* const aport = dynamic_cast<AudioPort*>((*t).first);
if (port == 0) { MidiPort* const mport = dynamic_cast<MidiPort*>((*t).first);
cerr << "FIXME: Non-audio export" << endl; if (aport != 0) {
continue; Sample* port_buffer = aport->get_audio_buffer().data();
}
Sample* port_buffer = port->get_audio_buffer().data();
/* now interleave the data from the channel into the float buffer */ /* now interleave the data from the channel into the float buffer */
for (x = 0; x < nframes; ++x) { for (x = 0; x < nframes; ++x) {
spec->dataF[chn+(x*spec->channels)] += (float) port_buffer[x]; spec->dataF[chn+(x*spec->channels)] += (float) port_buffer[x];
} }
} else if (mport != 0) {
cerr << "EXPORT MIDI PORT" << endl;
}
} }
} }

View file

@ -1141,16 +1141,16 @@ TempoMap::round_to_type (nframes_t frame, int dir, BBTPointType type)
case Bar: case Bar:
if (dir < 0) { if (dir < 0) {
/* relax */ /* relax */
} else if (dir > 0) { } else if (dir > 0) {
if (bbt.beats > 0) { if (bbt.beats > 0) {
bbt.bars++; bbt.bars++;
} else if (metric.frame() < frame) {
bbt.bars++;
} }
} else { } else {
if (bbt.beats > metric.meter().beats_per_bar()/2) { if (bbt.beats > metric.meter().beats_per_bar()/2) {
bbt.bars++; bbt.bars++;
} }
} }
bbt.beats = 1; bbt.beats = 1;
bbt.ticks = 0; bbt.ticks = 0;
@ -1162,6 +1162,8 @@ TempoMap::round_to_type (nframes_t frame, int dir, BBTPointType type)
} else if (dir > 0) { } else if (dir > 0) {
if (bbt.ticks > 0) { if (bbt.ticks > 0) {
bbt.beats++; bbt.beats++;
} else if (metric.frame() < frame) {
bbt.beats++;
} }
} else { } else {
if (bbt.ticks >= (Meter::ticks_per_beat/2)) { if (bbt.ticks >= (Meter::ticks_per_beat/2)) {
@ -1177,11 +1179,9 @@ TempoMap::round_to_type (nframes_t frame, int dir, BBTPointType type)
} }
/*
cerr << "for " << frame << " round to " << bbt << " using " cerr << "for " << frame << " round to " << bbt << " using "
<< metric.start() << metric.start()
<< endl; << endl;
*/
return metric.frame() + count_frames_between (metric.start(), bbt); return metric.frame() + count_frames_between (metric.start(), bbt);
} }