Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

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 }