use of com.helospark.tactview.core.timeline.ClipChannelPair in project tactview by helospark.
the class TimelineCanvasOnDragOverHandler method copyCurrentClipOnDrag.
private void copyCurrentClipOnDrag(List<String> clipIds, String channelId, TimelinePosition newX) {
TimelineChannel channel = timelineAccessor.findChannelWithId(channelId).get();
int relativeChannelMove = timelineAccessor.findChannelIndexByChannelId(channelId).get() - timelineAccessor.findChannelIndexForClipId(clipIds.get(0)).get();
List<TimelineClip> clips = new ArrayList<>();
List<TimelineClip> allClipsToCopyOriginal = timelineAccessor.resolveClipIdsWithAllLinkedClip(clipIds);
for (var clip : allClipsToCopyOriginal) {
int currentChannelIndex = timelineAccessor.findChannelIndexForClipId(clip.getId()).get();
int newChannelIndex = currentChannelIndex + relativeChannelMove;
if (newChannelIndex < 0 || newChannelIndex >= timelineAccessor.getChannels().size()) {
LOGGER.debug("Cannot copy clip, becase {} would be in non-existent channel {}", clip.getId(), newChannelIndex);
return;
}
}
Map<TimelineClip, TimelineClip> originalToNewClipMap = new HashMap<>();
List<ClipChannelPair> allClonedClips = allClipsToCopyOriginal.stream().filter(a -> !a.getId().equals(clipIds.get(0))).map(a -> {
TimelineClip newClip = a.cloneClip(CloneRequestMetadata.ofDefault());
int currentChannelIndex = timelineAccessor.findChannelIndexForClipId(a.getId()).get();
int newChannelIndex = currentChannelIndex + relativeChannelMove;
TimelineChannel newChannel = timelineAccessor.findChannelOnIndex(newChannelIndex).get();
originalToNewClipMap.put(a, newClip);
return new ClipChannelPair(newClip, newChannel);
}).collect(Collectors.toList());
TimelineClip clip = timelineAccessor.findClipById(clipIds.get(0)).get();
TimelineClip clonedClip = clip.cloneClip(CloneRequestMetadata.ofDefault());
originalToNewClipMap.put(clip, clonedClip);
AddExistingClipRequest request = AddExistingClipRequest.builder().withChannel(channel).withClipToAdd(clonedClip).withPosition(Optional.of(newX)).withAdditionalClipsToAdd(allClonedClips).build();
AddExistingClipsCommand addClipCommand = new AddExistingClipsCommand(request, timelineAccessor);
clips.add(clonedClip);
commandInterpreter.synchronousSend(addClipCommand);
setNewClipDragInformationAfterCopy(channelId, addClipCommand, clips, originalToNewClipMap);
}
Aggregations