TImage copy to clipboard
authorKevin Lamonte <kevin.lamonte@gmail.com>
Sat, 2 Nov 2019 05:36:06 +0000 (00:36 -0500)
committerKevin Lamonte <kevin.lamonte@gmail.com>
Sat, 2 Nov 2019 05:36:06 +0000 (00:36 -0500)
src/jexer/TField.java
src/jexer/TImage.java
src/jexer/bits/Clipboard.java

index 29632ca5ba026533c9f4487702f983eccfd19f27..90dd4e427abcf5660bfcc04b32b76c7c5da8edf7 100644 (file)
@@ -376,6 +376,7 @@ public class TField extends TWidget implements EditMenuUser {
         // Pass to parent for the things we don't care about.
         super.onKeypress(keypress);
     }
+
     /**
      * Handle posted command events.
      *
index cd0ce96e0baf4523c64cb45527c01cbc4d1e1443..1463f1008f4788fa0d0e056565bc0565c5cfe505 100644 (file)
@@ -34,15 +34,17 @@ import jexer.backend.ECMA48Terminal;
 import jexer.backend.MultiScreen;
 import jexer.backend.SwingTerminal;
 import jexer.bits.Cell;
+import jexer.event.TCommandEvent;
 import jexer.event.TKeypressEvent;
 import jexer.event.TMouseEvent;
 import jexer.event.TResizeEvent;
+import static jexer.TCommand.*;
 import static jexer.TKeypress.*;
 
 /**
  * TImage renders a piece of a bitmap image on screen.
  */
-public class TImage extends TWidget {
+public class TImage extends TWidget implements EditMenuUser {
 
     // ------------------------------------------------------------------------
     // Constants --------------------------------------------------------------
@@ -325,6 +327,20 @@ public class TImage extends TWidget {
         resized = true;
     }
 
+    /**
+     * Handle posted command events.
+     *
+     * @param command command event
+     */
+    @Override
+    public void onCommand(final TCommandEvent command) {
+        if (command.equals(cmCopy)) {
+            // Copy image to clipboard.
+            getClipboard().copyImage(image);
+            return;
+        }
+    }
+
     // ------------------------------------------------------------------------
     // TWidget ----------------------------------------------------------------
     // ------------------------------------------------------------------------
@@ -762,4 +778,44 @@ public class TImage extends TWidget {
         return newImage;
     }
 
+    // ------------------------------------------------------------------------
+    // EditMenuUser -----------------------------------------------------------
+    // ------------------------------------------------------------------------
+
+    /**
+     * Check if the cut menu item should be enabled.
+     *
+     * @return true if the cut menu item should be enabled
+     */
+    public boolean isEditMenuCut() {
+        return false;
+    }
+
+    /**
+     * Check if the copy menu item should be enabled.
+     *
+     * @return true if the copy menu item should be enabled
+     */
+    public boolean isEditMenuCopy() {
+        return true;
+    }
+
+    /**
+     * Check if the paste menu item should be enabled.
+     *
+     * @return true if the paste menu item should be enabled
+     */
+    public boolean isEditMenuPaste() {
+        return false;
+    }
+
+    /**
+     * Check if the clear menu item should be enabled.
+     *
+     * @return true if the clear menu item should be enabled
+     */
+    public boolean isEditMenuClear() {
+        return false;
+    }
+
 }
index 114a732bee12d824318c2b4a5dddca7220500e80..5c1ea9aa3efca5d12a8b7ddade2f139e64df4662 100644 (file)
@@ -62,6 +62,62 @@ public class Clipboard {
      */
     private java.awt.datatransfer.Clipboard systemClipboard = null;
 
+    /**
+     * The image selection class.
+     */
+    private ImageSelection imageSelection;
+
+    /**
+     * ImageSelection is used to hold an image while on the clipboard.
+     */
+    private class ImageSelection implements Transferable {
+
+        /**
+         * Returns an array of DataFlavor objects indicating the flavors the
+         * data can be provided in. The array should be ordered according to
+         * preference for providing the data (from most richly descriptive to
+         * least descriptive).
+         *
+         * @return an array of data flavors in which this data can be
+         * transferred
+         */
+        public DataFlavor[] getTransferDataFlavors() {
+            return new DataFlavor[] { DataFlavor.imageFlavor };
+        }
+
+        /**
+         * Returns whether or not the specified data flavor is supported for
+         * this object.
+         *
+         * @param flavor the requested flavor for the data
+         * @return boolean indicating whether or not the data flavor is
+         * supported
+         */
+        public boolean isDataFlavorSupported(DataFlavor flavor) {
+            return DataFlavor.imageFlavor.equals(flavor);
+        }
+
+        /**
+         * Returns an object which represents the data to be transferred. The
+         * class of the object returned is defined by the representation
+         * class of the flavor.
+         *
+         * @param flavor the requested flavor for the data
+         * @throws IOException if the data is no longer available in the
+         * requested flavor.
+         * @throws UnsupportedFlavorException if the requested data flavor is
+         * not supported.
+         */
+        public Object getTransferData(DataFlavor flavor)
+                throws UnsupportedFlavorException, IOException {
+
+            if (!DataFlavor.imageFlavor.equals(flavor)) {
+                throw new UnsupportedFlavorException(flavor);
+            }
+            return image;
+        }
+    }
+
     // ------------------------------------------------------------------------
     // Constructors -----------------------------------------------------------
     // ------------------------------------------------------------------------
@@ -89,7 +145,8 @@ public class Clipboard {
     public void copyImage(final BufferedImage image) {
         this.image = image;
         if (systemClipboard != null) {
-            // TODO
+            ImageSelection imageSelection = new ImageSelection();
+            systemClipboard.setContents(imageSelection, null);
         }
     }