KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > armedbear > j > mail > FolderTree


1 /*
2  * FolderTree.java
3  *
4  * Copyright (C) 2002-2003 Peter Graves
5  * $Id: FolderTree.java,v 1.2 2003/07/23 15:57:52 piso Exp $
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20  */

21
22 package org.armedbear.j.mail;
23
24 import java.awt.Color JavaDoc;
25 import java.awt.Component JavaDoc;
26 import java.awt.Graphics JavaDoc;
27 import java.awt.Point JavaDoc;
28 import java.awt.event.InputEvent JavaDoc;
29 import java.awt.event.MouseEvent JavaDoc;
30 import java.awt.event.MouseListener JavaDoc;
31 import java.util.Enumeration JavaDoc;
32 import javax.swing.JTree JavaDoc;
33 import javax.swing.tree.DefaultMutableTreeNode JavaDoc;
34 import javax.swing.tree.DefaultTreeCellRenderer JavaDoc;
35 import javax.swing.tree.TreePath JavaDoc;
36 import javax.swing.tree.TreeSelectionModel JavaDoc;
37 import org.armedbear.j.Buffer;
38 import org.armedbear.j.Display;
39 import org.armedbear.j.Editor;
40 import org.armedbear.j.Frame;
41 import org.armedbear.j.NavigationComponent;
42 import org.armedbear.j.Utilities;
43
44 public final class FolderTree extends JTree JavaDoc implements NavigationComponent,
45     MouseListener JavaDoc
46 {
47     private final Frame frame;
48
49     private FolderTree(Frame frame)
50     {
51         super(FolderTreeModel.getDefaultModel());
52         this.frame = frame;
53         getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
54         setRootVisible(false);
55         toggleClickCount = 1;
56         setCellRenderer(new TreeCellRenderer JavaDoc(this));
57         addMouseListener(this);
58     }
59
60     public static FolderTree getInstance(Frame frame)
61     {
62         Object JavaDoc obj = frame.getFolderTree();
63         if (obj instanceof FolderTree)
64             return (FolderTree) obj;
65         FolderTree tree = new FolderTree(frame);
66         frame.setFolderTree(tree);
67         return tree;
68     }
69
70     public void refresh() {}
71
72     public void updatePosition()
73     {
74         int row = -1;
75         final Buffer buf = frame.getCurrentEditor().getBuffer();
76         MailboxURL url = null;
77         if (buf instanceof Mailbox)
78             url = ((Mailbox)buf).getUrl();
79         else if (buf instanceof MessageBuffer) {
80             Mailbox mailbox = ((MessageBuffer)buf).getMailbox();
81             if (mailbox != null)
82                 url = mailbox.getUrl();
83         }
84         if (url != null) {
85             DefaultMutableTreeNode JavaDoc root =
86                 (DefaultMutableTreeNode JavaDoc) getModel().getRoot();
87             if (root != null) {
88                 Enumeration JavaDoc nodes = root.depthFirstEnumeration();
89                 while (nodes.hasMoreElements()) {
90                     DefaultMutableTreeNode JavaDoc node =
91                         (DefaultMutableTreeNode JavaDoc) nodes.nextElement();
92                     if (node.getUserObject() instanceof Folder) {
93                         Folder folder = (Folder) node.getUserObject();
94                         if (url.equals(folder.getUrl())) {
95                             scrollPathToVisible(new TreePath JavaDoc(node.getPath()));
96                             final int limit = getRowCount();
97                             for (int i = 0; i < limit; i++) {
98                                 TreePath JavaDoc treepath = getPathForRow(i);
99                                 if (treepath != null &&
100                                     treepath.getLastPathComponent() == node) {
101                                     row = i;
102                                     break;
103                                 }
104                             }
105                         }
106                     }
107                 }
108             }
109         }
110         if (row >= 0)
111             setSelectionRow(row);
112         else
113             clearSelection();
114         repaint();
115     }
116
117     public final String JavaDoc getLabelText()
118     {
119         return "Folders";
120     }
121
122     public void mousePressed(MouseEvent JavaDoc e) {}
123
124     public void mouseReleased(MouseEvent JavaDoc e) {}
125
126     public void mouseClicked(MouseEvent JavaDoc e)
127     {
128         final Editor editor = frame.getCurrentEditor();
129         final int modifiers = e.getModifiers();
130         if (modifiers != InputEvent.BUTTON1_MASK &&
131             modifiers != InputEvent.BUTTON2_MASK) {
132             e.consume();
133             editor.setFocusToDisplay();
134             return;
135         }
136         Point JavaDoc point = e.getPoint();
137         TreePath JavaDoc treePath = getPathForLocation(point.x, point.y);
138         if (treePath != null) {
139             DefaultMutableTreeNode JavaDoc node =
140                 (DefaultMutableTreeNode JavaDoc) treePath.getLastPathComponent();
141             Object JavaDoc object = node.getUserObject();
142             if (object instanceof Folder) {
143                 Folder folder = (Folder) object;
144                 MailboxURL url = folder.getUrl();
145                 editor.setWaitCursor();
146                 MailCommands.openMailbox(editor, url);
147                 editor.updateDisplay();
148                 editor.setDefaultCursor();
149             }
150         }
151         editor.setFocusToDisplay();
152     }
153
154     public void mouseEntered(MouseEvent JavaDoc e) {}
155
156     public void mouseExited(MouseEvent JavaDoc e)
157     {
158         updatePosition();
159         frame.getCurrentEditor().setFocusToDisplay();
160     }
161
162     private static class TreeCellRenderer extends DefaultTreeCellRenderer JavaDoc
163     {
164         private static final Color JavaDoc noFocusSelectionBackground =
165             new Color JavaDoc(208, 208, 208);
166
167         private JTree JavaDoc tree;
168         private Color JavaDoc oldBackgroundSelectionColor;
169
170         TreeCellRenderer(JTree JavaDoc tree)
171         {
172             super();
173             this.tree = tree;
174             oldBackgroundSelectionColor = getBackgroundSelectionColor();
175             setOpenIcon(Utilities.getIconFromFile("dir_open.png"));
176             setClosedIcon(Utilities.getIconFromFile("dir_close.png"));
177             setLeafIcon(Utilities.getIconFromFile("mailbox.png"));
178         }
179
180         public Component JavaDoc getTreeCellRendererComponent(
181             JTree JavaDoc tree,
182             Object JavaDoc value,
183             boolean selected,
184             boolean expanded,
185             boolean leaf,
186             int row,
187             boolean hasFocus)
188         {
189             super.getTreeCellRendererComponent(tree, value, selected, expanded,
190                 leaf, row, hasFocus);
191             if (selected)
192                 super.setForeground(getTextSelectionColor());
193             else
194                 super.setForeground(getTextNonSelectionColor());
195             if (Editor.getCurrentFrame().getFocusedComponent() == tree)
196                 setBackgroundSelectionColor(oldBackgroundSelectionColor);
197             else
198                 setBackgroundSelectionColor(noFocusSelectionBackground);
199             return this;
200         }
201
202         public void paintComponent(Graphics JavaDoc g)
203         {
204             Display.setRenderingHints(g);
205             super.paintComponent(g);
206         }
207     }
208 }
209
Popular Tags