source: trunk/src/org/expeditee/gio/javafx/JavaFXClipboardManager.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: 2.5 KB
Line 
1package org.expeditee.gio.javafx;
2
3import java.util.Set;
4
5import org.expeditee.core.BlockingRunnable;
6import org.expeditee.gio.ClipboardManager;
7import org.expeditee.gio.EcosystemManager;
8
9import javafx.scene.input.Clipboard;
10import javafx.scene.input.ClipboardContent;
11import javafx.scene.input.DataFormat;
12
13public class JavaFXClipboardManager extends ClipboardManager {
14
15 /** Data format for identifying Expeditee-specific data on the clipboard. */
16 private static final DataFormat expediteeDataFormat = new DataFormat("expediteeDataFormat");
17
18 /** Singleton instance. */
19 private static JavaFXClipboardManager _instance;
20
21 /** Singleton instantiator. */
22 public static JavaFXClipboardManager getInstance()
23 {
24 if (_instance == null) _instance = new JavaFXClipboardManager();
25
26 return _instance;
27 }
28
29 private Clipboard _clipboard;
30
31 private JavaFXClipboardManager()
32 {
33 // Get a reference to the system clipboard
34 EcosystemManager.getMiscManager().runOnGIOThread(new BlockingRunnable() {
35 @Override
36 public void execute()
37 {
38 _clipboard = Clipboard.getSystemClipboard();
39 }
40 });
41 }
42
43 @Override
44 public void set(ClipboardData data)
45 {
46 // Leave the clipboard unchanged if data is null
47 if (data == null) return;
48
49 // Fill out the data for the clipboard
50 ClipboardContent content = new ClipboardContent();
51 if (data.data != null) content.put(expediteeDataFormat, data.data);
52 if (data.imageRepresentation != null) {
53 javafx.scene.image.Image jfxImage = JavaFXMiscManager.getIfUsingJavaFXImageManager().getInternalImage(data.imageRepresentation);
54 content.putImage(jfxImage);
55 }
56 if (data.stringRepresentation != null) content.putString(data.stringRepresentation);
57
58 // Set the clipboard contents
59 _clipboard.setContent(content);
60
61 }
62
63 @Override
64 public ClipboardData get()
65 {
66 // Create an empty data structure for returning the gathered data
67 ClipboardData ret = new ClipboardData();
68
69 // See which data formats are available for receipt
70 Set<DataFormat> availableFormats = _clipboard.getContentTypes();
71
72 // Fill out the return structure
73 if (availableFormats.contains(expediteeDataFormat)) ret.data = _clipboard.getContent(expediteeDataFormat);
74 if (availableFormats.contains(DataFormat.IMAGE)) {
75 javafx.scene.image.Image jfxImage = _clipboard.getImage();
76 ret.imageRepresentation = JavaFXMiscManager.getIfUsingJavaFXImageManager().createImage(jfxImage);
77 }
78 if (availableFormats.contains(DataFormat.PLAIN_TEXT)) ret.stringRepresentation = _clipboard.getString();
79
80 // Return it
81 return ret;
82 }
83
84}
Note: See TracBrowser for help on using the repository browser.