Changeset 738


Ignore:
Timestamp:
01/22/14 15:05:26 (10 years ago)
Author:
jts21
Message:

Implement carrying items between Expeditee windows. Currently doesn't work well on edges where the windows are overlapping (it works, but only if you move the mouse very slowly so it correctly gets a MOUSE_EXITED event)

Location:
trunk/src/org/expeditee
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/expeditee/gui/Browser.java

    r732 r738  
    1010import java.awt.RenderingHints;
    1111import java.awt.Toolkit;
     12import java.awt.datatransfer.Clipboard;
     13import java.awt.datatransfer.Transferable;
    1214import java.awt.event.ComponentEvent;
    1315import java.awt.event.ComponentListener;
     
    2123import java.util.Collection;
    2224import java.util.LinkedList;
     25import java.util.List;
    2326
    2427import javax.swing.JFrame;
     
    3134import org.expeditee.agents.mail.MailSession;
    3235import org.expeditee.importer.FrameDNDTransferHandler;
     36import org.expeditee.io.ExpClipReader;
    3337import org.expeditee.io.ItemSelection;
    3438import org.expeditee.io.ProxyAuth;
     39import org.expeditee.io.ItemSelection.ExpDataHandler;
    3540import org.expeditee.items.Item;
     41import org.expeditee.items.ItemUtils;
    3642import org.expeditee.items.widgets.WidgetCacheManager;
    3743import org.expeditee.network.FrameShare;
     
    431437
    432438        public void windowActivated(WindowEvent e) {
    433                 // System.out.println("Activated");
    434439        }
    435440
    436441        public void windowDeactivated(WindowEvent e) {
    437                 ItemSelection.cut(FreeItems.getInstance());
    438442        }
    439443
  • trunk/src/org/expeditee/gui/FrameMouseActions.java

    r734 r738  
    11package org.expeditee.gui;
    22
     3import java.awt.Image;
    34import java.awt.Point;
    45import java.awt.Rectangle;
     6import java.awt.Toolkit;
     7import java.awt.datatransfer.Clipboard;
     8import java.awt.datatransfer.DataFlavor;
     9import java.awt.datatransfer.StringSelection;
     10import java.awt.datatransfer.Transferable;
    511import java.awt.event.ActionEvent;
    612import java.awt.event.ActionListener;
     
    2834import org.expeditee.actions.Misc;
    2935import org.expeditee.actions.Navigation;
     36import org.expeditee.io.ExpClipReader;
     37import org.expeditee.io.ItemSelection;
     38import org.expeditee.io.ItemSelection.ExpDataHandler;
    3039import org.expeditee.items.Circle;
    3140import org.expeditee.items.Constraint;
     
    16571666        }
    16581667
     1668        private static boolean inWindow = false;
     1669        /**
     1670         * event called when mouse exits window
     1671         * (can't use MouseListener callback since that callback doesn't
     1672         *  correctly receive all mouse exit events)
     1673         */
     1674        public static void mouseExitedWindow(MouseEvent e) {
     1675                inWindow = false;
     1676                // System.out.println("Left window");
     1677                if(FreeItems.itemsAttachedToCursor())
     1678                        ItemSelection.cut(FreeItems.getInstance());
     1679        }
     1680       
    16591681        public void mouseEntered(MouseEvent e) {
     1682                // check if we are entering the window from outside of the window, or if we were just over a widget
     1683                if(!inWindow) {
     1684                        inWindow = true;
     1685                        // if there is expeditee data on the clipboard that has not yet been autoPasted, autoPaste it
     1686                Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard();
     1687                Transferable content = c.getContents(null);
     1688                try {
     1689                        if(content.isDataFlavorSupported(ItemSelection.expDataFlavor)) {        // Expeditee data
     1690                                ExpDataHandler expData = (ExpDataHandler)content.getTransferData(ItemSelection.expDataFlavor);
     1691                                if(expData.autoPaste) {
     1692                                        List<Item> items = new ExpClipReader(FrameMouseActions.getX(), FrameMouseActions.getY()).read(expData.items);
     1693                                        // generate new IDs and pickup
     1694                                        FrameMouseActions.pickup(ItemUtils.CopyItems(items));
     1695                                        // update the clipboard contents so they won't be autoPasted again
     1696                                        expData.autoPaste = false;
     1697                                        String stringData = "";
     1698                                        Image imageData = null;
     1699                                        if(content.isDataFlavorSupported(DataFlavor.stringFlavor)) {
     1700                                                stringData = (String) content.getTransferData(DataFlavor.stringFlavor);
     1701                                        }
     1702                                        if(content.isDataFlavorSupported(DataFlavor.imageFlavor)) {
     1703                                                imageData = (Image) content.getTransferData(DataFlavor.imageFlavor);
     1704                                        }
     1705                                        c.setContents(new ItemSelection(stringData, imageData, expData), null);
     1706                                }
     1707                        }
     1708                } catch(Exception ex) {
     1709                        ex.printStackTrace();
     1710                }
     1711                }
    16601712        }
    16611713
  • trunk/src/org/expeditee/gui/MouseEventRouter.java

    r682 r738  
    44import java.awt.Component;
    55import java.awt.Container;
     6import java.awt.Image;
    67import java.awt.Point;
    78import java.awt.Toolkit;
     9import java.awt.datatransfer.Clipboard;
     10import java.awt.datatransfer.DataFlavor;
     11import java.awt.datatransfer.Transferable;
    812import java.awt.event.AWTEventListener;
    913import java.awt.event.MouseEvent;
     
    2024import javax.swing.SwingUtilities;
    2125
     26import org.expeditee.io.ExpClipReader;
     27import org.expeditee.io.ItemSelection;
     28import org.expeditee.io.ItemSelection.ExpDataHandler;
    2229import org.expeditee.items.Item;
     30import org.expeditee.items.ItemUtils;
    2331
    2432/**
     
    141149         */
    142150        private void routeMouseEvent(MouseEvent e) {
    143 
    144151                _currentMouseEvent = e;
    145152
     
    147154                Point containerPoint = SwingUtilities.convertPoint(e.getComponent(), e
    148155                                .getPoint(), _contentPane);
     156               
     157                // TODO: Find a reliable way of detecting when the mouse moved onto a window that isn't a child of ours
     158                if(e.getID() == MouseEvent.MOUSE_EXITED) {
     159                        // System.out.println(e.getComponent());
     160                        if(e.getSource() instanceof Browser || e.getComponent() instanceof Browser ||
     161                                        e.getX() <= 0 || e.getX() >= _contentPane.getWidth() ||
     162                                        e.getY() <= 0 || e.getY() >= _contentPane.getHeight()) {
     163                                FrameMouseActions.mouseExitedWindow(e);
     164                        }
     165                }
    149166
    150167                if (containerPoint.y < 0) { // not in the content pane
     
    272289                                        break;
    273290                                case MouseEvent.MOUSE_ENTERED:
     291                                        withExtensions = duplicateMouseEvent(expediteeEvent, e
     292                                                        .getModifiers()
     293                                                        | e.getModifiersEx());
    274294                                        for (MouseListener listener : _mouseListeners) {
    275295                                                listener.mouseEntered(withExtensions);
  • trunk/src/org/expeditee/io/ItemSelection.java

    r652 r738  
    99import java.awt.datatransfer.UnsupportedFlavorException;
    1010import java.awt.image.BufferedImage;
    11 import java.awt.image.DataBuffer;
    12 import java.io.ByteArrayOutputStream;
    1311import java.io.File;
    1412import java.io.IOException;
    15 import java.io.ObjectOutputStream;
    1613import java.io.Serializable;
    1714import java.util.Arrays;
     
    4643               
    4744                private static final long serialVersionUID = 1L;
     45
     46                // whether this should be automatically picked up
     47                public boolean autoPaste = true;
    4848               
    4949                // exp save data
Note: See TracChangeset for help on using the changeset viewer.