KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > mail > gui > tree > selection > TreeSelectionHandler


1 //The contents of this file are subject to the Mozilla Public License Version 1.1
2
//(the "License"); you may not use this file except in compliance with the
3
//License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
4
//
5
//Software distributed under the License is distributed on an "AS IS" basis,
6
//WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
7
//for the specific language governing rights and
8
//limitations under the License.
9
//
10
//The Original Code is "The Columba Project"
11
//
12
//The Initial Developers of the Original Code are Frederik Dietz and Timo Stich.
13
//Portions created by Frederik Dietz and Timo Stich are Copyright (C) 2003.
14
//
15
//All Rights Reserved.
16
package org.columba.mail.gui.tree.selection;
17
18 import java.util.LinkedList JavaDoc;
19 import java.util.logging.Logger JavaDoc;
20
21 import javax.swing.event.TreeSelectionEvent JavaDoc;
22 import javax.swing.event.TreeSelectionListener JavaDoc;
23 import javax.swing.tree.TreePath JavaDoc;
24
25 import org.columba.api.command.ICommandReference;
26 import org.columba.core.selection.SelectionHandler;
27 import org.columba.mail.command.MailFolderCommandReference;
28 import org.columba.mail.folder.IMailFolder;
29 import org.columba.mail.gui.tree.TreeView;
30
31 /**
32  * Handles the tree selection.
33  * <p>
34  * Listens for swing tree selection events and translates TreePath selection to
35  * MailFolderCommandReference.
36  * <p>
37  * Actions creating Commands and passing MailFolderCommandReference directly ask
38  * {@link TreeSelectionManager}for the selection. They don't talk with the
39  * swing JTree.
40  *
41  * @author fdietz, tstich
42  */

43 public class TreeSelectionHandler extends SelectionHandler implements
44         TreeSelectionListener JavaDoc {
45
46     public static final String JavaDoc HANDLER_ID = "mail.tree";
47
48     /** JDK 1.4+ logging framework logger, used for logging. */
49     private static final Logger JavaDoc LOG = Logger
50             .getLogger("org.columba.mail.gui.tree.selection");
51
52     private static final IMailFolder[] FOLDER_ARRAY = { null };
53
54     private TreeView view;
55
56     private LinkedList JavaDoc selectedFolders;
57
58     private boolean setSelection;
59
60     public TreeSelectionHandler(TreeView view) {
61         super(TreeSelectionHandler.HANDLER_ID);
62         this.view = view;
63         view.addTreeSelectionListener(this);
64         selectedFolders = new LinkedList JavaDoc();
65
66         setSelection = false;
67     }
68
69     /*
70      * (non-Javadoc)
71      *
72      * @see org.columba.core.gui.util.SelectionHandler#getSelection()
73      */

74     public ICommandReference getSelection() {
75         if (selectedFolders.size() == 0)
76             return null;
77
78         MailFolderCommandReference reference = new MailFolderCommandReference(
79                 (IMailFolder) selectedFolders.get(0));
80
81         return reference;
82     }
83
84     /**
85      *
86      * @see javax.swing.event.TreeSelectionListener#valueChanged(javax.swing.event.TreeSelectionEvent)
87      */

88     public void valueChanged(TreeSelectionEvent JavaDoc e) {
89         // BUGFIX but don't know why that bug occurs
90
if (e.getPath() == null) {
91             return;
92         }
93
94         // If the tree is in a DND action then we dont need to update all
95
// listeners, since this only a temporary folder selection.
96
if (view.isInDndAction()) {
97             return;
98         }
99
100         if (setSelection) {
101             selectedFolders.clear();
102             setSelection = false;
103         }
104
105         for (int i = 0; i < e.getPaths().length; i++) {
106             if (e.getPaths()[i].getLastPathComponent() instanceof IMailFolder) {
107                 IMailFolder folder = (IMailFolder) e.getPaths()[i]
108                         .getLastPathComponent();
109
110                 if (e.isAddedPath(i)) {
111                     LOG.info("Folder added to Selection= " + folder.getName());
112                     selectedFolders.add(folder);
113                 } else {
114                     LOG.info("Folder removed from Selection= "
115                             + folder.getName());
116                     selectedFolders.remove(folder);
117                 }
118             }
119         }
120
121         if ( selectedFolders.size() == 0 ) return;
122         
123         fireSelectionChanged(new TreeSelectionChangedEvent(
124                 (IMailFolder[]) selectedFolders.toArray(FOLDER_ARRAY)));
125
126     }
127
128     public void setSelection(ICommandReference selection) {
129
130         selectedFolders.clear();
131
132         if (selection == null
133                 || ((MailFolderCommandReference) selection).getSourceFolder() == null) {
134             view.clearSelection();
135         } else {
136
137             TreePath JavaDoc path = ((IMailFolder) ((MailFolderCommandReference) selection)
138                     .getSourceFolder()).getSelectionTreePath();
139             view.setSelectionPath(path);
140             view.expandPath(path);
141             selectedFolders.add(((MailFolderCommandReference) selection)
142                     .getSourceFolder());
143         }
144
145         setSelection = true;
146
147         fireSelectionChanged(new TreeSelectionChangedEvent(
148                 (IMailFolder[]) selectedFolders.toArray(FOLDER_ARRAY)));
149
150     }
151 }
Popular Tags