Gridarta Editor
TreeDragSource.java
Go to the documentation of this file.
1 /*
2  * Gridarta MMORPG map editor for Crossfire, Daimonin and similar games.
3  * Copyright (C) 2000-2015 The Gridarta Developers.
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18  */
19 
20 package net.sf.gridarta.gui.mapmenu;
21 
22 import java.awt.Cursor;
23 import java.awt.dnd.DnDConstants;
24 import java.awt.dnd.DragGestureEvent;
25 import java.awt.dnd.DragGestureListener;
26 import java.awt.dnd.DragSource;
27 import java.awt.dnd.DragSourceDragEvent;
28 import java.awt.dnd.DragSourceDropEvent;
29 import java.awt.dnd.DragSourceEvent;
30 import java.awt.dnd.DragSourceListener;
31 import javax.swing.JTree;
32 import javax.swing.tree.DefaultTreeModel;
33 import javax.swing.tree.MutableTreeNode;
34 import javax.swing.tree.TreePath;
35 import org.jetbrains.annotations.NotNull;
36 import org.jetbrains.annotations.Nullable;
37 
42 public class TreeDragSource {
43 
47  @NotNull
48  private final JTree tree;
49 
53  @NotNull
54  private final DragSource dragSource = new DragSource();
55 
59  @Nullable
60  private MutableTreeNode draggedTreeNode;
61 
65  @NotNull
66  private final DragSourceListener dragSourceListener = new DragSourceListener() {
67 
68  @Override
69  public void dragEnter(@NotNull final DragSourceDragEvent dsde) {
70  // ignore
71  }
72 
73  @Override
74  public void dragOver(@NotNull final DragSourceDragEvent dsde) {
75  // ignore
76  }
77 
78  @Override
79  public void dropActionChanged(@NotNull final DragSourceDragEvent dsde) {
80  // ignore
81  }
82 
83  @Override
84  public void dragExit(@NotNull final DragSourceEvent dse) {
85  // ignore
86  }
87 
88  @Override
89  public void dragDropEnd(@NotNull final DragSourceDropEvent dsde) {
90  if (draggedTreeNode == null) {
91  return;
92  }
93 
94  if (dsde.getDropSuccess()) {
95  switch (dsde.getDropAction()) {
96  case DnDConstants.ACTION_COPY:
97  break;
98 
99  case DnDConstants.ACTION_MOVE:
100  ((DefaultTreeModel) tree.getModel()).removeNodeFromParent(draggedTreeNode);
101  break;
102  }
103  }
104  draggedTreeNode = null;
105  }
106 
107  };
108 
114  public TreeDragSource(@NotNull final JTree tree, final int actions) {
115  this.tree = tree;
116 
117  final DragGestureListener dragGestureListener = new DragGestureListener() {
118 
119  @Override
120  public void dragGestureRecognized(@NotNull final DragGestureEvent dge) {
121  final TreePath selectionPath = tree.getSelectionPath();
122  if (selectionPath == null || selectionPath.getPathCount() <= 1) {
123  return;
124  }
125 
126  draggedTreeNode = (MutableTreeNode) selectionPath.getLastPathComponent();
127  final Cursor cursor;
128  switch (dge.getDragAction()) {
129  case DnDConstants.ACTION_COPY:
130  cursor = DragSource.DefaultCopyDrop;
131  break;
132 
133  case DnDConstants.ACTION_MOVE:
134  cursor = DragSource.DefaultMoveDrop;
135  break;
136 
137  default:
138  return;
139  }
140  dragSource.startDrag(dge, cursor, new TransferableTreeNode(selectionPath), dragSourceListener);
141  }
142 
143  };
144  dragSource.createDefaultDragGestureRecognizer(tree, actions, dragGestureListener);
145  }
146 
147 }
net.sf.gridarta.gui.mapmenu.TransferableTreeNode
Definition: TransferableTreeNode.java:32
net.sf.gridarta.gui.mapmenu.TreeDragSource.tree
final JTree tree
Definition: TreeDragSource.java:48
net.sf.gridarta.gui.mapmenu.TreeDragSource
Definition: TreeDragSource.java:42
net.sf.gridarta.gui.mapmenu.TreeDragSource.dragSourceListener
final DragSourceListener dragSourceListener
Definition: TreeDragSource.java:66
net.sf.gridarta.gui.mapmenu.TreeDragSource.dragSource
final DragSource dragSource
Definition: TreeDragSource.java:54
net.sf.gridarta.gui.mapmenu.TreeDragSource.TreeDragSource
TreeDragSource(@NotNull final JTree tree, final int actions)
Definition: TreeDragSource.java:114
net.sf.gridarta.gui.mapmenu.TreeDragSource.draggedTreeNode
MutableTreeNode draggedTreeNode
Definition: TreeDragSource.java:60