Merge with 2.0-ongoing R3071.

git-svn-id: svn://localhost/ardour2/branches/3.0@3073 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
David Robillard 2008-02-16 22:43:18 +00:00
parent 1b65758557
commit 8aa9508c82
67 changed files with 2417 additions and 2421 deletions

View File

@ -1,348 +1,399 @@
; ardour GtkAccelMap rc-file -*- scheme -*-
; this file is an automated accelerator map dump
; ardour-2.2 GtkAccelMap rc-file -*- scheme -*-
; this file is a hand-edited map that is processed by scons
; to produce a real accelmap.
;
; (gtk_accel_path "<Actions>/RegionList/RegionListSort" "")
(gtk_accel_path "<Actions>/Common/Quit" "<%PRIMARY%>q")
(gtk_accel_path "<Actions>/Common/Save" "<%PRIMARY%>s")
; (gtk_accel_path "<Actions>/Editor/Pullup" "")
(gtk_accel_path "<Actions>/Editor/zoom-to-session" "<%SECONDARY%>z")
; (gtk_accel_path "<Actions>/JACK/JACKReconnect" "")
; (gtk_accel_path "<Actions>/Editor/Autoconnect" "")
; (gtk_accel_path "<Actions>/Editor/Edit" "")
(gtk_accel_path "<Actions>/Editor/cycle-edit-point" "asciicircum")
(gtk_accel_path "<Actions>/Editor/cycle-edit-point-with-marker" "<%SECONDARY%>asciicircum")
(gtk_accel_path "<Actions>/Editor/toggle-edit-mode" "1")
(gtk_accel_path "<Actions>/Editor/cycle-snap-mode" "2")
(gtk_accel_path "<Actions>/Editor/cycle-snap-choice" "3")
; (gtk_accel_path "<Actions>/redirectmenu/copy" "")
; (gtk_accel_path "<Actions>/options/MeterFalloffFaster" "")
;; punctuation
(gtk_accel_path "<Actions>/Transport/ToggleRoll" "space")
(gtk_accel_path "<Actions>/Transport/ToggleRollForgetCapture" "<%PRIMARY%>space")
(gtk_accel_path "<Actions>/Transport/record-roll" "<%TERTIARY%>space")
(gtk_accel_path "<Actions>/Transport/Record" "<%TERTIARY%>r")
; (gtk_accel_path "<Actions>/RegionList/SortByRegionLength" "")
; (gtk_accel_path "<Actions>/options/MeterFalloffSlowest" "")
; (gtk_accel_path "<Actions>/Editor/playhead-to-previous-region-sync" "")
; (gtk_accel_path "<Actions>/redirectmenu/deactivate_all" "")
; (gtk_accel_path "<Actions>/RegionList/SortByRegionPosition" "")
; (gtk_accel_path "<Actions>/Editor/ZoomFocus" "")
(gtk_accel_path "<Actions>/Editor/addExistingAudioFiles" "<%PRIMARY%>i")
; (gtk_accel_path "<Actions>/options/MeterFalloffSlow" "")
; (gtk_accel_path "<Actions>/RegionList/rlHide" "")
; (gtk_accel_path "<Actions>/Main/Metering" "")
(gtk_accel_path "<Actions>/Editor/playhead-to-next-region-boundary" "rightarrow")
(gtk_accel_path "<Actions>/Editor/selected-marker-to-next-region-boundary" "<%PRIMARY%><%TERTIARY%>rightarrow")
; (gtk_accel_path "<Actions>/Zoom/zoom-focus-playhead" "")
; (gtk_accel_path "<Actions>/Editor/center-edit-cursor" "")
; (gtk_accel_path "<Actions>/Editor/Monitoring" "")
; (gtk_accel_path "<Actions>/redirectmenu/deactivate" "")
; (gtk_accel_path "<Actions>/options/LatchedRecordEnable" "")
; (gtk_accel_path "<Actions>/Transport/TogglePunchIn" "")
; (gtk_accel_path "<Actions>/ShuttleActions/SetShuttleUnitsPercentage" "")
(gtk_accel_path "<Actions>/Main/Close" "<%PRIMARY%>w")
(gtk_accel_path "<Actions>/Main/New" "<%PRIMARY%>n")
(gtk_accel_path "<Actions>/Editor/nudge-next-backward" "<%PRIMARY%>KP_Subtract")
; (gtk_accel_path "<Actions>/Editor/EditSelectRangeOptions" "")
; (gtk_accel_path "<Actions>/Transport/ToggleTimeMaster" "")
; (gtk_accel_path "<Actions>/Snap/snap-to-thirds" "")
(gtk_accel_path "<Actions>/Editor/align-regions-start-relative" "<%LEVEL4%>less")
(gtk_accel_path "<Actions>/Editor/align-regions-start" "<%LEVEL4%><%SECONDARY%>less")
; (gtk_accel_path "<Actions>/Main/Export" "<%PRIMARY%>e")
(gtk_accel_path "<Actions>/Editor/jump-forward-to-mark" "<%PRIMARY%>KP_6")
; (gtk_accel_path "<Actions>/Editor/Smpte30" "")
; (gtk_accel_path "<Actions>/Editor/playhead-to-range-start" "")
; (gtk_accel_path "<Actions>/Editor/Subframes" "")
; (gtk_accel_path "<Actions>/Editor/Smpte2997drop" "")
(gtk_accel_path "<Actions>/Main/AddTrackBus" "<%PRIMARY%><%TERTIARY%>n")
(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>/JACK/JACKDisconnect" "")
; (gtk_accel_path "<Actions>/options/MeterFalloffFast" "")
; (gtk_accel_path "<Actions>/options/FileDataFormatFloat" "")
; (gtk_accel_path "<Actions>/Snap/snap-to-region-end" "")
(gtk_accel_path "<Actions>/Editor/edit-cursor-to-next-region-sync" "semicolon")
; (gtk_accel_path "<Actions>/options/StopRecordingOnXrun" "")
; (gtk_accel_path "<Actions>/RegionList/SortDescending" "")
; (gtk_accel_path "<Actions>/options/DoNotRunPluginsWhileRecording" "")
; (gtk_accel_path "<Actions>/Editor/PullupNone" "")
(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-range" "r")
(gtk_accel_path "<Actions>/Editor/jump-backward-to-mark" "<%PRIMARY%>KP_4")
; (gtk_accel_path "<Actions>/Main/AudioFileFormatData" "")
; (gtk_accel_path "<Actions>/options/MeterFalloffFastest" "")
(gtk_accel_path "<Actions>/Editor/audition-at-mouse" "w")
(gtk_accel_path "<Actions>/Transport/Forward" "<%PRIMARY%>rightarrow")
; (gtk_accel_path "<Actions>/Snap/snap-to-smpte-seconds" "")
; (gtk_accel_path "<Actions>/Snap/snap-to-smpte-frame" "")
; (gtk_accel_path "<Actions>/Main/ExportSelection" "")
; (gtk_accel_path "<Actions>/options/StopPluginsWithTransport" "")
(gtk_accel_path "<Actions>/Editor/editor-paste" "<%PRIMARY%>v")
(gtk_accel_path "<Actions>/Editor/scroll-tracks-down" "Page_Down")
(gtk_accel_path "<Actions>/Editor/select-next-route" "downarrow")
(gtk_accel_path "<Actions>/Editor/select-prev-route" "uparrow")
; (gtk_accel_path "<Actions>/Snap/snap-to-smpte-minutes" "")
; (gtk_accel_path "<Actions>/Main/FlushWastebasket" "")
(gtk_accel_path "<Actions>/Editor/normalize-region" "n")
(gtk_accel_path "<Actions>/Editor/nudge-forward" "h")
; (gtk_accel_path "<Actions>/RegionList/SortByRegionEndinFile" "")
; (gtk_accel_path "<Actions>/Editor/ToggleMeasureVisibility" "")
; (gtk_accel_path "<Actions>/Zoom/zoom-focus-center" "")
(gtk_accel_path "<Actions>/Editor/nudge-backward" "g")
; (gtk_accel_path "<Actions>/options/LatchedSolo" "")
; (gtk_accel_path "<Actions>/options/MeterHoldOff" "")
; (gtk_accel_path "<Actions>/options/OutputAutoConnectMaster" "")
; (gtk_accel_path "<Actions>/JACK/JACKLatency64" "")
(gtk_accel_path "<Actions>/Editor/undo" "<%PRIMARY%>z")
(gtk_accel_path "<Actions>/Editor/insert-region" "i")
; (gtk_accel_path "<Actions>/Editor/center-playhead" "")
; (gtk_accel_path "<Actions>/Snap/snap-to-region-start" "")
; (gtk_accel_path "<Actions>/Editor/View" "")
; (gtk_accel_path "<Actions>/Editor/Layering" "")
; (gtk_accel_path "<Actions>/JACK/JACKLatency4096" "")
(gtk_accel_path "<Actions>/Editor/scroll-tracks-up" "Page_Up")
(gtk_accel_path "<Actions>/Editor/set-edit-point" "g")
; (gtk_accel_path "<Actions>/Editor/Smpte30drop" "")
; (gtk_accel_path "<Actions>/Zoom/zoom-focus-edit" "")
(gtk_accel_path "<Actions>/Editor/playhead-to-previous-region-boundary" "leftarrow")
(gtk_accel_path "<Actions>/Editor/selected-marker-to-previous-region-boundary" "<%PRIMARY%><%TERTIARY%>leftarrow")
; (gtk_accel_path "<Actions>/Editor/EditCursorMovementOptions" "")
; (gtk_accel_path "<Actions>/redirectmenu/activate_all" "")
; (gtk_accel_path "<Actions>/redirectmenu/paste" "")
; (gtk_accel_path "<Actions>/Editor/Smpte25" "")
; (gtk_accel_path "<Actions>/options/RegionEquivalentsOverlap" "")
; (gtk_accel_path "<Actions>/Main/MeteringFallOffRate" "")
; (gtk_accel_path "<Actions>/options/UseHardwareMonitoring" "")
; (gtk_accel_path "<Actions>/Editor/Smpte24" "")
; (gtk_accel_path "<Actions>/Snap/snap-to-mark" "")
; (gtk_accel_path "<Actions>/Editor/CrossfadesShort" "")
; (gtk_accel_path "<Actions>/Editor/Smpte5994" "")
; (gtk_accel_path "<Actions>/JACK/JACKLatency8192" "")
; (gtk_accel_path "<Actions>/Editor/toggle-xfades-visible" "")
(gtk_accel_path "<Actions>/Editor/extend-range-to-end-of-region" "rightanglebracket")
(gtk_accel_path "<Actions>/Editor/start-range" "F1")
; (gtk_accel_path "<Actions>/ShuttleActions/SetShuttleUnitsSemitones" "")
; (gtk_accel_path "<Actions>/JACK/JACKLatency128" "")
; (gtk_accel_path "<Actions>/Snap/snap-to-beat" "")
; (gtk_accel_path "<Actions>/Editor/RegionEditOps" "")
; (gtk_accel_path "<Actions>/Editor/snap-magnetic" "")
; (gtk_accel_path "<Actions>/Editor/playhead-to-range-end" "")
(gtk_accel_path "<Actions>/Editor/scroll-playhead-forward" "<%TERTIARY%>rightarrow")
(gtk_accel_path "<Actions>/Editor/align-regions-sync-relative" "less")
(gtk_accel_path "<Actions>/Editor/align-regions-start" "<%LEVEL4%><%SECONDARY%>less")
(gtk_accel_path "<Actions>/Editor/align-regions-start-relative" "<%LEVEL4%>less")
(gtk_accel_path "<Actions>/Editor/align-regions-sync" "<%SECONDARY%>less")
; (gtk_accel_path "<Actions>/Editor/EditSelectRegionOptions" "")
(gtk_accel_path "<Actions>/Editor/crop" "c")
; (gtk_accel_path "<Actions>/redirectmenu/newsend" "")
; (gtk_accel_path "<Actions>/Editor/ToggleGeneric MIDISurfaceSubMenu" "")
; (gtk_accel_path "<Actions>/Editor/MeterFalloff" "")
; (gtk_accel_path "<Actions>/RegionList/rlRemove" "")
(gtk_accel_path "<Actions>/Transport/GotoStart" "Home")
(gtk_accel_path "<Actions>/Editor/select-all-before-edit-cursor" "<%TERTIARY%>Home")
(gtk_accel_path "<Actions>/Editor/scroll-playhead-backward" "<%TERTIARY%>leftarrow")
(gtk_accel_path "<Actions>/Editor/split-region" "y")
; (gtk_accel_path "<Actions>/Transport/ToggleAutoInput" "")
; (gtk_accel_path "<Actions>/Snap/snap-to-thirtyseconds" "")
; (gtk_accel_path "<Actions>/Snap/snap-to-minutes" "")
; (gtk_accel_path "<Actions>/Main/Windows" "")
; (gtk_accel_path "<Actions>/Main/CleanupUnused" "")
; (gtk_accel_path "<Actions>/redirectmenu/deselectall" "<%PRIMARY%><%TERTIARY%>a")
; (gtk_accel_path "<Actions>/options/SoloViaBus" "")
; (gtk_accel_path "<Actions>/RegionList/rlAudition" "")
(gtk_accel_path "<Actions>/Editor/set-region-sync-position" "u")
; (gtk_accel_path "<Actions>/Editor/PullupPlus4Plus1" "")
; (gtk_accel_path "<Actions>/Snap/snap-to-region-boundary" "")
; (gtk_accel_path "<Actions>/JACK/JACK" "")
(gtk_accel_path "<Actions>/Editor/editor-cut" "<%PRIMARY%>x")
(gtk_accel_path "<Actions>/Editor/editor-separate" "x")
; (gtk_accel_path "<Actions>/RegionList/SortAscending" "")
; (gtk_accel_path "<Actions>/Main/Help" "")
; (gtk_accel_path "<Actions>/options/UseExternalMonitoring" "")
; (gtk_accel_path "<Actions>/Editor/Smpte23976" "")
(gtk_accel_path "<Actions>/Common/goto-editor" "<%PRIMARY%>e")
(gtk_accel_path "<Actions>/Editor/select-all" "<%PRIMARY%>a")
(gtk_accel_path "<Actions>/Editor/invert-selection" "<%TERTIARY%>i")
(gtk_accel_path "<Actions>/Editor/nudge-next-forward" "<%PRIMARY%>KP_Add")
; (gtk_accel_path "<Actions>/options/ShowSoloMutes" "")
; (gtk_accel_path "<Actions>/Snap/snap-to-eighths" "")
(gtk_accel_path "<Actions>/Editor/select-all-after-playhead" "<%TERTIARY%><%PRIMARY%>End")
(gtk_accel_path "<Actions>/Common/ToggleMaximalEditor" "F11")
; (gtk_accel_path "<Actions>/RegionList/SortBySourceFileLength" "")
; (gtk_accel_path "<Actions>/Editor/Timecode" "")
; (gtk_accel_path "<Actions>/Transport/PlaySelection" "")
; (gtk_accel_path "<Actions>/Editor/PullupMinus4Minus1" "")
(gtk_accel_path "<Actions>/Editor/select-all-after-edit-cursor" "<%TERTIARY%><%PRIMARY%>e")
; (gtk_accel_path "<Actions>/RegionList/SortBySourceFileName" "")
(gtk_accel_path "<Actions>/Editor/finish-range" "F2")
(gtk_accel_path "<Actions>/Editor/select-range-between-cursors" "F16")
(gtk_accel_path "<Actions>/Transport/Loop" "l")
; (gtk_accel_path "<Actions>/Editor/CrossfadesFull" "")
(gtk_accel_path "<Actions>/Editor/finish-add-range" "<%TERTIARY%><%PRIMARY%>KP_Up")
; (gtk_accel_path "<Actions>/options/SendMTC" "")
; (gtk_accel_path "<Actions>/Transport/TogglePunchOut" "")
(gtk_accel_path "<Actions>/Editor/select-all-in-loop-range" "<%TERTIARY%>l")
(gtk_accel_path "<Actions>/Editor/show-editor-mixer" "<%TERTIARY%>e")
; (gtk_accel_path "<Actions>/options/SoloInPlace" "")
; (gtk_accel_path "<Actions>/Main/Options" "")
; (gtk_accel_path "<Actions>/options/MeterFalloffMedium" "")
(gtk_accel_path "<Actions>/Editor/toggle-follow-playhead" "f")
; (gtk_accel_path "<Actions>/Main/SaveTemplate" "")
(gtk_accel_path "<Actions>/Transport/TransitionToRoll" "<%PRIMARY%>uparrow")
; (gtk_accel_path "<Actions>/RegionList/SortByRegionStartinFile" "")
; (gtk_accel_path "<Actions>/options/GainReduceFastTransport" "")
; (gtk_accel_path "<Actions>/Common/ToggleInspector" "")
; (gtk_accel_path "<Actions>/Transport/ToggleAutoPlay" "")
; (gtk_accel_path "<Actions>/Editor/playhead-to-next-region-sync" "")
(gtk_accel_path "<Actions>/Editor/edit-to-playhead" "<%SECONDARY%>Return")
; (gtk_accel_path "<Actions>/Editor/LayerMoveAddHigher" "")
; (gtk_accel_path "<Actions>/Editor/Smpte60" "")
(gtk_accel_path "<Actions>/Main/Open" "<%PRIMARY%>o")
; (gtk_accel_path "<Actions>/Zoom/zoom-focus-left" "")
; (gtk_accel_path "<Actions>/Main/TransportOptions" "")
; (gtk_accel_path "<Actions>/Main/ControlSurfaces" "")
; (gtk_accel_path "<Actions>/options/FileHeaderFormatBWF" "")
; (gtk_accel_path "<Actions>/Transport/ToggleAutoReturn" "")
; (gtk_accel_path "<Actions>/Editor/Smpte2997" "")
; (gtk_accel_path "<Actions>/Editor/ToggleWaveformVisibility" "")
(gtk_accel_path "<Actions>/Editor/redo" "<%PRIMARY%>r")
(gtk_accel_path "<Actions>/Main/ExportSession" "<%PRIMARY%>e")
; (gtk_accel_path "<Actions>/options/InputAutoConnectPhysical" "")
; (gtk_accel_path "<Actions>/Snap/snap-to-edit-cursor" "")
(gtk_accel_path "<Actions>/Editor/temporal-zoom-in" "t")
; (gtk_accel_path "<Actions>/JACK/Latency" "")
(gtk_accel_path "<Actions>/Editor/edit-cursor-to-range-end" "<%TERTIARY%>F2")
; (gtk_accel_path "<Actions>/redirectmenu/rename" "")
; (gtk_accel_path "<Actions>/RegionList/rlShowAuto" "")
(gtk_accel_path "<Actions>/Editor/select-all-before-playhead" "<%TERTIARY%>Home")
; (gtk_accel_path "<Actions>/Main/Session" "")
(gtk_accel_path "<Actions>/Editor/edit-cursor-to-range-start" "<%TERTIARY%>F1")
; (gtk_accel_path "<Actions>/Main/AudioFileFormat" "")
; (gtk_accel_path "<Actions>/Transport/Transport" "")
; (gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-timefx" "t")
; (gtk_accel_path "<Actions>/RegionList/SortByRegionName" "")
; (gtk_accel_path "<Actions>/Main/KeyMouse Actions" "")
(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-gain" "g")
; (gtk_accel_path "<Actions>/Snap/snap-to-frame" "")
; (gtk_accel_path "<Actions>/Editor/SnapTo" "")
(gtk_accel_path "<Actions>/Transport/TransitionToReverse" "<%PRIMARY%>downarrow")
; (gtk_accel_path "<Actions>/Editor/Crossfades" "")
; (gtk_accel_path "<Actions>/Editor/PullupPlus4" "")
; (gtk_accel_path "<Actions>/Main/MeteringHoldTime" "")
; (gtk_accel_path "<Actions>/Editor/PullupPlus1" "")
; (gtk_accel_path "<Actions>/Editor/Smpte24976" "")
; (gtk_accel_path "<Actions>/options/FileDataFormat24bit" "")
; (gtk_accel_path "<Actions>/Editor/SnapMode" "")
(gtk_accel_path "<Actions>/Common/ToggleOptionsEditor" "<%PRIMARY%>o")
; (gtk_accel_path "<Actions>/Editor/PullupMinus4" "")
(gtk_accel_path "<Actions>/Common/goto-mixer" "<%PRIMARY%>m")
; (gtk_accel_path "<Actions>/RegionList/SortBySourceFileCreationDate" "")
; (gtk_accel_path "<Actions>/redirectmenu/activate" "")
(gtk_accel_path "<Actions>/Editor/extend-range-to-start-of-region" "leftanglebracket")
; (gtk_accel_path "<Actions>/Editor/PullupMinus1" "")
; (gtk_accel_path "<Actions>/Editor/snap-normal" "")
(gtk_accel_path "<Actions>/Common/ToggleBigClock" "<%PRIMARY%>b")
(gtk_accel_path "<Actions>/Common/ToggleKeyEditor" "<%PRIMARY%>k")
; (gtk_accel_path "<Actions>/Snap/snap-to-asixteenthbeat" "")
(gtk_accel_path "<Actions>/Editor/select-all-in-punch-range" "<%TERTIARY%>p")
; (gtk_accel_path "<Actions>/redirectmenu/edit" "")
(gtk_accel_path "<Actions>/Editor/duplicate-region" "d")
(gtk_accel_path "<Actions>/Editor/multi-duplicate-region" "<%SECONDARY%>d")
; (gtk_accel_path "<Actions>/JACK/JACKLatency2048" "")
; (gtk_accel_path "<Actions>/Editor/ToggleWaveformsWhileRecording" "")
; (gtk_accel_path "<Actions>/Zoom/zoom-focus-right" "")
(gtk_accel_path "<Actions>/Editor/remove-last-capture" "<%PRIMARY%>Delete")
; (gtk_accel_path "<Actions>/options/FileHeaderFormatWAVE" "")
(gtk_accel_path "<Actions>/Transport/GotoZero" "KP_Insert")
(gtk_accel_path "<Actions>/Editor/select-all-after-edit-cursor" "<%TERTIARY%>End")
; (gtk_accel_path "<Actions>/redirectmenu/cut" "")
; (gtk_accel_path "<Actions>/redirectmenu/newinsert" "")
; (gtk_accel_path "<Actions>/options/UseMMC" "")
; (gtk_accel_path "<Actions>/options/MeterFalloffOff" "")
;(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-object" "o")
; (gtk_accel_path "<Actions>/Editor/PullupMinus4Plus1" "")
; (gtk_accel_path "<Actions>/Editor/MeterHold" "")
; (gtk_accel_path "<Actions>/Snap/snap-to-cd-frame" "")
; (gtk_accel_path "<Actions>/options/StopTransportAtEndOfSession" "")
; (gtk_accel_path "<Actions>/Main/Cleanup" "")
(gtk_accel_path "<Actions>/Main/Snapshot" "<%PRIMARY%><%TERTIARY%>s")
; (gtk_accel_path "<Actions>/Transport/ToggleVideoSync" "")
(gtk_accel_path "<Actions>/Transport/ToggleRoll" "space")
; (gtk_accel_path "<Actions>/RegionList/SortBySourceFilesystem" "")
(gtk_accel_path "<Actions>/Common/ToggleColorManager" "<%PRIMARY%>c")
; (gtk_accel_path "<Actions>/Common/About" "")
; (gtk_accel_path "<Actions>/JACK/JACKLatency32" "")
(gtk_accel_path "<Actions>/Editor/playhead-to-edit" "Return")
; (gtk_accel_path "<Actions>/options/FileHeaderFormatWAVE64" "")
(gtk_accel_path "<Actions>/Editor/brush-at-mouse" "F3")
; (gtk_accel_path "<Actions>/RegionList/rlShowAll" "")
(gtk_accel_path "<Actions>/Transport/Rewind" "<%PRIMARY%>leftarrow")
; (gtk_accel_path "<Actions>/RegionList/SortByRegionTimestamp" "")
; (gtk_accel_path "<Actions>/options/VerifyRemoveLastCapture" "")
; (gtk_accel_path "<Actions>/options/OutputAutoConnectPhysical" "")
; (gtk_accel_path "<Actions>/options/SendMMC" "")
; (gtk_accel_path "<Actions>/Editor/toggle-auto-xfades" "")
; (gtk_accel_path "<Actions>/Main/AudioFileFormatHeader" "")
; (gtk_accel_path "<Actions>/options/MeterHoldShort" "")
; (gtk_accel_path "<Actions>/options/MeterHoldMedium" "")
(gtk_accel_path "<Actions>/Editor/select-all-before-edit-cursor" "<%PRIMARY%>e")
; (gtk_accel_path "<Actions>/Editor/Subframes80" "")
; (gtk_accel_path "<Actions>/options/FileHeaderFormatCAF" "")
(gtk_accel_path "<Actions>/Common/ToggleLocations" "<%PRIMARY%>l")
; (gtk_accel_path "<Actions>/Editor/ToggleGeneric MIDISurface" "")
(gtk_accel_path "<Actions>/Editor/editor-delete" "BackSpace")
; (gtk_accel_path "<Actions>/JACK/JACKLatency256" "")
(gtk_accel_path "<Actions>/Editor/select-all-between-cursors" "F16")
; (gtk_accel_path "<Actions>/Editor/LayerAddHigher" "")
; (gtk_accel_path "<Actions>/Editor/Solo" "")
; (gtk_accel_path "<Actions>/JACK/JACKLatency1024" "")
; (gtk_accel_path "<Actions>/Main/ExportRangeMarkers" "")
(gtk_accel_path "<Actions>/Editor/set-playhead" "p")
; (gtk_accel_path "<Actions>/Editor/toggle-xfades-active" "")
; (gtk_accel_path "<Actions>/Snap/snap-to-bar" "")
; (gtk_accel_path "<Actions>/Editor/LayerLaterHigher" "")
; (gtk_accel_path "<Actions>/redirectmenu/selectall" "")
(gtk_accel_path "<Actions>/Editor/editor-copy" "<%PRIMARY%>c")
; (gtk_accel_path "<Actions>/Snap/snap-to-quarters" "")
(gtk_accel_path "<Actions>/Editor/temporal-zoom-out" "r")
; (gtk_accel_path "<Actions>/options/UseSoftwareMonitoring" "")
; (gtk_accel_path "<Actions>/Editor/Subframes100" "")
(gtk_accel_path "<Actions>/Editor/mute-unmute-region" "<%SECONDARY%>m")
(gtk_accel_path "<Actions>/Editor/add-location-from-playhead" "m")
; (gtk_accel_path "<Actions>/options/OutputAutoConnectManual" "")
; (gtk_accel_path "<Actions>/Snap/snap-to-region-sync" "")
(gtk_accel_path "<Actions>/Editor/align-regions-sync-relative" "less")
(gtk_accel_path "<Actions>/Editor/edit-cursor-to-next-region-sync" "semicolon")
(gtk_accel_path "<Actions>/Editor/edit-cursor-to-previous-region-sync" "apostrophe")
; (gtk_accel_path "<Actions>/redirectmenu/clear" "")
; (gtk_accel_path "<Actions>/Editor/ToggleGeneric MIDISurfaceFeedback" "")
; (gtk_accel_path "<Actions>/Editor/PullupPlus4Minus1" "")
; (gtk_accel_path "<Actions>/JACK/JACKLatency512" "")
(gtk_accel_path "<Actions>/Main/Recent" "<%PRIMARY%><%TERTIARY%>o")
; (gtk_accel_path "<Actions>/redirectmenu/newplugin" "")
; (gtk_accel_path "<Actions>/options/InputAutoConnectManual" "")
; (gtk_accel_path "<Actions>/options/MeterHoldLong" "")
; (gtk_accel_path "<Actions>/Snap/snap-to-seconds" "")
(gtk_accel_path "<Actions>/Editor/set-fade-in-length" "q")
(gtk_accel_path "<Actions>/Editor/toggle-fade-in-active" "<%SECONDARY%>q")
(gtk_accel_path "<Actions>/Editor/set-fade-out-length" "e")
(gtk_accel_path "<Actions>/Editor/toggle-fade-out-active" "<%SECONDARY%>e")
(gtk_accel_path "<Actions>/Editor/cycle-edit-point" "asciicircum")
(gtk_accel_path "<Actions>/Editor/cycle-edit-point-with-marker" "<%SECONDARY%>asciicircum")
(gtk_accel_path "<Actions>/Editor/extend-range-to-end-of-region" "rightanglebracket")
(gtk_accel_path "<Actions>/Editor/extend-range-to-start-of-region" "leftanglebracket")
(gtk_accel_path "<Actions>/Editor/set-loop-from-edit-range" "bracketright")
(gtk_accel_path "<Actions>/Editor/set-loop-from-region" "<%PRIMARY%><%SECONDARY%>bracketright")
(gtk_accel_path "<Actions>/Editor/loop-region" "<%PRIMARY%>bracketright")
(gtk_accel_path "<Actions>/Editor/set-punch-from-edit-range" "bracketleft")
(gtk_accel_path "<Actions>/Editor/trim-from-start" "<%TERTIARY%>braceleft")
(gtk_accel_path "<Actions>/Editor/trim-to-end" "<%TERTIARY%>braceright")
;; letters
;; OBERE ZEILE
(gtk_accel_path "<Actions>/Editor/set-fade-in-length" "q")
(gtk_accel_path "<Actions>/Common/Quit" "<%PRIMARY%>q")
(gtk_accel_path "<Actions>/Editor/toggle-fade-in-active" "<%SECONDARY%>q")
;; 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>/Main/Close" "<%PRIMARY%>w")
(gtk_accel_path "<Actions>/Editor/set-fade-out-length" "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/toggle-fade-out-active" "<%SECONDARY%>e")
(gtk_accel_path "<Actions>/Editor/show-editor-mixer" "<%TERTIARY%>e")
(gtk_accel_path "<Actions>/Common/goto-editor" "<%WINDOW%>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%>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-in" "t")
(gtk_accel_path "<Actions>/Editor/split-region" "y")
(gtk_accel_path "<Actions>/Editor/set-region-sync-position" "u")
(gtk_accel_path "<Actions>/Editor/insert-region" "i")
(gtk_accel_path "<Actions>/Editor/addExistingAudioFiles" "<%PRIMARY%>i")
(gtk_accel_path "<Actions>/Editor/invert-selection" "<%TERTIARY%>i")
(gtk_accel_path "<Actions>/Common/ToggleOptionsEditor" "<%WINDOW%>o")
(gtk_accel_path "<Actions>/Main/Open" "<%PRIMARY%>o")
(gtk_accel_path "<Actions>/Main/Recent" "<%PRIMARY%><%TERTIARY%>o")
(gtk_accel_path "<Actions>/Editor/set-playhead" "p")
(gtk_accel_path "<Actions>/Editor/select-all-in-punch-range" "<%TERTIARY%>p")
;; MITTELZEILE
(gtk_accel_path "<Actions>/Editor/trim-front" "a")
(gtk_accel_path "<Actions>/Editor/select-all" "<%PRIMARY%>a")
(gtk_accel_path "<Actions>/Editor/trim-back" "s")
(gtk_accel_path "<Actions>/Common/Save" "<%PRIMARY%>s")
(gtk_accel_path "<Actions>/Main/Snapshot" "<%PRIMARY%><%TERTIARY%>s")
(gtk_accel_path "<Actions>/Editor/duplicate-region" "d")
(gtk_accel_path "<Actions>/Editor/multi-duplicate-region" "<%SECONDARY%>d")
(gtk_accel_path "<Actions>/Editor/toggle-follow-playhead" "f")
(gtk_accel_path "<Actions>/Editor/set-edit-point" "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-forward" "h")
(gtk_accel_path "<Actions>/Common/ToggleKeyEditor" "<%WINDOW%>k")
(gtk_accel_path "<Actions>/Common/ToggleLocations" "<%WINDOW%>l")
(gtk_accel_path "<Actions>/Transport/Loop" "l")
(gtk_accel_path "<Actions>/Editor/select-all-in-loop-range" "<%TERTIARY%>l")
;; UNTERE ZEILE
(gtk_accel_path "<Actions>/Editor/zoom-to-region" "z")
(gtk_accel_path "<Actions>/Editor/undo" "<%PRIMARY%>z")
(gtk_accel_path "<Actions>/Editor/zoom-to-session" "<%SECONDARY%>z")
(gtk_accel_path "<Actions>/Editor/toggle-zoom" "<%TERTIARY%>z")
(gtk_accel_path "<Actions>/Editor/editor-separate" "x")
(gtk_accel_path "<Actions>/Editor/editor-cut" "<%PRIMARY%>x")
(gtk_accel_path "<Actions>/Editor/crop" "c")
(gtk_accel_path "<Actions>/Editor/editor-copy" "<%PRIMARY%>c")
(gtk_accel_path "<Actions>/Common/ToggleColorManager" "<%WINDOW%>c")
(gtk_accel_path "<Actions>/Editor/editor-paste" "<%PRIMARY%>v")
(gtk_accel_path "<Actions>/Common/ToggleBigClock" "<%WINDOW%>b")
(gtk_accel_path "<Actions>/Editor/normalize-region" "n")
(gtk_accel_path "<Actions>/Main/New" "<%PRIMARY%>n")
(gtk_accel_path "<Actions>/Main/AddTrackBus" "<%PRIMARY%><%TERTIARY%>n")
(gtk_accel_path "<Actions>/Common/goto-mixer" "<%WINDOW%>m")
(gtk_accel_path "<Actions>/Editor/add-location-from-playhead" "m")
(gtk_accel_path "<Actions>/Editor/mute-unmute-region" "<%SECONDARY%>m")
;; arrow keys, navigation etc.
(gtk_accel_path "<Actions>/Editor/playhead-to-edit" "Return")
(gtk_accel_path "<Actions>/Editor/edit-to-playhead" "<%SECONDARY%>Return")
(gtk_accel_path "<Actions>/Editor/editor-delete" "BackSpace")
(gtk_accel_path "<Actions>/Editor/remove-last-capture" "<%PRIMARY%>Delete")
(gtk_accel_path "<Actions>/Editor/playhead-to-previous-region-boundary" "leftarrow")
(gtk_accel_path "<Actions>/Transport/Rewind" "<%PRIMARY%>leftarrow")
(gtk_accel_path "<Actions>/Editor/tab-to-transient-backwards" "<%SECONDARY%>leftarrow")
(gtk_accel_path "<Actions>/Editor/nudge-playhead-backward" "<%TERTIARY%>leftarrow")
(gtk_accel_path "<Actions>/Editor/selected-marker-to-previous-region-boundary" "<%PRIMARY%><%TERTIARY%>leftarrow")
(gtk_accel_path "<Actions>/Editor/playhead-to-next-region-boundary" "rightarrow")
(gtk_accel_path "<Actions>/Transport/Forward" "<%PRIMARY%>rightarrow")
(gtk_accel_path "<Actions>/Editor/tab-to-transient-forwards" "<%SECONDARY%>rightarrow")
(gtk_accel_path "<Actions>/Editor/nudge-playhead-forward" "<%TERTIARY%>rightarrow")
(gtk_accel_path "<Actions>/Editor/selected-marker-to-next-region-boundary" "<%PRIMARY%><%TERTIARY%>rightarrow")
(gtk_accel_path "<Actions>/Editor/scroll-tracks-down" "Page_Down")
(gtk_accel_path "<Actions>/Editor/scroll-tracks-up" "Page_Up")
(gtk_accel_path "<Actions>/Transport/GotoEnd" "End")
(gtk_accel_path "<Actions>/Editor/select-all-after-edit-cursor" "<%TERTIARY%>End")
(gtk_accel_path "<Actions>/Editor/select-all-after-playhead" "<%TERTIARY%><%PRIMARY%>End")
(gtk_accel_path "<Actions>/Transport/GotoStart" "Home")
(gtk_accel_path "<Actions>/Editor/select-all-before-edit-cursor" "<%TERTIARY%>Home")
(gtk_accel_path "<Actions>/Editor/select-all-before-playhead" "<%TERTIARY%>Home")
(gtk_accel_path "<Actions>/Editor/select-prev-route" "uparrow")
(gtk_accel_path "<Actions>/Transport/TransitionToRoll" "<%PRIMARY%>uparrow")
(gtk_accel_path "<Actions>/Editor/select-next-route" "downarrow")
(gtk_accel_path "<Actions>/Transport/TransitionToReverse" "<%PRIMARY%>downarrow")
;; keypad
(gtk_accel_path "<Actions>/Editor/finish-add-range" "<%TERTIARY%><%PRIMARY%>KP_Up")
(gtk_accel_path "<Actions>/Editor/goto-mark-1" "KP_1")
(gtk_accel_path "<Actions>/Editor/goto-mark-2" "KP_2")
(gtk_accel_path "<Actions>/Editor/goto-mark-3" "KP_3")
(gtk_accel_path "<Actions>/Editor/goto-mark-4" "KP_4")
(gtk_accel_path "<Actions>/Editor/jump-backward-to-mark" "<%PRIMARY%>KP_4")
(gtk_accel_path "<Actions>/Editor/goto-mark-5" "KP_5")
(gtk_accel_path "<Actions>/Editor/goto-mark-6" "KP_6")
(gtk_accel_path "<Actions>/Editor/jump-forward-to-mark" "<%PRIMARY%>KP_6")
(gtk_accel_path "<Actions>/Editor/goto-mark-7" "KP_7")
(gtk_accel_path "<Actions>/Editor/goto-mark-8" "KP_8")
(gtk_accel_path "<Actions>/Editor/goto-mark-9" "KP_9")
(gtk_accel_path "<Actions>/Transport/ToggleClick" "5")
(gtk_accel_path "<Actions>/Editor/nudge-next-backward" "<%PRIMARY%>KP_Subtract")
(gtk_accel_path "<Actions>/Editor/nudge-next-forward" "<%PRIMARY%>KP_Add")
(gtk_accel_path "<Actions>/Transport/GotoZero" "KP_Insert")
;; F-N keys
(gtk_accel_path "<Actions>/Editor/start-range" "F1")
(gtk_accel_path "<Actions>/Editor/edit-cursor-to-range-start" "<%TERTIARY%>F1")
(gtk_accel_path "<Actions>/Editor/finish-range" "F2")
(gtk_accel_path "<Actions>/Editor/edit-cursor-to-range-end" "<%TERTIARY%>F2")
(gtk_accel_path "<Actions>/Editor/brush-at-mouse" "F3")
(gtk_accel_path "<Actions>/Common/ToggleMaximalEditor" "F11")
(gtk_accel_path "<Actions>/Editor/select-all" "F14")
(gtk_accel_path "<Actions>/Editor/invert-selection" "F15")
(gtk_accel_path "<Actions>/Editor/select-all-between-cursors" "F16")
;; numbers
(gtk_accel_path "<Actions>/Editor/toggle-edit-mode" "1")
(gtk_accel_path "<Actions>/Editor/cycle-snap-mode" "2")
(gtk_accel_path "<Actions>/Editor/cycle-snap-choice" "3")
(gtk_accel_path "<Actions>/Transport/ToggleAutoReturn" "4")
(gtk_accel_path "<Actions>/Transport/ToggleClick" "5")
(gtk_accel_path "<Actions>/Editor/set-tempo-from-region" "9")
(gtk_accel_path "<Actions>/Editor/set-tempo-from-edit-range" "0")
(gtk_accel_path "<Actions>/Transport/focus-on-clock" "KP_Divide")
(gtk_accel_path "<Actions>/Editor/set-loop-from-edit-range" "bracketright")
(gtk_accel_path "<Actions>/Editor/set-punch-from-edit-range" "bracketleft")
(gtk_accel_path "<Actions>/Editor/set-loop-from-region" "<%PRIMARY%><%SECONDARY%>bracketright")
(gtk_accel_path "<Actions>/Editor/loop-region" "<%PRIMARY%>bracketright")
(gtk_accel_path "<Actions>/Editor/toggle-zoom" "<%TERTIARY%>z")
(gtk_accel_path "<Actions>/Editor/zoom-to-region" "z")
;;
;; unbound actions
;;
; (gtk_accel_path "<Actions>/Common/About" "")
; (gtk_accel_path "<Actions>/Common/ToggleInspector" "")
; (gtk_accel_path "<Actions>/Editor/Autoconnect" "")
; (gtk_accel_path "<Actions>/Editor/Crossfades" "")
; (gtk_accel_path "<Actions>/Editor/CrossfadesFull" "")
; (gtk_accel_path "<Actions>/Editor/CrossfadesShort" "")
; (gtk_accel_path "<Actions>/Editor/Edit" "")
; (gtk_accel_path "<Actions>/Editor/EditCursorMovementOptions" "")
; (gtk_accel_path "<Actions>/Editor/EditSelectRangeOptions" "")
; (gtk_accel_path "<Actions>/Editor/EditSelectRegionOptions" "")
; (gtk_accel_path "<Actions>/Editor/LayerAddHigher" "")
; (gtk_accel_path "<Actions>/Editor/LayerLaterHigher" "")
; (gtk_accel_path "<Actions>/Editor/LayerMoveAddHigher" "")
; (gtk_accel_path "<Actions>/Editor/Layering" "")
; (gtk_accel_path "<Actions>/Editor/MeterFalloff" "")
; (gtk_accel_path "<Actions>/Editor/MeterHold" "")
; (gtk_accel_path "<Actions>/Editor/Monitoring" "")
; (gtk_accel_path "<Actions>/Editor/Pullup" "")
; (gtk_accel_path "<Actions>/Editor/PullupMinus1" "")
; (gtk_accel_path "<Actions>/Editor/PullupMinus4" "")
; (gtk_accel_path "<Actions>/Editor/PullupMinus4Minus1" "")
; (gtk_accel_path "<Actions>/Editor/PullupMinus4Plus1" "")
; (gtk_accel_path "<Actions>/Editor/PullupNone" "")
; (gtk_accel_path "<Actions>/Editor/PullupPlus1" "")
; (gtk_accel_path "<Actions>/Editor/PullupPlus4" "")
; (gtk_accel_path "<Actions>/Editor/PullupPlus4Minus1" "")
; (gtk_accel_path "<Actions>/Editor/PullupPlus4Plus1" "")
; (gtk_accel_path "<Actions>/Editor/RegionEditOps" "")
; (gtk_accel_path "<Actions>/Editor/Smpte23976" "")
; (gtk_accel_path "<Actions>/Editor/Smpte24" "")
; (gtk_accel_path "<Actions>/Editor/Smpte24976" "")
; (gtk_accel_path "<Actions>/Editor/Smpte25" "")
; (gtk_accel_path "<Actions>/Editor/Smpte2997" "")
; (gtk_accel_path "<Actions>/Editor/Smpte2997drop" "")
; (gtk_accel_path "<Actions>/Editor/Smpte30" "")
; (gtk_accel_path "<Actions>/Editor/Smpte30drop" "")
; (gtk_accel_path "<Actions>/Editor/Smpte5994" "")
; (gtk_accel_path "<Actions>/Editor/Smpte60" "")
; (gtk_accel_path "<Actions>/Editor/SnapMode" "")
; (gtk_accel_path "<Actions>/Editor/SnapTo" "")
; (gtk_accel_path "<Actions>/Editor/Solo" "")
; (gtk_accel_path "<Actions>/Editor/Subframes" "")
; (gtk_accel_path "<Actions>/Editor/Subframes100" "")
; (gtk_accel_path "<Actions>/Editor/Subframes80" "")
; (gtk_accel_path "<Actions>/Editor/Timecode" "")
; (gtk_accel_path "<Actions>/Editor/ToggleGeneric MIDISurface" "")
; (gtk_accel_path "<Actions>/Editor/ToggleGeneric MIDISurfaceFeedback" "")
; (gtk_accel_path "<Actions>/Editor/ToggleGeneric MIDISurfaceSubMenu" "")
; (gtk_accel_path "<Actions>/Editor/ToggleMeasureVisibility" "")
; (gtk_accel_path "<Actions>/Editor/ToggleWaveformVisibility" "")
; (gtk_accel_path "<Actions>/Editor/ToggleWaveformsWhileRecording" "")
; (gtk_accel_path "<Actions>/Editor/View" "")
; (gtk_accel_path "<Actions>/Editor/ZoomFocus" "")
; (gtk_accel_path "<Actions>/Editor/center-edit-cursor" "")
; (gtk_accel_path "<Actions>/Editor/center-playhead" "")
; (gtk_accel_path "<Actions>/Editor/playhead-to-next-region-sync" "")
; (gtk_accel_path "<Actions>/Editor/playhead-to-previous-region-sync" "")
; (gtk_accel_path "<Actions>/Editor/playhead-to-range-end" "")
; (gtk_accel_path "<Actions>/Editor/playhead-to-range-start" "")
; (gtk_accel_path "<Actions>/Editor/snap-magnetic" "")
; (gtk_accel_path "<Actions>/Editor/snap-normal" "")
; (gtk_accel_path "<Actions>/Editor/toggle-auto-xfades" "")
; (gtk_accel_path "<Actions>/Editor/toggle-xfades-active" "")
; (gtk_accel_path "<Actions>/Editor/toggle-xfades-visible" "")
; (gtk_accel_path "<Actions>/JACK/JACK" "")
; (gtk_accel_path "<Actions>/JACK/JACKDisconnect" "")
; (gtk_accel_path "<Actions>/JACK/JACKLatency1024" "")
; (gtk_accel_path "<Actions>/JACK/JACKLatency128" "")
; (gtk_accel_path "<Actions>/JACK/JACKLatency2048" "")
; (gtk_accel_path "<Actions>/JACK/JACKLatency256" "")
; (gtk_accel_path "<Actions>/JACK/JACKLatency32" "")
; (gtk_accel_path "<Actions>/JACK/JACKLatency4096" "")
; (gtk_accel_path "<Actions>/JACK/JACKLatency512" "")
; (gtk_accel_path "<Actions>/JACK/JACKLatency64" "")
; (gtk_accel_path "<Actions>/JACK/JACKLatency8192" "")
; (gtk_accel_path "<Actions>/JACK/JACKReconnect" "")
; (gtk_accel_path "<Actions>/JACK/Latency" "")
; (gtk_accel_path "<Actions>/Main/AudioFileFormat" "")
; (gtk_accel_path "<Actions>/Main/AudioFileFormatData" "")
; (gtk_accel_path "<Actions>/Main/AudioFileFormatHeader" "")
; (gtk_accel_path "<Actions>/Main/Cleanup" "")
; (gtk_accel_path "<Actions>/Main/CleanupUnused" "")
; (gtk_accel_path "<Actions>/Main/ControlSurfaces" "")
; (gtk_accel_path "<Actions>/Main/Export" "<%PRIMARY%>e")
; (gtk_accel_path "<Actions>/Main/ExportRangeMarkers" "")
; (gtk_accel_path "<Actions>/Main/ExportSelection" "")
; (gtk_accel_path "<Actions>/Main/FlushWastebasket" "")
; (gtk_accel_path "<Actions>/Main/Help" "")
; (gtk_accel_path "<Actions>/Main/KeyMouse Actions" "")
; (gtk_accel_path "<Actions>/Main/Metering" "")
; (gtk_accel_path "<Actions>/Main/MeteringFallOffRate" "")
; (gtk_accel_path "<Actions>/Main/MeteringHoldTime" "")
; (gtk_accel_path "<Actions>/Main/Options" "")
; (gtk_accel_path "<Actions>/Main/SaveTemplate" "")
; (gtk_accel_path "<Actions>/Main/Session" "")
; (gtk_accel_path "<Actions>/Main/TransportOptions" "")
; (gtk_accel_path "<Actions>/Main/Windows" "")
; (gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-timefx" "t")
; (gtk_accel_path "<Actions>/RegionList/RegionListSort" "")
; (gtk_accel_path "<Actions>/RegionList/SortAscending" "")
; (gtk_accel_path "<Actions>/RegionList/SortByRegionEndinFile" "")
; (gtk_accel_path "<Actions>/RegionList/SortByRegionLength" "")
; (gtk_accel_path "<Actions>/RegionList/SortByRegionName" "")
; (gtk_accel_path "<Actions>/RegionList/SortByRegionPosition" "")
; (gtk_accel_path "<Actions>/RegionList/SortByRegionStartinFile" "")
; (gtk_accel_path "<Actions>/RegionList/SortByRegionTimestamp" "")
; (gtk_accel_path "<Actions>/RegionList/SortBySourceFileCreationDate" "")
; (gtk_accel_path "<Actions>/RegionList/SortBySourceFileLength" "")
; (gtk_accel_path "<Actions>/RegionList/SortBySourceFileName" "")
; (gtk_accel_path "<Actions>/RegionList/SortBySourceFilesystem" "")
; (gtk_accel_path "<Actions>/RegionList/SortDescending" "")
; (gtk_accel_path "<Actions>/RegionList/rlAudition" "")
; (gtk_accel_path "<Actions>/RegionList/rlHide" "")
; (gtk_accel_path "<Actions>/RegionList/rlRemove" "")
; (gtk_accel_path "<Actions>/RegionList/rlShowAll" "")
; (gtk_accel_path "<Actions>/RegionList/rlShowAuto" "")
; (gtk_accel_path "<Actions>/ShuttleActions/SetShuttleUnitsPercentage" "")
; (gtk_accel_path "<Actions>/ShuttleActions/SetShuttleUnitsSemitones" "")
; (gtk_accel_path "<Actions>/Snap/snap-to-asixteenthbeat" "")
; (gtk_accel_path "<Actions>/Snap/snap-to-bar" "")
; (gtk_accel_path "<Actions>/Snap/snap-to-beat" "")
; (gtk_accel_path "<Actions>/Snap/snap-to-cd-frame" "")
; (gtk_accel_path "<Actions>/Snap/snap-to-edit-cursor" "")
; (gtk_accel_path "<Actions>/Snap/snap-to-eighths" "")
; (gtk_accel_path "<Actions>/Snap/snap-to-frame" "")
; (gtk_accel_path "<Actions>/Snap/snap-to-mark" "")
; (gtk_accel_path "<Actions>/Snap/snap-to-minutes" "")
; (gtk_accel_path "<Actions>/Snap/snap-to-quarters" "")
; (gtk_accel_path "<Actions>/Snap/snap-to-region-boundary" "")
; (gtk_accel_path "<Actions>/Snap/snap-to-region-end" "")
; (gtk_accel_path "<Actions>/Snap/snap-to-region-start" "")
; (gtk_accel_path "<Actions>/Snap/snap-to-region-sync" "")
; (gtk_accel_path "<Actions>/Snap/snap-to-seconds" "")
; (gtk_accel_path "<Actions>/Snap/snap-to-smpte-frame" "")
; (gtk_accel_path "<Actions>/Snap/snap-to-smpte-minutes" "")
; (gtk_accel_path "<Actions>/Snap/snap-to-smpte-seconds" "")
; (gtk_accel_path "<Actions>/Snap/snap-to-thirds" "")
; (gtk_accel_path "<Actions>/Snap/snap-to-thirtyseconds" "")
; (gtk_accel_path "<Actions>/Transport/PlaySelection" "")
; (gtk_accel_path "<Actions>/Transport/ToggleAutoInput" "")
; (gtk_accel_path "<Actions>/Transport/ToggleAutoPlay" "")
; (gtk_accel_path "<Actions>/Transport/ToggleAutoReturn" "")
; (gtk_accel_path "<Actions>/Transport/TogglePunchIn" "")
; (gtk_accel_path "<Actions>/Transport/TogglePunchOut" "")
; (gtk_accel_path "<Actions>/Transport/ToggleTimeMaster" "")
; (gtk_accel_path "<Actions>/Transport/ToggleVideoSync" "")
; (gtk_accel_path "<Actions>/Transport/Transport" "")
; (gtk_accel_path "<Actions>/Zoom/zoom-focus-center" "")
; (gtk_accel_path "<Actions>/Zoom/zoom-focus-edit" "")
; (gtk_accel_path "<Actions>/Zoom/zoom-focus-left" "")
; (gtk_accel_path "<Actions>/Zoom/zoom-focus-playhead" "")
; (gtk_accel_path "<Actions>/Zoom/zoom-focus-right" "")
; (gtk_accel_path "<Actions>/options/DoNotRunPluginsWhileRecording" "")
; (gtk_accel_path "<Actions>/options/FileDataFormat24bit" "")
; (gtk_accel_path "<Actions>/options/FileDataFormatFloat" "")
; (gtk_accel_path "<Actions>/options/FileHeaderFormatBWF" "")
; (gtk_accel_path "<Actions>/options/FileHeaderFormatCAF" "")
; (gtk_accel_path "<Actions>/options/FileHeaderFormatWAVE" "")
; (gtk_accel_path "<Actions>/options/FileHeaderFormatWAVE64" "")
; (gtk_accel_path "<Actions>/options/GainReduceFastTransport" "")
; (gtk_accel_path "<Actions>/options/InputAutoConnectManual" "")
; (gtk_accel_path "<Actions>/options/InputAutoConnectPhysical" "")
; (gtk_accel_path "<Actions>/options/LatchedRecordEnable" "")
; (gtk_accel_path "<Actions>/options/LatchedSolo" "")
; (gtk_accel_path "<Actions>/options/MeterFalloffFast" "")
; (gtk_accel_path "<Actions>/options/MeterFalloffFaster" "")
; (gtk_accel_path "<Actions>/options/MeterFalloffFastest" "")
; (gtk_accel_path "<Actions>/options/MeterFalloffMedium" "")
; (gtk_accel_path "<Actions>/options/MeterFalloffOff" "")
; (gtk_accel_path "<Actions>/options/MeterFalloffSlow" "")
; (gtk_accel_path "<Actions>/options/MeterFalloffSlowest" "")
; (gtk_accel_path "<Actions>/options/MeterHoldLong" "")
; (gtk_accel_path "<Actions>/options/MeterHoldMedium" "")
; (gtk_accel_path "<Actions>/options/MeterHoldOff" "")
; (gtk_accel_path "<Actions>/options/MeterHoldShort" "")
; (gtk_accel_path "<Actions>/options/OutputAutoConnectManual" "")
; (gtk_accel_path "<Actions>/options/OutputAutoConnectMaster" "")
; (gtk_accel_path "<Actions>/options/OutputAutoConnectPhysical" "")
; (gtk_accel_path "<Actions>/options/RegionEquivalentsOverlap" "")
; (gtk_accel_path "<Actions>/options/SendMMC" "")
; (gtk_accel_path "<Actions>/options/SendMTC" "")
; (gtk_accel_path "<Actions>/options/ShowSoloMutes" "")
; (gtk_accel_path "<Actions>/options/SoloInPlace" "")
; (gtk_accel_path "<Actions>/options/SoloViaBus" "")
; (gtk_accel_path "<Actions>/options/StopPluginsWithTransport" "")
; (gtk_accel_path "<Actions>/options/StopRecordingOnXrun" "")
; (gtk_accel_path "<Actions>/options/StopTransportAtEndOfSession" "")
; (gtk_accel_path "<Actions>/options/UseExternalMonitoring" "")
; (gtk_accel_path "<Actions>/options/UseHardwareMonitoring" "")
; (gtk_accel_path "<Actions>/options/UseMMC" "")
; (gtk_accel_path "<Actions>/options/UseSoftwareMonitoring" "")
; (gtk_accel_path "<Actions>/options/VerifyRemoveLastCapture" "")
; (gtk_accel_path "<Actions>/redirectmenu/activate" "")
; (gtk_accel_path "<Actions>/redirectmenu/activate_all" "")
; (gtk_accel_path "<Actions>/redirectmenu/clear" "")
; (gtk_accel_path "<Actions>/redirectmenu/copy" "")
; (gtk_accel_path "<Actions>/redirectmenu/cut" "")
; (gtk_accel_path "<Actions>/redirectmenu/deactivate" "")
; (gtk_accel_path "<Actions>/redirectmenu/deactivate_all" "")
; (gtk_accel_path "<Actions>/redirectmenu/deselectall" "<%PRIMARY%><%TERTIARY%>a")
; (gtk_accel_path "<Actions>/redirectmenu/edit" "")
; (gtk_accel_path "<Actions>/redirectmenu/newinsert" "")
; (gtk_accel_path "<Actions>/redirectmenu/newplugin" "")
; (gtk_accel_path "<Actions>/redirectmenu/newsend" "")
; (gtk_accel_path "<Actions>/redirectmenu/paste" "")
; (gtk_accel_path "<Actions>/redirectmenu/rename" "")
; (gtk_accel_path "<Actions>/redirectmenu/selectall" "")
;(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-object" "o")

View File

@ -94,7 +94,6 @@ au_pluginui.mm
""")
gtkosx_files=Split("""
sync-menu.c
cocoacarbon.mm
""")
@ -323,74 +322,66 @@ if gtkardour['IS_OSX']:
#
# OS X font rendering is different even with X11
#
my_font_dict['%FONT_TINY%'] = 'Lucida Grande 7'
my_font_dict['%FONT_SMALLERER%'] = 'Lucida Grande 8'
my_font_dict['%FONT_SMALLER%'] = 'Lucida Grande 9'
my_font_dict['%FONT_SMALL%'] = 'Lucida Grande 10'
my_font_dict['%FONT_NORMAL%'] = 'Lucida Grande 11'
my_font_dict['%FONT_BIG%'] = 'Lucida Grande 12'
my_font_dict['%FONT_BIGGER%'] = 'Lucida Grande 14'
my_font_dict['%FONT_LARGE%'] = 'Lucida Grande 18'
my_font_dict['%FONT_LARGER%'] = 'Lucida Grande 28'
my_font_dict['%FONT_HUGER%'] = 'Lucida Grande 36'
my_font_dict['%FONT_MASSIVE%'] = 'Lucida Grande 60'
my_font_dict['%FONT_BOLD_TINY%'] = 'Lucida Grande bold 7'
my_font_dict['%FONT_BOLD_SMALLER%'] = 'Lucida Grande bold 9'
my_font_dict['%FONT_BOLD_SMALL%'] = 'Lucida Grande bold 10'
my_font_dict['%FONT_BOLD_NORMAL%'] = 'Lucida Grande bold 11'
my_font_dict['%FONT_BOLD_BIG%'] = 'Lucida Grande bold 13'
my_font_dict['%FONT_BOLD_BIGGER%'] = 'Lucida Grande bold 14'
my_font_dict['%FONT_BOLD_LARGE%'] = 'Lucida Grande bold 20'
my_font_dict['%FONT_BOLD_LARGER%'] = 'Lucida Grande bold 25'
my_font_dict['%FONT_BOLD_HUGER%'] = 'Lucida Grande bold 36'
my_font_dict['%FONT_BOLD_MASSIVE%'] = 'Lucida Grande bold 60'
my_font_dict['%FONT_ITALIC_TINY%'] = 'Lucida Grande italic 7'
my_font_dict['%FONT_ITALIC_SMALLER%'] = 'Lucida Grande italic 9'
my_font_dict['%FONT_ITALIC_SMALL%'] = 'Lucida Grande italic 10'
my_font_dict['%FONT_ITALIC_NORMAL%'] = 'Lucida Grande italic 11'
my_font_dict['%FONT_ITALIC_BIG%'] = 'Lucida Grande italic 15'
my_font_dict['%FONT_ITALIC_BIGGER%'] = 'Lucida Grande italic 16'
my_font_dict['%FONT_ITALIC_LARGE%'] = 'Lucida Grande italic 20'
my_font_dict['%FONT_ITALIC_LARGER%'] = 'Lucida Grande italic 28'
my_font_dict['%FONT_ITALIC_HUGER%'] = 'Lucida Grande italic 36'
my_font_dict['%FONT_ITALIC_MASSIVE%'] = 'Lucida Grande italic 60'
font_sizes = {
'TINY' : '7',
'SMALLER' : '9',
'SMALL' : '10',
'NORMAL' : '11',
'BIG' : '12',
'BIGGER' : '14',
'LARGE' : '18',
'LARGER' : '28',
'HUGER' : '36',
'MASSIVE' : '60'
}
basefont = "Lucida Grande"
else:
#
# Linux/X11 font rendering
#
my_font_dict['%FONT_TINY%'] = 'sans 4'
my_font_dict['%FONT_SMALLERER%'] = 'sans 6'
my_font_dict['%FONT_SMALLER%'] = 'sans 6'
my_font_dict['%FONT_SMALL%'] = 'sans 7'
my_font_dict['%FONT_NORMAL%'] = 'sans 8'
my_font_dict['%FONT_BIG%'] = 'sans 12'
my_font_dict['%FONT_BIGGER%'] = 'sans 14'
my_font_dict['%FONT_LARGE%'] = 'sans 18'
my_font_dict['%FONT_LARGER%'] = 'sans 24'
my_font_dict['%FONT_HUGER%'] = 'sans 34'
my_font_dict['%FONT_MASSIVE%'] = 'sans 60'
my_font_dict['%FONT_BOLD_TINY%'] = 'sans bold 4'
my_font_dict['%FONT_BOLD_SMALLER%'] = 'sans bold 6'
my_font_dict['%FONT_BOLD_SMALL%'] = 'sans bold 7'
my_font_dict['%FONT_BOLD_NORMAL%'] = 'sans bold 8'
my_font_dict['%FONT_BOLD_BIG%'] = 'sans bold 12'
my_font_dict['%FONT_BOLD_BIGGER%'] = 'sans bold 14'
my_font_dict['%FONT_BOLD_LARGE%'] = 'sans bold 18'
my_font_dict['%FONT_BOLD_LARGER%'] = 'sans bold 24'
my_font_dict['%FONT_BOLD_HUGE%'] = 'sans bold 25'
my_font_dict['%FONT_BOLD_HUGER%'] = 'sans bold 34'
my_font_dict['%FONT_BOLD_MASSIVE%'] = 'sans bold 60'
my_font_dict['%FONT_ITALIC_TINY%'] = 'sans italic 4'
my_font_dict['%FONT_ITALIC_SMALLER%'] = 'sans italic 6'
my_font_dict['%FONT_ITALIC_SMALL%'] = 'sans italic 7'
my_font_dict['%FONT_ITALIC_NORMAL%'] = 'sans italic 8'
my_font_dict['%FONT_ITALIC_BIG%'] = 'sans italic 12'
my_font_dict['%FONT_ITALIC_BIGGER%'] = 'sans italic 14'
my_font_dict['%FONT_ITALIC_LARGE%'] = 'sans italic 18'
my_font_dict['%FONT_ITALIC_LARGER%'] = 'sans italic 24'
my_font_dict['%FONT_ITALIC_HUGE%'] = 'sans italic 25'
my_font_dict['%FONT_ITALIC_HUGER%'] = 'sans italic 34'
my_font_dict['%FONT_ITALIC_MASSIVE%'] = 'sans italic 60'
if gtkardour['OLDFONTS']:
font_sizes = {
'TINY' : '4',
'SMALLER' : '6',
'SMALL' : '7',
'NORMAL' : '8',
'BIG' : '12',
'BIGGER' : '14',
'LARGE' : '18',
'LARGER' : '24',
'HUGER' : '34',
'MASSIVE' : '60'
}
else:
font_sizes = {
'TINY' : '6',
'SMALLER' : '8',
'SMALL' : '9',
'NORMAL' : '10',
'BIG' : '14',
'BIGGER' : '16',
'LARGE' : '18',
'LARGER' : '24',
'HUGER' : '34',
'MASSIVE' : '60'
}
basefont = "sans"
for style in ['', 'BOLD', 'ITALIC']:
for sizename,points in font_sizes.iteritems():
if (len (style)):
key = "_".join (['FONT',style,sizename])
fontstyle = " ".join ([basefont,style.lower(),points])
else:
key = "_".join (['FONT',sizename])
fontstyle = " ".join ([basefont,points])
key = '%' + key + '%'
my_font_dict[key] = fontstyle
ardour_dark_theme = env.SubstInFile ('ardour3_ui_dark.rc', 'ardour3_ui_dark.rc.in', SUBST_DICT = my_font_dict)
ardour_light_theme = env.SubstInFile ('ardour3_ui_light.rc', 'ardour3_ui_light.rc.in', SUBST_DICT = my_font_dict)
@ -405,13 +396,17 @@ keybindings_dict = { }
if gtkardour['GTKOSX'] and gtkardour['NATIVE_OSX_KEYS']:
#
# Command(Mod1), Alt(Mod5), Ctrl, Shift
# Command(Meta), Alt(Mod1), Ctrl, Shift
# **** as of february 4th 2008, OUR VERSION OF *****
# Gtk/Quartz maps:
# NSCommand (aka "Command" aka "Apple" aka "Cauliflower") -> Meta
# NSAlternate (aka "Option") -> Mod1
#
keybindings_dict['%PRIMARY%'] = 'Mod5'
keybindings_dict['%SECONDARY%'] = 'Alt'
keybindings_dict['%PRIMARY%'] = 'Meta'
keybindings_dict['%SECONDARY%'] = 'Mod1'
keybindings_dict['%TERTIARY%'] = 'Shift'
keybindings_dict['%LEVEL4%'] = 'Ctrl'
keybindings_dict['%WINDOW%'] = 'Mod5'
keybindings_dict['%WINDOW%'] = 'Mod1'
else:
#
# Ctrl, Alt, Shift, Mod3(Meta)
@ -422,9 +417,10 @@ else:
keybindings_dict['%LEVEL4%'] = 'Mod2'
keybindings_dict['%WINDOW%'] = 'Alt'
ardourbindings = env.SubstInFile ('ardour.bindings', 'ardour.bindings.in', SUBST_DICT = keybindings_dict);
ardoursaeDEbindings = env.SubstInFile ('ardour-sae-de.bindings', 'ardour-sae-de.bindings.in', SUBST_DICT = keybindings_dict);
ardoursaeANSIbindings = env.SubstInFile ('ardour-sae-ansi.bindings', 'ardour-sae-ansi.bindings.in', SUBST_DICT = keybindings_dict);
for b in [ 'SAE-de', 'mnemonic-us', 'ergonomic-us' ]:
target_file = b + '.bindings'
src_file = target_file + '.in'
Default (env.SubstInFile (target_file, src_file, SUBST_DICT = keybindings_dict))
my_subst_dict['%INSTALL_PREFIX%'] = final_prefix
my_subst_dict['%LIBDIR%'] = env['LIBDIR']
@ -436,9 +432,6 @@ env.AddPostAction (ardoursh, Chmod ('$TARGET', 0755))
ardourdev = env.SubstInFile ('ardev_common.sh','ardev_common.sh.in', SUBST_DICT = my_subst_dict);
env.AddPostAction (ardourdev, Chmod ('$TARGET', 0755))
Default(ardourbindings)
Default(ardoursaeDEbindings)
Default(ardoursaeANSIbindings)
Default(ardourdev)
Default(ardoursh)
Default(ardour_dark_theme)
@ -468,11 +461,12 @@ if env['NLS']:
# configuration files
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour3'), ardour_dark_theme))
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour3'), ardour_light_theme))
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour2'), 'ardour3_ui_default.conf'))
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour3'), 'ardour.menus'))
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour3'), 'ardour-sae.menus'))
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour3'), 'ardour.bindings'))
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour3'), 'ardour-sae-ansi.bindings'))
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour3'), 'ardour-sae-de.bindings'))
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour2'), 'ergonomic-us.bindings'))
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour2'), 'mnemonic-us.bindings'))
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour2'), 'SAE-de.bindings'))
# data files
env.Alias('install', env.Install(os.path.join(install_prefix, 'share', 'ardour3'), 'splash.png'))
env.Alias('install', env.Install(os.path.join(install_prefix, 'share', 'ardour3', 'pixmaps'), pixmap_files))

View File

@ -3,6 +3,7 @@ cd `dirname "$0"`/..
#export G_DEBUG=fatal_criticals
export ARDOUR_PATH=gtk2_ardour/icons:gtk2_ardour/pixmaps:gtk2_ardour:.
export ARDOUR_DATA_PATH=gtk2_ardour:.
export GTK_PATH=libs/clearlooks
export VAMP_PATH=libs/vamp-plugins:$VAMP_PATH

View File

@ -43,6 +43,11 @@
<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'/>
@ -61,7 +66,6 @@
<menuitem action='playhead-to-edit'/>
<menuitem action='focus-on-clock'/>
<separator/>
<menuitem action='ToggleTimeMaster'/>
<menuitem action='TogglePunchIn'/>
<menuitem action='TogglePunchOut'/>
<menuitem action='ToggleAutoInput'/>
@ -143,6 +147,7 @@
<menuitem action='duplicate-region'/>
<menuitem action='insert-region'/>
<menuitem action='normalize-region'/>
<menuitem action='split-region-at-transients'/>
<separator/>
<menuitem action="nudge-forward"/>
<menuitem action="nudge-backward"/>
@ -235,6 +240,7 @@
<menuitem action='ToggleKeyEditor'/>
<menuitem action='ToggleThemeManager'/>
<menuitem action='ToggleBigClock'/>
<menuitem action='toggle-rhythm-ferret'/>
</menu>
<menu name='Options' action='Options'>
<menu action='Monitoring'>

View File

@ -46,6 +46,8 @@
<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/>
@ -66,7 +68,7 @@
<menuitem action='playhead-to-range-start'/>
<menuitem action='playhead-to-range-end'/>
<menuitem action='focus-on-clock'/>
<separator/>
<menu action='LocateToMarker'>
<menuitem action='goto-mark-1'/>
<menuitem action='goto-mark-2'/>
<menuitem action='goto-mark-3'/>
@ -76,6 +78,7 @@
<menuitem action='goto-mark-7'/>
<menuitem action='goto-mark-8'/>
<menuitem action='goto-mark-9'/>
</menu>
<menu action='TransportOptions'>
<menuitem action='ToggleTimeMaster'/>
<menuitem action='TogglePunchIn'/>
@ -118,6 +121,8 @@
<menuitem action='edit-cursor-to-range-start'/>
<menuitem action='edit-cursor-to-range-end'/>
</menu>
<menuitem action='set-tempo-from-region'/>
<menuitem action='set-tempo-from-edit-range'/>
<menu name='KeyMouse Actions' action='KeyMouse Actions'>
<menuitem action='play-selected-regions'/>
<menuitem action='brush-at-mouse'/>
@ -172,9 +177,7 @@
<menuitem action='normalize-region'/>
<separator/>
<menuitem action="nudge-forward"/>
<menuitem action="nudge-next-forward"/>
<menuitem action="nudge-backward"/>
<menuitem action="nudge-next-backward"/>
<menuitem action='split-region'/>
<menuitem action='set-region-sync-position'/>
<separator/>
@ -198,8 +201,6 @@
<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 name='View' action = 'View'>
<menu name='ZoomFocus' action='ZoomFocus'>
@ -433,6 +434,7 @@
<menuitem action='PeriodicSafetyBackups'/>
<menuitem action='VerifyRemoveLastCapture'/>
<menuitem action='StopRecordingOnXrun'/>
<menuitem action='CreateXrunMarker'/>
<menuitem action='StopTransportAtEndOfSession'/>
<menuitem action='GainReduceFastTransport'/>
<menuitem action='PrimaryClockDeltaEditCursor'/>

View File

@ -0,0 +1,95 @@
<?xml version="1.0" encoding="UTF-8"?>
<Ardour>
<Canvas>
<Option name="active crossfade" value="e8ed3d77"/>
<Option name="audio bus base" value="dbd1ea68"/>
<Option name="audio track base" value="c6d3d868"/>
<Option name="automation line" value="44bc59ff"/>
<Option name="automation track fill" value="a0a0ce68"/>
<Option name="automation track outline" value="282828ff"/>
<Option name="cdmarkerbar" value="9090a3ff"/>
<Option name="clipped waveform" value="ff0000e5"/>
<Option name="control point fill" value="000000ff"/>
<Option name="control point outline" value="000000ff"/>
<Option name="control point selected" value="00ff00ff"/>
<Option name="control point" value="ff0000ff"/>
<Option name="crossfade editor base" value="282d49ff"/>
<Option name="crossfade editor line shading" value="00a0d154"/>
<Option name="crossfade editor line" value="000000ff"/>
<Option name="crossfade editor point fill" value="00ff00ff"/>
<Option name="crossfade editor point outline" value="0000ffff"/>
<Option name="crossfade editor wave" value="ffffff28"/>
<Option name="crossfade line" value="000000ff"/>
<Option name="EditPoint" value="0000ffff"/>
<Option name="EnteredAutomationLine" value="dd6363ff"/>
<Option name="entered control point outline" value="ff0000ee"/>
<Option name="entered control point selected" value="ff3535ff"/>
<Option name="entered control point" value="000000cc"/>
<Option name="EnteredGainLine" value="dd6363ff"/>
<Option name="EnteredMarker" value="dd6363ff"/>
<Option name="FrameHandle" value="7c00ff96"/>
<Option name="GainLineInactive" value="9fbca4c5"/>
<Option name="GainLine" value="00bc20ff"/>
<Option name="GhostTrackBase" value="44007c7f"/>
<Option name="GhostTrackWaveClip" value="ff000000"/>
<Option name="GhostTrackWave" value="02fd004c"/>
<Option name="GhostTrackZeroLine" value="e500e566"/>
<Option name="ImageTrack" value="ddddd8ff"/>
<Option name="inactive crossfade" value="e8ed3d77"/>
<Option name="location cd marker" value="1ee8c4ff"/>
<Option name="location loop" value="35964fff"/>
<Option name="location marker" value="c4f411ff"/>
<Option name="location punch" value="7c3a3aff"/>
<Option name="location range" value="497a59ff"/>
<Option name="marker bar separator" value="30303088"/>
<Option name="markerbar" value="9898a3ff"/>
<Option name="MarkerDragLine" value="004f00f9"/>
<Option name="marker label" value="000000ff"/>
<Option name="MarkerTrack" value="ddddd8ff"/>
<Option name="MeasureLineBar" value="8c8c988c"/>
<Option name="MeasureLineBeat" value="72727266"/>
<Option name="meterbar" value="666672ff"/>
<Option name="MeterColorBase" value="0000ffff"/>
<Option name="MeterColorClip" value="ff0000ff"/>
<Option name="MeterColorMid" value="73f9baff"/>
<Option name="MeterColorTop" value="00fd5dff"/>
<Option name="MeterMarker" value="f2425bff"/>
<Option name="midi bus base" value="ff0000ee"/>
<Option name="midi track base" value="ff8f8f3d"/>
<Option name="NameHighlightFill" value="0000ffff"/>
<Option name="NameHighlightOutline" value="7c00ff96"/>
<Option name="PlayHead" value="ff0000ff"/>
<Option name="processor automation line" value="7aa3f9ff"/>
<Option name="PunchLine" value="a80000ff"/>
<Option name="RangeDragBarRect" value="969696c6"/>
<Option name="RangeDragRect" value="82c696c6"/>
<Option name="rangemarker bar" value="7f7f8cff"/>
<Option name="RecordingRect" value="e5c6c6ff"/>
<Option name="region base" value="99a7b584"/>
<Option name="RubberBandRect" value="c6c6c659"/>
<Option name="selected crossfade editor line" value="00dbdbff"/>
<Option name="selected crossfade editor wave" value="f9ea14a0"/>
<Option name="selected region base" value="130505ff"/>
<Option name="selected waveform fill" value="e6e6fac8"/>
<Option name="selected waveform outline" value="1a1a1acc"/>
<Option name="SelectionRect" value="e8f4d377"/>
<Option name="Selection" value="636363b2"/>
<Option name="tempo bar" value="72727fff"/>
<Option name="TempoMarker" value="f2425bff"/>
<Option name="TimeAxisFrame" value="000000cb"/>
<Option name="time-stretch-fill" value="e2b5b596"/>
<Option name="time-stretch-outline" value="63636396"/>
<Option name="TransportDragRect" value="969696c6"/>
<Option name="TransportLoopRect" value="1e7728f9"/>
<Option name="TransportMarkerBar" value="8c8c96ff"/>
<Option name="TransportPunchRect" value="6d2828e5"/>
<Option name="TrimHandleLocked" value="ea0f0f28"/>
<Option name="TrimHandle" value="1900ff44"/>
<Option name="verbose canvas cursor" value="f4f214bc"/>
<Option name="VestigialFrame" value="00000092"/>
<Option name="waveform fill" value="3d475378"/>
<Option name="waveform outline" value="0f0f0fcc"/>
<Option name="ZeroLine" value="bdbdbd8d"/>
<Option name="ZoomRect" value="c6d1b26d"/>
</Canvas>
</Ardour>

View File

@ -91,7 +91,7 @@ style "default_base" = "medium_text"
GtkTreeView::vertical-padding = 0
GtkTreeView::horizontal-padding = 0
GtkTreeView::even-row-color = { 0, 0, 0 }
GtkTreeView::odd-row-color = { 0.08, 0.10, 0.15 }
GtkTreeView::odd-row-color = { 0.08, 0.10, 0.14 }
fg[NORMAL] = { 0.80, 0.80, 0.80 }
fg[ACTIVE] = { 0.80, 0.80, 0.80 }
@ -99,8 +99,8 @@ style "default_base" = "medium_text"
fg[INSENSITIVE] = { 0.80, 0.80, 0.80 }
fg[SELECTED] = { 0.80, 0.80, 0.80 }
bg[NORMAL] = { 0.31, 0.35, 0.40 }
bg[ACTIVE] = { 0.31, 0.35, 0.40 }
bg[NORMAL] = { 0.31, 0.35, 0.38 }
bg[ACTIVE] = { 0.31, 0.35, 0.38 }
bg[PRELIGHT] = "#515690"
bg[INSENSITIVE] = { 0.06, 0.10, 0.10 }
bg[SELECTED] = { 0, 0.40, 0.60 }
@ -111,11 +111,11 @@ style "default_base" = "medium_text"
text[INSENSITIVE] = { 0.80, 0.80, 0.80}
text[SELECTED] = { 1.0, 1.0, 1.0 }
base[ACTIVE] = "#272a2f"
base[NORMAL] = "#1a1e20"
base[PRELIGHT] = { 0.18, 0.20, 0.20 }
base[ACTIVE] = "#272a32"
base[NORMAL] = "#1a1e24"
base[PRELIGHT] = { 0.18, 0.20, 0.22 }
base[INSENSITIVE] = "#4c5159"
base[SELECTED] = { 0.23, 0.25, 0.25 }
base[SELECTED] = { 0.23, 0.25, 0.27 }
engine "clearlooks"
{
@ -131,7 +131,7 @@ style "default_base" = "medium_text"
style "base_frame"
{
fg[NORMAL] = { 0.80, 0.80, 0.80 }
bg[NORMAL] = { 0.35, 0.35, 0.40 }
bg[NORMAL] = { 0.31, 0.35, 0.40 }
}
style "transport_base" = "medium_bold_text"
@ -150,26 +150,51 @@ style "black_mackie_menu_bar"
bg[NORMAL] = { 0, 0, 0 }
}
*/
style "default_buttons_menus"
style "default_button"
{
font_name = "%FONT_SMALL%"
fg[ACTIVE] = { 1.0, 1.0, 1.0 }
bg[NORMAL] = { 0.31, 0.35, 0.39 }
bg[ACTIVE] = "#565690"
bg[PRELIGHT] = { 0.41, 0.45, 0.49 }
bg[INSENSITIVE] = { 0.11, 0.15, 0.19 }
bg[SELECTED] = { 0.11, 0.15, 0.19 }
}
style "default_menu"
{
font_name = "%FONT_NORMAL%"
fg[ACTIVE] = { 1.0, 1.0, 1.0 }
bg[NORMAL] = { 0.30, 0.30, 0.35 }
bg[NORMAL] = { 0.26, 0.30, 0.35 }
bg[ACTIVE] = "#565690"
bg[PRELIGHT] = { 0.15, 0.15, 0.20 }
bg[INSENSITIVE] = { 0.15, 0.15, 0.20 }
bg[SELECTED] = { 0.15, 0.15, 0.20 }
bg[PRELIGHT] = { 0.11, 0.15, 0.20 }
bg[INSENSITIVE] = { 0.11, 0.15, 0.20 }
bg[SELECTED] = { 0.11, 0.15, 0.20 }
}
style "very_small_button" = "default_buttons_menus"
style "default_generic"
{
font_name = "%FONT_NORMAL%"
fg[ACTIVE] = { 1.0, 1.0, 1.0 }
bg[NORMAL] = { 0.26, 0.30, 0.35 }
bg[ACTIVE] = "#545690"
bg[PRELIGHT] = { 0.11, 0.15, 0.20 }
bg[INSENSITIVE] = { 0.11, 0.15, 0.20 }
bg[SELECTED] = { 0.11, 0.15, 0.20 }
}
style "very_small_button" = "default_button"
{
font_name = "%FONT_SMALLER%"
ythickness = 0
xthickness = 0
}
style "small_button" = "default_buttons_menus"
style "small_button" = "default_button"
{
}
@ -277,25 +302,24 @@ style "solo_button_active" = "small_button"
style "mixer_solo_button" = "solo_button"
{
font_name = "%FONT_SMALLERER%"
font_name = "%FONT_SMALLER%"
xthickness = 0
ythickness = 0
}
style "mixer_solo_button_alternate" = "solo_button_alternate"
{
font_name = "%FONT_SMALLERER%"
font_name = "%FONT_SMALLER%"
xthickness = 0
ythickness = 0
}
style "mixer_solo_button_active" = "solo_button_active"
{
font_name = "%FONT_SMALLERER%"
font_name = "%FONT_SMALLER%"
xthickness = 0
ythickness = 0
}
style "mute_button" = "small_button"
{
}
@ -326,23 +350,16 @@ style "mute_button_active" = "small_button"
fg[PRELIGHT] = { 0, 0, 0 }
}
style "mixer_mute_button" = "mute_button"
{
font_name = "%FONT_SMALLERER%"
xthickness = 0
ythickness = 0
}
style "mixer_mute_button_alternate" = "mute_button_alternate"
{
font_name = "%FONT_SMALLERER%"
font_name = "%FONT_SMALLER%"
xthickness = 0
ythickness = 0
}
style "mixer_mute_button_active" = "mute_button_active"
{
font_name = "%FONT_SMALLERER%"
font_name = "%FONT_SMALLER%"
xthickness = 0
ythickness = 0
}
@ -377,9 +394,9 @@ style "mixer_red_active_button" = "very_small_button"
bg[INSENSITIVE] = { 0.16, 0.16, 0.21 }
}
style "time_button" = "default_buttons_menus"
style "time_button" = "default_button"
{
font_name = "%FONT_NORMAL%"
font_name = "%FONT_SMALL%"
}
style "transport_button"
@ -434,7 +451,7 @@ style "shuttle_control" = "very_small_text"
bg[SELECTED] = { 1.0, 0.04, 0.04 }
}
style "ardour_adjusters" = "default_buttons_menus"
style "ardour_adjusters" = "default_generic"
{
bg[NORMAL] = { 0.60, 0.60, 0.60 }
bg[PRELIGHT] = { 0.80, 0.80, 0.80 }
@ -453,7 +470,7 @@ style "editor_hscrollbar" = "ardour_adjusters"
GtkScrollbar::slider_width = 27
}
style "ardour_progressbars" = "default_buttons_menus"
style "ardour_progressbars" = "default_generic"
{
bg[NORMAL] = { 0, 0, 0 }
bg[PRELIGHT] = { 0.00, 0.36, 0.40 }
@ -785,6 +802,7 @@ style "track_name_display"
style "active_track_name_display"
{
font_name = "%FONT_NORMAL%"
GtkWidget::cursor_color = {0, 0, 0 }
text[NORMAL] = { 0.26, 0.26, 0.26 }
base[NORMAL] = { 0.89, 0.89, 0.89 }
}
@ -1135,7 +1153,7 @@ style "tearoff_arrow" = "medium_bold_entry"
bg[PRELIGHT] = { 0.80, 0.80, 0.80 }
}
style "location_row_button" = "default_buttons_menus"
style "location_row_button" = "default_button"
{
font_name = "%FONT_BIG%"
}
@ -1177,7 +1195,7 @@ style "pan_slider"
}
style "ardour_button" ="default_buttons_menus"
style "ardour_button" ="default_button"
{
xthickness = 1
ythickness = 1
@ -1187,7 +1205,7 @@ style "ardour_button" ="default_buttons_menus"
class "GtkWidget" style:highest "default_base"
class "GtkScrollbar" style:highest "ardour_adjusters"
class "GtkLabel" style:highest "default_buttons_menus"
class "GtkLabel" style:highest "default_generic"
class "GtkButton" style:highest "ardour_button"
class "GtkArrow" style:highest "tearoff_arrow"
class "GtkProgressBar" style:highest "ardour_progressbars"
@ -1196,7 +1214,7 @@ widget "*FirstActionMessage" style:highest "first_action_message"
widget "*VerboseCanvasCursor" style:highest "verbose_canvas_cursor"
widget "*MarkerText" style:highest "marker_text"
widget "*TimeAxisViewItemName*" style:highest "time_axis_view_item_name"
#widget "*ExportProgress" style:highest "default_buttons_menus"
#widget "*ExportProgress" style:highest "default_generic"
widget "*ExportFileLabel" style:highest "small_bold_text"
widget "*ExportFormatLabel" style:highest "medium_bold_text"
widget "*ExportHeader" style:highest "small_bold_text"
@ -1208,33 +1226,33 @@ widget "*EditModeSelector" style:highest "medium_bold_entry"
widget "*SnapTypeSelector" style:highest "medium_bold_entry"
widget "*SnapModeSelector" style:highest "medium_bold_entry"
widget "*ZoomFocusSelector" style:highest "medium_bold_entry"
widget "*ArdourContextMenu*" style:highest "default_buttons_menus"
widget "*EditGroupTitleButton*" style:highest "default_buttons_menus"
widget "*MixerGroupTitleButton*" style:highest "default_buttons_menus"
widget "*ErrorLogCloseButton" style:highest "default_buttons_menus"
widget "*EditorGTKButton*" style:highest "default_buttons_menus"
widget "*ToolbarButton" style:highest "default_buttons_menus"
widget "*ToolbarButton*" style:highest "default_buttons_menus"
widget "*CrossfadeEditButton" style:highest "default_buttons_menus"
widget "*CrossfadeEditButton*" style:highest "default_buttons_menus"
widget "*TrackHistoryButton*" style:highest "default_buttons_menus"
widget "*TrackSizeButton*" style:highest "default_buttons_menus"
widget "*TrackPlaylistButton*" style:highest "default_buttons_menus"
widget "*TrackAutomationButton*" style:highest "default_buttons_menus"
widget "*TrackGroupButton*" style:highest "default_buttons_menus"
widget "*TrackMixButton*" style:highest "default_buttons_menus"
widget "*TrackVisualButton*" style:highest "default_buttons_menus"
widget "*TrackRemoveButton*" style:highest "default_buttons_menus"
widget "*BaseButton" style:highest "default_buttons_menus"
widget "*TakeButtonLabel" style:highest "default_buttons_menus"
widget "*MixerWidthButton" style:highest "default_buttons_menus"
widget "*MixerHideButton" style:highest "default_buttons_menus"
widget "*MixerSendButton" style:highest "default_buttons_menus"
widget "*MixerSendButtonLabel" style:highest "default_buttons_menus"
widget "*MixerSendSwitch" style:highest "default_buttons_menus"
widget "*MixerInsertButton" style:highest "default_buttons_menus"
widget "*MixerInsertButtonLabel" style:highest "default_buttons_menus"
widget "*MixerInsertSwitch" style:highest "default_buttons_menus"
widget "*ArdourContextMenu*" style:highest "default_menu"
widget "*EditGroupTitleButton*" style:highest "default_button"
widget "*MixerGroupTitleButton*" style:highest "default_button"
widget "*ErrorLogCloseButton" style:highest "default_button"
widget "*EditorGTKButton*" style:highest "default_button"
widget "*ToolbarButton" style:highest "default_button"
widget "*ToolbarButton*" style:highest "default_button"
widget "*CrossfadeEditButton" style:highest "default_button"
widget "*CrossfadeEditButton*" style:highest "default_button"
widget "*TrackHistoryButton*" style:highest "default_button"
widget "*TrackSizeButton*" style:highest "default_button"
widget "*TrackPlaylistButton*" style:highest "default_button"
widget "*TrackAutomationButton*" style:highest "default_button"
widget "*TrackGroupButton*" style:highest "default_button"
widget "*TrackMixButton*" style:highest "default_button"
widget "*TrackVisualButton*" style:highest "default_button"
widget "*TrackRemoveButton*" style:highest "default_button"
widget "*BaseButton" style:highest "default_button"
widget "*TakeButtonLabel" style:highest "default_button"
widget "*MixerWidthButton" style:highest "default_button"
widget "*MixerHideButton" style:highest "default_button"
widget "*MixerSendButton" style:highest "default_button"
widget "*MixerSendButtonLabel" style:highest "default_button"
widget "*MixerSendSwitch" style:highest "default_button"
widget "*MixerInsertButton" style:highest "default_button"
widget "*MixerInsertButtonLabel" style:highest "default_button"
widget "*MixerInsertSwitch" style:highest "default_button"
widget "*MixerMonitorInputButton*" style:highest "very_small_button"
widget "*MixerMonitorInputButton.*" style:highest "very_small_button"
widget "*MixerIOButton" style:highest "very_small_button"
@ -1338,7 +1356,7 @@ widget "*TakeTagLabel" style:highest "small_bold_text"
widget "*ToolBarLabel" style:highest "small_bold_text"
widget "*EditorDisplayLabel" style:highest "small_bold_text"
widget "*NewSessionLabel" style:highest "large_text"
widget "*GlobalButtonLabel" style:highest "default_buttons_menus"
widget "*GlobalButtonLabel" style:highest "default_generic"
widget "*ClickButton" style:highest "medium_entry"
widget "*RegionNameDisplay" style:highest "medium_entry"
widget "*PluginDisplay" style:highest "medium_entry"
@ -1391,8 +1409,8 @@ widget "*CrossfadeEditCurveButton" style:highest "red_when_active"
widget "*CrossfadeEditCurveButton*" style:highest "red_when_active"
widget "*CrossfadeEditLabel" style:highest "medium_text"
widget "*CrossfadeEditFrame" style:highest "base_frame"
widget "*MouseModeButton" style:highest "default_buttons_menus"
widget "*MouseModeButton*" style:highest "default_buttons_menus"
widget "*MouseModeButton" style:highest "default_button"
widget "*MouseModeButton*" style:highest "default_button"
widget "*EditorMainCanvas" style:highest "main_canvas_area"
widget "*AudioTrackControlsBaseInactiveUnselected" style:highest "track_controls_inactive"
widget "*BusControlsBaseInactiveUnselected" style:highest "track_controls_inactive"
@ -1462,8 +1480,8 @@ widget "*TransportAuditioningAlert" style:highest "flashing_alert"
widget "*TransportAuditioningAlert.*" style:highest "flashing_alert"
widget "*FadeCurve" style:highest "medium_bold_entry"
widget "*FadeCurve*" style:highest "medium_bold_entry"
widget "*IOSelectorButton" style:highest "default_buttons_menus"
widget "*IOSelectorButton*" style:highest "default_buttons_menus"
widget "*IOSelectorButton" style:highest "default_button"
widget "*IOSelectorButton*" style:highest "default_button"
widget "*IOSelectorList" style:highest "medium_entry_noselection_fg"
widget "*IOSelectorPortList" style:highest "io_selector_port_list"
widget "*IOSelectorPortList.*" style:highest "io_selector_port_list"
@ -1472,8 +1490,8 @@ widget "*IOSelectorPortListSelected.*" style:highest "selected_io_selector_port_
widget "*IOSelectorNotebook" style:highest "io_selector_notebook"
widget "*IOSelectorNotebookTab" style:highest "io_selector_notebook"
widget "*IOSelectorFrame" style:highest "base_frame"
widget "*ConnectionEditorButton" style:highest "default_buttons_menus"
widget "*ConnectionEditorButton*" style:highest "default_buttons_menus"
widget "*ConnectionEditorButton" style:highest "default_button"
widget "*ConnectionEditorButton*" style:highest "default_button"
widget "*ConnectionEditorList" style:highest "medium_entry_noselection_fg"
widget "*ConnectionEditorConnectionList" style:highest "medium_entry"
widget "*ConnectionEditorPortList" style:highest "io_selector_port_list"
@ -1500,18 +1518,18 @@ widget "*PluginLoadButton*" style:highest "small_button"
widget "*MetricDialogFrame" style:highest "base_frame"
widget "*MetricEntry" style:highest "medium_bold_entry"
widget "*MetricButton" style:highest "default_buttons_menus"
widget "*MetricButton.*" style:highest "default_buttons_menus"
widget "*MetricButton" style:highest "default_button"
widget "*MetricButton.*" style:highest "default_button"
widget "*MetricLabel" style:highest "medium_text"
widget "*TimeStretchButton" style:highest "default_buttons_menus"
widget "*TimeStretchButton.*" style:highest "default_buttons_menus"
widget "*TimeStretchProgress" style:highest "default_buttons_menus"
widget "*ChoiceWindow" style:highest "default_buttons_menus"
widget "*ChoicePrompt" style:highest "default_buttons_menus"
widget "*ChoiceButton" style:highest "default_buttons_menus"
widget "*ChoiceButton*" style:highest "default_buttons_menus"
widget "*SelectionModeButton" style:highest "default_buttons_menus"
widget "*SelectionModeButton*" style:highest "default_buttons_menus"
widget "*TimeStretchButton" style:highest "default_button"
widget "*TimeStretchButton.*" style:highest "default_button"
widget "*TimeStretchProgress" style:highest "default_generic"
widget "*ChoiceWindow" style:highest "default_generic"
widget "*ChoicePrompt" style:highest "default_generic"
widget "*ChoiceButton" style:highest "default_button"
widget "*ChoiceButton*" style:highest "default_button"
widget "*SelectionModeButton" style:highest "default_button"
widget "*SelectionModeButton*" style:highest "default_button"
widget "*TrackLabel" style:highest "medium_text"
widget "*TrackPlugName" style:highest "medium_text"
widget "*TrackParameterName" style:highest "small_text"
@ -1521,7 +1539,7 @@ widget "*AddRouteDialogChannelChoice" style:highest "medium_bold_entry"
widget "*AddRouteDialogSpinner" style:highest "medium_bold_entry"
widget "*AddRouteDialogSpinner*" style:highest "medium_bold_entry"
widget "*AddRouteDialogRadioButton" style:highest "red_when_active"
widget "*AddRouteDialogButton" style:highest "default_buttons_menus"
widget "*AddRouteDialogButton" style:highest "default_button"
widget "*AddRouteDialogNameTemplateEntry" style:highest "medium_bold_entry"
widget "*NewSessionIOLabel" style:highest "larger_bold_text"
widget "*NewSessionSR1Label" style:highest "red_medium_text"
@ -1544,10 +1562,10 @@ widget "*LocationEditNumberLabel" style:highest "small_text"
widget "*LocationLocEditorFrame" style:highest "base_frame"
widget "*LocationRangeEditorFrame" style:highest "base_frame"
widget "*LocationEditNameEntry" style:highest "option_entry"
widget "*LocationAddLocationButton" style:highest "default_buttons_menus"
widget "*LocationAddLocationButton*" style:highest "default_buttons_menus"
widget "*LocationAddRangeButton" style:highest "default_buttons_menus"
widget "*LocationAddRangeButton*" style:highest "default_buttons_menus"
widget "*LocationAddLocationButton" style:highest "default_button"
widget "*LocationAddLocationButton*" style:highest "default_button"
widget "*LocationAddRangeButton" style:highest "default_button"
widget "*LocationAddRangeButton*" style:highest "default_button"
widget "*LocationEditRemoveButton" style:highest "location_row_button"
widget "*LocationEditRemoveButton*" style:highest "location_row_button"
widget "*PanSlider" style:highest "pan_slider"
@ -1556,7 +1574,7 @@ widget "*PanningLinkButton.*" style:highest "mixer_red_active_button"
widget "*PanningLinkDirectionButton" style:highest "very_small_button"
widget "*PanningLinkDirectionButton.*" style:highest "very_small_button"
widget "*ChannelCountSelector" style:highest "medium_bold_entry"
widget "*ChannelCountSelector.GtkArrow" style:highest "default_buttons_menus"
widget "*ChannelCountSelector.GtkArrow" style:highest "default_generic"
widget "*RegionListWholeFile" style:highest "treeview_parent_node"
widget "*EditorHScrollbar" style:highest "editor_hscrollbar"

View File

@ -148,7 +148,19 @@ style "black_mackie_menu_bar"
bg[NORMAL] = { 0, 0, 0 }
}
*/
style "default_buttons_menus"
style "default_button"
{
font_name = "%FONT_SMALL%"
fg[ACTIVE] = { 1.0, 1.0, 1.0 }
bg[NORMAL] = { 0.80, 0.80, 0.80 }
bg[ACTIVE] = "#565690"
bg[PRELIGHT] = { 0.70, 0.70, 0.90 }
bg[INSENSITIVE] = { 0.70, 0.70, 0.90 }
bg[SELECTED] = { 0.70, 0.70, 0.90 }
}
style "default_menu"
{
font_name = "%FONT_NORMAL%"
fg[ACTIVE] = { 1.0, 1.0, 1.0 }
@ -160,14 +172,26 @@ style "default_buttons_menus"
bg[SELECTED] = { 0.70, 0.70, 0.90 }
}
style "very_small_button" = "default_buttons_menus"
style "default_generic"
{
font_name = "%FONT_NORMAL%"
fg[ACTIVE] = { 1.0, 1.0, 1.0 }
bg[NORMAL] = { 0.80, 0.80, 0.80 }
bg[ACTIVE] = "#565690"
bg[PRELIGHT] = { 0.70, 0.70, 0.90 }
bg[INSENSITIVE] = { 0.70, 0.70, 0.90 }
bg[SELECTED] = { 0.70, 0.70, 0.90 }
}
style "very_small_button" = "default_button"
{
font_name = "%FONT_SMALLER%"
ythickness = 0
xthickness = 0
}
style "small_button" = "default_buttons_menus"
style "small_button" = "default_button"
{
}
@ -275,20 +299,20 @@ style "solo_button_active" = "small_button"
style "mixer_solo_button" = "solo_button"
{
font_name = "%FONT_SMALLERER%"
font_name = "%FONT_SMALLER%"
xthickness = 0
ythickness = 0
}
style "mixer_solo_button_alternate" = "solo_button_alternate"
{
font_name = "%FONT_SMALLERER%"
font_name = "%FONT_SMALLER%"
xthickness = 0
ythickness = 0
}
style "mixer_solo_button_active" = "solo_button_active"
{
font_name = "%FONT_SMALLERER%"
font_name = "%FONT_SMALLER%"
xthickness = 0
ythickness = 0
}
@ -324,23 +348,16 @@ style "mute_button_active" = "small_button"
fg[PRELIGHT] = { 0, 0, 0 }
}
style "mixer_mute_button" = "mute_button"
{
font_name = "%FONT_SMALLERER%"
xthickness = 0
ythickness = 0
}
style "mixer_mute_button_alternate" = "mute_button_alternate"
{
font_name = "%FONT_SMALLERER%"
font_name = "%FONT_SMALLER%"
xthickness = 0
ythickness = 0
}
style "mixer_mute_button_active" = "mute_button_active"
{
font_name = "%FONT_SMALLERER%"
font_name = "%FONT_SMALLER%"
xthickness = 0
ythickness = 0
}
@ -354,7 +371,7 @@ style "multiline_combo" = "small_button"
style "mixer_mute_button" = "mute_button"
{
font_name = "%FONT_SMALLERER%"
font_name = "%FONT_SMALLER%"
xthickness = 0
ythickness = 0
}
@ -375,9 +392,9 @@ style "mixer_red_active_button" = "very_small_button"
bg[INSENSITIVE] = { 0.80, 0.80, 0.80 }
}
style "time_button" = "default_buttons_menus"
style "time_button" = "default_button"
{
font_name = "%FONT_NORMAL%"
font_name = "%FONT_SMALL%"
}
style "transport_button"
@ -432,7 +449,7 @@ style "shuttle_control" = "very_small_text"
bg[SELECTED] = { 1.0, 0.04, 0.04 }
}
style "ardour_adjusters" = "default_buttons_menus"
style "ardour_adjusters" = "default_generic"
{
bg[NORMAL] = { 0.60, 0.60, 0.60 }
bg[PRELIGHT] = { 0.80, 0.80, 0.80 }
@ -451,7 +468,7 @@ style "editor_hscrollbar" = "ardour_adjusters"
GtkScrollbar::slider_width = 27
}
style "ardour_progressbars" = "default_buttons_menus"
style "ardour_progressbars" = "default_generic"
{
bg[NORMAL] = { 0, 0, 0 }
bg[PRELIGHT] = { 0.00, 0.36, 0.40 }
@ -1134,7 +1151,7 @@ style "tearoff_arrow" = "medium_bold_entry"
bg[PRELIGHT] = { 0.30, 0.30, 0.30 }
}
style "location_row_button" = "default_buttons_menus"
style "location_row_button" = "default_button"
{
font_name = "%FONT_SMALL%"
}
@ -1176,7 +1193,7 @@ style "pan_slider"
}
style "ardour_button" ="default_buttons_menus"
style "ardour_button" ="default_button"
{
xthickness = 1
ythickness = 1
@ -1186,7 +1203,7 @@ style "ardour_button" ="default_buttons_menus"
class "GtkWidget" style:highest "default_base"
class "GtkScrollbar" style:highest "ardour_adjusters"
class "GtkLabel" style:highest "default_buttons_menus"
class "GtkLabel" style:highest "default_generic"
class "GtkButton" style:highest "ardour_button"
class "GtkArrow" style:highest "tearoff_arrow"
class "GtkProgressBar" style:highest "ardour_progressbars"
@ -1195,7 +1212,7 @@ widget "*FirstActionMessage" style:highest "first_action_message"
widget "*VerboseCanvasCursor" style:highest "verbose_canvas_cursor"
widget "*MarkerText" style:highest "marker_text"
widget "*TimeAxisViewItemName*" style:highest "time_axis_view_item_name"
#widget "*ExportProgress" style:highest "default_buttons_menus"
#widget "*ExportProgress" style:highest "default_generic"
widget "*ExportFileLabel" style:highest "small_bold_text"
widget "*ExportFormatLabel" style:highest "medium_bold_text"
widget "*ExportHeader" style:highest "small_bold_text"
@ -1207,33 +1224,33 @@ widget "*EditModeSelector" style:highest "medium_bold_entry"
widget "*SnapTypeSelector" style:highest "medium_bold_entry"
widget "*SnapModeSelector" style:highest "medium_bold_entry"
widget "*ZoomFocusSelector" style:highest "medium_bold_entry"
widget "*ArdourContextMenu*" style:highest "default_buttons_menus"
widget "*EditGroupTitleButton*" style:highest "default_buttons_menus"
widget "*MixerGroupTitleButton*" style:highest "default_buttons_menus"
widget "*ErrorLogCloseButton" style:highest "default_buttons_menus"
widget "*EditorGTKButton*" style:highest "default_buttons_menus"
widget "*ToolbarButton" style:highest "default_buttons_menus"
widget "*ToolbarButton*" style:highest "default_buttons_menus"
widget "*CrossfadeEditButton" style:highest "default_buttons_menus"
widget "*CrossfadeEditButton*" style:highest "default_buttons_menus"
widget "*TrackHistoryButton*" style:highest "default_buttons_menus"
widget "*TrackSizeButton*" style:highest "default_buttons_menus"
widget "*TrackPlaylistButton*" style:highest "default_buttons_menus"
widget "*TrackAutomationButton*" style:highest "default_buttons_menus"
widget "*TrackGroupButton*" style:highest "default_buttons_menus"
widget "*TrackMixButton*" style:highest "default_buttons_menus"
widget "*TrackVisualButton*" style:highest "default_buttons_menus"
widget "*TrackRemoveButton*" style:highest "default_buttons_menus"
widget "*BaseButton" style:highest "default_buttons_menus"
widget "*TakeButtonLabel" style:highest "default_buttons_menus"
widget "*MixerWidthButton" style:highest "default_buttons_menus"
widget "*MixerHideButton" style:highest "default_buttons_menus"
widget "*MixerSendButton" style:highest "default_buttons_menus"
widget "*MixerSendButtonLabel" style:highest "default_buttons_menus"
widget "*MixerSendSwitch" style:highest "default_buttons_menus"
widget "*MixerInsertButton" style:highest "default_buttons_menus"
widget "*MixerInsertButtonLabel" style:highest "default_buttons_menus"
widget "*MixerInsertSwitch" style:highest "default_buttons_menus"
widget "*ArdourContextMenu*" style:highest "default_menu"
widget "*EditGroupTitleButton*" style:highest "default_button"
widget "*MixerGroupTitleButton*" style:highest "default_button"
widget "*ErrorLogCloseButton" style:highest "default_button"
widget "*EditorGTKButton*" style:highest "default_button"
widget "*ToolbarButton" style:highest "default_button"
widget "*ToolbarButton*" style:highest "default_button"
widget "*CrossfadeEditButton" style:highest "default_button"
widget "*CrossfadeEditButton*" style:highest "default_button"
widget "*TrackHistoryButton*" style:highest "default_button"
widget "*TrackSizeButton*" style:highest "default_button"
widget "*TrackPlaylistButton*" style:highest "default_button"
widget "*TrackAutomationButton*" style:highest "default_button"
widget "*TrackGroupButton*" style:highest "default_button"
widget "*TrackMixButton*" style:highest "default_button"
widget "*TrackVisualButton*" style:highest "default_button"
widget "*TrackRemoveButton*" style:highest "default_button"
widget "*BaseButton" style:highest "default_button"
widget "*TakeButtonLabel" style:highest "default_generic"
widget "*MixerWidthButton" style:highest "default_button"
widget "*MixerHideButton" style:highest "default_button"
widget "*MixerSendButton" style:highest "default_button"
widget "*MixerSendButtonLabel" style:highest "default_button"
widget "*MixerSendSwitch" style:highest "default_button"
widget "*MixerInsertButton" style:highest "default_button"
widget "*MixerInsertButtonLabel" style:highest "default_button"
widget "*MixerInsertSwitch" style:highest "default_button"
widget "*MixerMonitorInputButton*" style:highest "very_small_button"
widget "*MixerMonitorInputButton.*" style:highest "very_small_button"
widget "*MixerIOButton" style:highest "very_small_button"
@ -1337,7 +1354,7 @@ widget "*TakeTagLabel" style:highest "small_bold_text"
widget "*ToolBarLabel" style:highest "small_bold_text"
widget "*EditorDisplayLabel" style:highest "small_bold_text"
widget "*NewSessionLabel" style:highest "large_text"
widget "*GlobalButtonLabel" style:highest "default_buttons_menus"
widget "*GlobalButtonLabel" style:highest "default_generic"
widget "*ClickButton" style:highest "medium_entry"
widget "*RegionNameDisplay" style:highest "medium_entry"
widget "*PluginDisplay" style:highest "medium_entry"
@ -1390,8 +1407,8 @@ widget "*CrossfadeEditCurveButton" style:highest "red_when_active"
widget "*CrossfadeEditCurveButton*" style:highest "red_when_active"
widget "*CrossfadeEditLabel" style:highest "medium_text"
widget "*CrossfadeEditFrame" style:highest "base_frame"
widget "*MouseModeButton" style:highest "default_buttons_menus"
widget "*MouseModeButton*" style:highest "default_buttons_menus"
widget "*MouseModeButton" style:highest "default_button"
widget "*MouseModeButton*" style:highest "default_button"
widget "*EditorMainCanvas" style:highest "main_canvas_area"
widget "*AudioTrackControlsBaseInactiveUnselected" style:highest "track_controls_inactive"
widget "*BusControlsBaseInactiveUnselected" style:highest "track_controls_inactive"
@ -1461,8 +1478,8 @@ widget "*TransportAuditioningAlert" style:highest "flashing_alert"
widget "*TransportAuditioningAlert.*" style:highest "flashing_alert"
widget "*FadeCurve" style:highest "medium_bold_entry"
widget "*FadeCurve*" style:highest "medium_bold_entry"
widget "*IOSelectorButton" style:highest "default_buttons_menus"
widget "*IOSelectorButton*" style:highest "default_buttons_menus"
widget "*IOSelectorButton" style:highest "default_button"
widget "*IOSelectorButton*" style:highest "default_button"
widget "*IOSelectorList" style:highest "medium_entry_noselection_fg"
widget "*IOSelectorPortList" style:highest "io_selector_port_list"
widget "*IOSelectorPortList.*" style:highest "io_selector_port_list"
@ -1471,8 +1488,8 @@ widget "*IOSelectorPortListSelected.*" style:highest "selected_io_selector_port_
widget "*IOSelectorNotebook" style:highest "io_selector_notebook"
widget "*IOSelectorNotebookTab" style:highest "io_selector_notebook"
widget "*IOSelectorFrame" style:highest "base_frame"
widget "*ConnectionEditorButton" style:highest "default_buttons_menus"
widget "*ConnectionEditorButton*" style:highest "default_buttons_menus"
widget "*ConnectionEditorButton" style:highest "default_button"
widget "*ConnectionEditorButton*" style:highest "default_button"
widget "*ConnectionEditorList" style:highest "medium_entry_noselection_fg"
widget "*ConnectionEditorConnectionList" style:highest "medium_entry"
widget "*ConnectionEditorPortList" style:highest "io_selector_port_list"
@ -1499,18 +1516,18 @@ widget "*PluginLoadButton*" style:highest "small_button"
widget "*MetricDialogFrame" style:highest "base_frame"
widget "*MetricEntry" style:highest "medium_bold_entry"
widget "*MetricButton" style:highest "default_buttons_menus"
widget "*MetricButton.*" style:highest "default_buttons_menus"
widget "*MetricButton" style:highest "default_button"
widget "*MetricButton.*" style:highest "default_button"
widget "*MetricLabel" style:highest "medium_text"
widget "*TimeStretchButton" style:highest "default_buttons_menus"
widget "*TimeStretchButton.*" style:highest "default_buttons_menus"
widget "*TimeStretchProgress" style:highest "default_buttons_menus"
widget "*ChoiceWindow" style:highest "default_buttons_menus"
widget "*ChoicePrompt" style:highest "default_buttons_menus"
widget "*ChoiceButton" style:highest "default_buttons_menus"
widget "*ChoiceButton*" style:highest "default_buttons_menus"
widget "*SelectionModeButton" style:highest "default_buttons_menus"
widget "*SelectionModeButton*" style:highest "default_buttons_menus"
widget "*TimeStretchButton" style:highest "default_button"
widget "*TimeStretchButton.*" style:highest "default_button"
widget "*TimeStretchProgress" style:highest "default_button"
widget "*ChoiceWindow" style:highest "default_generic"
widget "*ChoicePrompt" style:highest "default_generic"
widget "*ChoiceButton" style:highest "default_button"
widget "*ChoiceButton*" style:highest "default_button"
widget "*SelectionModeButton" style:highest "default_button"
widget "*SelectionModeButton*" style:highest "default_button"
widget "*TrackLabel" style:highest "medium_text"
widget "*TrackPlugName" style:highest "medium_text"
widget "*TrackParameterName" style:highest "small_text"
@ -1520,7 +1537,7 @@ widget "*AddRouteDialogChannelChoice" style:highest "medium_bold_entry"
widget "*AddRouteDialogSpinner" style:highest "medium_bold_entry"
widget "*AddRouteDialogSpinner*" style:highest "medium_bold_entry"
widget "*AddRouteDialogRadioButton" style:highest "red_when_active"
widget "*AddRouteDialogButton" style:highest "default_buttons_menus"
widget "*AddRouteDialogButton" style:highest "default_button"
widget "*AddRouteDialogNameTemplateEntry" style:highest "medium_bold_entry"
widget "*NewSessionIOLabel" style:highest "larger_bold_text"
widget "*NewSessionSR1Label" style:highest "red_medium_text"
@ -1543,10 +1560,10 @@ widget "*LocationEditNumberLabel" style:highest "small_text"
widget "*LocationLocEditorFrame" style:highest "base_frame"
widget "*LocationRangeEditorFrame" style:highest "base_frame"
widget "*LocationEditNameEntry" style:highest "option_entry"
widget "*LocationAddLocationButton" style:highest "default_buttons_menus"
widget "*LocationAddLocationButton*" style:highest "default_buttons_menus"
widget "*LocationAddRangeButton" style:highest "default_buttons_menus"
widget "*LocationAddRangeButton*" style:highest "default_buttons_menus"
widget "*LocationAddLocationButton" style:highest "default_button"
widget "*LocationAddLocationButton*" style:highest "default_button"
widget "*LocationAddRangeButton" style:highest "default_button"
widget "*LocationAddRangeButton*" style:highest "default_button"
widget "*LocationEditRemoveButton" style:highest "location_row_button"
widget "*LocationEditRemoveButton*" style:highest "location_row_button"
widget "*PanSlider" style:highest "pan_slider"
@ -1555,7 +1572,7 @@ widget "*PanningLinkButton.*" style:highest "mixer_red_active_button"
widget "*PanningLinkDirectionButton" style:highest "very_small_button"
widget "*PanningLinkDirectionButton.*" style:highest "very_small_button"
widget "*ChannelCountSelector" style:highest "medium_bold_entry"
widget "*ChannelCountSelector.GtkArrow" style:highest "default_buttons_menus"
widget "*ChannelCountSelector.GtkArrow" style:highest "default_generic"
widget "*RegionListWholeFile" style:highest "treeview_parent_node"
widget "*EditorHScrollbar" style:highest "editor_hscrollbar"

View File

@ -172,6 +172,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[])
#ifdef TOP_MENUBAR
_auto_display_errors = false;
#endif
about = 0;
splash = 0;
@ -210,18 +211,6 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[])
sys::path key_bindings_file;
find_file_in_search_path (ardour_search_path() + system_config_search_path(),
"ardour.bindings", key_bindings_file);
keybindings_path = key_bindings_file.to_string();
/* store all bindings changes in per-user file, no matter where they were loaded from */
user_keybindings_path = user_config_directory().to_string ();
user_keybindings_path += '/';
user_keybindings_path += "ardour.bindings";
can_save_keybindings = false;
last_configure_time.tv_sec = 0;
last_configure_time.tv_usec = 0;
@ -354,7 +343,11 @@ ARDOUR_UI::post_engine ()
/* set default clock modes */
primary_clock.set_mode (AudioClock::SMPTE);
if (Profile->get_sae()) {
primary_clock.set_mode (AudioClock::MinSec);
} else {
primary_clock.set_mode (AudioClock::SMPTE);
}
secondary_clock.set_mode (AudioClock::BBT);
/* start the time-of-day-clock */
@ -540,7 +533,7 @@ ARDOUR_UI::save_ardour_state ()
Config->add_instant_xml (mnode);
}
save_keybindings ();
Keyboard::save_keybindings ();
}
gint
@ -647,6 +640,8 @@ ARDOUR_UI::startup ()
return;
}
BootMessage (_("Ardour is ready for use"));
show ();
}
@ -2245,7 +2240,6 @@ ARDOUR_UI::end_loading_messages ()
void
ARDOUR_UI::loading_message (const std::string& msg)
{
cerr << "say: " << msg << endl;
show_splash ();
splash->message (msg);
flush_pending ();
@ -2921,6 +2915,8 @@ ARDOUR_UI::add_route (Gtk::Window* float_window)
}
/* XXX do something with name template */
cerr << "Adding with " << input_chan << " in and " << output_chan << "out\n";
if (add_route_dialog->type() == ARDOUR::DataType::MIDI) {
if (track) {
@ -2988,16 +2984,33 @@ ARDOUR_UI::keyboard_settings () const
return node;
}
void
ARDOUR_UI::create_xrun_marker(nframes_t where)
{
ENSURE_GUI_THREAD (bind(mem_fun(*this, &ARDOUR_UI::create_xrun_marker), where));
editor->mouse_add_new_marker (where, false, true);
}
void
ARDOUR_UI::halt_on_xrun_message ()
{
ENSURE_GUI_THREAD (mem_fun(*this, &ARDOUR_UI::halt_on_xrun_message));
MessageDialog msg (*editor,
_("Recording was stopped because your system could not keep up."));
msg.run ();
}
void
ARDOUR_UI::xrun_handler(nframes_t where)
{
if (Config->get_create_xrun_marker() && session->actively_recording()) {
create_xrun_marker(where);
}
if (Config->get_stop_recording_on_xrun() && session->actively_recording()) {
halt_on_xrun_message ();
}
}
void
ARDOUR_UI::disk_overrun_handler ()
{
@ -3090,8 +3103,8 @@ The audioengine is currently running at %2 Hz\n"), desired, actual));
hbox->pack_start (*image, PACK_EXPAND_WIDGET, 12);
hbox->pack_end (message, PACK_EXPAND_PADDING, 12);
dialog.get_vbox()->pack_start(*hbox, PACK_EXPAND_PADDING, 6);
dialog.add_button (_("Load session anyway"), RESPONSE_ACCEPT);
dialog.add_button (_("Do not load session"), RESPONSE_REJECT);
dialog.add_button (_("Load session anyway"), RESPONSE_ACCEPT);
dialog.set_default_response (RESPONSE_ACCEPT);
dialog.set_position (WIN_POS_CENTER);
message.show();
@ -3230,27 +3243,13 @@ ARDOUR_UI::record_state_changed ()
}
}
void
ARDOUR_UI::set_keybindings_path (string path)
{
keybindings_path = path;
}
void
ARDOUR_UI::save_keybindings ()
{
if (can_save_keybindings) {
AccelMap::save (user_keybindings_path);
}
}
bool
ARDOUR_UI::first_idle ()
{
if (session) {
session->allow_auto_play (true);
}
can_save_keybindings = true;
Keyboard::set_can_save_keybindings (true);
return false;
}

View File

@ -198,6 +198,8 @@ class ARDOUR_UI : public Gtkmm2ext::UI
void do_transport_locate (nframes_t position);
void halt_on_xrun_message ();
void xrun_handler (nframes_t);
void create_xrun_marker (nframes_t);
AudioClock primary_clock;
AudioClock secondary_clock;
@ -236,9 +238,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI
void set_native_file_header_format (ARDOUR::HeaderFormat sf);
void set_native_file_data_format (ARDOUR::SampleFormat sf);
void set_keybindings_path (std::string path);
void save_keybindings ();
void setup_profile ();
void setup_theme ();
@ -601,10 +600,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI
void connect_dependents_to_session (ARDOUR::Session *);
void we_have_dependents ();
std::string keybindings_path;
std::string user_keybindings_path;
void setup_keybindings ();
void setup_session_options ();
guint32 last_key_press_time;
@ -725,6 +720,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI
void toggle_VerifyRemoveLastCapture();
void toggle_PeriodicSafetyBackups();
void toggle_StopRecordingOnXrun();
void toggle_CreateXrunMarker();
void toggle_StopTransportAtEndOfSession();
void toggle_GainReduceFastTransport();
void toggle_LatchedSolo();
@ -758,7 +754,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI
void toggle_control_protocol (ARDOUR::ControlProtocolInfo*);
void toggle_control_protocol_feedback (ARDOUR::ControlProtocolInfo*, const char* group_name, std::string action_name);
bool can_save_keybindings;
bool first_idle ();
void no_memory_warning ();

View File

@ -23,8 +23,6 @@
#include <cstdio>
#include <gtkmm/accelmap.h>
#include <pbd/error.h>
#include "ardour_ui.h"
@ -33,6 +31,7 @@
#include "keyboard.h"
#include "splash.h"
#include "route_params_ui.h"
#include "opts.h"
#include "i18n.h"
using namespace sigc;
@ -44,6 +43,8 @@ namespace ARDOUR {
class Route;
}
using namespace ARDOUR;
void
ARDOUR_UI::shutdown ()
{
@ -58,53 +59,26 @@ ARDOUR_UI::shutdown ()
void
ARDOUR_UI::we_have_dependents ()
{
setup_keybindings ();
editor->UpdateAllTransportClocks.connect (mem_fun (*this, &ARDOUR_UI::update_transport_clocks));
}
static void
accel_map_changed (GtkAccelMap* map,
gchar* path,
guint key,
GdkModifierType mod,
gpointer arg)
{
static_cast<ARDOUR_UI*>(arg)->save_keybindings ();
}
void
ARDOUR_UI::setup_keybindings ()
{
install_actions ();
ProcessorBox::register_actions ();
cerr << "loading bindings from " << keybindings_path << endl;
try {
AccelMap::load (keybindings_path);
} catch (...) {
error << string_compose (_("Ardour key bindings file not found at \"%1\" or contains errors."), keybindings_path)
<< endmsg;
}
/* catch changes */
GtkAccelMap* accelmap = gtk_accel_map_get();
g_signal_connect (accelmap, "changed", (GCallback) accel_map_changed, this);
Keyboard::setup_keybindings ();
editor->UpdateAllTransportClocks.connect (mem_fun (*this, &ARDOUR_UI::update_transport_clocks));
}
void
ARDOUR_UI::connect_dependents_to_session (ARDOUR::Session *s)
{
BootMessage (_("Setup Editor"));
editor->connect_to_session (s);
BootMessage (_("Setup Mixer"));
mixer->connect_to_session (s);
/* its safe to do this now */
BootMessage (_("Reload Session History"));
s->restore_history ("");
}

View File

@ -51,7 +51,7 @@ ARDOUR_UI::connect_to_session (Session *s)
{
session = s;
session->HaltOnXrun.connect (mem_fun(*this, &ARDOUR_UI::halt_on_xrun_message));
session->Xrun.connect (mem_fun(*this, &ARDOUR_UI::xrun_handler));
session->RecordStateChanged.connect (mem_fun (*this, &ARDOUR_UI::record_state_changed));
/* sensitize menu bar options that are now valid */

View File

@ -37,7 +37,10 @@
#include "engine_dialog.h"
#include "editor.h"
#include "actions.h"
#include "sync-menu.h"
#ifdef GTKOSX
#include <gtkmm2ext/sync-menu.h>
#endif
#include <ardour/session.h>
#include <ardour/profile.h>
@ -421,6 +424,7 @@ ARDOUR_UI::install_actions ()
ActionManager::register_toggle_action (option_actions, X_("VerifyRemoveLastCapture"), _("Verify remove last capture"), mem_fun (*this, &ARDOUR_UI::toggle_VerifyRemoveLastCapture));
ActionManager::register_toggle_action (option_actions, X_("PeriodicSafetyBackups"), _("Make periodic safety backups"), mem_fun (*this, &ARDOUR_UI::toggle_PeriodicSafetyBackups));
ActionManager::register_toggle_action (option_actions, X_("StopRecordingOnXrun"), _("Stop recording on xrun"), mem_fun (*this, &ARDOUR_UI::toggle_StopRecordingOnXrun));
ActionManager::register_toggle_action (option_actions, X_("CreateXrunMarker"), _("Create marker at xrun location"), mem_fun (*this, &ARDOUR_UI::toggle_CreateXrunMarker));
ActionManager::register_toggle_action (option_actions, X_("StopTransportAtEndOfSession"), _("Stop transport at session end"), mem_fun (*this, &ARDOUR_UI::toggle_StopTransportAtEndOfSession));
ActionManager::register_toggle_action (option_actions, X_("GainReduceFastTransport"), _("-12dB gain reduce ffwd/rewind"), mem_fun (*this, &ARDOUR_UI::toggle_GainReduceFastTransport));
ActionManager::register_toggle_action (option_actions, X_("LatchedRecordEnable"), _("Rec-enable stays engaged at stop"), mem_fun (*this, &ARDOUR_UI::toggle_LatchedRecordEnable));

View File

@ -469,6 +469,12 @@ ARDOUR_UI::toggle_StopRecordingOnXrun()
ActionManager::toggle_config_state ("options", "StopRecordingOnXrun", &Configuration::set_stop_recording_on_xrun, &Configuration::get_stop_recording_on_xrun);
}
void
ARDOUR_UI::toggle_CreateXrunMarker()
{
ActionManager::toggle_config_state ("options", "CreateXrunMarker", &Configuration::set_create_xrun_marker, &Configuration::get_create_xrun_marker);
}
void
ARDOUR_UI::toggle_sync_order_keys ()
{
@ -1052,6 +1058,8 @@ ARDOUR_UI::parameter_changed (const char* parameter_name)
ActionManager::map_some_state ("options", "PeriodicSafetyBackups", &Configuration::get_periodic_safety_backups);
} else if (PARAM_IS ("stop-recording-on-xrun")) {
ActionManager::map_some_state ("options", "StopRecordingOnXrun", &Configuration::get_stop_recording_on_xrun);
} else if (PARAM_IS ("create-xrun-marker")) {
ActionManager::map_some_state ("options", "CreateXrunMarker", &Configuration::get_create_xrun_marker);
} else if (PARAM_IS ("sync-all-route-ordering")) {
ActionManager::map_some_state ("options", "SyncEditorAndMixerTrackOrder", &Configuration::get_sync_all_route_ordering);
} else if (PARAM_IS ("stop-at-session-end")) {

View File

@ -1,6 +1,9 @@
#ifndef __gtk2_ardour_auplugin_ui_h__
#define __gtk2_ardour_auplugin_ui_h__
#include <vector>
#include <string>
#include <AppKit/AppKit.h>
#include <Carbon/Carbon.h>
#include <AudioUnit/AudioUnitCarbonView.h>
@ -13,6 +16,10 @@
#undef verify
#include <gtkmm/box.h>
#include <gtkmm/combobox.h>
#include <gtkmm/button.h>
#include <gtkmm/label.h>
#include "plugin_ui.h"
namespace ARDOUR {
@ -34,7 +41,8 @@ class AUPluginUI : public PlugUIBase, public Gtk::VBox
virtual void activate ();
virtual void deactivate ();
void lower_box_realized ();
void on_realize ();
void on_show ();
void on_hide ();
@ -49,6 +57,15 @@ class AUPluginUI : public PlugUIBase, public Gtk::VBox
boost::shared_ptr<ARDOUR::AUPlugin> au;
int prefheight;
int prefwidth;
Gtk::HBox top_box;
Gtk::EventBox low_box;
Gtk::VBox vpacker;
Gtk::Label automation_mode_label;
Gtk::ComboBoxText automation_mode_selector;
Gtk::Label preset_label;
static std::vector<std::string> automation_mode_strings;
/* Cocoa */
@ -63,14 +80,11 @@ class AUPluginUI : public PlugUIBase, public Gtk::VBox
AudioUnitCarbonView editView;
WindowRef carbon_window;
EventHandlerRef carbon_event_handler;
bool carbon_parented;
bool cocoa_parented;
bool _activating_from_app;
void test_view_support (bool&, bool&);
bool test_cocoa_view_support ();
bool test_carbon_view_support ();
int create_carbon_view (bool generic);
int create_carbon_view ();
int create_cocoa_view ();
int parent_carbon_window ();

View File

@ -2,8 +2,13 @@
#include <ardour/audio_unit.h>
#include <ardour/insert.h>
#undef check // stupid gtk, stupid apple
#include <gtkmm/button.h>
#include <gdk/gdkquartz.h>
#include <gtkmm2ext/utils.h>
#include "au_pluginui.h"
#include "gui_thread.h"
@ -17,58 +22,92 @@
using namespace ARDOUR;
using namespace Gtk;
using namespace Gtkmm2ext;
using namespace sigc;
using namespace std;
using namespace PBD;
static const float kOffsetForAUView_X = 220;
static const float kOffsetForAUView_Y = 90;
vector<string> AUPluginUI::automation_mode_strings;
static const gchar* _automation_mode_strings[] = {
X_("Manual"),
X_("Play"),
X_("Write"),
X_("Touch"),
0
};
AUPluginUI::AUPluginUI (boost::shared_ptr<PluginInsert> insert)
: PlugUIBase (insert)
, automation_mode_label (_("Automation"))
, preset_label (_("Presets"))
{
if (automation_mode_strings.empty()) {
automation_mode_strings = I18N (_automation_mode_strings);
}
set_popdown_strings (automation_mode_selector, automation_mode_strings);
automation_mode_selector.set_active_text (automation_mode_strings.front());
if ((au = boost::dynamic_pointer_cast<AUPlugin> (insert->plugin())) == 0) {
error << _("unknown type of editor-supplying plugin (note: no AudioUnit support in this version of ardour)") << endmsg;
throw failed_constructor ();
}
bool has_carbon;
bool has_cocoa;
/* stuff some stuff into the top of the window */
top_box.set_spacing (6);
top_box.set_border_width (6);
top_box.pack_end (bypass_button, false, true);
top_box.pack_end (automation_mode_selector, false, false);
top_box.pack_end (automation_mode_label, false, false);
top_box.pack_end (save_button, false, false);
top_box.pack_end (preset_combo, false, false);
top_box.pack_end (preset_label, false, false);
set_spacing (6);
pack_start (top_box, false, false);
pack_start (low_box, false, false);
preset_label.show ();
preset_combo.show ();
automation_mode_label.show ();
automation_mode_selector.show ();
bypass_button.show ();
top_box.show ();
low_box.show ();
_activating_from_app = false;
carbon_parented = false;
cocoa_parented = false;
cocoa_parent = 0;
cocoa_window = 0;
au_view = 0;
test_view_support (has_carbon, has_cocoa);
/* prefer cocoa, fall back to cocoa, but use carbon if its there */
if (has_cocoa) {
if (test_cocoa_view_support()) {
create_cocoa_view ();
} else if (has_carbon) {
create_carbon_view (has_carbon);
} else if (test_carbon_view_support()) {
create_carbon_view ();
} else {
/* fallback to cocoa */
create_cocoa_view ();
}
}
low_box.signal_realize().connect (mem_fun (this, &AUPluginUI::lower_box_realized));
}
AUPluginUI::~AUPluginUI ()
{
if (carbon_parented) {
if (cocoa_parent) {
NSWindow* win = get_nswindow();
RemoveEventHandler(carbon_event_handler);
[win removeChildWindow:cocoa_parent];
} else if (carbon_window) {
/* never parented */
DisposeWindow (carbon_window);
}
}
void
AUPluginUI::test_view_support (bool& has_carbon, bool& has_cocoa)
{
has_carbon = test_carbon_view_support();
has_cocoa = test_cocoa_view_support();
}
bool
@ -216,24 +255,16 @@ AUPluginUI::create_cocoa_view ()
}
if (!wasAbleToLoadCustomView) {
// [B] Otherwise show generic Cocoa view
// load generic Cocoa view
au_view = [[AUGenericView alloc] initWithAudioUnit:*au->get_au()];
[(AUGenericView *)au_view setShowsExpertParameters:YES];
}
/* make a child cocoa window */
cocoa_window = [[NSWindow alloc]
initWithContentRect:crect
styleMask:NSBorderlessWindowMask
backing:NSBackingStoreBuffered
defer:NO];
return 0;
}
int
AUPluginUI::create_carbon_view (bool generic)
AUPluginUI::create_carbon_view ()
{
OSStatus err;
ControlRef root_control;
@ -252,7 +283,7 @@ AUPluginUI::create_carbon_view (bool generic)
kWindowNoShadowAttribute|
kWindowNoTitleBarAttribute);
if ((err = CreateNewWindow(kFloatingWindowClass, attr, &r, &carbon_window)) != noErr) {
if ((err = CreateNewWindow(kDocumentWindowClass, attr, &r, &carbon_window)) != noErr) {
error << string_compose (_("AUPluginUI: cannot create carbon window (err: %1)"), err) << endmsg;
return -1;
}
@ -277,14 +308,13 @@ AUPluginUI::create_carbon_view (bool generic)
GetControlBounds(viewPane, &bounds);
size.x = bounds.right-bounds.left;
size.y = bounds.bottom-bounds.top;
SizeWindow(carbon_window, (short) (size.x + 0.5), (short) (size.y + 0.5), true);
prefwidth = (int) (size.x + 0.5);
prefheight = (int) (size.y + 0.5);
#if 0
mViewPaneResizer->WantEventTypes (GetControlEventTarget(mAUViewPane), GetEventTypeCount(resizeEvent), resizeEvent);
#endif
SizeWindow (carbon_window, prefwidth, prefheight, true);
low_box.set_size_request (prefwidth, prefheight);
return 0;
}
@ -311,22 +341,25 @@ AUPluginUI::get_nswindow ()
void
AUPluginUI::activate ()
{
NSWindow* win = get_nswindow ();
[win setLevel:NSFloatingWindowLevel];
if (carbon_parented) {
[cocoa_parent makeKeyAndOrderFront:nil];
cerr << "APP activated, activate carbon window\n";
cerr << "AUPluginUI:: activate!\n";
return;
if (carbon_window && cocoa_parent) {
cerr << "APP activated, activate carbon window " << insert->name() << endl;
_activating_from_app = true;
ActivateWindow (carbon_window, TRUE);
_activating_from_app = false;
[cocoa_parent makeKeyAndOrderFront:nil];
}
}
void
AUPluginUI::deactivate ()
{
/* nothing to do here */
return;
cerr << "APP DEactivated, for " << insert->name() << endl;
_activating_from_app = true;
ActivateWindow (carbon_window, FALSE);
_activating_from_app = false;
}
@ -339,6 +372,8 @@ _carbon_event (EventHandlerCallRef nextHandlerRef, EventRef event, void *userDat
OSStatus
AUPluginUI::carbon_event (EventHandlerCallRef nextHandlerRef, EventRef event)
{
cerr << "CARBON EVENT\n";
UInt32 eventKind = GetEventKind(event);
ClickActivationResult howToHandleClick;
NSWindow* win = get_nswindow ();
@ -347,7 +382,7 @@ AUPluginUI::carbon_event (EventHandlerCallRef nextHandlerRef, EventRef event)
switch (eventKind) {
case kEventWindowHandleActivate:
cerr << "carbon window activated\n";
cerr << "carbon window for " << insert->name() << " activated\n";
if (_activating_from_app) {
cerr << "app activation, ignore window activation\n";
return noErr;
@ -357,12 +392,14 @@ AUPluginUI::carbon_event (EventHandlerCallRef nextHandlerRef, EventRef event)
break;
case kEventWindowHandleDeactivate:
cerr << "carbon window deactivated\n";
return eventNotHandledErr;
cerr << "carbon window for " << insert->name() << " deactivated\n";
// never deactivate the carbon window
return noErr;
break;
case kEventWindowGetClickActivation:
cerr << "carbon window CLICK activated\n";
[win makeKeyAndOrderFront:nil];
howToHandleClick = kActivateAndHandleClick;
SetEventParameter(event, kEventParamClickActivation, typeClickActivationResult,
sizeof(ClickActivationResult), &howToHandleClick);
@ -400,7 +437,9 @@ AUPluginUI::parent_carbon_window ()
int titlebar_height = wm_frame.size.height - content_frame.size.height;
MoveWindow (carbon_window, x, y + titlebar_height, false);
int packing_extra = 6; // this is the total vertical packing in our top level window
MoveWindow (carbon_window, x, y + titlebar_height + top_box.get_height() + packing_extra, false);
ShowWindow (carbon_window);
// create the cocoa window for the carbon one and make it visible
@ -408,8 +447,7 @@ AUPluginUI::parent_carbon_window ()
EventTypeSpec windowEventTypes[] = {
{kEventClassWindow, kEventWindowGetClickActivation },
{kEventClassWindow, kEventWindowHandleDeactivate },
{kEventClassWindow, kEventWindowHandleActivate }
{kEventClassWindow, kEventWindowHandleDeactivate }
};
EventHandlerUPP ehUPP = NewEventHandlerUPP(_carbon_event);
@ -421,11 +459,7 @@ AUPluginUI::parent_carbon_window ()
}
[win addChildWindow:cocoa_parent ordered:NSWindowAbove];
[win setLevel:NSFloatingWindowLevel];
[win setHidesOnDeactivate:YES];
carbon_parented = true;
return 0;
}
@ -433,6 +467,8 @@ int
AUPluginUI::parent_cocoa_window ()
{
NSWindow* win = get_nswindow ();
NSView* packView = 0;
NSRect packFrame;
if (!win) {
return -1;
@ -446,9 +482,11 @@ AUPluginUI::parent_cocoa_window ()
}
// Get the size of the new AU View's frame
NSRect au_view_frame = [au_view frame];
packFrame = [au_view frame];
packFrame.origin.x = 0;
packFrame.origin.y = 0;
if (au_view_frame.size.width > 500 || au_view_frame.size.height > 500) {
if (packFrame.size.width > 500 || packFrame.size.height > 500) {
/* its too big - use a scrollview */
@ -458,7 +496,7 @@ AUPluginUI::parent_cocoa_window ()
[scroll_view setHasHorizontalScroller:YES];
[scroll_view setHasVerticalScroller:YES];
NSSize frameSize = [NSScrollView frameSizeForContentSize:au_view_frame.size
packFrame.size = [NSScrollView frameSizeForContentSize:packFrame.size
hasHorizontalScroller:[scroll_view hasHorizontalScroller]
hasVerticalScroller:[scroll_view hasVerticalScroller]
borderType:[scroll_view borderType]];
@ -467,77 +505,25 @@ AUPluginUI::parent_cocoa_window ()
// frame but size equal to the size of the new view
NSRect newFrame;
newFrame.origin = [scroll_view frame].origin;
newFrame.size = frameSize;
newFrame.size = packFrame.size;
// Set the new frame and document views on the scroll view
NSRect currentFrame = [scroll_view frame];
[scroll_view setFrame:newFrame];
[scroll_view setDocumentView:au_view];
cerr << "scroll view size is " << newFrame.size.width << " x " << newFrame.size.height << endl;
NSSize oldContentSize = [[cocoa_window contentView] frame].size;
NSSize newContentSize = oldContentSize;
cerr << "original size is " << newContentSize.width << " x " << newContentSize.height << endl;
newContentSize.width += (newFrame.size.width - currentFrame.size.width);
newContentSize.height += (newFrame.size.height - currentFrame.size.height);
#ifdef PACK_COCOA_INTO_GTK_WINDOW
NSView* view = [win contentView];
packView = scroll_view;
[win setContentSize:newContentSize];
[view addSubview:scroll_view];
#else
[cocoa_window setContentSize:newContentSize];
[cocoa_window setContentView:scroll_view];
#endif
} else {
#ifdef PACK_COCOA_INTO_GTK_WINDOW
NSView* view = [win contentView];
[win setContentSize:au_view_frame.size];
[view addSubview:au_view];
#else
[cocoa_window setContentSize:au_view_frame.size];
[cocoa_window setContentView:au_view];
#endif
packView = au_view;
}
/* compute how tall the title bar is, because we have to offset the position of the child window
by that much.
*/
NSRect content_frame = [NSWindow contentRectForFrameRect:[win frame] styleMask:[win styleMask]];
NSRect wm_frame = [NSWindow frameRectForContentRect:content_frame styleMask:[win styleMask]];
int titlebar_height = wm_frame.size.height - content_frame.size.height;
// move cocoa window into position relative to the toplevel window
NSRect view_frame = [[cocoa_window contentView] frame];
view_frame.origin.x = content_frame.origin.x;
view_frame.origin.y = content_frame.origin.y;
[cocoa_window setFrame:view_frame display:NO];
/* make top level window big enough to hold cocoa window and titlebar */
content_frame.size.width = view_frame.size.width;
content_frame.size.height = view_frame.size.height + titlebar_height;
[win setFrame:content_frame display:NO];
/* now make cocoa window a child of this top level */
NSView* view = gdk_quartz_window_get_nsview (low_box.get_window()->gobj());
[win addChildWindow:cocoa_window ordered:NSWindowAbove];
[win setLevel:NSFloatingWindowLevel];
[win setHidesOnDeactivate:YES];
[view setFrame:packFrame];
[view addSubview:packView];
cocoa_parented = true;
low_box.set_size_request (packFrame.size.width, packFrame.size.height);
return 0;
}
@ -547,16 +533,21 @@ AUPluginUI::on_realize ()
{
VBox::on_realize ();
/* our windows should not have that resize indicator */
NSWindow* win = get_nswindow ();
if (win) {
[win setShowsResizeIndicator:NO];
}
}
void
AUPluginUI::lower_box_realized ()
{
if (au_view) {
if (parent_cocoa_window ()) {
}
parent_cocoa_window ();
} else if (carbon_window) {
if (parent_carbon_window ()) {
// ShowWindow (carbon_window);
}
parent_carbon_window ();
}
}
@ -572,12 +563,15 @@ AUPluginUI::on_map_event (GdkEventAny* ev)
{
cerr << "AU plugin map event\n";
if (au_view) {
show_all ();
} else if (carbon_window) {
[cocoa_parent setIsVisible:YES];
ShowWindow (carbon_window);
if (carbon_window) {
// move top level GTK window to the correct level
// to keep the stack together and not be sliceable
NSWindow* win = get_nswindow ();
// [win setLevel:NSFloatingWindowLevel];
}
return false;
}
@ -588,6 +582,8 @@ AUPluginUI::on_show ()
VBox::on_show ();
gtk_widget_realize (GTK_WIDGET(low_box.gobj()));
if (au_view) {
show_all ();
} else if (carbon_window) {
@ -629,3 +625,4 @@ AUPluginUI::on_focus_out_event (GdkEventFocus* ev)
cerr << "au plugin focus out\n";
return false;
}

View File

@ -28,6 +28,7 @@
#include <ardour/ardour.h>
#include <ardour/session.h>
#include <ardour/tempo.h>
#include <ardour/profile.h>
#include <sigc++/bind.h>
#include "ardour_ui.h"
@ -854,11 +855,12 @@ AudioClock::field_key_release_event (GdkEventKey *ev, Field field)
case Bars:
case Beats:
case Ticks:
// Bars or beats should never be 0
if (atoi(bars_label.get_text()) == 0) {
// Bars should never be, unless this clock is for a duration
if (atoi(bars_label.get_text()) == 0 && !is_duration) {
bars_label.set_text("001");
}
if (atoi(beats_label.get_text()) == 0) {
// beats should never be 0, unless this clock is for a duration
if (atoi(beats_label.get_text()) == 0 && !is_duration) {
beats_label.set_text("01");
}
break;
@ -1881,7 +1883,9 @@ AudioClock::build_ops_menu ()
MenuList& ops_items = ops_menu->items();
ops_menu->set_name ("ArdourContextMenu");
ops_items.push_back (MenuElem (_("Timecode"), bind (mem_fun(*this, &AudioClock::set_mode), SMPTE)));
if (!Profile->get_sae()) {
ops_items.push_back (MenuElem (_("Timecode"), bind (mem_fun(*this, &AudioClock::set_mode), SMPTE)));
}
ops_items.push_back (MenuElem (_("Bars:Beats"), bind (mem_fun(*this, &AudioClock::set_mode), BBT)));
ops_items.push_back (MenuElem (_("Minutes:Seconds"), bind (mem_fun(*this, &AudioClock::set_mode), MinSec)));
ops_items.push_back (MenuElem (_("Samples"), bind (mem_fun(*this, &AudioClock::set_mode), Frames)));

View File

@ -123,7 +123,7 @@ AudioRegionView::init (Gdk::Color& basic_color, bool wfd)
// FIXME: Some redundancy here with RegionView::init. Need to figure out
// where order is important and where it isn't...
RegionView::init(basic_color, false);
RegionView::init (basic_color, wfd);
XMLNode *node;
@ -808,7 +808,7 @@ AudioRegionView::create_waves ()
}
ChanCount nchans = atv.get_diskstream()->n_channels();
/* 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) {
tmp_waves.push_back (0);
@ -823,6 +823,14 @@ AudioRegionView::create_waves ()
wave_caches.push_back (WaveView::create_cache ());
if (wait_for_data) {
if (audio_region()->audio_source(n)->peaks_ready (bind (mem_fun(*this, &AudioRegionView::peaks_ready_handler), n), data_ready_connection)) {
create_one_wave (n, true);
} else {
// we'll get a PeaksReady signal from the source in the future
// and will call create_one_wave(n) then.
}
} else {
create_one_wave (n, true);
}
@ -917,8 +925,8 @@ AudioRegionView::create_one_wave (uint32_t which, bool direct)
void
AudioRegionView::peaks_ready_handler (uint32_t which)
{
//Gtkmm2ext::UI::instance()->call_slot (bind (mem_fun(*this, &AudioRegionView::create_one_wave), which, false));
cerr << "AudioRegionView::peaks_ready_handler() called on " << which << " this: " << this << endl;
Gtkmm2ext::UI::instance()->call_slot (bind (mem_fun(*this, &AudioRegionView::create_one_wave), which, false));
// cerr << "AudioRegionView::peaks_ready_handler() called on " << which << " this: " << this << endl;
}
void

View File

@ -58,7 +58,7 @@ class AudioRegionView : public RegionView
~AudioRegionView ();
virtual void init (Gdk::Color& base_color, bool wait_for_data = false);
virtual void init (Gdk::Color& base_color, bool wait_for_data);
boost::shared_ptr<ARDOUR::AudioRegion> audio_region() const;

View File

@ -24,7 +24,7 @@
#include "ardour_ui.h"
#include "actions.h"
#include "opts.h"
#include "sync-menu.h"
#include <gtkmm2ext/sync-menu.h>
#include <Appkit/Appkit.h>

View File

@ -175,6 +175,7 @@ Gdk::Cursor* Editor::cross_hair_cursor = 0;
Gdk::Cursor* Editor::selector_cursor = 0;
Gdk::Cursor* Editor::trimmer_cursor = 0;
Gdk::Cursor* Editor::grabber_cursor = 0;
Gdk::Cursor* Editor::grabber_edit_point_cursor = 0;
Gdk::Cursor* Editor::zoom_cursor = 0;
Gdk::Cursor* Editor::time_fx_cursor = 0;
Gdk::Cursor* Editor::fader_cursor = 0;
@ -300,6 +301,8 @@ Editor::Editor ()
verbose_cursor_on = true;
route_removal = false;
show_automatic_regions_in_region_list = true;
last_item_entered = 0;
last_item_entered_n = 0;
region_list_sort_type = (Editing::RegionListSortType) 0;
have_pending_keyboard_selection = false;
@ -344,6 +347,7 @@ Editor::Editor ()
zoomed_to_region = false;
rhythm_ferret = 0;
_scrubbing = false;
scrubbing_direction = 0;
sfbrowser = 0;
@ -1170,7 +1174,7 @@ Editor::connect_to_session (Session *t)
session_connections.push_back (session->TransportStateChange.connect (mem_fun(*this, &Editor::map_transport_state)));
session_connections.push_back (session->PositionChanged.connect (mem_fun(*this, &Editor::map_position_change)));
session_connections.push_back (session->RouteAdded.connect (mem_fun(*this, &Editor::handle_new_route)));
session_connections.push_back (session->RegionAdded.connect (mem_fun(*this, &Editor::handle_new_region)));
session_connections.push_back (session->RegionsAdded.connect (mem_fun(*this, &Editor::handle_new_regions)));
session_connections.push_back (session->RegionRemoved.connect (mem_fun(*this, &Editor::handle_region_removed)));
session_connections.push_back (session->DurationChanged.connect (mem_fun(*this, &Editor::handle_new_duration)));
session_connections.push_back (session->edit_group_added.connect (mem_fun(*this, &Editor::add_edit_group)));
@ -1340,8 +1344,15 @@ Editor::build_cursors ()
Gdk::Color c;
transparent_cursor = new Gdk::Cursor (bits, bits, c, c, 0, 0);
}
grabber_cursor = new Gdk::Cursor (HAND2);
{
Glib::RefPtr<Gdk::Pixbuf> grabber_edit_point_pixbuf (::get_icon ("grabber_edit_point"));
grabber_edit_point_cursor = new Gdk::Cursor (Gdk::Display::get_default(), grabber_edit_point_pixbuf, 5, 17);
}
cross_hair_cursor = new Gdk::Cursor (CROSSHAIR);
trimmer_cursor = new Gdk::Cursor (SB_H_DOUBLE_ARROW);
selector_cursor = new Gdk::Cursor (XTERM);
@ -1821,7 +1832,7 @@ Editor::add_region_context_items (StreamView* sv, boost::shared_ptr<Region> regi
bbt_glue_item->set_active (true);
break;
default:
bbt_glue_item->set_active (true);
bbt_glue_item->set_active (false);
break;
}
@ -2212,6 +2223,8 @@ Editor::set_edit_point_preference (EditPoint ep)
edit_point_selector.set_active_text (str);
}
set_canvas_cursor ();
if (!changed) {
return;
}
@ -2238,7 +2251,7 @@ Editor::set_edit_point_preference (EditPoint ep)
break;
}
}
instant_save ();
}
@ -2817,8 +2830,9 @@ Editor::setup_toolbar ()
mouse_mode_button_box.set_homogeneous(true);
vector<string> edit_mode_strings;
edit_mode_strings.push_back (edit_mode_to_string (Splice));
edit_mode_strings.push_back (edit_mode_to_string (Slide));
edit_mode_strings.push_back (edit_mode_to_string (Splice));
edit_mode_strings.push_back (edit_mode_to_string (Lock));
edit_mode_selector.set_name ("EditModeSelector");
Gtkmm2ext::set_size_request_to_display_given_text (edit_mode_selector, longest (edit_mode_strings).c_str(), 2+FUDGE, 10);
@ -3309,12 +3323,12 @@ Editor::duplicate_dialog (bool with_dialog)
}
}
RegionSelection rs;
get_regions_for_action (rs);
if (mouse_mode != MouseRange) {
ensure_entered_region_selected (true);
if (selection->regions.empty()) {
if (rs.empty()) {
return;
}
}
@ -3365,7 +3379,7 @@ Editor::duplicate_dialog (bool with_dialog)
if (mouse_mode == MouseRange) {
duplicate_selection (times);
} else {
duplicate_some_regions (selection->regions, times);
duplicate_some_regions (rs, times);
}
}
@ -3425,6 +3439,9 @@ Editor::cycle_edit_mode ()
Config->set_edit_mode (Splice);
break;
case Splice:
Config->set_edit_mode (Lock);
break;
case Lock:
Config->set_edit_mode (Slide);
break;
}
@ -3444,6 +3461,8 @@ Editor::edit_mode_selection_done ()
mode = Splice;
} else if (choice == _("Slide Edit")) {
mode = Slide;
} else if (choice == _("Lock Edit")) {
mode = Lock;
}
Config->set_edit_mode (mode);
@ -4499,10 +4518,9 @@ Editor::set_punch_range (nframes_t start, nframes_t end, string cmd)
commit_reversible_command ();
}
RegionSelection
Editor::get_regions_at (nframes64_t where, const TrackSelection& ts) const
void
Editor::get_regions_at (RegionSelection& rs, nframes64_t where, const TrackSelection& ts) const
{
RegionSelection rs;
const TrackSelection* tracks;
if (ts.empty()) {
@ -4536,15 +4554,11 @@ Editor::get_regions_at (nframes64_t where, const TrackSelection& ts) const
}
}
}
return rs;
}
RegionSelection
Editor::get_regions_after (nframes64_t where, const TrackSelection& ts) const
void
Editor::get_regions_after (RegionSelection& rs, nframes64_t where, const TrackSelection& ts) const
{
RegionSelection rs;
const TrackSelection* tracks;
if (ts.empty()) {
@ -4578,20 +4592,61 @@ Editor::get_regions_after (nframes64_t where, const TrackSelection& ts) const
}
}
}
return rs;
}
RegionSelection&
Editor::get_regions_for_action ()
void
Editor::get_regions_for_action (RegionSelection& rs, bool allow_entered)
{
if (!selection->regions.empty()) {
return selection->regions;
}
bool use_regions_at = true;
nframes64_t where = get_preferred_edit_position();
tmp_regions = get_regions_at (where, selection->tracks);
return tmp_regions;
if (selection->regions.empty()) {
if (selection->tracks.empty()) {
/* no regions or tracks selected, but entered regionview is valid
and we're in object mode - just use entered regionview
*/
if (entered_regionview && (mouse_mode == Editing::MouseObject)) {
rs.add (entered_regionview);
return;
}
} else {
/* no regions selected, so get all regions at the edit point across
all selected tracks.
*/
nframes64_t where = get_preferred_edit_position();
get_regions_at (rs, where, selection->tracks);
/* if the entered regionview wasn't selected and neither was its track
then add it.
*/
if (entered_regionview != 0 &&
!selection->selected (entered_regionview) &&
!selection->selected (&entered_regionview->get_time_axis_view())) {
rs.add (entered_regionview);
}
}
} else {
/* just use the selected regions */
rs = selection->regions;
/* if the entered regionview wasn't selected and we allow this sort of thing,
then add it.
*/
if (allow_entered && entered_regionview && !selection->selected (entered_regionview)) {
rs.add (entered_regionview);
}
}
}
void

View File

@ -472,7 +472,7 @@ class Editor : public PublicEditor
void hide_marker (ArdourCanvas::Item*, GdkEvent*);
void clear_marker_display ();
void mouse_add_new_marker (nframes_t where, bool is_cd=false);
void mouse_add_new_marker (nframes_t where, bool is_cd=false, bool is_xrun=false);
void update_cd_marker_display ();
void ensure_cd_marker_updated (LocationMarkers * lam, ARDOUR::Location * location);
@ -555,6 +555,8 @@ class Editor : public PublicEditor
Gtk::VBox vpacker;
Gdk::Cursor* current_canvas_cursor;
void set_canvas_cursor ();
Gdk::Cursor* which_grabber_cursor ();
ArdourCanvas::CanvasAA track_canvas;
ArdourCanvas::CanvasAA time_canvas;
@ -960,6 +962,7 @@ class Editor : public PublicEditor
static Gdk::Cursor* trimmer_cursor;
static Gdk::Cursor* selector_cursor;
static Gdk::Cursor* grabber_cursor;
static Gdk::Cursor* grabber_edit_point_cursor;
static Gdk::Cursor* zoom_cursor;
static Gdk::Cursor* time_fx_cursor;
static Gdk::Cursor* fader_cursor;
@ -999,8 +1002,10 @@ class Editor : public PublicEditor
int ensure_cursor (nframes_t* pos);
void handle_new_region (boost::weak_ptr<ARDOUR::Region>);
void handle_new_regions (vector<boost::weak_ptr<ARDOUR::Region> >& );
void handle_region_removed (boost::weak_ptr<ARDOUR::Region>);
void add_region_to_region_display (boost::shared_ptr<ARDOUR::Region>);
void add_regions_to_region_display (std::vector<boost::weak_ptr<ARDOUR::Region> > & );
void region_hidden (boost::shared_ptr<ARDOUR::Region>);
void redisplay_regions ();
void insert_into_tmp_regionlist(boost::shared_ptr<ARDOUR::Region>);
@ -1031,7 +1036,7 @@ class Editor : public PublicEditor
void split_region_at (nframes_t);
void split_regions_at (nframes_t, RegionSelection&);
void split_region_at_transients ();
void split_region_at_points (boost::shared_ptr<ARDOUR::Region>, ARDOUR::AnalysisFeatureList&);
void split_region_at_points (boost::shared_ptr<ARDOUR::Region>, ARDOUR::AnalysisFeatureList&, bool can_ferret);
void crop_region_to_selection ();
void crop_region_to (nframes_t start, nframes_t end);
void set_sync_point (nframes64_t, const RegionSelection&);
@ -1088,7 +1093,7 @@ class Editor : public PublicEditor
void keyboard_insert_region_list_selection ();
void region_from_selection ();
void create_region_from_selection (std::vector<boost::shared_ptr<ARDOUR::AudioRegion> >&);
void create_region_from_selection (std::vector<boost::shared_ptr<ARDOUR::Region> >&);
void play_from_start ();
void play_from_edit_point ();
@ -1120,6 +1125,8 @@ class Editor : public PublicEditor
void add_external_audio_action (Editing::ImportMode);
void external_audio_dialog ();
int check_whether_and_how_to_import(string, bool all_or_nothing = true);
bool check_multichannel_status (const std::vector<Glib::ustring>& paths);
SoundFileOmega* sfbrowser;
@ -1132,7 +1139,7 @@ class Editor : public PublicEditor
bool idle_do_embed (vector<Glib::ustring> paths, Editing::ImportDisposition, Editing::ImportMode mode, nframes64_t&);
int import_sndfiles (vector<Glib::ustring> paths, Editing::ImportMode mode, ARDOUR::SrcQuality, nframes64_t& pos,
int target_regions, int target_tracks, boost::shared_ptr<ARDOUR::AudioTrack>&);
int target_regions, int target_tracks, boost::shared_ptr<ARDOUR::AudioTrack>&, bool);
int embed_sndfiles (vector<Glib::ustring> paths, bool multiple_files, bool& check_sample_rate, Editing::ImportMode mode,
nframes64_t& pos, int target_regions, int target_tracks, boost::shared_ptr<ARDOUR::AudioTrack>&);
@ -1354,6 +1361,14 @@ class Editor : public PublicEditor
bool canvas_fade_in_handle_event (GdkEvent* event,ArdourCanvas::Item*, AudioRegionView*);
bool canvas_fade_out_event (GdkEvent* event,ArdourCanvas::Item*, AudioRegionView*);
bool canvas_fade_out_handle_event (GdkEvent* event,ArdourCanvas::Item*, AudioRegionView*);
// These variables are used to detect a feedback loop and break it to avoid a gui hang
private:
ArdourCanvas::Item *last_item_entered;
int last_item_entered_n;
public:
bool canvas_region_view_event (GdkEvent* event,ArdourCanvas::Item*, RegionView*);
bool canvas_region_view_name_highlight_event (GdkEvent* event,ArdourCanvas::Item*, RegionView*);
bool canvas_region_view_name_event (GdkEvent* event,ArdourCanvas::Item*, RegionView*);
@ -1652,6 +1667,7 @@ class Editor : public PublicEditor
void drag_range_markerbar_op (ArdourCanvas::Item* item, GdkEvent* event);
void end_range_markerbar_op (ArdourCanvas::Item* item, GdkEvent* event);
ArdourCanvas::SimpleRect* cd_marker_bar_drag_rect;
ArdourCanvas::SimpleRect* range_bar_drag_rect;
ArdourCanvas::SimpleRect* transport_bar_drag_rect;
ArdourCanvas::Line* marker_drag_line;
@ -2120,18 +2136,7 @@ class Editor : public PublicEditor
TimeAxisView* entered_track;
RegionView* entered_regionview;
class ExclusiveRegionSelection {
public:
ExclusiveRegionSelection (Editor&, RegionView*);
~ExclusiveRegionSelection ();
private:
Editor& editor;
RegionView* regionview;
bool remove;
};
void ensure_entered_region_selected (bool op_acts_on_objects = false);
void ensure_entered_track_selected (bool op_acts_on_objects = false);
bool clear_entered_track;
gint left_track_canvas (GdkEventCrossing*);
@ -2175,12 +2180,10 @@ class Editor : public PublicEditor
bool get_edit_op_range (nframes64_t& start, nframes64_t& end) const;
RegionSelection get_regions_at (nframes64_t where, const TrackSelection& ts) const;
RegionSelection get_regions_after (nframes64_t where, const TrackSelection& ts) const;
void get_regions_at (RegionSelection&, nframes64_t where, const TrackSelection& ts) const;
void get_regions_after (RegionSelection&, nframes64_t where, const TrackSelection& ts) const;
RegionSelection tmp_regions;
RegionSelection& get_regions_for_action ();
void get_regions_for_action (RegionSelection&, bool allowed_entered_regionview = false);
sigc::connection fast_screen_update_connection;
gint start_updating ();

View File

@ -206,6 +206,11 @@ Editor::register_actions ()
act = ActionManager::register_action (editor_actions, "nudge-next-backward", _("Nudge Next Backward"), bind (mem_fun(*this, &Editor::nudge_backward), true, false));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "nudge-playhead-forward", _("Nudge Playhead Forward"), bind (mem_fun(*this, &Editor::nudge_forward), false, true));
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));
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));
ActionManager::session_sensitive_actions.push_back (act);
@ -441,6 +446,7 @@ Editor::register_actions ()
ActionManager::register_action (editor_actions, "set-edit-splice", _("Splice"), bind (mem_fun (*this, &Editor::set_edit_mode), Splice));
ActionManager::register_action (editor_actions, "set-edit-slide", _("Slide"), bind (mem_fun (*this, &Editor::set_edit_mode), Slide));
ActionManager::register_action (editor_actions, "set-edit-lock", _("Lock"), bind (mem_fun (*this, &Editor::set_edit_mode), Lock));
ActionManager::register_action (editor_actions, "toggle-edit-mode", _("Toggle Edit Mode"), mem_fun (*this, &Editor::cycle_edit_mode));
ActionManager::register_action (editor_actions, X_("SnapTo"), _("Snap To"));

View File

@ -43,6 +43,7 @@
#include <ardour/audiofilesource.h>
#include <ardour/region_factory.h>
#include <ardour/source_factory.h>
#include <ardour/session.h>
#include <pbd/memento_command.h>
#include "ardour_ui.h"
@ -115,60 +116,139 @@ Editor::external_audio_dialog ()
sfbrowser->show_all ();
again:
int response = sfbrowser->run ();
switch (response) {
case RESPONSE_APPLY:
// leave the dialog open
break;
bool keepRunning;
case RESPONSE_OK:
sfbrowser->hide ();
break;
do {
keepRunning = false;
default:
// cancel from the browser - we are done
sfbrowser->hide ();
return;
int response = sfbrowser->run ();
switch (response) {
case RESPONSE_APPLY:
// leave the dialog open
break;
case RESPONSE_OK:
sfbrowser->hide ();
break;
default:
// cancel from the browser - we are done
sfbrowser->hide ();
return;
}
/* lets do it */
paths = sfbrowser->get_paths ();
ImportPosition pos = sfbrowser->get_position ();
ImportMode mode = sfbrowser->get_mode ();
ImportDisposition chns = sfbrowser->get_channel_disposition ();
nframes64_t where;
switch (pos) {
case ImportAtEditPoint:
where = get_preferred_edit_position ();
break;
case ImportAtTimestamp:
where = -1;
break;
case ImportAtPlayhead:
where = playhead_cursor->current_frame;
break;
case ImportAtStart:
where = session->current_start_frame();
break;
}
SrcQuality quality = sfbrowser->get_src_quality();
if (sfbrowser->copy_files_btn.get_active()) {
do_import (paths, chns, mode, quality, where);
} else {
do_embed (paths, chns, mode, where);
}
if (response == RESPONSE_APPLY) {
sfbrowser->clear_selection ();
keepRunning = true;
}
} while (keepRunning);
}
typedef std::map<PBD::ID,boost::shared_ptr<ARDOUR::Source> > SourceMap;
/**
* Updating is still disabled, see note in libs/ardour/import.cc Session::import_audiofiles()
*
* all_or_nothing:
* true = show "Update", "Import" and "Skip"
* false = show "Import", and "Cancel"
*
* Returns:
* 0 To update an existing source of the same name
* 1 To import/embed the file normally (make sure the new name will be unique)
* 2 If the user wants to skip this file
**/
int
Editor::check_whether_and_how_to_import(string path, bool all_or_nothing)
{
string wave_name (Glib::path_get_basename(path));
SourceMap all_sources = session->get_sources();
bool wave_name_exists = false;
for (SourceMap::iterator i = all_sources.begin(); i != all_sources.end(); ++i) {
boost::shared_ptr<AudioFileSource> afs = boost::dynamic_pointer_cast<AudioFileSource>(i->second);
string tmp (Glib::path_get_basename (afs->path()));
if (tmp == wave_name) {
wave_name_exists = true;
break;
}
}
/* lets do it */
paths = sfbrowser->get_paths ();
int function = 1;
ImportPosition pos = sfbrowser->get_position ();
ImportMode mode = sfbrowser->get_mode ();
ImportDisposition chns = sfbrowser->get_channel_disposition ();
nframes64_t where;
switch (pos) {
case ImportAtEditPoint:
where = get_preferred_edit_position ();
break;
case ImportAtTimestamp:
where = -1;
break;
case ImportAtPlayhead:
where = playhead_cursor->current_frame;
break;
case ImportAtStart:
where = session->current_start_frame();
break;
if (wave_name_exists) {
string message;
if (all_or_nothing) {
// updating is still disabled
//message = string_compose(_("The session already contains a source file named %1. Do you want to update that file (and thus all regions using the file) or import this file as a new file?"),wave_name);
message = string_compose(_("The session already contains a source file named %1. This file will be imported as a new file, please confirm."),wave_name);
} else {
message = _("Lorem ipsum. Do you want to skidaddle?");
}
MessageDialog dialog(message, false,Gtk::MESSAGE_QUESTION, Gtk::BUTTONS_NONE, true);
if (all_or_nothing) {
// disabled
//dialog.add_button("Update", 0);
dialog.add_button("Import", 1);
dialog.add_button("Skip", 2);
} else {
dialog.add_button("Import", 1);
dialog.add_button("Cancel", 2);
}
//dialog.add_button("Skip all", 4); // All or rest?
dialog.show();
function = dialog.run ();
dialog.hide();
}
SrcQuality quality = sfbrowser->get_src_quality();
if (sfbrowser->copy_files_btn.get_active()) {
do_import (paths, chns, mode, quality, where);
} else {
do_embed (paths, chns, mode, where);
}
if (response == RESPONSE_APPLY) {
sfbrowser->clear_selection ();
goto again;
}
return function;
}
boost::shared_ptr<AudioTrack>
@ -206,79 +286,107 @@ Editor::do_import (vector<ustring> paths, ImportDisposition chns, ImportMode mod
{
boost::shared_ptr<AudioTrack> track;
vector<ustring> to_import;
bool ok = false;
bool ok = true;
int nth = 0;
if (interthread_progress_window == 0) {
build_interthread_progress_window ();
}
switch (chns) {
case Editing::ImportDistinctFiles:
for (vector<ustring>::iterator a = paths.begin(); a != paths.end(); ++a) {
to_import.clear ();
to_import.push_back (*a);
if (mode == Editing::ImportToTrack) {
track = get_nth_selected_audio_track (nth++);
}
if (import_sndfiles (to_import, mode, quality, pos, 1, -1, track)) {
goto out;
}
}
break;
case Editing::ImportDistinctChannels:
for (vector<ustring>::iterator a = paths.begin(); a != paths.end(); ++a) {
to_import.clear ();
to_import.push_back (*a);
if (import_sndfiles (to_import, mode, quality, pos, -1, -1, track)) {
goto out;
}
}
break;
case Editing::ImportMergeFiles:
if (chns == Editing::ImportMergeFiles) {
/* create 1 region from all paths, add to 1 track,
ignore "track"
*/
if (import_sndfiles (paths, mode, quality, pos, 1, 1, track)) {
goto out;
bool cancel = false;
for (vector<ustring>::iterator a = paths.begin(); a != paths.end() && ok; ++a) {
int check = check_whether_and_how_to_import(*a, false);
if (check == 2) {
cancel = true;
break;
}
}
break;
case Editing::ImportSerializeFiles:
for (vector<ustring>::iterator a = paths.begin(); a != paths.end(); ++a) {
if (!cancel) {
if (import_sndfiles (paths, mode, quality, pos, 1, 1, track, false)) {
ok = false;
}
}
to_import.clear ();
to_import.push_back (*a);
/* create 1 region from this path, add to 1 track,
reuse "track" across paths
*/
} else {
bool replace = false;
if (import_sndfiles (to_import, mode, quality, pos, 1, 1, track)) {
goto out;
for (vector<ustring>::iterator a = paths.begin(); a != paths.end() && ok; ++a) {
int check = check_whether_and_how_to_import(*a, true);
if (check == 2 ) {
// skip
continue;
}
if (check == 0) {
fatal << "Updating existing sources should be disabled!" << endl;
replace = true;
} else if (check == 1) {
replace = false;
}
switch (chns) {
case Editing::ImportDistinctFiles:
to_import.clear ();
to_import.push_back (*a);
if (mode == Editing::ImportToTrack) {
track = get_nth_selected_audio_track (nth++);
}
if (import_sndfiles (to_import, mode, quality, pos, 1, -1, track, replace)) {
ok = false;
}
break;
case Editing::ImportDistinctChannels:
to_import.clear ();
to_import.push_back (*a);
if (import_sndfiles (to_import, mode, quality, pos, -1, -1, track, replace)) {
ok = false;
}
break;
case Editing::ImportSerializeFiles:
to_import.clear ();
to_import.push_back (*a);
/* create 1 region from this path, add to 1 track,
reuse "track" across paths
*/
if (import_sndfiles (to_import, mode, quality, pos, 1, 1, track, replace)) {
ok = false;
}
break;
case Editing::ImportMergeFiles:
// Not entered
break;
}
}
break;
}
ok = true;
out:
if (ok) {
session->save_state ("");
}
if (ok) {
session->save_state ("");
}
interthread_progress_window->hide_all ();
interthread_progress_window->hide_all ();
}
}
bool
@ -366,7 +474,7 @@ Editor::_do_embed (vector<ustring> paths, ImportDisposition chns, ImportMode mod
int
Editor::import_sndfiles (vector<ustring> paths, ImportMode mode, SrcQuality quality, nframes64_t& pos,
int target_regions, int target_tracks, boost::shared_ptr<AudioTrack>& track)
int target_regions, int target_tracks, boost::shared_ptr<AudioTrack>& track, bool replace)
{
WindowTitle title = string_compose (_("importing %1"), paths.front());
@ -383,6 +491,7 @@ Editor::import_sndfiles (vector<ustring> paths, ImportMode mode, SrcQuality qual
import_status.freeze = false;
import_status.done = 0.0;
import_status.quality = quality;
import_status.replace_existing_source = replace;
interthread_progress_connection = Glib::signal_timeout().connect
(bind (mem_fun(*this, &Editor::import_progress_timeout), (gpointer) 0), 100);

View File

@ -203,6 +203,10 @@ Editor::initialize_canvas ()
transport_marker_bar->property_outline_what() = (0x1 | 0x8);
transport_marker_bar->property_outline_pixels() = 1;
cd_marker_bar_drag_rect = new ArdourCanvas::SimpleRect (*cd_marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height-1.0);
cd_marker_bar_drag_rect->property_outline_pixels() = 0;
cd_marker_bar_drag_rect->hide ();
range_bar_drag_rect = new ArdourCanvas::SimpleRect (*range_marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height-1.0);
range_bar_drag_rect->property_outline_pixels() = 0;
range_bar_drag_rect->hide ();
@ -343,16 +347,16 @@ Editor::track_canvas_size_allocated ()
(*x)->set_line_vpos (y1, canvas_height);
}
range_marker_drag_rect->property_y1() = 0.0;
range_marker_drag_rect->property_y2() = canvas_height;
transport_loop_range_rect->property_y1() = 0.0;
transport_loop_range_rect->property_y2() = canvas_height;
transport_punch_range_rect->property_y1() = 0.0;
transport_punch_range_rect->property_y2() = canvas_height;
transport_punchin_line->property_y1() = 0.0;
transport_punchin_line->property_y2() = canvas_height;
transport_punchout_line->property_y1() = 0.0;
transport_punchout_line->property_y2() = canvas_height;
range_marker_drag_rect->property_y1() = y1;
range_marker_drag_rect->property_y2() = full_canvas_height;
transport_loop_range_rect->property_y1() = y1;
transport_loop_range_rect->property_y2() = full_canvas_height;
transport_punch_range_rect->property_y1() = y1;
transport_punch_range_rect->property_y2() = full_canvas_height;
transport_punchin_line->property_y1() = y1;
transport_punchin_line->property_y2() = full_canvas_height;
transport_punchout_line->property_y1() = y1;
transport_punchout_line->property_y2() = full_canvas_height;
update_fixed_rulers();
redisplay_tempo (true);
@ -730,15 +734,15 @@ Editor::tie_vertical_scrolling ()
playhead_cursor->set_y_axis (y1);
range_marker_drag_rect->property_y1() = y1;
range_marker_drag_rect->property_y2() = y1 + canvas_height;
range_marker_drag_rect->property_y2() = full_canvas_height;
transport_loop_range_rect->property_y1() = y1;
transport_loop_range_rect->property_y2() = y1 + canvas_height;
transport_loop_range_rect->property_y2() = full_canvas_height;
transport_punch_range_rect->property_y1() = y1;
transport_punch_range_rect->property_y2() = y1 + canvas_height;
transport_punch_range_rect->property_y2() = full_canvas_height;
transport_punchin_line->property_y1() = y1;
transport_punchin_line->property_y2() = y1 + canvas_height;
transport_punchin_line->property_y2() = full_canvas_height;
transport_punchout_line->property_y1() = y1;
transport_punchout_line->property_y2() = y1 + canvas_height;
transport_punchout_line->property_y2() = full_canvas_height;
if (!selection->markers.empty()) {
for (MarkerSelection::iterator x = selection->markers.begin(); x != selection->markers.end(); ++x) {
@ -809,6 +813,9 @@ Editor::color_handler()
transport_marker_bar->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_TransportMarkerBar.get();
transport_marker_bar->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_MarkerBarSeparator.get();
cd_marker_bar_drag_rect->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_RangeDragBarRect.get();
cd_marker_bar_drag_rect->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_RangeDragBarRect.get();
range_bar_drag_rect->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_RangeDragBarRect.get();
range_bar_drag_rect->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_RangeDragBarRect.get();

View File

@ -388,13 +388,20 @@ Editor::LocationMarkers::set_color_rgba (uint32_t rgba)
}
void
Editor::mouse_add_new_marker (nframes_t where, bool is_cd)
Editor::mouse_add_new_marker (nframes_t where, bool is_cd, bool is_xrun)
{
string markername;
string markername, markerprefix;
int flags = (is_cd ? Location::IsCDMarker|Location::IsMark : Location::IsMark);
if (is_xrun) {
markerprefix = "xrun";
flags = Location::IsMark;
} else {
markerprefix = "mark";
}
if (session) {
session->locations()->next_available_name(markername,"mark");
session->locations()->next_available_name(markername, markerprefix);
Location *location = new Location (where, where, markername, (Location::Flags) flags);
session->begin_reversible_command (_("add marker"));
XMLNode &before = session->locations()->get_state();
@ -1151,6 +1158,10 @@ Editor::update_punch_range_view (bool visibility)
void
Editor::marker_selection_changed ()
{
if (session && session->deletion_in_progress()) {
return;
}
for (LocationMarkerMap::iterator i = location_markers.begin(); i != location_markers.end(); ++i) {
LocationMarkers* lam = i->second;

View File

@ -359,7 +359,6 @@ Editor::session_going_away ()
editor_list_button.set_sensitive(false);
/* clear tempo/meter rulers */
remove_metric_marks ();
hide_measures ();
clear_marker_display ();

View File

@ -215,6 +215,57 @@ Editor::mouse_mode_toggled (MouseMode m)
}
}
Gdk::Cursor*
Editor::which_grabber_cursor ()
{
switch (_edit_point) {
case EditAtMouse:
return grabber_edit_point_cursor;
break;
default:
return grabber_cursor;
break;
}
}
void
Editor::set_canvas_cursor ()
{
switch (mouse_mode) {
case MouseRange:
current_canvas_cursor = selector_cursor;
break;
case MouseObject:
current_canvas_cursor = which_grabber_cursor();
break;
case MouseGain:
current_canvas_cursor = cross_hair_cursor;
break;
case MouseZoom:
current_canvas_cursor = zoom_cursor;
break;
case MouseTimeFX:
current_canvas_cursor = time_fx_cursor; // just use playhead
break;
case MouseAudition:
current_canvas_cursor = speaker_cursor;
break;
case MouseNote:
set_midi_edit_cursor (current_midi_edit_mode());
break;
}
if (is_drawable()) {
track_canvas.get_window()->set_cursor(*current_canvas_cursor);
}
}
void
Editor::set_mouse_mode (MouseMode m, bool force)
{
@ -266,36 +317,26 @@ Editor::set_mouse_mode (MouseMode m, bool force)
switch (mouse_mode) {
case MouseRange:
mouse_select_button.set_active (true);
current_canvas_cursor = selector_cursor;
break;
case MouseObject:
mouse_move_button.set_active (true);
if (Profile->get_sae()) {
current_canvas_cursor = timebar_cursor;
} else {
current_canvas_cursor = grabber_cursor;
}
break;
case MouseGain:
mouse_gain_button.set_active (true);
current_canvas_cursor = cross_hair_cursor;
break;
case MouseZoom:
mouse_zoom_button.set_active (true);
current_canvas_cursor = zoom_cursor;
break;
case MouseTimeFX:
mouse_timefx_button.set_active (true);
current_canvas_cursor = time_fx_cursor; // just use playhead
break;
case MouseAudition:
mouse_audition_button.set_active (true);
current_canvas_cursor = speaker_cursor;
break;
case MouseNote:
@ -310,10 +351,8 @@ Editor::set_mouse_mode (MouseMode m, bool force)
midi_toolbar_frame.hide();
ignore_mouse_mode_toggle = false;
if (is_drawable()) {
track_canvas.get_window()->set_cursor(*current_canvas_cursor);
}
set_canvas_cursor ();
}
void
@ -904,6 +943,7 @@ bool
Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_type)
{
nframes_t where = event_frame (event, 0, 0);
AutomationTimeAxisView* atv = 0;
/* no action if we're recording */
@ -1119,14 +1159,14 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
case MouseObject:
switch (item_type) {
case AutomationTrackItem:
dynamic_cast<AutomationTimeAxisView*>(clicked_axisview)->add_automation_event
(item,
event,
where,
event->button.y);
atv = dynamic_cast<AutomationTimeAxisView*>(clicked_routeview);
if (atv) {
atv->add_automation_event (item, event, where, event->button.y);
}
return true;
break;
default:
break;
}
@ -1232,6 +1272,11 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
Marker * marker;
double fraction;
if (last_item_entered != item) {
last_item_entered = item;
last_item_entered_n = 0;
}
switch (item_type) {
case ControlPointItem:
if (mouse_mode == MouseGain || mouse_mode == MouseObject) {
@ -1247,12 +1292,15 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
fraction = 1.0 - (cp->get_y() / cp->line().height());
set_verbose_canvas_cursor (cp->line().get_verbose_cursor_string (fraction), at_x, at_y);
show_verbose_canvas_cursor ();
if (is_drawable() && !_scrubbing) {
track_canvas.get_window()->set_cursor (*fader_cursor);
}
last_item_entered_n++;
set_verbose_canvas_cursor (cp->line().get_verbose_cursor_string (fraction), at_x, at_y);
if (last_item_entered_n < 10) {
show_verbose_canvas_cursor ();
}
}
break;
@ -1303,7 +1351,14 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
case PlayheadCursorItem:
if (is_drawable()) {
track_canvas.get_window()->set_cursor (*grabber_cursor);
switch (_edit_point) {
case EditAtMouse:
track_canvas.get_window()->set_cursor (*grabber_edit_point_cursor);
break;
default:
track_canvas.get_window()->set_cursor (*grabber_cursor);
break;
}
}
break;
@ -1755,7 +1810,7 @@ Editor::start_grab (GdkEvent* event, Gdk::Cursor *cursor)
}
if (cursor == 0) {
cursor = grabber_cursor;
cursor = which_grabber_cursor ();
}
// if dragging with button2, the motion is x constrained, with Alt-button2 it is y constrained
@ -1818,7 +1873,7 @@ Editor::swap_grab (ArdourCanvas::Item* new_item, Gdk::Cursor* cursor, uint32_t t
drag_info.item = new_item;
if (cursor == 0) {
cursor = grabber_cursor;
cursor = which_grabber_cursor ();
}
drag_info.item->grab (Gdk::POINTER_MOTION_MASK|Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK, *cursor, time);
@ -1965,6 +2020,7 @@ Editor::fade_in_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* even
XMLNode &before = alist->get_state();
tmp->audio_region()->set_fade_in_length (fade_length);
tmp->audio_region()->set_fade_in_active (true);
XMLNode &after = alist->get_state();
session->add_command(new MementoCommand<AutomationList>(*alist.get(), &before, &after));
@ -2081,6 +2137,7 @@ Editor::fade_out_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* eve
XMLNode &before = alist->get_state();
tmp->audio_region()->set_fade_out_length (fade_length);
tmp->audio_region()->set_fade_out_active (true);
XMLNode &after = alist->get_state();
session->add_command(new MementoCommand<AutomationList>(*alist.get(), &before, &after));
@ -3361,30 +3418,34 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
the region would be if we moved it by that much.
*/
if (drag_info.move_threshold_passed) {
if ( drag_info.move_threshold_passed ) {
if (drag_info.current_pointer_frame > drag_info.pointer_frame_offset) {
nframes_t sync_frame;
nframes_t sync_offset;
int32_t sync_dir;
pending_region_position = drag_info.current_pointer_frame - drag_info.pointer_frame_offset;
sync_offset = rv->region()->sync_offset (sync_dir);
sync_frame = rv->region()->adjust_to_sync (pending_region_position);
/* we snap if the snap modifier is not enabled.
/* we don't handle a sync point that lies before zero.
*/
if (sync_dir >= 0 || (sync_dir < 0 && pending_region_position >= sync_offset)) {
sync_frame = pending_region_position + (sync_dir*sync_offset);
/* we snap if the snap modifier is not enabled.
*/
if (!Keyboard::modifier_state_contains (event->button.state, Keyboard::snap_modifier())) {
snap_to (sync_frame);
}
if (!Keyboard::modifier_state_contains (event->button.state, Keyboard::snap_modifier())) {
snap_to (sync_frame);
}
if (sync_frame - sync_offset <= sync_frame) {
pending_region_position = sync_frame - (sync_dir*sync_offset);
pending_region_position = rv->region()->adjust_to_sync (sync_frame);
} else {
pending_region_position = 0;
pending_region_position = drag_info.last_frame_position;
}
} else {
@ -3397,7 +3458,8 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
// printf ("3: pending_region_position= %lu %lu\n", pending_region_position, drag_info.last_frame_position );
if (pending_region_position != drag_info.last_frame_position && !drag_info.x_constrained) {
bool x_move_allowed = ( !drag_info.x_constrained && (Config->get_edit_mode() != Lock)) || ( drag_info.x_constrained && (Config->get_edit_mode() == Lock)) ;
if ( pending_region_position != drag_info.last_frame_position && x_move_allowed ) {
/* now compute the canvas unit distance we need to move the regionview
to make it appear at the new location.
@ -3420,7 +3482,7 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
x_delta = 0;
}
/*************************************************************
PREPARE TO MOVE
************************************************************/
@ -4150,7 +4212,7 @@ Editor::start_selection_grab (ArdourCanvas::Item* item, GdkEvent* event)
/* lets try to create new Region for the selection */
vector<boost::shared_ptr<AudioRegion> > new_regions;
vector<boost::shared_ptr<Region> > new_regions;
create_region_from_selection (new_regions);
if (new_regions.empty()) {
@ -4904,7 +4966,23 @@ Editor::drag_range_markerbar_op (ArdourCanvas::Item* item, GdkEvent* event)
{
nframes_t start = 0;
nframes_t end = 0;
ArdourCanvas::SimpleRect *crect = (range_marker_op == CreateRangeMarker) ? range_bar_drag_rect: transport_bar_drag_rect;
ArdourCanvas::SimpleRect *crect;
switch (range_marker_op) {
case CreateRangeMarker:
crect = range_bar_drag_rect;
break;
case CreateTransportMarker:
crect = transport_bar_drag_rect;
break;
case CreateCDMarker:
crect = cd_marker_bar_drag_rect;
break;
default:
cerr << "Error: unknown range marker op passed to Editor::drag_range_markerbar_op ()" << endl;
return;
break;
}
if (!Keyboard::modifier_state_contains (event->button.state, Keyboard::snap_modifier())) {
snap_to (drag_info.current_pointer_frame);
@ -4991,9 +5069,11 @@ Editor::end_range_markerbar_op (ArdourCanvas::Item* item, GdkEvent* event)
session->locations()->next_available_name(rangename,"unnamed");
if (range_marker_op == CreateCDMarker) {
flags = Location::IsRangeMarker|Location::IsCDMarker;
cd_marker_bar_drag_rect->hide();
}
else {
flags = Location::IsRangeMarker;
range_bar_drag_rect->hide();
}
newloc = new Location(temp_location->start(), temp_location->end(), rangename, (Location::Flags) flags);
session->locations()->add (newloc, true);
@ -5001,7 +5081,6 @@ Editor::end_range_markerbar_op (ArdourCanvas::Item* item, GdkEvent* event)
session->add_command(new MementoCommand<Locations>(*(session->locations()), &before, &after));
commit_reversible_command ();
range_bar_drag_rect->hide();
range_marker_drag_rect->hide();
break;
}

File diff suppressed because it is too large Load Diff

View File

@ -58,20 +58,10 @@ Editor::handle_region_removed (boost::weak_ptr<Region> wregion)
}
void
Editor::handle_new_region (boost::weak_ptr<Region> wregion)
Editor::handle_new_regions (vector<boost::weak_ptr<Region> >& v)
{
ENSURE_GUI_THREAD (bind (mem_fun (*this, &Editor::handle_new_region), wregion));
/* don't copy region - the one we are being notified
about belongs to the session, and so it will
never be edited.
*/
boost::shared_ptr<Region> region (wregion.lock());
if (region) {
add_region_to_region_display (region);
}
ENSURE_GUI_THREAD (bind (mem_fun (*this, &Editor::handle_new_regions), v));
add_regions_to_region_display (v);
}
void
@ -82,6 +72,21 @@ Editor::region_hidden (boost::shared_ptr<Region> r)
redisplay_regions ();
}
void
Editor::add_regions_to_region_display (vector<boost::weak_ptr<Region> >& regions)
{
cerr << "Adding " << regions.size() << " to region list\n";
region_list_display.set_model (Glib::RefPtr<Gtk::TreeStore>(0));
for (vector<boost::weak_ptr<Region> >::iterator x = regions.begin(); x != regions.end(); ++x) {
boost::shared_ptr<Region> region ((*x).lock());
if (region) {
add_region_to_region_display (region);
}
}
region_list_display.set_model (region_list_model);
}
void
Editor::add_region_to_region_display (boost::shared_ptr<Region> region)
{

View File

@ -116,6 +116,7 @@ Editor::handle_new_route (Session::RouteList& routes)
if (rtv->route()->order_key(N_("editor")) == -1) {
rtv->route()->set_order_key (N_("editor"), route_display_model->children().size()-1);
}
rtv->effective_gain_display ();
}
ignore_route_list_reorder = false;

View File

@ -366,7 +366,7 @@ Editor::popup_ruler_menu (nframes_t where, ItemType t)
switch (t) {
case MarkerBarItem:
ruler_items.push_back (MenuElem (_("New location marker"), bind ( mem_fun(*this, &Editor::mouse_add_new_marker), where, false)));
ruler_items.push_back (MenuElem (_("New location marker"), bind ( mem_fun(*this, &Editor::mouse_add_new_marker), where, false, false)));
ruler_items.push_back (MenuElem (_("Clear all locations"), mem_fun(*this, &Editor::clear_markers)));
ruler_items.push_back (MenuElem (_("Unhide locations"), mem_fun(*this, &Editor::unhide_markers)));
ruler_items.push_back (SeparatorElem ());
@ -384,7 +384,7 @@ Editor::popup_ruler_menu (nframes_t where, ItemType t)
case CdMarkerBarItem:
// TODO
ruler_items.push_back (MenuElem (_("New CD track marker"), bind ( mem_fun(*this, &Editor::mouse_add_new_marker), where, true)));
ruler_items.push_back (MenuElem (_("New CD track marker"), bind ( mem_fun(*this, &Editor::mouse_add_new_marker), where, true, false)));
break;

View File

@ -183,7 +183,6 @@ Editor::set_selected_track_as_side_effect (bool force)
void
Editor::set_selected_track (TimeAxisView& view, Selection::Operation op, bool no_remove)
{
switch (op) {
case Selection::Toggle:
if (selection->selected (&view)) {
@ -961,13 +960,7 @@ Editor::set_selection_from_region ()
return;
}
RegionView* rv = *(selection->regions.begin());
boost::shared_ptr<Region> region = rv->region();
begin_reversible_command (_("set selection from region"));
selection->set (0, region->position(), region->last_frame());
commit_reversible_command ();
selection->set (0, selection->regions.start(), selection->regions.end_frame());
set_mouse_mode (Editing::MouseRange, false);
}
@ -1323,27 +1316,4 @@ Editor::deselect_all ()
selection->clear ();
}
Editor::ExclusiveRegionSelection::ExclusiveRegionSelection (Editor& ed, RegionView* rv)
: editor (ed),
regionview (rv)
{
if (!rv || ed.current_mouse_mode() != Editing::MouseObject) {
return;
}
if (ed.get_selection().regions.empty() && !ed.get_selection().selected (rv)) {
ed.get_selection().set (rv, false);
remove = true;
} else {
remove = false;
}
}
Editor::ExclusiveRegionSelection::~ExclusiveRegionSelection ()
{
if (remove) {
editor.get_selection().remove (regionview);
}
}

View File

@ -821,7 +821,7 @@ EngineControl::driver_changed ()
vector<string>& strings = devices[driver];
if (strings.empty() && driver != "FFADO") {
if (strings.empty() && driver != "FFADO" && driver != "Dummy") {
error << string_compose (_("No devices found for driver \"%1\""), driver) << endmsg;
return;
}
@ -841,7 +841,7 @@ EngineControl::driver_changed ()
interface_combo.set_active_text (strings.front());
input_device_combo.set_active_text (strings.front());
output_device_combo.set_active_text (strings.front());
}
}
if (driver == "ALSA") {
soft_mode_button.set_sensitive (true);

View File

@ -86,7 +86,7 @@ GenericPluginUI::GenericPluginUI (boost::shared_ptr<PluginInsert> pi, bool scrol
smaller_hbox->pack_start (*latency_label, false, false, 10);
smaller_hbox->pack_start (latency_gui, false, false, 10);
smaller_hbox->pack_start (combo, false, false);
smaller_hbox->pack_start (preset_combo, false, false);
smaller_hbox->pack_start (save_button, false, false);
constraint_hbox->set_spacing (5);

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 543 B

View File

@ -17,22 +17,32 @@
*/
#include <ardour/ardour.h>
#include "ardour_ui.h"
#include <algorithm>
#include <fstream>
#include <iostream>
#include <ctype.h>
#include <gtkmm/accelmap.h>
#include <gdk/gdkkeysyms.h>
#include <pbd/error.h>
#include <pbd/file_utils.h>
#include <ardour/filesystem_paths.h>
#include "keyboard.h"
#include "gui_thread.h"
#include "opts.h"
#include "i18n.h"
using namespace PBD;
using namespace ARDOUR;
#define KBD_DEBUG 1
bool debug_keyboard = false;
@ -44,10 +54,10 @@ guint Keyboard::delete_mod = GDK_SHIFT_MASK;
guint Keyboard::snap_mod = GDK_MOD3_MASK;
#ifdef GTKOSX
guint Keyboard::PrimaryModifier = GDK_MOD1_MASK; // Command
guint Keyboard::SecondaryModifier = GDK_MOD5_MASK; // Alt/Option
guint Keyboard::PrimaryModifier = GDK_META_MASK; // Command
guint Keyboard::SecondaryModifier = GDK_MOD1_MASK; // Alt/Option
guint Keyboard::TertiaryModifier = GDK_SHIFT_MASK; // Shift
guint Keyboard::CopyModifier = GDK_MOD5_MASK; // Alt/Option
guint Keyboard::CopyModifier = GDK_MOD1_MASK; // Alt/Option
guint Keyboard::RangeSelectModifier = GDK_SHIFT_MASK;
#else
guint Keyboard::PrimaryModifier = GDK_CONTROL_MASK; // Control
@ -61,6 +71,11 @@ Keyboard* Keyboard::_the_keyboard = 0;
Gtk::Window* Keyboard::current_window = 0;
bool Keyboard::_some_magic_widget_has_focus = false;
std::string Keyboard::user_keybindings_path;
bool Keyboard::can_save_keybindings = false;
map<string,string> Keyboard::binding_files;
std::string Keyboard::_current_binding_name = _("Unknown");
/* set this to initially contain the modifiers we care about, then track changes in ::set_edit_modifier() etc. */
GdkModifierType Keyboard::RelevantModifierKeyMask;
@ -359,3 +374,192 @@ Keyboard::selection_type (guint state)
return Selection::Set;
}
}
static void
accel_map_changed (GtkAccelMap* map,
gchar* path,
guint key,
GdkModifierType mod,
gpointer arg)
{
Keyboard::save_keybindings ();
}
void
Keyboard::set_can_save_keybindings (bool yn)
{
can_save_keybindings = yn;
}
void
Keyboard::save_keybindings ()
{
if (can_save_keybindings) {
Gtk::AccelMap::save (user_keybindings_path);
}
}
void
Keyboard::setup_keybindings ()
{
using namespace ARDOUR_COMMAND_LINE;
std::string default_bindings = "mnemonic-us.bindings";
std::string path;
vector<string> strs;
binding_files.clear ();
ARDOUR::find_bindings_files (binding_files);
/* set up the per-user bindings path */
strs.push_back (Glib::get_home_dir());
strs.push_back (".ardour2");
strs.push_back ("ardour.bindings");
user_keybindings_path = Glib::build_filename (strs);
if (Glib::file_test (user_keybindings_path, Glib::FILE_TEST_EXISTS)) {
std::pair<string,string> newpair;
newpair.first = _("your own");
newpair.second = user_keybindings_path;
binding_files.insert (newpair);
}
/* check to see if they gave a style name ("SAE", "ergonomic") or
an actual filename (*.bindings)
*/
if (!keybindings_path.empty() && keybindings_path.find (".bindings") == string::npos) {
// just a style name - allow user to
// specify the layout type.
char* layout;
if ((layout = getenv ("ARDOUR_KEYBOARD_LAYOUT")) != 0 && layout[0] != '\0') {
/* user-specified keyboard layout */
keybindings_path += '-';
keybindings_path += layout;
} else {
/* default to US/ANSI - we have to pick something */
keybindings_path += "-us";
}
keybindings_path += ".bindings";
}
if (keybindings_path.empty()) {
/* no path or binding name given: check the user one first */
if (!Glib::file_test (user_keybindings_path, Glib::FILE_TEST_EXISTS)) {
keybindings_path = "";
} else {
keybindings_path = user_keybindings_path;
}
}
/* if we still don't have a path at this point, use the default */
if (keybindings_path.empty()) {
keybindings_path = default_bindings;
}
while (true) {
if (!Glib::path_is_absolute (keybindings_path)) {
/* not absolute - look in the usual places */
sys::path keybindings_file;
SearchPath spath = ardour_search_path() + user_config_directory() + system_config_search_path();
find_file_in_search_path (spath, keybindings_path, keybindings_file);
if (path.empty()) {
if (keybindings_path == default_bindings) {
error << _("Default keybindings not found - Ardour will be hard to use!") << endmsg;
return;
} else {
warning << string_compose (_("Key bindings file \"%1\" not found. Default bindings used instead"),
keybindings_path)
<< endmsg;
keybindings_path = default_bindings;
}
} else {
/* use it */
keybindings_path = path;
break;
}
} else {
/* path is absolute already */
if (!Glib::file_test (keybindings_path, Glib::FILE_TEST_EXISTS)) {
if (keybindings_path == default_bindings) {
error << _("Default keybindings not found - Ardour will be hard to use!") << endmsg;
return;
} else {
warning << string_compose (_("Key bindings file \"%1\" not found. Default bindings used instead"),
keybindings_path)
<< endmsg;
keybindings_path = default_bindings;
}
} else {
break;
}
}
}
load_keybindings (keybindings_path);
/* catch changes */
GtkAccelMap* accelmap = gtk_accel_map_get();
g_signal_connect (accelmap, "changed", (GCallback) accel_map_changed, 0);
}
bool
Keyboard::load_keybindings (string path)
{
try {
cerr << "loading bindings from " << path << endl;
Gtk::AccelMap::load (path);
_current_binding_name = _("Unknown");
for (map<string,string>::iterator x = binding_files.begin(); x != binding_files.end(); ++x) {
if (path == x->second) {
_current_binding_name = x->first;
break;
}
}
return true;
} catch (...) {
error << string_compose (_("Ardour key bindings file not found at \"%1\" or contains errors."), path)
<< endmsg;
return false;
}
}

View File

@ -109,6 +109,13 @@ class Keyboard : public sigc::trackable, PBD::Stateful
static void magic_widget_grab_focus ();
static void magic_widget_drop_focus ();
static void setup_keybindings ();
static void save_keybindings ();
static bool load_keybindings (std::string path);
static void set_can_save_keybindings (bool yn);
static std::string current_binding_name () { return _current_binding_name; }
static std::map<std::string,std::string> binding_files;
private:
static Keyboard* _the_keyboard;
@ -121,6 +128,9 @@ class Keyboard : public sigc::trackable, PBD::Stateful
static guint delete_mod;
static guint snap_mod;
static Gtk::Window* current_window;
static std::string user_keybindings_path;
static bool can_save_keybindings;
static std::string _current_binding_name;
static gint _snooper (GtkWidget*, GdkEventKey*, gpointer);
gint snooper (GtkWidget*, GdkEventKey*);

View File

@ -3,6 +3,7 @@
#include <ardour/profile.h>
#include <gtkmm/stock.h>
#include <gtkmm/label.h>
#include <gtkmm/accelkey.h>
#include <gtkmm/accelmap.h>
#include <gtkmm/uimanager.h>
@ -50,17 +51,23 @@ KeyEditor::KeyEditor ()
scroller.add (view);
scroller.set_policy (Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC);
unbind_box.pack_start (unbind_button, false, false);
unbind_button.signal_clicked().connect (mem_fun (*this, &KeyEditor::unbind));
get_vbox()->set_spacing (6);
get_vbox()->pack_start (scroller);
if (!ARDOUR::Profile->get_sae()) {
Label* hint = manage (new Label (_("Select an action, then press the key(s) to (re)set its shortcut")));
hint->show ();
unbind_box.set_spacing (6);
unbind_box.pack_start (*hint, false, true);
unbind_box.pack_start (unbind_button, false, false);
unbind_button.signal_clicked().connect (mem_fun (*this, &KeyEditor::unbind));
get_vbox()->pack_start (unbind_box, false, false);
unbind_box.show ();
unbind_button.show ();
}
get_vbox()->set_border_width (12);
@ -248,9 +255,16 @@ KeyEditor::populate ()
#ifdef GTKOSX
string label = (*k);
replace_all (label, "<Mod5>", _("Command-"));
/* Gtk/Quartz maps:
NSAlternate/NSOption key to Mod1
NSCommand key to Meta
*/
replace_all (label, "<Meta>", _("Command-"));
replace_all (label, "<Alt>", _("Option-"));
replace_all (label, "<Shift>", _("Shift-"));
replace_all (label, "<Control>", _("Control-"));
row[columns.binding] = label;
#else
row[columns.binding] = (*k);

View File

@ -222,7 +222,7 @@ LocationEditRow::set_location (Location *loc)
name_label.set_size_request (80, -1);
if (!name_label.get_parent()) {
item_table.attach (name_label, 1, 2, 0, 1, FILL, Gtk::FILL, 4, 0);
item_table.attach (name_label, 1, 2, 0, 1, FILL, FILL, 4, 0);
}
name_label.show();
@ -240,10 +240,10 @@ LocationEditRow::set_location (Location *loc)
name_entry.show();
if (!cd_check_button.get_parent()) {
item_table.attach (cd_check_button, 5, 6, 0, 1, FILL, Gtk::FILL, 4, 0);
item_table.attach (cd_check_button, 5, 6, 0, 1, FILL, FILL, 4, 0);
}
if (!remove_button.get_parent()) {
item_table.attach (remove_button, 7, 8, 0, 1, FILL, Gtk::FILL, 4, 0);
item_table.attach (remove_button, 7, 8, 0, 1, FILL, FILL, 4, 0);
}
/* XXX i can't find a way to hide the button without messing up
@ -267,7 +267,7 @@ LocationEditRow::set_location (Location *loc)
}
start_clock.set (location->start(), true);
if (!location->is_mark()) {
if (!end_hbox.get_parent()) {
@ -421,9 +421,9 @@ LocationEditRow::cd_toggled ()
return;
}
if (cd_check_button.get_active() == location->is_cd_marker()) {
return;
}
//if (cd_check_button.get_active() == location->is_cd_marker()) {
// return;
//}
if (cd_check_button.get_active()) {
if (location->start() <= session->current_start_frame()) {
@ -793,10 +793,12 @@ LocationUI::map_locations (Locations::LocationList& locations)
else if (location->is_auto_punch()) {
punch_edit_row.set_session (session);
punch_edit_row.set_location (location);
punch_edit_row.show_all();
}
else if (location->is_auto_loop()) {
loop_edit_row.set_session (session);
loop_edit_row.set_location (location);
loop_edit_row.show_all();
}
else {
erow = manage (new LocationEditRow(session, location));

View File

@ -156,7 +156,27 @@ fixup_bundle_environment ()
path += "/../Plugins";
setenv ("LADSPA_PATH", path.c_str(), 1);
cstr = getenv ("VAMP_PATH");
if (cstr) {
path = cstr;
path += ':';
}
path = dir_path;
path += "/../Frameworks";
setenv ("VAMP_PATH", path.c_str(), 1);
cstr = getenv ("ARDOUR_CONTROL_SURFACE_PATH");
if (cstr) {
path = cstr;
path += ':';
}
path = dir_path;
path += "/../Surfaces";
setenv ("ARDOUR_CONTROL_SURFACE_PATH", path.c_str(), 1);
cstr = getenv ("LV2_PATH");
if (cstr) {
path = cstr;
@ -225,63 +245,6 @@ fixup_bundle_environment ()
#endif
static void
setup_keybindings (ARDOUR_UI* ui)
{
Glib::ustring path;
if (keybindings_path.empty()) {
keybindings_path = "ardour";
}
std::string kbpath;
if (keybindings_path.find (".bindings") == string::npos) {
// just a style name - allow user to
// specify the layout type.
char* layout;
if ((layout = getenv ("ARDOUR_KEYBOARD_LAYOUT")) != 0) {
keybindings_path += '-';
keybindings_path += layout;
}
keybindings_path += ".bindings";
}
// XXX timbyr - we need a portable test for "is-absolute" here
if (keybindings_path[0] != '/' && keybindings_path[0] != '.') {
/* not absolute - look in the usual places */
sys::path key_bindings_file;
find_file_in_search_path (ardour_search_path() + system_config_search_path(),
keybindings_path, key_bindings_file);
path = key_bindings_file.to_string();
if (path.empty()) {
warning << string_compose (_("Key bindings file \"%1\" not found. Default bindings used instead"),
keybindings_path) << endmsg;
}
} else {
// absolute path from user - use it as is
path = keybindings_path;
}
if (!path.empty()) {
ui->set_keybindings_path (path);
}
}
#ifdef VST_SUPPORT
/* this is called from the entry point of a wine-compiled
executable that is linked against gtk2_ardour built
@ -363,8 +326,6 @@ int main (int argc, char *argv[])
exit (1);
}
setup_keybindings (ui);
ui->run (text_receiver);
ui = 0;

View File

@ -86,6 +86,7 @@ MixerStrip::MixerStrip (Mixer_UI& mx, Session& sess, boost::shared_ptr<Route> rt
: AxisView(sess),
RouteUI (rt, sess, _("Mute"), _("Solo"), _("Record")),
_mixer(mx),
_mixer_owned (in_mixer),
pre_processor_box (PreFader, sess, rt, mx.plugin_selector(), mx.selection(), in_mixer),
post_processor_box (PostFader, sess, rt, mx.plugin_selector(), mx.selection(), in_mixer),
gpm (_route, sess),
@ -720,10 +721,6 @@ MixerStrip::update_diskstream_display ()
{
if (is_track()) {
map_frozen ();
update_input_display ();
if (input_selector) {
input_selector->hide_all ();
}
@ -732,9 +729,6 @@ MixerStrip::update_diskstream_display ()
} else {
map_frozen ();
update_input_display ();
show_passthru_color ();
}
}
@ -1208,6 +1202,7 @@ MixerStrip::map_frozen ()
pre_processor_box.set_sensitive (true);
post_processor_box.set_sensitive (true);
speed_spinner.set_sensitive (true);
// XXX need some way, maybe, to retoggle redirect editors
break;
}
}

View File

@ -107,6 +107,7 @@ class MixerStrip : public RouteUI, public Gtk::EventBox
bool _embedded;
bool _packed;
bool _mixer_owned;
Width _width;
void* _width_owner;

View File

@ -62,7 +62,7 @@ Mixer_UI::Mixer_UI ()
: Window (Gtk::WINDOW_TOPLEVEL)
{
session = 0;
Config->get_default_narrow_ms() ? _strip_width = Narrow : _strip_width = Wide;
_strip_width = Config->get_default_narrow_ms() ? Narrow : Wide;
track_menu = 0;
mix_group_context_menu = 0;
no_track_list_redisplay = false;
@ -200,10 +200,6 @@ Mixer_UI::Mixer_UI ()
list_hpane.signal_size_allocate().connect (bind (mem_fun(*this, &Mixer_UI::pane_allocation_handler),
static_cast<Gtk::Paned*> (&list_hpane)));
rhs_pane1.set_data ("collapse-direction", (gpointer) 0);
list_hpane.set_data ("collapse-direction", (gpointer) 1);
global_vpacker.pack_start (list_hpane, true, true);
add (global_vpacker);

View File

@ -26,9 +26,7 @@
(gtk_accel_path "<Actions>/Transport/record-roll" "<%TERTIARY%>space")
(gtk_accel_path "<Actions>/Editor/set-fade-in-length" "slash")
(gtk_accel_path "<Actions>/Editor/set-fade-in-length" "<%SECONDARY%>slash")
(gtk_accel_path "<Actions>/Editor/set-fade-out-length" "backslash")
(gtk_accel_path "<Actions>/Editor/set-fade-out-length" "<%SECONDARY%>backslash")
(gtk_accel_path "<Actions>/Editor/trim-from-start" "<%TERTIARY%>braceleft")
(gtk_accel_path "<Actions>/Editor/trim-to-end" "<%TERTIARY%>braceright")
@ -81,6 +79,7 @@
(gtk_accel_path "<Actions>/Editor/duplicate-region" "d")
(gtk_accel_path "<Actions>/Editor/select-all-in-punch-range" "<%PRIMARY%>d")
(gtk_accel_path "<Actions>/Editor/toggle-follow-playhead" "f")
(gtk_accel_path "<Actions>/Editor/toggle-rhythm-ferret" "<%WINDOW%>f")
(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-gain" "g")
(gtk_accel_path "<Actions>/Editor/play-selected-regions" "h")
(gtk_accel_path "<Actions>/Editor/trim-front" "j")
@ -117,13 +116,15 @@
(gtk_accel_path "<Actions>/Transport/TransitionToReverse" "<%PRIMARY%>downarrow")
(gtk_accel_path "<Actions>/Editor/select-next-route" "<%SECONDARY%>downarrow")
(gtk_accel_path "<Actions>/Editor/scroll-backward" "leftarrow")
(gtk_accel_path "<Actions>/Transport/Rewind" "<%PRIMARY%>leftarrow")
(gtk_accel_path "<Actions>/Editor/scroll-playhead-backward" "<%TERTIARY%>leftarrow")
(gtk_accel_path "<Actions>/Editor/playhead-to-previous-region-boundary" "leftarrow")
(gtk_accel_path "<Actions>/Editor/tab-to-transient-backwards" "<%PRIMARY%>leftarrow")
(gtk_accel_path "<Actions>/Editor/nudge-playhead-backward" "<%SECONDARY%>leftarrow")
(gtk_accel_path "<Actions>/Editor/selected-marker-to-previous-region-boundary" "<%PRIMARY%><%TERTIARY%>leftarrow")
(gtk_accel_path "<Actions>/Editor/scroll-forward" "rightarrow")
(gtk_accel_path "<Actions>/Transport/Forward" "<%PRIMARY%>rightarrow")
(gtk_accel_path "<Actions>/Editor/scroll-playhead-forward" "<%TERTIARY%>rightarrow")
(gtk_accel_path "<Actions>/Editor/playhead-to-next-region-boundary" "rightarrow")
(gtk_accel_path "<Actions>/Editor/tab-to-transient-forwards" "<%PRIMARY%>rightarrow")
(gtk_accel_path "<Actions>/Editor/nudge-playhead-forward" "<%SECONDARY%>rightarrow")
(gtk_accel_path "<Actions>/Editor/selected-marker-to-next-region-boundary" "<%PRIMARY%><%TERTIARY%>rightarrow")
(gtk_accel_path "<Actions>/Editor/scroll-tracks-down" "Page_Down")
(gtk_accel_path "<Actions>/Editor/scroll-tracks-up" "Page_Up")
@ -182,12 +183,9 @@
(gtk_accel_path "<Actions>/Editor/cycle-snap-choice" "3")
(gtk_accel_path "<Actions>/Transport/ToggleAutoReturn" "4")
(gtk_accel_path "<Actions>/Transport/ToggleClick" "5")
(gtk_accel_path "<Actions>/Editor/tab-to-transient-forwards" "7")
(gtk_accel_path "<Actions>/Editor/tab-to-transient-backwards" "8")
(gtk_accel_path "<Actions>/Editor/set-tempo-from-region" "9")
(gtk_accel_path "<Actions>/Editor/set-tempo-from-edit-range" "0")
;;
;; unbound actions
;;

View File

@ -952,7 +952,9 @@ NewSessionDialog::reset_template()
void
NewSessionDialog::reset_recent()
{
std::vector<sys::path> session_directories;
/* Shamelessly ripped from ardour_ui.cc */
std::vector<string *> *sessions;
std::vector<string *>::iterator i;
RecentSessionsSorter cmp;
recent_model->clear ();
@ -960,27 +962,24 @@ NewSessionDialog::reset_recent()
ARDOUR::RecentSessions rs;
ARDOUR::read_recent_sessions (rs);
// sort them alphabetically
/* sort them alphabetically */
sort (rs.begin(), rs.end(), cmp);
sessions = new std::vector<std::string*>;
for (ARDOUR::RecentSessions::iterator i = rs.begin(); i != rs.end(); ++i) {
session_directories.push_back ((*i).second);
sessions->push_back (new string ((*i).second));
}
for (vector<sys::path>::const_iterator i = session_directories.begin();
i != session_directories.end(); ++i)
{
std::vector<sys::path> state_file_paths;
for (i = sessions->begin(); i != sessions->end(); ++i) {
std::vector<std::string*>* states;
const string fullpath = (*i).to_string();
// now get available states for this session
get_state_files_in_directory (*i, state_file_paths);
if (state_file_paths.empty()) {
// no state file?
continue;
std::vector<const gchar*> item;
std::string fullpath = *(*i);
/* remove any trailing / */
if (fullpath[fullpath.length()-1] == '/') {
fullpath = fullpath.substr (0, fullpath.length()-1);
}
/* check whether session still exists */
@ -992,8 +991,8 @@ NewSessionDialog::reset_recent()
/* now get available states for this session */
if ((states = ARDOUR::Session::possible_states (fullpath)) == 0) {
/* no state file? */
continue;
/* no state file? */
continue;
}
Gtk::TreeModel::Row row = *(recent_model->append());
@ -1015,7 +1014,10 @@ NewSessionDialog::reset_recent()
delete *i2;
}
}
delete states;
}
delete sessions;
}
void

View File

@ -19,6 +19,7 @@
#include <pbd/whitespace.h>
#include <ardour/ardour.h>
#include <ardour/session.h>
#include <ardour/audioengine.h>
#include <ardour/configuration.h>
@ -100,7 +101,7 @@ OptionEditor::OptionEditor (ARDOUR_UI& uip, PublicEditor& ed, Mixer_UI& mixui)
/* kbd/mouse */
keyboard_mouse_table (3, 4),
keyboard_mouse_table (4, 4),
delete_button_adjustment (3, 1, 5),
delete_button_spin (delete_button_adjustment),
edit_button_adjustment (3, 1, 5),
@ -1082,14 +1083,14 @@ static const struct {
#ifdef GTKOSX
/* Command = Mod1
Option/Alt = Mod5
/* Command = Meta
Option/Alt = Mod1
*/
{ "Shift", GDK_SHIFT_MASK },
{ "Command", GDK_MOD1_MASK },
{ "Command", GDK_META_MASK },
{ "Control", GDK_CONTROL_MASK },
{ "Option", GDK_MOD5_MASK },
{ "Option", GDK_MOD1_MASK },
{ "Command-Shift", GDK_MOD1_MASK|GDK_SHIFT_MASK },
{ "Command-Option", GDK_MOD1_MASK|GDK_MOD5_MASK },
{ "Shift-Option", GDK_SHIFT_MASK|GDK_MOD5_MASK },
@ -1197,6 +1198,39 @@ OptionEditor::setup_keyboard_options ()
keyboard_mouse_table.attach (*label, 0, 1, 2, 3, Gtk::FILL|Gtk::EXPAND, FILL);
keyboard_mouse_table.attach (snap_modifier_combo, 1, 2, 2, 3, Gtk::FILL|Gtk::EXPAND, FILL);
vector<string> strs;
for (std::map<std::string,std::string>::iterator bf = Keyboard::binding_files.begin(); bf != Keyboard::binding_files.end(); ++bf) {
strs.push_back (bf->first);
}
set_popdown_strings (keyboard_layout_selector, strs);
keyboard_layout_selector.set_active_text (Keyboard::current_binding_name());
keyboard_layout_selector.signal_changed().connect (mem_fun (*this, &OptionEditor::bindings_changed));
label = manage (new Label (_("Keyboard layout")));
label->set_name ("OptionsLabel");
label->set_alignment (1.0, 0.5);
keyboard_mouse_table.attach (*label, 0, 1, 3, 4, Gtk::FILL|Gtk::EXPAND, FILL);
keyboard_mouse_table.attach (keyboard_layout_selector, 1, 2, 3, 4, Gtk::FILL|Gtk::EXPAND, FILL);
}
void
OptionEditor::bindings_changed ()
{
string txt;
txt = keyboard_layout_selector.get_active_text();
for (std::map<string,string>::iterator i = Keyboard::binding_files.begin(); i != Keyboard::binding_files.end(); ++i) {
if (txt == i->first) {
if (Keyboard::load_keybindings (i->second)) {
Keyboard::save_keybindings ();
}
}
}
}
void

View File

@ -1,3 +1,6 @@
#ifndef __gtk_ardour_option_editor_h__
#define __gtk_ardour_option_editor_h__
/*
Copyright (C) 2001 Paul Davis
@ -17,8 +20,7 @@
*/
#ifndef __gtk_ardour_option_editor_h__
#define __gtk_ardour_option_editor_h__
#include <vector>
#include <gtkmm/notebook.h>
#include <gtkmm/checkbutton.h>
@ -203,6 +205,7 @@ class OptionEditor : public ArdourDialog
/* keyboard/mouse */
Gtk::Table keyboard_mouse_table;
Gtk::ComboBoxText keyboard_layout_selector;
Gtk::ComboBoxText edit_modifier_combo;
Gtk::ComboBoxText delete_modifier_combo;
Gtk::ComboBoxText snap_modifier_combo;
@ -211,12 +214,15 @@ class OptionEditor : public ArdourDialog
Gtk::Adjustment edit_button_adjustment;
Gtk::SpinButton edit_button_spin;
std::map<std::string,std::string> bindings_files;
void setup_keyboard_options ();
void delete_modifier_chosen ();
void edit_modifier_chosen ();
void snap_modifier_chosen ();
void edit_button_changed ();
void delete_button_changed ();
void bindings_changed ();
void fixup_combo_size (Gtk::ComboBoxText&, std::vector<std::string>& strings);
};

View File

@ -78,7 +78,7 @@ ARDOUR_COMMAND_LINE::parse_opts (int argc, char *argv[])
if (getenv ("ARDOUR_SAE")) {
menus_file = "ardour-sae.menus";
keybindings_path = "ardour-sae";
keybindings_path = "SAE";
}
if (execname == 0) {

View File

@ -62,7 +62,6 @@ using namespace Gtk;
using namespace sigc;
PluginUIWindow::PluginUIWindow (boost::shared_ptr<PluginInsert> insert, nframes64_t sr, nframes64_t period, bool scrollable)
: ArdourDialog ("plugin ui")
{
bool have_gui = false;
non_gtk_gui = false;
@ -77,10 +76,7 @@ PluginUIWindow::PluginUIWindow (boost::shared_ptr<PluginInsert> insert, nframes6
break;
case ARDOUR::AudioUnit:
//have_gui = create_audiounit_editor (insert);
have_gui = true;
get_vbox()->pack_start (*label, false, false);
cerr << "#*#*#*#*#*#*#*#*## PACK " << label << " INTO PLUGIN UI\n";
have_gui = create_audiounit_editor (insert);
break;
case ARDOUR::LADSPA:
@ -105,7 +101,7 @@ PluginUIWindow::PluginUIWindow (boost::shared_ptr<PluginInsert> insert, nframes6
GenericPluginUI* pu = new GenericPluginUI (insert, scrollable);
_pluginui = pu;
get_vbox()->add (*pu);
add (*pu);
set_wmclass (X_("ardour_plugin_editor"), "Ardour");
@ -113,14 +109,13 @@ PluginUIWindow::PluginUIWindow (boost::shared_ptr<PluginInsert> insert, nframes6
signal_unmap_event().connect (mem_fun (*pu, &GenericPluginUI::stop_updating));
}
set_position (Gtk::WIN_POS_MOUSE);
// set_position (Gtk::WIN_POS_MOUSE);
set_name ("PluginEditor");
add_events (Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK);
signal_delete_event().connect (bind (sigc::ptr_fun (just_hide_it), reinterpret_cast<Window*> (this)), false);
insert->GoingAway.connect (mem_fun(*this, &PluginUIWindow::plugin_going_away));
#if 0
gint h = _pluginui->get_preferred_height ();
gint w = _pluginui->get_preferred_width ();
@ -134,7 +129,6 @@ PluginUIWindow::PluginUIWindow (boost::shared_ptr<PluginInsert> insert, nframes6
}
set_default_size (w, h);
#endif
}
PluginUIWindow::~PluginUIWindow ()
@ -146,23 +140,14 @@ PluginUIWindow::on_show ()
{
cerr << "PluginWindow shown\n";
ArdourDialog::on_show ();
Glib::ListHandle<Widget*> kids (get_vbox()->get_children());
cerr << "send show to " << kids.size() << " children of this plugin UI\n";
for (Glib::ListHandle<Widget*>::iterator x = kids.begin(); x != kids.end(); ++x) {
cerr << "\tSend show to " << (*x) << endl;
(*x)->show ();
}
cerr << "!! send done\n";
Window::on_show ();
}
void
PluginUIWindow::on_hide ()
{
cerr << "PluginWindow hidden\n";
ArdourDialog::on_hide ();
Window::on_hide ();
}
bool
@ -182,7 +167,7 @@ PluginUIWindow::create_vst_editor(boost::shared_ptr<PluginInsert> insert)
VSTPluginUI* vpu = new VSTPluginUI (insert, vp);
_pluginui = vpu;
get_vbox()->add (*vpu);
add (*vpu);
vpu->package (*this);
}
@ -199,8 +184,7 @@ PluginUIWindow::create_audiounit_editor (boost::shared_ptr<PluginInsert> insert)
#else
VBox* box;
_pluginui = create_au_gui (insert, &box);
cerr << "#*#*#*#*#*#*#*#*## PACK " << box << " INTO PLUGIN UI\n";
get_vbox()->add (*box);
add (*box);
non_gtk_gui = true;
extern sigc::signal<void,bool> ApplicationActivationChanged;
@ -214,12 +198,16 @@ void
PluginUIWindow::app_activated (bool yn)
{
#if defined (HAVE_AUDIOUNITS) && defined(GTKOSX)
if (yn) {
if (_pluginui) {
_pluginui->activate ();
}
}
cerr << "APP activated ? " << yn << endl;
if (_pluginui) {
if (yn) {
_pluginui->activate ();
present ();
} else {
hide ();
_pluginui->deactivate ();
}
}
#endif
}
@ -261,28 +249,43 @@ PlugUIBase::PlugUIBase (boost::shared_ptr<PluginInsert> pi)
bypass_button (_("Bypass")),
latency_gui (*pi, pi->session().frame_rate(), pi->session().get_block_size())
{
//combo.set_use_arrows_always(true);
set_popdown_strings (combo, plugin->get_presets());
combo.set_size_request (100, -1);
combo.set_active_text ("");
combo.signal_changed().connect(mem_fun(*this, &PlugUIBase::setting_selected));
//preset_combo.set_use_arrows_always(true);
set_popdown_strings (preset_combo, plugin->get_presets());
preset_combo.set_size_request (100, -1);
preset_combo.set_active_text ("");
preset_combo.signal_changed().connect(mem_fun(*this, &PlugUIBase::setting_selected));
save_button.set_name ("PluginSaveButton");
save_button.signal_clicked().connect(mem_fun(*this, &PlugUIBase::save_plugin_setting));
insert->ActiveChanged.connect (bind(
mem_fun(*this, &PlugUIBase::processor_active_changed),
boost::weak_ptr<Processor>(insert)));
bypass_button.set_active (!pi->active());
bypass_button.set_name ("PluginBypassButton");
bypass_button.signal_toggled().connect (mem_fun(*this, &PlugUIBase::bypass_toggled));
}
void
PlugUIBase::processor_active_changed (boost::weak_ptr<Processor> weak_p)
{
ENSURE_GUI_THREAD(bind (mem_fun(*this, &PlugUIBase::processor_active_changed), weak_p));
boost::shared_ptr<Processor> p (weak_p);
if (p) {
bypass_button.set_active (!p->active());
}
}
void
PlugUIBase::setting_selected()
{
if (combo.get_active_text().length() > 0) {
if (!plugin->load_preset(combo.get_active_text())) {
warning << string_compose(_("Plugin preset %1 not found"), combo.get_active_text()) << endmsg;
if (preset_combo.get_active_text().length() > 0) {
if (!plugin->load_preset(preset_combo.get_active_text())) {
warning << string_compose(_("Plugin preset %1 not found"), preset_combo.get_active_text()) << endmsg;
}
}
}
void
@ -304,8 +307,8 @@ PlugUIBase::save_plugin_setting ()
if (name.length()) {
if(plugin->save_preset(name)){
set_popdown_strings (combo, plugin->get_presets());
combo.set_active_text (name);
set_popdown_strings (preset_combo, plugin->get_presets());
preset_combo.set_active_text (name);
}
}
break;

View File

@ -82,7 +82,7 @@ class PlugUIBase : public virtual sigc::trackable
protected:
boost::shared_ptr<ARDOUR::PluginInsert> insert;
boost::shared_ptr<ARDOUR::Plugin> plugin;
Gtk::ComboBoxText combo;
Gtk::ComboBoxText preset_combo;
Gtk::Button save_button;
Gtk::ToggleButton bypass_button;
LatencyGUI latency_gui;
@ -90,6 +90,7 @@ class PlugUIBase : public virtual sigc::trackable
void setting_selected();
void save_plugin_setting (void);
void bypass_toggled();
void processor_active_changed (boost::weak_ptr<ARDOUR::Processor> p);
};
class GenericPluginUI : public PlugUIBase, public Gtk::VBox
@ -200,7 +201,7 @@ class GenericPluginUI : public PlugUIBase, public Gtk::VBox
void print_parameter (char *buf, uint32_t len, uint32_t param);
};
class PluginUIWindow : public ArdourDialog
class PluginUIWindow : public Gtk::Window
{
public:
PluginUIWindow (boost::shared_ptr<ARDOUR::PluginInsert> insert, nframes64_t sample_rate, nframes64_t period_size, bool scrollable = false);
@ -217,6 +218,7 @@ class PluginUIWindow : public ArdourDialog
private:
PlugUIBase* _pluginui;
Gtk::VBox vbox;
bool non_gtk_gui;
void app_activated (bool);
void plugin_going_away ();

View File

@ -400,6 +400,7 @@ ProcessorBox::processor_plugin_chosen (boost::shared_ptr<Plugin> plugin)
weird_plugin_dialog (*plugin, err, _route);
// XXX SHAREDPTR delete plugin here .. do we even need to care?
} else {
processor->set_active(true);
processor->ActiveChanged.connect (bind (mem_fun (*this, &ProcessorBox::show_processor_active), boost::weak_ptr<Processor>(processor)));
}
}
@ -1137,13 +1138,20 @@ ProcessorBox::edit_processor (boost::shared_ptr<Processor> processor)
plugin_ui = reinterpret_cast<AUPluginUI*> (plugin_processor->get_gui());
}
if (plugin_ui->is_visible()) {
plugin_ui->get_window()->raise ();
} else {
plugin_ui->show_all ();
plugin_ui->present ();
}
#endif
plugin_ui = new PluginUIWindow (plugin_insert);
// plugin_ui->set_keep_above (true);
WindowTitle title(Glib::get_application_name());
title += generate_redirect_title (plugin_insert);
plugin_ui->set_title (title.get_string());
plugin_insert->set_gui (plugin_ui);
// change window title when route name is changed
_route->name_changed.connect (bind (mem_fun(*this, &RedirectBox::route_name_changed), plugin_ui, boost::weak_ptr<PluginInsert> (plugin_insert)));
#endif
} else {
warning << "Unsupported plugin sent to ProcessorBox::edit_processor()" << endmsg;
return;

View File

@ -254,7 +254,8 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulThingWithGoingAway
virtual void restore_editing_space () = 0;
virtual nframes64_t get_preferred_edit_position (bool ignore_playhead = false) = 0;
virtual void toggle_meter_updating() = 0;
virtual void split_region_at_points (boost::shared_ptr<ARDOUR::Region>, ARDOUR::AnalysisFeatureList&) = 0;
virtual void split_region_at_points (boost::shared_ptr<ARDOUR::Region>, ARDOUR::AnalysisFeatureList&, bool can_ferret) = 0;
virtual void mouse_add_new_marker (nframes_t where, bool is_cd=false, bool is_xrun=false) = 0;
#ifdef WITH_CMT
virtual void add_imageframe_time_axis(const std::string & track_name, void*) = 0;

View File

@ -271,7 +271,7 @@ RhythmFerret::do_split_action ()
(*i)->get_time_axis_view().hide_temporary_lines ();
editor.split_region_at_points ((*i)->region(), current_results);
editor.split_region_at_points ((*i)->region(), current_results, false);
/* i is invalid at this point */

View File

@ -79,10 +79,20 @@
using namespace ARDOUR;
using namespace PBD;
using namespace Gtkmm2ext;
using namespace Gtk;
using namespace Editing;
using namespace sigc;
using namespace std;
Glib::RefPtr<Gdk::Pixbuf> RouteTimeAxisView::slider;
int
RouteTimeAxisView::setup_slider_pix ()
{
slider = ::get_icon ("fader_belt_h");
return 0;
}
RouteTimeAxisView::RouteTimeAxisView (PublicEditor& ed, Session& sess, boost::shared_ptr<Route> rt, Canvas& canvas)
: AxisView(sess),
@ -96,8 +106,15 @@ RouteTimeAxisView::RouteTimeAxisView (PublicEditor& ed, Session& sess, boost::sh
automation_button (_("a")),
visual_button (_("v")),
lm (rt, sess),
underlay_xml_node (0)
underlay_xml_node (0),
gain_slider (0),
gain_adjustment (0.781787, 0.0, 1.0, 0.01, 0.1)
{
if (slider == 0) {
setup_slider_pix ();
}
lm.set_no_show_all();
lm.setup_meters(50);
_has_state = true;
@ -110,6 +127,8 @@ RouteTimeAxisView::RouteTimeAxisView (PublicEditor& ed, Session& sess, boost::sh
destructive_track_mode_item = 0;
normal_track_mode_item = 0;
gain_slider = manage (new HSliderController (slider, &gain_adjustment, *_route->gain_control().get(), false));
ignore_toggle = false;
edit_group_button.set_name ("TrackGroupButton");
@ -151,7 +170,7 @@ RouteTimeAxisView::RouteTimeAxisView (PublicEditor& ed, Session& sess, boost::sh
rec_enable_button->signal_button_press_event().connect (mem_fun(*this, &RouteUI::rec_enable_press), false);
rec_enable_button->signal_button_release_event().connect (mem_fun(*this, &RouteUI::rec_enable_release));
controls_table.attach (*rec_enable_button, 4, 5, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND, 0, 0);
controls_table.attach (*rec_enable_button, 5, 6, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND, 0, 0);
ARDOUR_UI::instance()->tooltips().set_tip(*rec_enable_button, _("Record"));
}
@ -161,10 +180,11 @@ RouteTimeAxisView::RouteTimeAxisView (PublicEditor& ed, Session& sess, boost::sh
_route->input_changed.connect (mem_fun(*this, &RouteTimeAxisView::io_changed));
_route->output_changed.connect (mem_fun(*this, &RouteTimeAxisView::io_changed));
controls_table.attach (*mute_button, 5, 6, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND, 0, 0);
controls_table.attach (*solo_button, 6, 7, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND, 0, 0);
controls_table.attach (*mute_button, 6, 7, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND, 0, 0);
controls_table.attach (*solo_button, 7, 8, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND, 0, 0);
controls_table.attach (edit_group_button, 6, 7, 1, 2, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND, 0, 0);
controls_table.attach (edit_group_button, 7, 8, 1, 2, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND, 0, 0);
controls_table.attach (*gain_slider, 0, 5, 1, 2, Gtk::SHRINK, Gtk::SHRINK, 0, 0);
ARDOUR_UI::instance()->tooltips().set_tip(*solo_button,_("Solo"));
ARDOUR_UI::instance()->tooltips().set_tip(*mute_button,_("Mute"));
@ -188,11 +208,11 @@ RouteTimeAxisView::RouteTimeAxisView (PublicEditor& ed, Session& sess, boost::sh
} else {
controls_table.attach (automation_button, 5, 6, 1, 2, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND);
controls_table.attach (automation_button, 6, 7, 1, 2, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND);
}
if (is_track() && track()->mode() == ARDOUR::Normal) {
controls_table.attach (playlist_button, 4, 5, 1, 2, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND);
controls_table.attach (playlist_button, 5, 6, 1, 2, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND);
}
y_position = -1;
@ -218,6 +238,15 @@ RouteTimeAxisView::RouteTimeAxisView (PublicEditor& ed, Session& sess, boost::sh
editor.ZoomChanged.connect (mem_fun(*this, &RouteTimeAxisView::reset_samples_per_unit));
ColorsChanged.connect (mem_fun (*this, &RouteTimeAxisView::color_handler));
gain_slider->signal_button_press_event().connect (mem_fun(*this, &RouteTimeAxisView::start_gain_touch));
gain_slider->signal_button_release_event().connect (mem_fun(*this, &RouteTimeAxisView::end_gain_touch));
gain_slider->set_name ("TrackGainFader");
gain_adjustment.signal_value_changed().connect (mem_fun(*this, &RouteTimeAxisView::gain_adjusted));
_route->gain_control()->Changed.connect (mem_fun(*this, &RouteTimeAxisView::gain_changed));
gain_slider->show_all();
}
RouteTimeAxisView::~RouteTimeAxisView ()
@ -2255,3 +2284,37 @@ RouteTimeAxisView::remove_underlay(StreamView* v)
}
}
}
gint
RouteTimeAxisView::start_gain_touch (GdkEventButton* ev)
{
_route->gain_control()->list()->start_touch ();
return FALSE;
}
gint
RouteTimeAxisView::end_gain_touch (GdkEventButton* ev)
{
_route->gain_control()->list()->stop_touch ();
return FALSE;
}
void
RouteTimeAxisView::gain_adjusted ()
{
_route->set_gain (slider_position_to_gain (gain_adjustment.get_value()), this);
}
void
RouteTimeAxisView::gain_changed ()
{
Gtkmm2ext::UI::instance()->call_slot (mem_fun(*this, &RouteTimeAxisView::effective_gain_display));
}
void
RouteTimeAxisView::effective_gain_display ()
{
gfloat value = gain_to_slider_position (_route->effective_gain());
gain_adjustment.set_value (value);
}

View File

@ -27,8 +27,10 @@
#include <gtkmm/menuitem.h>
#include <gtkmm/radiomenuitem.h>
#include <gtkmm/checkmenuitem.h>
#include <gtkmm/adjustment.h>
#include <gtkmm2ext/selector.h>
#include <gtkmm2ext/slider_controller.h>
#include <list>
#include <ardour/types.h>
@ -132,6 +134,7 @@ public:
void clear_meter ();
void io_changed (ARDOUR::IOChange, void *);
void meter_changed (void *);
void effective_gain_display ();
protected:
friend class StreamView;
@ -307,6 +310,16 @@ protected:
UnderlayList _underlay_streams;
typedef list<RouteTimeAxisView*> UnderlayMirrorList;
UnderlayMirrorList _underlay_mirrors;
Gtkmm2ext::HSliderController *gain_slider;
Gtk::Adjustment gain_adjustment;
static Glib::RefPtr<Gdk::Pixbuf> slider;
static int setup_slider_pix ();
void gain_adjusted();
gint start_gain_touch (GdkEventButton*);
gint end_gain_touch (GdkEventButton*);
void gain_changed ();
};
#endif /* __ardour_route_time_axis_h__ */

View File

@ -5,6 +5,7 @@
#include <ardour/ardour.h>
#include <ardour/filesystem_paths.h>
#include "gui_thread.h"
#include "splash.h"
#include "i18n.h"
@ -36,6 +37,7 @@ Splash::Splash ()
set_keep_above (true);
set_position (WIN_POS_CENTER);
darea.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK);
darea.set_double_buffered (false);
layout = create_pango_layout ("");
string str = "<b>";
@ -50,7 +52,10 @@ Splash::Splash ()
add (darea);
set_default_size (pixbuf->get_width(), pixbuf->get_height());
the_splash = this;
ARDOUR::BootMessage.connect (mem_fun (*this, &Splash::boot_message));
}
void
@ -80,12 +85,17 @@ Splash::expose (GdkEventExpose* ev)
{
RefPtr<Gdk::Window> window = darea.get_window();
/* note: height & width need to be constrained to the pixbuf size
in case a WM provides us with a screwy allocation
*/
window->draw_pixbuf (get_style()->get_bg_gc (STATE_NORMAL), pixbuf,
ev->area.x, ev->area.y,
ev->area.x, ev->area.y,
ev->area.width, ev->area.height,
min ((pixbuf->get_width() - ev->area.x), ev->area.width),
min ((pixbuf->get_height() - ev->area.y), ev->area.height),
Gdk::RGB_DITHER_NONE, 0, 0);
Glib::RefPtr<Gtk::Style> style = darea.get_style();
Glib::RefPtr<Gdk::GC> white = style->get_white_gc();
@ -94,6 +104,12 @@ Splash::expose (GdkEventExpose* ev)
return true;
}
void
Splash::boot_message (std::string msg)
{
message (msg);
}
void
Splash::message (const string& msg)
{
@ -103,5 +119,10 @@ Splash::message (const string& msg)
layout->set_markup (str);
darea.queue_draw ();
get_window()->process_updates (true);
Glib::RefPtr<Gdk::Window> win = darea.get_window();
if (win) {
win->process_updates (true);
gdk_flush ();
}
}

View File

@ -50,6 +50,8 @@ class Splash : public Gtk::Window
Glib::RefPtr<Gdk::Pixbuf> pixbuf;
Gtk::DrawingArea darea;
Glib::RefPtr<Pango::Layout> layout;
void boot_message (std::string);
};
#endif /* __ardour_gtk_splash_h__ */

View File

@ -1,921 +0,0 @@
/* GTK+ Integration for the Mac OS X Menubar.
*
* Copyright (C) 2007 Pioneer Research Center USA, Inc.
* Copyright (C) 2007 Imendio AB
*
* For further information, see:
* http://developer.imendio.com/projects/gtk-macosx/menubar
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; version 2.1
* of the License.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
#include <Carbon/Carbon.h>
#include "ige-mac-menu.h"
/* TODO
*
* - Sync adding/removing/reordering items
* - Create on demand? (can this be done with gtk+? ie fill in menu
items when the menu is opened)
* - Figure out what to do per app/window...
*
*/
#define IGE_QUARTZ_MENU_CREATOR 'IGEC'
#define IGE_QUARTZ_ITEM_WIDGET 'IWID'
static void sync_menu_shell (GtkMenuShell *menu_shell,
MenuRef carbon_menu,
gboolean toplevel,
gboolean debug);
/*
* utility functions
*/
static GtkWidget *
find_menu_label (GtkWidget *widget)
{
GtkWidget *label = NULL;
if (GTK_IS_LABEL (widget))
return widget;
if (GTK_IS_CONTAINER (widget))
{
GList *children;
GList *l;
children = gtk_container_get_children (GTK_CONTAINER (widget));
for (l = children; l; l = l->next)
{
label = find_menu_label (l->data);
if (label)
break;
}
g_list_free (children);
}
return label;
}
static const gchar *
get_menu_label_text (GtkWidget *menu_item,
GtkWidget **label)
{
GtkWidget *my_label;
my_label = find_menu_label (menu_item);
if (label)
*label = my_label;
if (my_label)
return gtk_label_get_text (GTK_LABEL (my_label));
return NULL;
}
static gboolean
accel_find_func (GtkAccelKey *key,
GClosure *closure,
gpointer data)
{
return (GClosure *) data == closure;
}
/*
* CarbonMenu functions
*/
typedef struct
{
MenuRef menu;
} CarbonMenu;
static GQuark carbon_menu_quark = 0;
static CarbonMenu *
carbon_menu_new (void)
{
return g_slice_new0 (CarbonMenu);
}
static void
carbon_menu_free (CarbonMenu *menu)
{
g_slice_free (CarbonMenu, menu);
}
static CarbonMenu *
carbon_menu_get (GtkWidget *widget)
{
return g_object_get_qdata (G_OBJECT (widget), carbon_menu_quark);
}
static void
carbon_menu_connect (GtkWidget *menu,
MenuRef menuRef)
{
CarbonMenu *carbon_menu = carbon_menu_get (menu);
if (!carbon_menu)
{
carbon_menu = carbon_menu_new ();
g_object_set_qdata_full (G_OBJECT (menu), carbon_menu_quark,
carbon_menu,
(GDestroyNotify) carbon_menu_free);
}
carbon_menu->menu = menuRef;
}
/*
* CarbonMenuItem functions
*/
typedef struct
{
MenuRef menu;
MenuItemIndex index;
MenuRef submenu;
GClosure *accel_closure;
} CarbonMenuItem;
static GQuark carbon_menu_item_quark = 0;
static CarbonMenuItem *
carbon_menu_item_new (void)
{
return g_slice_new0 (CarbonMenuItem);
}
static void
carbon_menu_item_free (CarbonMenuItem *menu_item)
{
if (menu_item->accel_closure)
g_closure_unref (menu_item->accel_closure);
g_slice_free (CarbonMenuItem, menu_item);
}
static CarbonMenuItem *
carbon_menu_item_get (GtkWidget *widget)
{
return g_object_get_qdata (G_OBJECT (widget), carbon_menu_item_quark);
}
static void
carbon_menu_item_update_state (CarbonMenuItem *carbon_item,
GtkWidget *widget)
{
gboolean sensitive;
gboolean visible;
UInt32 set_attrs = 0;
UInt32 clear_attrs = 0;
g_object_get (widget,
"sensitive", &sensitive,
"visible", &visible,
NULL);
if (!sensitive)
set_attrs |= kMenuItemAttrDisabled;
else
clear_attrs |= kMenuItemAttrDisabled;
if (!visible)
set_attrs |= kMenuItemAttrHidden;
else
clear_attrs |= kMenuItemAttrHidden;
ChangeMenuItemAttributes (carbon_item->menu, carbon_item->index,
set_attrs, clear_attrs);
}
static void
carbon_menu_item_update_active (CarbonMenuItem *carbon_item,
GtkWidget *widget)
{
gboolean active;
g_object_get (widget,
"active", &active,
NULL);
CheckMenuItem (carbon_item->menu, carbon_item->index,
active);
}
static void
carbon_menu_item_update_submenu (CarbonMenuItem *carbon_item,
GtkWidget *widget)
{
GtkWidget *submenu;
submenu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (widget));
if (submenu)
{
const gchar *label_text;
CFStringRef cfstr = NULL;
label_text = get_menu_label_text (widget, NULL);
if (label_text)
cfstr = CFStringCreateWithCString (NULL, label_text,
kCFStringEncodingUTF8);
CreateNewMenu (0, 0, &carbon_item->submenu);
SetMenuTitleWithCFString (carbon_item->submenu, cfstr);
SetMenuItemHierarchicalMenu (carbon_item->menu, carbon_item->index,
carbon_item->submenu);
sync_menu_shell (GTK_MENU_SHELL (submenu), carbon_item->submenu, FALSE, FALSE);
if (cfstr)
CFRelease (cfstr);
}
else
{
SetMenuItemHierarchicalMenu (carbon_item->menu, carbon_item->index,
NULL);
carbon_item->submenu = NULL;
}
}
static void
carbon_menu_item_update_label (CarbonMenuItem *carbon_item,
GtkWidget *widget)
{
const gchar *label_text;
CFStringRef cfstr = NULL;
label_text = get_menu_label_text (widget, NULL);
if (label_text)
cfstr = CFStringCreateWithCString (NULL, label_text,
kCFStringEncodingUTF8);
SetMenuItemTextWithCFString (carbon_item->menu, carbon_item->index,
cfstr);
if (cfstr)
CFRelease (cfstr);
}
static void
carbon_menu_item_update_accelerator (CarbonMenuItem *carbon_item,
GtkWidget *widget)
{
GtkWidget *label;
get_menu_label_text (widget, &label);
if (GTK_IS_ACCEL_LABEL (label) &&
GTK_ACCEL_LABEL (label)->accel_closure)
{
GtkAccelKey *key;
key = gtk_accel_group_find (GTK_ACCEL_LABEL (label)->accel_group,
accel_find_func,
GTK_ACCEL_LABEL (label)->accel_closure);
if (key &&
key->accel_key &&
key->accel_flags & GTK_ACCEL_VISIBLE)
{
GdkDisplay *display = gtk_widget_get_display (widget);
GdkKeymap *keymap = gdk_keymap_get_for_display (display);
GdkKeymapKey *keys;
gint n_keys;
gint use_command;
if (gdk_keymap_get_entries_for_keyval (keymap, key->accel_key,
&keys, &n_keys))
{
UInt8 modifiers = 0; /* implies Command key */
SetMenuItemCommandKey (carbon_item->menu, carbon_item->index,
true, keys[0].keycode);
g_free (keys);
use_command = 0;
if (key->accel_mods)
{
if (key->accel_mods & GDK_SHIFT_MASK) {
modifiers |= kMenuShiftModifier;
}
if (key->accel_mods & (GDK_MOD1_MASK)) {
modifiers |= kMenuOptionModifier;
}
if (key->accel_mods & GDK_CONTROL_MASK) {
modifiers |= kMenuControlModifier;
}
if (key->accel_mods & GDK_MOD5_MASK) {
/* Mod5 is what ardour's binding file uses to mean "Command"
Nothing needs to be set in modifiers, but we need to notice
that there *is* an implicit modifier
*/
use_command = 1;
}
}
if (!use_command)
modifiers |= kMenuNoCommandModifier;
SetMenuItemModifiers (carbon_item->menu, carbon_item->index,
modifiers);
return;
}
}
}
/* otherwise, clear the menu shortcut */
SetMenuItemModifiers (carbon_item->menu, carbon_item->index,
kMenuNoModifiers | kMenuNoCommandModifier);
ChangeMenuItemAttributes (carbon_item->menu, carbon_item->index,
0, kMenuItemAttrUseVirtualKey);
SetMenuItemCommandKey (carbon_item->menu, carbon_item->index,
false, 0);
}
static void
carbon_menu_item_accel_changed (GtkAccelGroup *accel_group,
guint keyval,
GdkModifierType modifier,
GClosure *accel_closure,
GtkWidget *widget)
{
CarbonMenuItem *carbon_item = carbon_menu_item_get (widget);
GtkWidget *label;
get_menu_label_text (widget, &label);
if (GTK_IS_ACCEL_LABEL (label) &&
GTK_ACCEL_LABEL (label)->accel_closure == accel_closure)
carbon_menu_item_update_accelerator (carbon_item, widget);
}
static void
carbon_menu_item_update_accel_closure (CarbonMenuItem *carbon_item,
GtkWidget *widget)
{
GtkAccelGroup *group;
GtkWidget *label;
get_menu_label_text (widget, &label);
if (carbon_item->accel_closure)
{
group = gtk_accel_group_from_accel_closure (carbon_item->accel_closure);
g_signal_handlers_disconnect_by_func (group,
carbon_menu_item_accel_changed,
widget);
g_closure_unref (carbon_item->accel_closure);
carbon_item->accel_closure = NULL;
}
if (GTK_IS_ACCEL_LABEL (label))
carbon_item->accel_closure = GTK_ACCEL_LABEL (label)->accel_closure;
if (carbon_item->accel_closure)
{
g_closure_ref (carbon_item->accel_closure);
group = gtk_accel_group_from_accel_closure (carbon_item->accel_closure);
g_signal_connect_object (group, "accel-changed",
G_CALLBACK (carbon_menu_item_accel_changed),
widget, 0);
}
carbon_menu_item_update_accelerator (carbon_item, widget);
}
static void
carbon_menu_item_notify (GObject *object,
GParamSpec *pspec,
CarbonMenuItem *carbon_item)
{
if (!strcmp (pspec->name, "sensitive") ||
!strcmp (pspec->name, "visible"))
{
carbon_menu_item_update_state (carbon_item, GTK_WIDGET (object));
}
else if (!strcmp (pspec->name, "active"))
{
carbon_menu_item_update_active (carbon_item, GTK_WIDGET (object));
}
else if (!strcmp (pspec->name, "submenu"))
{
carbon_menu_item_update_submenu (carbon_item, GTK_WIDGET (object));
}
}
static void
carbon_menu_item_notify_label (GObject *object,
GParamSpec *pspec,
gpointer data)
{
CarbonMenuItem *carbon_item = carbon_menu_item_get (GTK_WIDGET (object));
if (!strcmp (pspec->name, "label"))
{
carbon_menu_item_update_label (carbon_item,
GTK_WIDGET (object));
}
else if (!strcmp (pspec->name, "accel-closure"))
{
carbon_menu_item_update_accel_closure (carbon_item,
GTK_WIDGET (object));
}
}
static CarbonMenuItem *
carbon_menu_item_connect (GtkWidget *menu_item,
GtkWidget *label,
MenuRef menu,
MenuItemIndex index)
{
CarbonMenuItem *carbon_item = carbon_menu_item_get (menu_item);
if (!carbon_item)
{
carbon_item = carbon_menu_item_new ();
g_object_set_qdata_full (G_OBJECT (menu_item), carbon_menu_item_quark,
carbon_item,
(GDestroyNotify) carbon_menu_item_free);
g_signal_connect (menu_item, "notify",
G_CALLBACK (carbon_menu_item_notify),
carbon_item);
if (label)
g_signal_connect_swapped (label, "notify::label",
G_CALLBACK (carbon_menu_item_notify_label),
menu_item);
}
carbon_item->menu = menu;
carbon_item->index = index;
return carbon_item;
}
/*
* carbon event handler
*/
static OSStatus
menu_event_handler_func (EventHandlerCallRef event_handler_call_ref,
EventRef event_ref,
void *data)
{
UInt32 event_class = GetEventClass (event_ref);
UInt32 event_kind = GetEventKind (event_ref);
MenuRef menu_ref;
switch (event_class)
{
case kEventClassCommand:
/* This is called when activating (is that the right GTK+ term?)
* a menu item.
*/
if (event_kind == kEventCommandProcess)
{
HICommand command;
OSStatus err;
/*g_printerr ("Menu: kEventClassCommand/kEventCommandProcess\n");*/
err = GetEventParameter (event_ref, kEventParamDirectObject,
typeHICommand, 0,
sizeof (command), 0, &command);
if (err == noErr)
{
GtkWidget *widget = NULL;
/* Get any GtkWidget associated with the item. */
err = GetMenuItemProperty (command.menu.menuRef,
command.menu.menuItemIndex,
IGE_QUARTZ_MENU_CREATOR,
IGE_QUARTZ_ITEM_WIDGET,
sizeof (widget), 0, &widget);
if (err == noErr && GTK_IS_WIDGET (widget))
{
gtk_menu_item_activate (GTK_MENU_ITEM (widget));
return noErr;
}
}
}
break;
case kEventClassMenu:
GetEventParameter (event_ref,
kEventParamDirectObject,
typeMenuRef,
NULL,
sizeof (menu_ref),
NULL,
&menu_ref);
switch (event_kind)
{
case kEventMenuTargetItem:
/* This is called when an item is selected (what is the
* GTK+ term? prelight?)
*/
/*g_printerr ("kEventClassMenu/kEventMenuTargetItem\n");*/
break;
case kEventMenuOpening:
/* Is it possible to dynamically build the menu here? We
* can at least set visibility/sensitivity.
*/
/*g_printerr ("kEventClassMenu/kEventMenuOpening\n");*/
break;
case kEventMenuClosed:
/*g_printerr ("kEventClassMenu/kEventMenuClosed\n");*/
break;
default:
break;
}
break;
default:
break;
}
return CallNextEventHandler (event_handler_call_ref, event_ref);
}
static void
setup_menu_event_handler (void)
{
EventHandlerUPP menu_event_handler_upp;
EventHandlerRef menu_event_handler_ref;
const EventTypeSpec menu_events[] = {
{ kEventClassCommand, kEventCommandProcess },
{ kEventClassMenu, kEventMenuTargetItem },
{ kEventClassMenu, kEventMenuOpening },
{ kEventClassMenu, kEventMenuClosed }
};
/* FIXME: We might have to install one per window? */
menu_event_handler_upp = NewEventHandlerUPP (menu_event_handler_func);
InstallEventHandler (GetApplicationEventTarget (), menu_event_handler_upp,
GetEventTypeCount (menu_events), menu_events, 0,
&menu_event_handler_ref);
#if 0
/* FIXME: Remove the handler with: */
RemoveEventHandler(menu_event_handler_ref);
DisposeEventHandlerUPP(menu_event_handler_upp);
#endif
}
static void
sync_menu_shell (GtkMenuShell *menu_shell,
MenuRef carbon_menu,
gboolean toplevel,
gboolean debug)
{
GList *children;
GList *l;
MenuItemIndex carbon_index = 1;
if (debug)
g_printerr ("%s: syncing shell %p\n", G_STRFUNC, menu_shell);
carbon_menu_connect (GTK_WIDGET (menu_shell), carbon_menu);
children = gtk_container_get_children (GTK_CONTAINER (menu_shell));
for (l = children; l; l = l->next)
{
GtkWidget *menu_item = l->data;
CarbonMenuItem *carbon_item;
if (GTK_IS_TEAROFF_MENU_ITEM (menu_item))
continue;
if (toplevel && g_object_get_data (G_OBJECT (menu_item),
"gtk-empty-menu-item"))
continue;
carbon_item = carbon_menu_item_get (menu_item);
if (debug)
g_printerr ("%s: carbon_item %d for menu_item %d (%s, %s)\n",
G_STRFUNC, carbon_item ? carbon_item->index : -1,
carbon_index, get_menu_label_text (menu_item, NULL),
g_type_name (G_TYPE_FROM_INSTANCE (menu_item)));
if (carbon_item && carbon_item->index != carbon_index)
{
if (debug)
g_printerr ("%s: -> not matching, deleting\n", G_STRFUNC);
DeleteMenuItem (carbon_item->menu, carbon_index);
carbon_item = NULL;
}
if (!carbon_item)
{
GtkWidget *label = NULL;
const gchar *label_text;
CFStringRef cfstr = NULL;
MenuItemAttributes attributes = 0;
if (debug)
g_printerr ("%s: -> creating new\n", G_STRFUNC);
label_text = get_menu_label_text (menu_item, &label);
if (label_text)
cfstr = CFStringCreateWithCString (NULL, label_text,
kCFStringEncodingUTF8);
if (GTK_IS_SEPARATOR_MENU_ITEM (menu_item))
attributes |= kMenuItemAttrSeparator;
if (!GTK_WIDGET_IS_SENSITIVE (menu_item))
attributes |= kMenuItemAttrDisabled;
if (!GTK_WIDGET_VISIBLE (menu_item))
attributes |= kMenuItemAttrHidden;
InsertMenuItemTextWithCFString (carbon_menu, cfstr,
carbon_index - 1,
attributes, 0);
SetMenuItemProperty (carbon_menu, carbon_index,
IGE_QUARTZ_MENU_CREATOR,
IGE_QUARTZ_ITEM_WIDGET,
sizeof (menu_item), &menu_item);
if (cfstr)
CFRelease (cfstr);
carbon_item = carbon_menu_item_connect (menu_item, label,
carbon_menu,
carbon_index);
if (GTK_IS_CHECK_MENU_ITEM (menu_item))
carbon_menu_item_update_active (carbon_item, menu_item);
carbon_menu_item_update_accel_closure (carbon_item, menu_item);
if (gtk_menu_item_get_submenu (GTK_MENU_ITEM (menu_item)))
carbon_menu_item_update_submenu (carbon_item, menu_item);
}
carbon_index++;
}
g_list_free (children);
}
static gulong emission_hook_id = 0;
static gboolean
parent_set_emission_hook (GSignalInvocationHint *ihint,
guint n_param_values,
const GValue *param_values,
gpointer data)
{
GtkWidget *instance = g_value_get_object (param_values);
if (GTK_IS_MENU_ITEM (instance))
{
GtkWidget *previous_parent = g_value_get_object (param_values + 1);
GtkWidget *menu_shell = NULL;
if (GTK_IS_MENU_SHELL (previous_parent))
{
menu_shell = previous_parent;
}
else if (GTK_IS_MENU_SHELL (instance->parent))
{
menu_shell = instance->parent;
}
if (menu_shell)
{
CarbonMenu *carbon_menu = carbon_menu_get (menu_shell);
if (carbon_menu)
{
#if 0
g_printerr ("%s: item %s %p (%s, %s)\n", G_STRFUNC,
previous_parent ? "removed from" : "added to",
menu_shell,
get_menu_label_text (instance, NULL),
g_type_name (G_TYPE_FROM_INSTANCE (instance)));
#endif
sync_menu_shell (GTK_MENU_SHELL (menu_shell),
carbon_menu->menu,
carbon_menu->menu == (MenuRef) data,
FALSE);
}
}
}
return TRUE;
}
static void
parent_set_emission_hook_remove (GtkWidget *widget,
gpointer data)
{
g_signal_remove_emission_hook (g_signal_lookup ("parent-set",
GTK_TYPE_WIDGET),
emission_hook_id);
}
/*
* public functions
*/
void
ige_mac_menu_set_menu_bar (GtkMenuShell *menu_shell)
{
MenuRef carbon_menubar;
g_return_if_fail (GTK_IS_MENU_SHELL (menu_shell));
if (carbon_menu_quark == 0)
carbon_menu_quark = g_quark_from_static_string ("CarbonMenu");
if (carbon_menu_item_quark == 0)
carbon_menu_item_quark = g_quark_from_static_string ("CarbonMenuItem");
CreateNewMenu (0 /*id*/, 0 /*options*/, &carbon_menubar);
SetRootMenu (carbon_menubar);
setup_menu_event_handler ();
emission_hook_id =
g_signal_add_emission_hook (g_signal_lookup ("parent-set",
GTK_TYPE_WIDGET),
0,
parent_set_emission_hook,
carbon_menubar, NULL);
g_signal_connect (menu_shell, "destroy",
G_CALLBACK (parent_set_emission_hook_remove),
NULL);
sync_menu_shell (menu_shell, carbon_menubar, TRUE, FALSE);
}
void
ige_mac_menu_set_quit_menu_item (GtkMenuItem *menu_item)
{
MenuRef appmenu;
MenuItemIndex index;
g_return_if_fail (GTK_IS_MENU_ITEM (menu_item));
if (GetIndMenuItemWithCommandID (NULL, kHICommandQuit, 1,
&appmenu, &index) == noErr)
{
SetMenuItemCommandID (appmenu, index, 0);
SetMenuItemProperty (appmenu, index,
IGE_QUARTZ_MENU_CREATOR,
IGE_QUARTZ_ITEM_WIDGET,
sizeof (menu_item), &menu_item);
gtk_widget_hide (GTK_WIDGET (menu_item));
}
}
struct _IgeMacMenuGroup
{
GList *items;
};
static GList *app_menu_groups = NULL;
IgeMacMenuGroup *
ige_mac_menu_add_app_menu_group (void)
{
IgeMacMenuGroup *group = g_slice_new0 (IgeMacMenuGroup);
app_menu_groups = g_list_append (app_menu_groups, group);
return group;
}
void
ige_mac_menu_add_app_menu_item (IgeMacMenuGroup *group,
GtkMenuItem *menu_item,
const gchar *label)
{
MenuRef appmenu;
GList *list;
gint index = 0;
g_return_if_fail (group != NULL);
g_return_if_fail (GTK_IS_MENU_ITEM (menu_item));
if (GetIndMenuItemWithCommandID (NULL, kHICommandHide, 1,
&appmenu, NULL) != noErr)
{
g_warning ("%s: retrieving app menu failed",
G_STRFUNC);
return;
}
for (list = app_menu_groups; list; list = g_list_next (list))
{
IgeMacMenuGroup *list_group = list->data;
index += g_list_length (list_group->items);
/* adjust index for the separator between groups, but not
* before the first group
*/
if (list_group->items && list->prev)
index++;
if (group == list_group)
{
CFStringRef cfstr;
/* add a separator before adding the first item, but not
* for the first group
*/
if (!group->items && list->prev)
{
InsertMenuItemTextWithCFString (appmenu, NULL, index,
kMenuItemAttrSeparator, 0);
index++;
}
if (!label)
label = get_menu_label_text (GTK_WIDGET (menu_item), NULL);
cfstr = CFStringCreateWithCString (NULL, label,
kCFStringEncodingUTF8);
InsertMenuItemTextWithCFString (appmenu, cfstr, index, 0, 0);
SetMenuItemProperty (appmenu, index + 1,
IGE_QUARTZ_MENU_CREATOR,
IGE_QUARTZ_ITEM_WIDGET,
sizeof (menu_item), &menu_item);
CFRelease (cfstr);
gtk_widget_hide (GTK_WIDGET (menu_item));
group->items = g_list_append (group->items, menu_item);
return;
}
}
if (!list)
g_warning ("%s: app menu group %p does not exist",
G_STRFUNC, group);
}

View File

@ -1,44 +0,0 @@
/* GTK+ Integration for the Mac OS X Menubar.
*
* Copyright (C) 2007 Pioneer Research Center USA, Inc.
* Copyright (C) 2007 Imendio AB
*
* For further information, see:
* http://developer.imendio.com/projects/gtk-macosx/menubar
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; version 2.1
* of the License.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
#ifndef __IGE_MAC_MENU_H__
#define __IGE_MAC_MENU_H__
#include <gtk/gtk.h>
G_BEGIN_DECLS
typedef struct _IgeMacMenuGroup IgeMacMenuGroup;
void ige_mac_menu_set_menu_bar (GtkMenuShell *menu_shell);
void ige_mac_menu_set_quit_menu_item (GtkMenuItem *menu_item);
IgeMacMenuGroup * ige_mac_menu_add_app_menu_group (void);
void ige_mac_menu_add_app_menu_item (IgeMacMenuGroup *group,
GtkMenuItem *menu_item,
const gchar *label);
G_END_DECLS
#endif /* __IGE_MAC_MENU_H__ */

View File

@ -62,7 +62,11 @@ TapeAudioRegionView::TapeAudioRegionView (ArdourCanvas::Group *parent, RouteTime
void
TapeAudioRegionView::init (Gdk::Color& basic_color, bool wfw)
{
AudioRegionView::init(basic_color, wfw);
/* never wait for data: always just create the waves, connect once and then
we'll update whenever we need to.
*/
AudioRegionView::init(basic_color, false);
/* every time the wave data changes and peaks are ready, redraw */

View File

@ -77,7 +77,7 @@ TimeAxisView::TimeAxisView (ARDOUR::Session& sess, PublicEditor& ed, TimeAxisVie
height_style(Small),
y_position(0),
order(0),
controls_table (2, 7)
controls_table (2, 8)
{
if (need_size_info) {
compute_controls_size_info ();
@ -136,7 +136,7 @@ TimeAxisView::TimeAxisView (ARDOUR::Session& sess, PublicEditor& ed, TimeAxisVie
controls_table.set_col_spacings (0);
controls_table.set_homogeneous (true);
controls_table.attach (name_hbox, 0, 4, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND, 3, 0);
controls_table.attach (name_hbox, 0, 5, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND, 3, 0);
controls_table.show_all ();
controls_table.set_no_show_all ();
@ -156,6 +156,7 @@ TimeAxisView::TimeAxisView (ARDOUR::Session& sess, PublicEditor& ed, TimeAxisVie
//controls_frame.add (controls_hbox);
//controls_frame.set_name ("TimeAxisViewControlsBaseUnselected");
//controls_vbox.set_name ("TimeAxisViewControlsBaseUnselected");
//controls_frame.set_shadow_type (Gtk::SHADOW_ETCHED_OUT);
ColorsChanged.connect (mem_fun (*this, &TimeAxisView::color_handler));
@ -364,6 +365,16 @@ TimeAxisView::step_height (bool bigger)
}
}
void
TimeAxisView::set_heights (TrackHeight h)
{
TrackSelection& ts (editor.get_selection().tracks);
for (TrackSelection::iterator i = ts.begin(); i != ts.end(); ++i) {
(*i)->set_height (h);
}
}
void
TimeAxisView::set_height (TrackHeight h)
{
@ -568,7 +579,7 @@ TimeAxisView::set_selected (bool yn)
if (_selected) {
controls_ebox.set_name (controls_base_selected_name);
controls_hbox.set_name (controls_base_selected_name);
controls_vbox.set_name (controls_base_selected_name);
/* propagate any existing selection, if the mode is right */
if (editor.current_mouse_mode() == Editing::MouseRange && !editor.get_selection().time.empty()) {
@ -578,7 +589,7 @@ TimeAxisView::set_selected (bool yn)
} else {
controls_ebox.set_name (controls_base_unselected_name);
controls_hbox.set_name (controls_base_unselected_name);
controls_vbox.set_name (controls_base_unselected_name);
hide_selection ();
/* children will be set for the yn=true case. but when deselecting
@ -601,12 +612,12 @@ TimeAxisView::build_size_menu ()
size_menu->set_name ("ArdourContextMenu");
MenuList& items = size_menu->items();
items.push_back (MenuElem (_("Largest"), bind (mem_fun (*this, &TimeAxisView::set_height), Largest)));
items.push_back (MenuElem (_("Large"), bind (mem_fun (*this, &TimeAxisView::set_height), Large)));
items.push_back (MenuElem (_("Larger"), bind (mem_fun (*this, &TimeAxisView::set_height), Larger)));
items.push_back (MenuElem (_("Normal"), bind (mem_fun (*this, &TimeAxisView::set_height), Normal)));
items.push_back (MenuElem (_("Smaller"), bind (mem_fun (*this, &TimeAxisView::set_height),Smaller)));
items.push_back (MenuElem (_("Small"), bind (mem_fun (*this, &TimeAxisView::set_height), Small)));
items.push_back (MenuElem (_("Largest"), bind (mem_fun (*this, &TimeAxisView::set_heights), Largest)));
items.push_back (MenuElem (_("Large"), bind (mem_fun (*this, &TimeAxisView::set_heights), Large)));
items.push_back (MenuElem (_("Larger"), bind (mem_fun (*this, &TimeAxisView::set_heights), Larger)));
items.push_back (MenuElem (_("Normal"), bind (mem_fun (*this, &TimeAxisView::set_heights), Normal)));
items.push_back (MenuElem (_("Smaller"), bind (mem_fun (*this, &TimeAxisView::set_heights),Smaller)));
items.push_back (MenuElem (_("Small"), bind (mem_fun (*this, &TimeAxisView::set_heights), Small)));
}
void

View File

@ -321,6 +321,7 @@ class TimeAxisView : public virtual AxisView
static void compute_controls_size_info ();
static bool need_size_info;
void set_heights (TrackHeight);
void set_height_pixels (uint32_t h);
void color_handler ();
list<ArdourCanvas::SimpleLine*> temp_lines;

View File

@ -463,41 +463,50 @@ key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev)
it does allow.
*/
int fakekey = GDK_VoidSymbol;
int ret = false;
switch (ev->keyval) {
case GDK_Tab:
ret = gtk_accel_groups_activate(G_OBJECT(win), GDK_nabla, GdkModifierType(ev->state));
break;
// some X and/or GDK implementations do Shift-Tab -> GDK_ISO_Left_Tab
case GDK_ISO_Left_Tab:
ret = gtk_accel_groups_activate(G_OBJECT(win), GDK_nabla, GdkModifierType(ev->state));
fakekey = GDK_nabla;
break;
case GDK_Up:
ret = gtk_accel_groups_activate(G_OBJECT(win), GDK_uparrow, GdkModifierType(ev->state));
fakekey = GDK_uparrow;
break;
case GDK_Down:
ret = gtk_accel_groups_activate(G_OBJECT(win), GDK_downarrow, GdkModifierType(ev->state));
fakekey = GDK_downarrow;
break;
case GDK_Right:
ret = gtk_accel_groups_activate(G_OBJECT(win), GDK_rightarrow, GdkModifierType(ev->state));
fakekey = GDK_rightarrow;
break;
case GDK_Left:
ret = gtk_accel_groups_activate(G_OBJECT(win), GDK_leftarrow, GdkModifierType(ev->state));
fakekey = GDK_leftarrow;
break;
default:
break;
}
if (ret) {
return true;
if (fakekey != GDK_VoidSymbol) {
ret = gtk_accel_groups_activate(G_OBJECT(win), fakekey, GdkModifierType(ev->state));
if (ret) {
return true;
}
#ifdef GTKOSX
int oldval = ev->keyval;
ev->keyval = fakekey;
if (gdk_quartz_possibly_forward ((GdkEvent*) ev)) {
return true;
}
ev->keyval = oldval;
#endif
}
}

View File

@ -38,7 +38,7 @@ VSTPluginUI::VSTPluginUI (boost::shared_ptr<PluginInsert> pi, boost::shared_ptr<
preset_box.pack_end (bypass_button, false, false, 10);
preset_box.pack_end (save_button, false, false);
preset_box.pack_end (combo, false, false);
preset_box.pack_end (preset_combo, false, false);
bypass_button.set_active (!insert->active());