dim also deselected files in timeline

pull/1482/head
Mikael Finstad 3 years ago
parent 37db48721b
commit c923d99f17
No known key found for this signature in database
GPG Key ID: 25AB36E3E81CBC26

@ -348,7 +348,7 @@ const App = memo(() => {
}, [isFileOpened]); }, [isFileOpened]);
const { const {
cutSegments, cutSegmentsHistory, createSegmentsFromKeyframes, shuffleSegments, detectBlackScenes, detectSilentScenes, detectSceneChanges, removeCutSegment, invertAllSegments, fillSegmentsGaps, combineOverlappingSegments, shiftAllSegmentTimes, alignSegmentTimesToKeyframes, onViewSegmentTags, updateSegOrder, updateSegOrders, reorderSegsByStartTime, addSegment, setCutStart, setCutEnd, onLabelSegment, splitCurrentSegment, createNumSegments, createFixedDurationSegments, createRandomSegments, apparentCutSegments, haveInvalidSegs, currentSegIndexSafe, currentCutSeg, currentApparentCutSeg, inverseCutSegments, clearSegments, loadCutSegments, selectedSegmentsRaw, setCutTime, getSegApparentEnd, setCurrentSegIndex, onLabelSelectedSegments, deselectAllSegments, selectAllSegments, selectOnlyCurrentSegment, toggleCurrentSegmentSelected, removeSelectedSegments, setDeselectedSegmentIds, onSelectSegmentsByLabel, toggleSegmentSelected, selectOnlySegment, getApparentCutSegmentById, selectedSegments, selectedSegmentsOrInverse, nonFilteredSegmentsOrInverse, cutSegments, cutSegmentsHistory, createSegmentsFromKeyframes, shuffleSegments, detectBlackScenes, detectSilentScenes, detectSceneChanges, removeCutSegment, invertAllSegments, fillSegmentsGaps, combineOverlappingSegments, shiftAllSegmentTimes, alignSegmentTimesToKeyframes, onViewSegmentTags, updateSegOrder, updateSegOrders, reorderSegsByStartTime, addSegment, setCutStart, setCutEnd, onLabelSegment, splitCurrentSegment, createNumSegments, createFixedDurationSegments, createRandomSegments, apparentCutSegments, haveInvalidSegs, currentSegIndexSafe, currentCutSeg, currentApparentCutSeg, inverseCutSegments, clearSegments, loadCutSegments, isSegmentSelected, setCutTime, getSegApparentEnd, setCurrentSegIndex, onLabelSelectedSegments, deselectAllSegments, selectAllSegments, selectOnlyCurrentSegment, toggleCurrentSegmentSelected, removeSelectedSegments, setDeselectedSegmentIds, onSelectSegmentsByLabel, toggleSegmentSelected, selectOnlySegment, getApparentCutSegmentById, selectedSegments, selectedSegmentsOrInverse, nonFilteredSegmentsOrInverse,
} = useSegments({ filePath, workingRef, setWorking, setCutProgress, mainVideoStream, duration, getRelevantTime, maxLabelLength, checkFileOpened, invertCutSegments }); } = useSegments({ filePath, workingRef, setWorking, setCutProgress, mainVideoStream, duration, getRelevantTime, maxLabelLength, checkFileOpened, invertCutSegments });
const jumpSegStart = useCallback((index) => userSeekAbs(apparentCutSegments[index].start), [apparentCutSegments, userSeekAbs]); const jumpSegStart = useCallback((index) => userSeekAbs(apparentCutSegments[index].start), [apparentCutSegments, userSeekAbs]);
@ -2263,7 +2263,7 @@ const App = memo(() => {
onRemoveSelected={removeSelectedSegments} onRemoveSelected={removeSelectedSegments}
toggleSegmentsList={toggleSegmentsList} toggleSegmentsList={toggleSegmentsList}
splitCurrentSegment={splitCurrentSegment} splitCurrentSegment={splitCurrentSegment}
selectedSegmentsRaw={selectedSegmentsRaw} isSegmentSelected={isSegmentSelected}
selectedSegments={selectedSegmentsOrInverse} selectedSegments={selectedSegmentsOrInverse}
onSelectSingleSegment={selectOnlySegment} onSelectSingleSegment={selectOnlySegment}
onToggleSegmentSelected={toggleSegmentSelected} onToggleSegmentSelected={toggleSegmentSelected}
@ -2308,6 +2308,7 @@ const App = memo(() => {
isFileOpened={isFileOpened} isFileOpened={isFileOpened}
onWheel={onTimelineWheel} onWheel={onTimelineWheel}
goToTimecode={goToTimecode} goToTimecode={goToTimecode}
isSegmentSelected={isSegmentSelected}
/> />
<BottomBar <BottomBar

@ -22,7 +22,7 @@ const buttonBaseStyle = {
const neutralButtonColor = 'rgba(255, 255, 255, 0.2)'; const neutralButtonColor = 'rgba(255, 255, 255, 0.2)';
const Segment = memo(({ seg, index, currentSegIndex, formatTimecode, getFrameCount, updateOrder, invertCutSegments, onClick, onRemovePress, onRemoveSelected, onLabelSelectedSegments, onReorderPress, onLabelPress, enabled, onSelectSingleSegment, onToggleSegmentSelected, onDeselectAllSegments, onSelectSegmentsByLabel, onSelectAllSegments, jumpSegStart, jumpSegEnd, addSegment, onViewSegmentTags, onExtractSegmentFramesAsImages }) => { const Segment = memo(({ seg, index, currentSegIndex, formatTimecode, getFrameCount, updateOrder, invertCutSegments, onClick, onRemovePress, onRemoveSelected, onLabelSelectedSegments, onReorderPress, onLabelPress, selected, onSelectSingleSegment, onToggleSegmentSelected, onDeselectAllSegments, onSelectSegmentsByLabel, onSelectAllSegments, jumpSegStart, jumpSegEnd, addSegment, onViewSegmentTags, onExtractSegmentFramesAsImages }) => {
const { t } = useTranslation(); const { t } = useTranslation();
const ref = useRef(); const ref = useRef();
@ -87,7 +87,7 @@ const Segment = memo(({ seg, index, currentSegIndex, formatTimecode, getFrameCou
function onDoubleClick() { function onDoubleClick() {
if (invertCutSegments) return; if (invertCutSegments) return;
if (!enabled) { if (!selected) {
onToggleSegmentSelected(seg); onToggleSegmentSelected(seg);
return; return;
} }
@ -97,7 +97,7 @@ const Segment = memo(({ seg, index, currentSegIndex, formatTimecode, getFrameCou
const durationMsFormatted = Math.floor(durationMs); const durationMsFormatted = Math.floor(durationMs);
const frameCount = getFrameCount(duration); const frameCount = getFrameCount(duration);
const CheckIcon = enabled ? FaRegCheckCircle : FaRegCircle; const CheckIcon = selected ? FaRegCheckCircle : FaRegCircle;
const onToggleSegmentSelectedClick = useCallback((e) => { const onToggleSegmentSelectedClick = useCallback((e) => {
e.stopPropagation(); e.stopPropagation();
@ -115,7 +115,7 @@ const Segment = memo(({ seg, index, currentSegIndex, formatTimecode, getFrameCou
layout layout
style={{ originY: 0, margin: '5px 0', background: 'rgba(0,0,0,0.1)', border: `1px solid rgba(255,255,255,${isActive ? 1 : 0.3})`, padding: 5, borderRadius: 5, position: 'relative' }} style={{ originY: 0, margin: '5px 0', background: 'rgba(0,0,0,0.1)', border: `1px solid rgba(255,255,255,${isActive ? 1 : 0.3})`, padding: 5, borderRadius: 5, position: 'relative' }}
initial={{ scaleY: 0 }} initial={{ scaleY: 0 }}
animate={{ scaleY: 1, opacity: !enabled && !invertCutSegments ? 0.5 : undefined }} animate={{ scaleY: 1, opacity: !selected && !invertCutSegments ? 0.5 : undefined }}
exit={{ scaleY: 0 }} exit={{ scaleY: 0 }}
className="segment-list-entry" className="segment-list-entry"
> >
@ -146,7 +146,7 @@ const SegmentList = memo(({
currentSegIndex, currentSegIndex,
updateSegOrder, updateSegOrders, addSegment, removeCutSegment, onRemoveSelected, updateSegOrder, updateSegOrders, addSegment, removeCutSegment, onRemoveSelected,
onLabelSegment, currentCutSeg, segmentAtCursor, toggleSegmentsList, splitCurrentSegment, onLabelSegment, currentCutSeg, segmentAtCursor, toggleSegmentsList, splitCurrentSegment,
selectedSegments, selectedSegmentsRaw, onSelectSingleSegment, onToggleSegmentSelected, onDeselectAllSegments, onSelectAllSegments, onSelectSegmentsByLabel, onExtractSegmentFramesAsImages, onLabelSelectedSegments, selectedSegments, isSegmentSelected, onSelectSingleSegment, onToggleSegmentSelected, onDeselectAllSegments, onSelectAllSegments, onSelectSegmentsByLabel, onExtractSegmentFramesAsImages, onLabelSelectedSegments,
jumpSegStart, jumpSegEnd, onViewSegmentTags, jumpSegStart, jumpSegEnd, onViewSegmentTags,
}) => { }) => {
const { t } = useTranslation(); const { t } = useTranslation();
@ -278,13 +278,13 @@ const SegmentList = memo(({
<div style={{ padding: '0 10px', overflowY: 'scroll', flexGrow: 1 }} className="hide-scrollbar"> <div style={{ padding: '0 10px', overflowY: 'scroll', flexGrow: 1 }} className="hide-scrollbar">
<ReactSortable list={sortableList} setList={setSortableList} disabled={!!invertCutSegments} handle=".segment-handle"> <ReactSortable list={sortableList} setList={setSortableList} disabled={!!invertCutSegments} handle=".segment-handle">
{sortableList.map(({ id, seg }, index) => { {sortableList.map(({ id, seg }, index) => {
const enabled = !invertCutSegments && selectedSegmentsRaw.includes(seg); const selected = !invertCutSegments && isSegmentSelected({ segId: seg.segId });
return ( return (
<Segment <Segment
key={id} key={id}
seg={seg} seg={seg}
index={index} index={index}
enabled={enabled} selected={selected}
onClick={onSegClick} onClick={onSegClick}
addSegment={addSegment} addSegment={addSegment}
onRemoveSelected={onRemoveSelected} onRemoveSelected={onRemoveSelected}

@ -60,7 +60,7 @@ const Timeline = memo(({
setCurrentSegIndex, currentSegIndexSafe, inverseCutSegments, formatTimecode, setCurrentSegIndex, currentSegIndexSafe, inverseCutSegments, formatTimecode,
waveforms, shouldShowWaveform, shouldShowKeyframes, timelineHeight = 36, thumbnails, waveforms, shouldShowWaveform, shouldShowKeyframes, timelineHeight = 36, thumbnails,
onZoomWindowStartTimeChange, waveformEnabled, thumbnailsEnabled, onZoomWindowStartTimeChange, waveformEnabled, thumbnailsEnabled,
playing, isFileOpened, onWheel, commandedTimeRef, goToTimecode, playing, isFileOpened, onWheel, commandedTimeRef, goToTimecode, isSegmentSelected,
}) => { }) => {
const { t } = useTranslation(); const { t } = useTranslation();
@ -291,6 +291,8 @@ const Timeline = memo(({
if (seg.start === 0 && seg.end === 0) return null; // No video loaded if (seg.start === 0 && seg.end === 0) return null; // No video loaded
const selected = invertCutSegments || isSegmentSelected({ segId: seg.segId });
return ( return (
<TimelineSeg <TimelineSeg
key={seg.segId} key={seg.segId}
@ -304,6 +306,7 @@ const Timeline = memo(({
cutEnd={seg.end} cutEnd={seg.end}
invertCutSegments={invertCutSegments} invertCutSegments={invertCutSegments}
formatTimecode={formatTimecode} formatTimecode={formatTimecode}
selected={selected}
/> />
); );
})} })}

@ -7,7 +7,7 @@ import { mySpring } from './animations';
const TimelineSeg = memo(({ const TimelineSeg = memo(({
duration, cutStart, cutEnd, isActive, segNum, name, duration, cutStart, cutEnd, isActive, segNum, name,
onSegClick, invertCutSegments, segColor, formatTimecode, onSegClick, invertCutSegments, segColor, formatTimecode, selected,
}) => { }) => {
const cutSectionWidth = `${((cutEnd - cutStart) / duration) * 100}%`; const cutSectionWidth = `${((cutEnd - cutStart) / duration) * 100}%`;
@ -16,10 +16,10 @@ const TimelineSeg = memo(({
const markerBorder = useMemo(() => `2px solid ${isActive ? segColor.lighten(0.2).string() : 'transparent'}`, [isActive, segColor]); const markerBorder = useMemo(() => `2px solid ${isActive ? segColor.lighten(0.2).string() : 'transparent'}`, [isActive, segColor]);
const backgroundColor = useMemo(() => { const backgroundColor = useMemo(() => {
if (invertCutSegments) return segColor.alpha(0.4).string(); if (invertCutSegments || !selected) return segColor.alpha(0.4).string();
if (isActive) return segColor.alpha(0.7).string(); if (isActive) return segColor.alpha(0.7).string();
return segColor.alpha(0.6).string(); return segColor.alpha(0.6).string();
}, [invertCutSegments, isActive, segColor]); }, [invertCutSegments, isActive, segColor, selected]);
const markerBorderRadius = 5; const markerBorderRadius = 5;
const wrapperStyle = { const wrapperStyle = {

@ -482,7 +482,7 @@ export default ({
inverseCutSegments, inverseCutSegments,
clearSegments, clearSegments,
loadCutSegments, loadCutSegments,
selectedSegmentsRaw, isSegmentSelected,
selectedSegments, selectedSegments,
selectedSegmentsOrInverse, selectedSegmentsOrInverse,
nonFilteredSegmentsOrInverse, nonFilteredSegmentsOrInverse,

Loading…
Cancel
Save