From 91389ef09b2e7113c9bd65c1d85b9b0ef65c8bc3 Mon Sep 17 00:00:00 2001 From: Branislav Stojkovic Date: Sun, 3 Feb 2019 00:54:53 +0100 Subject: [PATCH] cancel d&d when dropped back to the tree --- .../diylc/swing/plugins/tree/TreePanel.java | 3 + .../plugins/tree/TreeTargetListener.java | 62 +++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 diylc/diylc-swing/src/org/diylc/swing/plugins/tree/TreeTargetListener.java diff --git a/diylc/diylc-swing/src/org/diylc/swing/plugins/tree/TreePanel.java b/diylc/diylc-swing/src/org/diylc/swing/plugins/tree/TreePanel.java index 02cacff2..08feeb64 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/plugins/tree/TreePanel.java +++ b/diylc/diylc-swing/src/org/diylc/swing/plugins/tree/TreePanel.java @@ -27,6 +27,7 @@ import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.dnd.DnDConstants; import java.awt.dnd.DragSource; +import java.awt.dnd.DropTarget; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.FocusAdapter; @@ -181,6 +182,8 @@ public class TreePanel extends JPanel { // Initialize drag source recognizer. DragSource.getDefaultDragSource().createDefaultDragGestureRecognizer(getTree(), DnDConstants.ACTION_COPY_OR_MOVE | DnDConstants.ACTION_LINK, new TreeGestureListener(plugInPort)); + // Initialize drop target. + new DropTarget(getTree(), DnDConstants.ACTION_COPY_OR_MOVE, new TreeTargetListener(plugInPort), true); } public JScrollPane getTreeScroll() { diff --git a/diylc/diylc-swing/src/org/diylc/swing/plugins/tree/TreeTargetListener.java b/diylc/diylc-swing/src/org/diylc/swing/plugins/tree/TreeTargetListener.java new file mode 100644 index 00000000..f97e94a2 --- /dev/null +++ b/diylc/diylc-swing/src/org/diylc/swing/plugins/tree/TreeTargetListener.java @@ -0,0 +1,62 @@ +/* + * + * DIY Layout Creator (DIYLC). Copyright (c) 2009-2018 held jointly by the individual authors. + * + * This file is part of DIYLC. + * + * DIYLC is free software: you can redistribute it and/or modify it under the terms of the GNU + * General Public License as published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * DIYLC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even + * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General + * Public License for more details. + * + * You should have received a copy of the GNU General Public License along with DIYLC. If not, see + * . + */ +package org.diylc.swing.plugins.tree; + +import java.awt.dnd.DnDConstants; +import java.awt.dnd.DropTargetDragEvent; +import java.awt.dnd.DropTargetDropEvent; +import java.awt.dnd.DropTargetEvent; +import java.awt.dnd.DropTargetListener; + +import org.diylc.common.IPlugInPort; + + +/** + * {@link DropTargetListener} for {@link TreePanel}. + * + * @author Branislav Stojkovic + */ +class TreeTargetListener implements DropTargetListener { + + private IPlugInPort presenter; + + public TreeTargetListener(IPlugInPort presenter) { + super(); + this.presenter = presenter; + } + + @Override + public void dragEnter(DropTargetDragEvent dtde) {} + + @Override + public void dragExit(DropTargetEvent dte) {} + + @Override + public void dragOver(DropTargetDragEvent dtde) { + dtde.acceptDrag(DnDConstants.ACTION_COPY_OR_MOVE); + } + + @Override + public void drop(DropTargetDropEvent dtde) { + presenter.setNewComponentTypeSlot(null, null, false); + } + + @Override + public void dropActionChanged(DropTargetDragEvent dtde) { + } +}