Search in sources :

Example 16 with TimelineChannel

use of com.helospark.tactview.core.timeline.TimelineChannel in project tactview by helospark.

the class TimelineCanvasClickHandler method onClick.

public boolean onClick(TimelineCanvasClickHandlerRequest request) {
    var optionalElement = request.selectedElement;
    var event = request.event;
    if (optionalElement.isPresent() && event.isStillSincePress() && event.getButton().equals(MouseButton.PRIMARY)) {
        TimelineUiCacheElement element = optionalElement.get();
        selectElementOnClick(event, element);
        if (event.getClickCount() == 2 && optionalElement.get().elementType.equals(TimelineUiCacheType.EFFECT)) {
            String effectId = optionalElement.get().elementId;
            String clipId = timelineAccessor.findClipForEffect(effectId).get().getId();
            StatelessEffect effect = timelineAccessor.findEffectById(effectId).get();
            extendsClipToMaximizeLengthService.extendEffectToClipSize(clipId, effect);
        }
        return true;
    } else if (event.isStillSincePress() && optionalElement.isEmpty()) {
        if (event.getY() > TimelineCanvas.TIMELINE_TIMESCALE_HEIGHT) {
            if (event.getButton().equals(MouseButton.PRIMARY)) {
                selectedNodeRepository.clearAllSelectedItems();
            } else if (event.getButton().equals(MouseButton.SECONDARY)) {
                Optional<TimelineChannel> channel = request.channelSelected;
                if (channel.isPresent()) {
                    TimelinePosition position = request.xPosition;
                    ContextMenu contextMenu = channelContextMenuAppender.createContextMenu(channel.get().getId(), Optional.of(position));
                    contextMenu.show(request.parentWindow, event.getScreenX(), event.getScreenY());
                }
            }
        }
        return false;
    }
    return false;
}
Also used : TimelineChannel(com.helospark.tactview.core.timeline.TimelineChannel) StatelessEffect(com.helospark.tactview.core.timeline.StatelessEffect) ContextMenu(javafx.scene.control.ContextMenu) TimelinePosition(com.helospark.tactview.core.timeline.TimelinePosition) TimelineUiCacheElement(com.helospark.tactview.ui.javafx.uicomponents.canvasdraw.domain.TimelineUiCacheElement)

Example 17 with TimelineChannel

use of com.helospark.tactview.core.timeline.TimelineChannel in project tactview by helospark.

the class TimelineCanvasOnDragOverHandler method onClipDraggedToCanvas.

private void onClipDraggedToCanvas(DragEvent event, Dragboard db, TimelineCanvasOnDragOverHandlerRequest request) {
    Optional<TimelineChannel> optionalChannel = request.channel;
    if (optionalChannel.isPresent()) {
        List<File> dbFiles = db.getFiles();
        String dbString = db.getString();
        double currentX = event.getX();
        String channelId = optionalChannel.get().getId();
        if (!isLoadingInprogress && dragRepository.currentlyDraggedClip() == null && ((dbFiles != null && !dbFiles.isEmpty()) || timelineDragAndDropHandler.isStringClip(db))) {
            selectedNodeRepository.clearAllSelectedItems();
            isLoadingInprogress = true;
            try {
                AddClipsCommand command = timelineDragAndDropHandler.buildAddClipsCommand(channelId, dbFiles, dbString, currentX);
                AddClipsCommand result = commandInterpreter.synchronousSend(command);
                List<String> addedClipIds = result.getAddedClipIds();
                if (addedClipIds.size() > 0) {
                    TimelineInterval originalInterval = timelineAccessor.findClipById(addedClipIds.get(0)).get().getInterval();
                    selectedNodeRepository.clearAndSetSelectedClips(addedClipIds);
                    ClipDragInformation clipDragInformation = new ClipDragInformation(result.getRequestedPosition(), addedClipIds, channelId, 0, originalInterval);
                    dragRepository.onClipDragged(clipDragInformation);
                }
                db.clear();
            } catch (Exception e1) {
                e1.printStackTrace();
            } finally {
                isLoadingInprogress = false;
            }
        }
    }
}
Also used : TimelineChannel(com.helospark.tactview.core.timeline.TimelineChannel) ClipDragInformation(com.helospark.tactview.ui.javafx.repository.drag.ClipDragInformation) TimelineInterval(com.helospark.tactview.core.timeline.TimelineInterval) File(java.io.File) AddClipsCommand(com.helospark.tactview.ui.javafx.commands.impl.AddClipsCommand)

Example 18 with TimelineChannel

use of com.helospark.tactview.core.timeline.TimelineChannel 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);
}
Also used : Component(com.helospark.lightdi.annotation.Component) UiCommandInterpreterService(com.helospark.tactview.ui.javafx.UiCommandInterpreterService) TimelineUiCacheElement(com.helospark.tactview.ui.javafx.uicomponents.canvasdraw.domain.TimelineUiCacheElement) MouseEvent(javafx.scene.input.MouseEvent) LoggerFactory(org.slf4j.LoggerFactory) HashMap(java.util.HashMap) ClipDragInformation(com.helospark.tactview.ui.javafx.repository.drag.ClipDragInformation) DragEvent(javafx.scene.input.DragEvent) TimelineClip(com.helospark.tactview.core.timeline.TimelineClip) TransferMode(javafx.scene.input.TransferMode) ArrayList(java.util.ArrayList) Dragboard(javafx.scene.input.Dragboard) CloneRequestMetadata(com.helospark.tactview.core.clone.CloneRequestMetadata) Map(java.util.Map) TimelineChannel(com.helospark.tactview.core.timeline.TimelineChannel) AddExistingClipsCommand(com.helospark.tactview.ui.javafx.commands.impl.AddExistingClipsCommand) StatelessEffect(com.helospark.tactview.core.timeline.StatelessEffect) CurrentlyPressedKeyRepository(com.helospark.tactview.ui.javafx.key.CurrentlyPressedKeyRepository) AddClipsCommand(com.helospark.tactview.ui.javafx.commands.impl.AddClipsCommand) ClipChannelPair(com.helospark.tactview.core.timeline.ClipChannelPair) EffectDragAdder(com.helospark.tactview.ui.javafx.uicomponents.EffectDragAdder) AddExistingClipRequest(com.helospark.tactview.core.timeline.AddExistingClipRequest) DragRepository(com.helospark.tactview.ui.javafx.repository.DragRepository) KeyCode(javafx.scene.input.KeyCode) Logger(org.slf4j.Logger) SelectedNodeRepository(com.helospark.tactview.ui.javafx.repository.SelectedNodeRepository) TimelineDragAndDropHandler(com.helospark.tactview.ui.javafx.uicomponents.TimelineDragAndDropHandler) TimelinePosition(com.helospark.tactview.core.timeline.TimelinePosition) TimelineState(com.helospark.tactview.ui.javafx.uicomponents.TimelineState) Collectors(java.util.stream.Collectors) File(java.io.File) TimelineInterval(com.helospark.tactview.core.timeline.TimelineInterval) TimelineUiCacheType(com.helospark.tactview.ui.javafx.uicomponents.canvasdraw.domain.TimelineUiCacheType) List(java.util.List) LinkClipRepository(com.helospark.tactview.core.timeline.LinkClipRepository) TimelineManagerAccessor(com.helospark.tactview.core.timeline.TimelineManagerAccessor) Entry(java.util.Map.Entry) Optional(java.util.Optional) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) TimelineChannel(com.helospark.tactview.core.timeline.TimelineChannel) AddExistingClipsCommand(com.helospark.tactview.ui.javafx.commands.impl.AddExistingClipsCommand) AddExistingClipRequest(com.helospark.tactview.core.timeline.AddExistingClipRequest) TimelineClip(com.helospark.tactview.core.timeline.TimelineClip) ClipChannelPair(com.helospark.tactview.core.timeline.ClipChannelPair)

Example 19 with TimelineChannel

use of com.helospark.tactview.core.timeline.TimelineChannel in project tactview by helospark.

the class FakeUi method pasteClipAt.

public TimelineClip pasteClipAt(int channelIndex, TimelinePosition position) {
    TimelineChannel channel = timelineManagerAccessor.getChannels().get(0);
    TimelineClip clonedClip = clipCopyPasteBoard.cloneClip(CloneRequestMetadata.ofDefault());
    clonedClip.setInterval(clonedClip.getInterval().butMoveStartPostionTo(position));
    timelineManagerAccessor.addClip(channel, clonedClip);
    return clonedClip;
}
Also used : TimelineChannel(com.helospark.tactview.core.timeline.TimelineChannel) TimelineClip(com.helospark.tactview.core.timeline.TimelineClip)

Aggregations

TimelineChannel (com.helospark.tactview.core.timeline.TimelineChannel)19 ArrayList (java.util.ArrayList)7 TimelineClip (com.helospark.tactview.core.timeline.TimelineClip)6 TimelineInterval (com.helospark.tactview.core.timeline.TimelineInterval)6 TimelinePosition (com.helospark.tactview.core.timeline.TimelinePosition)6 StatelessEffect (com.helospark.tactview.core.timeline.StatelessEffect)3 TimelineManagerAccessor (com.helospark.tactview.core.timeline.TimelineManagerAccessor)3 TimelineUiCacheElement (com.helospark.tactview.ui.javafx.uicomponents.canvasdraw.domain.TimelineUiCacheElement)3 List (java.util.List)3 Collectors (java.util.stream.Collectors)3 Component (com.helospark.lightdi.annotation.Component)2 CloneRequestMetadata (com.helospark.tactview.core.clone.CloneRequestMetadata)2 AddClipRequest (com.helospark.tactview.core.timeline.AddClipRequest)2 AddExistingClipRequest (com.helospark.tactview.core.timeline.AddExistingClipRequest)2 ClipChannelIdPair (com.helospark.tactview.core.timeline.ClipChannelIdPair)2 NotificationMessage (com.helospark.tactview.core.timeline.message.NotificationMessage)2 UiCommandInterpreterService (com.helospark.tactview.ui.javafx.UiCommandInterpreterService)2 AddClipsCommand (com.helospark.tactview.ui.javafx.commands.impl.AddClipsCommand)2 AddExistingClipsCommand (com.helospark.tactview.ui.javafx.commands.impl.AddExistingClipsCommand)2 ClipDragInformation (com.helospark.tactview.ui.javafx.repository.drag.ClipDragInformation)2