package dev.kske.chess.ui; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.UnsupportedFlavorException; import java.awt.dnd.DnDConstants; import java.awt.dnd.DropTargetAdapter; import java.awt.dnd.DropTargetDropEvent; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.List; import dev.kske.chess.game.Game; /** * Project: Chess
* File: FENDropTarget.java
* Created: 13 Aug 2019
* Author: Kai S. K. Engelbart */ public class FENDropTarget extends DropTargetAdapter { private MainWindow mainWindow; public FENDropTarget(MainWindow mainWindow) { this.mainWindow = mainWindow; } @SuppressWarnings("unchecked") @Override public void drop(DropTargetDropEvent evt) { try { evt.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); ((List) evt.getTransferable().getTransferData(DataFlavor.javaFileListFlavor)).forEach(file -> { try (BufferedReader br = new BufferedReader(new FileReader(file))) { final GamePane gamePane = mainWindow.addGamePane(); final String fen = br.readLine(); GameConfigurationDialog.show((whiteName, blackName) -> { final Game game = new Game(gamePane.getBoardPane(), whiteName, blackName, fen); gamePane.setGame(game); game.start(); }); evt.dropComplete(true); } catch (IOException e) { e.printStackTrace(); evt.rejectDrop(); } }); } catch (UnsupportedFlavorException | IOException ex) { ex.printStackTrace(); evt.rejectDrop(); } } }