diff --git a/src/App.jsx b/src/App.jsx index 82d4cf8b..024bb8d1 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1076,10 +1076,13 @@ const App = memo(() => { // If user has selected none to export, it makes no sense, so export all instead const enabledSegments = enabledSegmentsRaw.length > 0 ? enabledSegmentsRaw : inverseOrNormalSegments; - const onExportSingleSegmentClick = useCallback((activeSeg) => setDisabledSegmentIds(Object.fromEntries(cutSegments.filter((s) => s.segId !== activeSeg.segId).map((s) => [s.segId, true]))), [cutSegments]); - const onExportSegmentEnabledToggle = useCallback((toggleSeg) => setDisabledSegmentIds((existing) => ({ ...existing, [toggleSeg.segId]: !existing[toggleSeg.segId] })), []); - const onExportSegmentDisableAll = useCallback(() => setDisabledSegmentIds(Object.fromEntries(cutSegments.map((s) => [s.segId, true]))), [cutSegments]); - const onExportSegmentEnableAll = useCallback(() => setDisabledSegmentIds({}), []); + const enableOnlySegment = useCallback((seg) => setDisabledSegmentIds(Object.fromEntries(cutSegments.filter((s) => s.segId !== seg.segId).map((s) => [s.segId, true]))), [cutSegments]); + const toggleSegmentEnabled = useCallback((seg) => setDisabledSegmentIds((existing) => ({ ...existing, [seg.segId]: !existing[seg.segId] })), []); + const disableAllSegments = useCallback(() => setDisabledSegmentIds(Object.fromEntries(cutSegments.map((s) => [s.segId, true]))), [cutSegments]); + const enableAllSegments = useCallback(() => setDisabledSegmentIds({}), []); + + const enableOnlyCurrentSegment = useCallback(() => enableOnlySegment(currentCutSeg), [currentCutSeg, enableOnlySegment]); + const toggleCurrentSegmentEnabled = useCallback(() => toggleSegmentEnabled(currentCutSeg), [currentCutSeg, toggleSegmentEnabled]); const filenamifyOrNot = useCallback((name) => (safeOutputFileName ? filenamify(name) : name).substr(0, maxLabelLength), [safeOutputFileName, maxLabelLength]); @@ -1715,6 +1718,10 @@ const App = memo(() => { toggleCaptureFormat, toggleStripAudio, setStartTimeOffset: askSetStartTimeOffset, + disableAllSegments, + enableAllSegments, + enableOnlyCurrentSegment, + toggleCurrentSegmentEnabled, }; function tryMainActions() { @@ -2310,10 +2317,10 @@ const App = memo(() => { splitCurrentSegment={splitCurrentSegment} enabledSegmentsRaw={enabledSegmentsRaw} enabledSegments={enabledSegments} - onExportSingleSegmentClick={onExportSingleSegmentClick} - onExportSegmentEnabledToggle={onExportSegmentEnabledToggle} - onExportSegmentDisableAll={onExportSegmentDisableAll} - onExportSegmentEnableAll={onExportSegmentEnableAll} + onExportSingleSegmentClick={enableOnlySegment} + onExportSegmentEnabledToggle={toggleSegmentEnabled} + onExportSegmentDisableAll={disableAllSegments} + onExportSegmentEnableAll={enableAllSegments} jumpSegStart={jumpSegStart} jumpSegEnd={jumpSegEnd} onViewSegmentTagsPress={onViewSegmentTagsPress} diff --git a/src/components/KeyboardShortcuts.jsx b/src/components/KeyboardShortcuts.jsx index 88d3f0d9..5f9fc001 100644 --- a/src/components/KeyboardShortcuts.jsx +++ b/src/components/KeyboardShortcuts.jsx @@ -285,6 +285,22 @@ const KeyboardShortcuts = memo(({ name: t('Show sidebar'), category: segmentsAndCutpointsCategory, }, + enableOnlyCurrentSegment: { + name: t('Include ONLY this segment in export'), + category: segmentsAndCutpointsCategory, + }, + disableAllSegments: { + name: t('Exclude all segments from export'), + category: segmentsAndCutpointsCategory, + }, + enableAllSegments: { + name: t('Include all segments in export'), + category: segmentsAndCutpointsCategory, + }, + toggleCurrentSegmentEnabled: { + name: t('Toggle inclusion of this segment in export'), + category: segmentsAndCutpointsCategory, + }, // streamsCategory toggleStreamsSelector: {