Source code: javatools/util/Clipboard.java
1 /*
2 * Clipboard.java
3 *
4 * Created on 20 settembre 2002, 18.22
5 Javatools (modified version) - Some useful general classes.
6 Copyright (C) 2002-2003 Chris Bitmead (original) Antonio Petrelli (modified)
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21
22 Contact me at: brenmcguire@users.sourceforge.net
23 */
24
25 package javatools.util;
26
27 /** It represents a simple clipboard. Now it can contains several elements at
28 * a time.
29 * @author Antonio Petrelli
30 * @version 0.1.8
31 */
32 public class Clipboard {
33
34 /** Creates a new instance of Clipboard */
35 public Clipboard() {
36 clipObjects = null;
37 }
38
39 public static Clippable[] buildClippableArray(javax.swing.JTree tree) {
40 int i, numObjects;
41 javax.swing.tree.TreePath[] selPaths;
42 Object tempNode;
43 Clippable[] tempArray;
44
45 tempArray = null;
46 selPaths = tree.getSelectionPaths();
47 if (selPaths != null) {
48 numObjects = selPaths.length;
49 if (numObjects > 0) {
50 tempArray = new Clippable[numObjects];
51 for (i=0; i < numObjects; i++) {
52 tempNode = selPaths[i].getLastPathComponent();
53 if (tempNode instanceof Clippable)
54 tempArray[i] = (Clippable) tempNode;
55 else
56 tempArray[i] = null;
57 }
58 }
59 }
60 return tempArray;
61 }
62
63 public static boolean isOmogeneous(Clippable[] clips) {
64 int i, numObjects;
65 boolean tempValue;
66 String type;
67
68 numObjects = clips.length;
69 tempValue = true;
70 type = null;
71 for (i=0; i < numObjects && clips[i] == null; i++);
72 if (i < numObjects) {
73 type = clips[i].getType();
74 i++;
75 for (; i < numObjects && tempValue; i++) {
76 if (clips[i] != null)
77 if (!clips[i].getType().equals(type))
78 tempValue = false;
79 }
80 }
81 return tempValue;
82 }
83
84 public static String getFirstType(Clippable[] clips) {
85 int i, numObjects;
86
87 numObjects = clips.length;
88 for (i=0; i < numObjects && clips[i] == null; i++);
89 if (i < numObjects)
90 return clips[i].getType();
91 else
92 return null;
93 }
94
95 public static boolean canBeCut(Clippable[] clips, boolean checkOnlyOne) {
96 int i, numObjects;
97 boolean tempValue;
98
99 tempValue = false;
100 numObjects = clips.length;
101 for (i=0; i < numObjects && clips[i] == null; i++);
102 if (i < numObjects) {
103 tempValue = clips[i].canBeCut();
104 if (!checkOnlyOne) {
105 i++;
106 for (; i < numObjects && tempValue; i++) {
107 if (clips[i] != null)
108 tempValue = tempValue && clips[i].canBeCut();
109 }
110 }
111 }
112 return tempValue;
113 }
114
115 public static boolean canBeCopied(Clippable[] clips, boolean checkOnlyOne) {
116 int i, numObjects;
117 boolean tempValue;
118
119 tempValue = false;
120 numObjects = clips.length;
121 for (i=0; i < numObjects && clips[i] == null; i++);
122 if (i < numObjects) {
123 tempValue = clips[i].canBeCopied();
124 if (!checkOnlyOne) {
125 i++;
126 for (; i < numObjects && tempValue; i++) {
127 if (clips[i] != null)
128 tempValue = tempValue && clips[i].canBeCopied();
129 }
130 }
131 }
132 return tempValue;
133 }
134
135 public boolean canBeAttached(Clippable clip, boolean checkOnlyOne) {
136 int i, numObjects;
137 boolean tempValue;
138
139 tempValue = false;
140 if (clipObjects != null) {
141 numObjects = clipObjects.length;
142 for (i=0; i < numObjects && clipObjects[i] == null; i++);
143 if (i < numObjects) {
144 tempValue = clip.canBeAttached(clipObjects[i]);
145 if (!checkOnlyOne) {
146 i++;
147 for (; i < numObjects && tempValue; i++) {
148 if (clipObjects[i] != null)
149 tempValue = tempValue && clip.canBeAttached(clipObjects[i]);
150 }
151 }
152 }
153 }
154 return tempValue;
155 }
156
157 /** Cuts an item.
158 * @param clip The item to be cut.
159 */
160 public void cut(Clippable clip) {
161 Clippable[] tempClips;
162
163 tempClips = new Clippable[1];
164 tempClips[0] = clip;
165 cut(tempClips);
166 }
167
168 /** Cuts an array of items.
169 * @param clips The items to be cut.
170 */
171 public void cut(Clippable[] clips) {
172 int i, numClips;
173
174 if (clipObjects != null) {
175 numClips = clipObjects.length;
176 for (i=0; i < numClips; i++)
177 if (clipObjects[i] != null)
178 clipObjects[i].unclip();
179 }
180 clipObjects = clips;
181 if (clipObjects != null) {
182 numClips = clipObjects.length;
183 for (i=0; i < numClips; i++)
184 if (clipObjects[i] != null)
185 clipObjects[i].cut();
186 }
187 }
188
189 /** Copies an item.
190 * @param clip The item to be copied.
191 */
192 public void copy(Clippable clip) {
193 Clippable[] tempClips;
194
195 tempClips = new Clippable[1];
196 tempClips[0] = clip;
197 copy(tempClips);
198 }
199
200 /** Copies an array of items.
201 * @param clips The items to be copied.
202 */
203 public void copy(Clippable[] clips) {
204 int i, numClips;
205
206 if (clipObjects != null) {
207 numClips = clipObjects.length;
208 for (i=0; i < numClips; i++)
209 if (clipObjects[i] != null)
210 clipObjects[i].unclip();
211 }
212 if (clips != null) {
213 numClips = clips.length;
214 clipObjects = new Clippable[numClips];
215 for (i=0; i < numClips; i++)
216 if (clips[i] != null)
217 clipObjects[i] = clips[i].duplicate();
218 }
219 if (clipObjects != null) {
220 numClips = clipObjects.length;
221 for (i=0; i < numClips; i++)
222 if (clipObjects[i] != null)
223 clipObjects[i].copy();
224 }
225 }
226
227 /** Pastes an item.
228 * @param father The item to paste the saved item into. */
229 public void paste(Clippable father) {
230 int i, numClips;
231
232 if (clipObjects != null && father != null) {
233 numClips = clipObjects.length;
234 for (i=0; i < numClips; i++) {
235 if (clipObjects[i] != null) {
236 clipObjects[i].paste(father);
237 father.attach(clipObjects[i]);
238 clipObjects[i] = clipObjects[i].duplicate();
239 }
240 }
241 }
242 }
243
244 /** Returns the first of the array of clipped objects.
245 * @return The clipped object.
246 */
247 public Clippable getClipObject() {
248 if (clipObjects != null)
249 return clipObjects[0];
250 else
251 return null;
252 }
253
254 /** Returns the array of clipped objects.
255 * @return The clipped objects.
256 */
257 public Clippable[] getClipObjects() {
258 return clipObjects;
259 }
260
261 /** Clears everything.
262 */
263 public void clear() {
264 clipObjects = null;
265 }
266
267 private Clippable[] clipObjects;
268 }