package com.vci.client.auth2.action;
|
|
import java.awt.Component;
|
import java.awt.Point;
|
import java.awt.datatransfer.DataFlavor;
|
import java.awt.datatransfer.Transferable;
|
import java.awt.datatransfer.UnsupportedFlavorException;
|
import java.awt.dnd.DnDConstants;
|
import java.awt.dnd.DragGestureEvent;
|
import java.awt.dnd.DragGestureListener;
|
import java.awt.dnd.DragSource;
|
import java.awt.dnd.DragSourceDragEvent;
|
import java.awt.dnd.DragSourceDropEvent;
|
import java.awt.dnd.DragSourceEvent;
|
import java.awt.dnd.DragSourceListener;
|
import java.awt.dnd.DropTargetDragEvent;
|
import java.awt.dnd.DropTargetDropEvent;
|
import java.awt.dnd.DropTargetEvent;
|
import java.awt.dnd.DropTargetListener;
|
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionListener;
|
import java.io.IOException;
|
import java.util.Arrays;
|
import java.util.List;
|
|
import javax.swing.JButton;
|
import javax.swing.SwingUtilities;
|
|
import com.vci.client.auth2.view.AbstractUIFunclet;
|
|
public abstract class Action extends JButton implements ActionListener,
|
DragGestureListener, DragSourceListener, Transferable,
|
DropTargetListener {
|
/**
|
*
|
*/
|
private static final long serialVersionUID = -3553375893075534123L;
|
private AbstractUIFunclet funclet;
|
private DataFlavor[] flavors = { DataFlavor.javaFileListFlavor };
|
private boolean dragEnable = false;
|
|
public Action(String name) {
|
super(name);
|
addActionListener(this);
|
DragSource dragSource = DragSource.getDefaultDragSource();
|
dragSource.createDefaultDragGestureRecognizer(this, // component where
|
// drag originates
|
DnDConstants.ACTION_MOVE, // actions
|
this);
|
}
|
|
public abstract void execute();
|
|
@Override
|
public void actionPerformed(ActionEvent e) {
|
execute();
|
}
|
|
public AbstractUIFunclet getFunclet() {
|
return funclet;
|
}
|
|
public void setFunclet(AbstractUIFunclet funclet) {
|
this.funclet = funclet;
|
}
|
|
public boolean isDragEnable() {
|
return dragEnable;
|
}
|
|
public void setDragEnable(boolean dragEnable) {
|
this.dragEnable = dragEnable;
|
}
|
|
@Override
|
public void dragDropEnd(DragSourceDropEvent dsde) {
|
if (this.dragEnable) {
|
try {
|
Object o = dsde.getDragSourceContext().getTransferable()
|
.getTransferData(DataFlavor.javaFileListFlavor);
|
//当前的位置
|
Point location = dsde.getLocation();
|
SwingUtilities.convertPointFromScreen(location, getFunclet().getRightMainPanel()
|
.getRightCenterToolBar());
|
Action target = (Action) getFunclet().getRightMainPanel()
|
.getRightCenterToolBar().findComponentAt(location);
|
List<Component> all = Arrays.asList(getFunclet()
|
.getRightMainPanel().getRightCenterToolBar()
|
.getComponents());
|
getFunclet().getRightMainPanel().getRightCenterToolBar()
|
.remove((Action) o);
|
getFunclet().getRightMainPanel().getRightCenterToolBar()
|
.add((Action) o, all.indexOf(target));
|
} catch (Exception e) {
|
}
|
getFunclet().updateUI();
|
}
|
}
|
|
@Override
|
public void dragGestureRecognized(DragGestureEvent dge) {
|
dge.startDrag(DragSource.DefaultMoveDrop, this, this);
|
}
|
|
@Override
|
public DataFlavor[] getTransferDataFlavors() {
|
return flavors;
|
}
|
|
@Override
|
public boolean isDataFlavorSupported(DataFlavor flavor) {
|
for (DataFlavor df : flavors) {
|
if (df.equals(flavor)) {
|
return true;
|
}
|
}
|
return false;
|
}
|
|
@Override
|
public Object getTransferData(DataFlavor flavor)
|
throws UnsupportedFlavorException, IOException {
|
return this;
|
}
|
|
@Override
|
public void dragEnter(DragSourceDragEvent dsde) {
|
}
|
|
@Override
|
public void dragOver(DragSourceDragEvent dsde) {
|
}
|
|
@Override
|
public void dropActionChanged(DragSourceDragEvent dsde) {
|
}
|
|
@Override
|
public void dragExit(DragSourceEvent dse) {
|
}
|
|
@Override
|
public void dragEnter(DropTargetDragEvent dtde) {
|
// TODO Auto-generated method stub
|
|
}
|
|
@Override
|
public void dragOver(DropTargetDragEvent dtde) {
|
System.out.println();
|
|
}
|
|
@Override
|
public void dropActionChanged(DropTargetDragEvent dtde) {
|
// TODO Auto-generated method stub
|
|
}
|
|
@Override
|
public void dragExit(DropTargetEvent dte) {
|
|
}
|
|
@Override
|
public void drop(DropTargetDropEvent dtde) {
|
System.out.println();
|
|
}
|
|
}
|