source: trunk/src/org/expeditee/gio/javafx/JavaFXDragAndDropManager.java@ 1097

Last change on this file since 1097 was 1097, checked in by davidb, 6 years ago

Newly structured files from Corey's work on logic/graphics separation

File size: 3.0 KB
Line 
1package org.expeditee.gio.javafx;
2
3import java.io.File;
4import java.io.IOException;
5import java.util.List;
6
7import org.expeditee.core.Point;
8import org.expeditee.gio.DragAndDropManager;
9import org.expeditee.gui.MessageBay;
10
11import javafx.event.EventHandler;
12import javafx.scene.Scene;
13import javafx.scene.input.DataFormat;
14import javafx.scene.input.DragEvent;
15import javafx.scene.input.Dragboard;
16import javafx.scene.input.TransferMode;
17
18public class JavaFXDragAndDropManager extends DragAndDropManager {
19
20 /** Singleton instance. */
21 private static JavaFXDragAndDropManager _instance;
22
23 /** Singleton instantiator. */
24 public static JavaFXDragAndDropManager getInstance()
25 {
26 if (_instance == null) _instance = new JavaFXDragAndDropManager();
27
28 return _instance;
29 }
30
31 // GNOME and KDE desktops have a specialized way of DNDing files
32 private DataFormat _URIListDataflavorString = new DataFormat("text/uri-list;class=java.lang.String");
33 private DataFormat _URIListDataflavorCharArray = new DataFormat("text/uri-list;class=\"[C\"");
34
35 private JavaFXDragAndDropManager()
36 {
37 Scene scene = JavaFXGraphicsManager.ExpediteeApplication.theScene;
38
39 scene.setOnDragOver(new EventHandler<DragEvent>() {
40 @Override
41 public void handle(DragEvent event)
42 {
43 Dragboard dragboard = event.getDragboard();
44 if ( dragboard.hasString() ||
45 dragboard.hasFiles() ||
46 dragboard.hasContent(_URIListDataflavorString) ||
47 dragboard.hasContent(_URIListDataflavorCharArray))
48
49 {
50 event.acceptTransferModes(TransferMode.COPY);
51 }
52 event.consume();
53 }
54 });
55
56 scene.setOnDragDropped(new EventHandler<DragEvent>() {
57 @Override
58 public void handle(DragEvent event)
59 {
60 Dragboard dragboard = event.getDragboard();
61 Point dropPoint = new Point((int) event.getX(), (int) event.getY());
62 boolean success = false;
63 try {
64
65 if (dragboard.hasFiles()) {
66 List<File> files = dragboard.getFiles();
67 if (files != null && files.size() > 0) {
68 importFileList(files, dropPoint);
69 }
70 } else if (dragboard.hasContent(_URIListDataflavorString)) {
71 String data = (String) dragboard.getContent(_URIListDataflavorString);
72 List<File> files = textURIListToFileList(data);
73 importFileList(files, dropPoint);
74 success = true;
75 } else if (dragboard.hasContent(_URIListDataflavorCharArray)) {
76 char[] data = (char[]) dragboard.getContent(_URIListDataflavorCharArray);
77 String uriString = new String(data);
78 List<File> files = textURIListToFileList(uriString);
79 importFileList(files, dropPoint);
80 success = true;
81 } else if (dragboard.hasString()) {
82 String str = dragboard.getString();
83 if (str != null && str.length() > 0) {
84 importString(str, dropPoint);
85 success = true;
86 }
87 }
88 } catch (IOException e) {
89 e.printStackTrace();
90 MessageBay.displayMessage("Failed to import data in Expeditee");
91 }
92 event.setDropCompleted(success);
93 event.consume();
94 }
95 });
96 }
97
98}
Note: See TracBrowser for help on using the repository browser.