KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > mail > gui > tree > util > FolderTreeCellRenderer


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

17 package org.columba.mail.gui.tree.util;
18
19 import java.awt.Component JavaDoc;
20 import java.awt.Font JavaDoc;
21
22 import javax.swing.Icon JavaDoc;
23 import javax.swing.JTree JavaDoc;
24 import javax.swing.UIManager JavaDoc;
25 import javax.swing.tree.DefaultTreeCellRenderer JavaDoc;
26
27 import org.columba.core.resourceloader.ImageLoader;
28 import org.columba.mail.config.IFolderItem;
29 import org.columba.mail.folder.IMailFolder;
30 import org.columba.mail.folder.IMailbox;
31 import org.columba.mail.folder.IMailboxInfo;
32 import org.columba.mail.folder.LocalRootFolder;
33 import org.columba.mail.folder.imap.IMAPRootFolder;
34 import org.columba.mail.folder.virtual.VirtualFolder;
35 import org.columba.mail.resourceloader.MailImageLoader;
36
37 /**
38  * This class is used for the mail folder tree.
39  */

40 public class FolderTreeCellRenderer extends DefaultTreeCellRenderer JavaDoc {
41     private static Icon JavaDoc expandedFolderIcon;
42
43     private static Icon JavaDoc collapsedFolderIcon;
44
45     private static Icon JavaDoc virtualFolderIcon;
46
47     private static Icon JavaDoc localRootFolderIcon;
48
49     private static Icon JavaDoc imapRootFolderIcon;
50
51     private static Icon JavaDoc inboxIcon;
52
53     private static Icon JavaDoc outboxIcon;
54
55     private static Icon JavaDoc trashIcon;
56
57     private static Icon JavaDoc templateIcon;
58
59     private static Icon JavaDoc sentIcon;
60
61     static {
62         collapsedFolderIcon = ImageLoader.getSmallIcon("folder.png");
63         expandedFolderIcon = ImageLoader.getSmallIcon("folder-open.png");
64         virtualFolderIcon = ImageLoader.getSmallIcon("folder-saved-search.png");
65         localRootFolderIcon = ImageLoader.getSmallIcon("computer.png");
66         imapRootFolderIcon = ImageLoader.getSmallIcon("network-server.png");
67         inboxIcon = MailImageLoader.getSmallIcon("folder-inbox-new.png");
68         outboxIcon = MailImageLoader.getSmallIcon("folder-outbox.png");
69
70         templateIcon = MailImageLoader.getSmallIcon("folder-template.png");
71         sentIcon = MailImageLoader.getSmallIcon("folder-sent.png");
72         trashIcon = ImageLoader.getSmallIcon("user-trash.png");
73     }
74
75     private Font JavaDoc plainFont;
76
77     private Font JavaDoc boldFont;
78
79     private Font JavaDoc italicFont;
80
81     /**
82      * Generates a new CellRenderer. In this contructor font and images are set
83      * to local variables. The fonts are depended on the current UIManager.
84      */

85     public FolderTreeCellRenderer() {
86         super();
87
88         boldFont = UIManager.getFont("Tree.font");
89         boldFont = boldFont.deriveFont(Font.BOLD);
90         italicFont = UIManager.getFont("Tree.font");
91         italicFont = italicFont.deriveFont(Font.ITALIC);
92         plainFont = UIManager.getFont("Tree.font");
93     }
94
95     /**
96      * The tooltip text and unseen counter for the current folder component are
97      * set. If the folder has unseen Messages the folder self is show as bold
98      * and the unseen message counter is added to the folder label. The folder
99      * gets a tooltip where infos (unseen, recent, total) are set. If the folder
100      * is an IMAP folder and not selectable the folder is set to italic with a
101      * darkgrey background.
102      */

103     public Component JavaDoc getTreeCellRendererComponent(JTree JavaDoc tree, Object JavaDoc value,
104             boolean isSelected, boolean expanded, boolean leaf, int row,
105             boolean hasFocusVar) {
106         /*
107          * RIYAD: Even though we don't do anything with this value, what it is
108          * doing is setting up the selection colors and such as implemented per
109          * the default cell rendered.
110          */

111         super.getTreeCellRendererComponent(tree, value, isSelected, expanded,
112                 leaf, row, hasFocusVar);
113
114         // setting default Values
115
// setFont(plainFont);
116
// setToolTipText("");
117

118         IMailFolder treeNode = (IMailFolder) value;
119         // setText(treeNode.getName());
120
// setIcon(getFolderIcon(treeNode, expanded));
121

122         if (value instanceof IMailbox) {
123             IMailbox folder = (IMailbox) value;
124
125             // getting folder info
126
IMailboxInfo info = folder.getMessageFolderInfo();
127
128             // get folder item configuration
129
IFolderItem item = folder.getConfiguration();
130
131             if (item == null)
132                 return this;
133
134             // set tooltip text
135
setToolTipText(createTooltipText(info));
136
137             // set label text
138
setText(createLabelText(info, item));
139
140         } else {
141             setText(treeNode.getName());
142         }
143
144         setIcon(getFolderIcon(treeNode, expanded));
145         return this;
146     }
147
148     /**
149      * Create HTML label text
150      *
151      * @param info
152      * mailbox info (total/unread/recent count)
153      * @param item
154      * folderitem containing xml-configuration
155      * @return label
156      */

157     private String JavaDoc createLabelText(IMailboxInfo info, IFolderItem item) {
158
159         // name of folder
160
String JavaDoc name = item.getString("property", "name");
161         // IMAP folder specific
162
// - Is this folder selectable (does it contain messages?)
163
boolean not_selectable = item.getBooleanWithDefault("selectable", true) == false;
164
165         if (not_selectable || info.getUnseen() > 0 || info.getRecent() > 0) {
166
167             StringBuffer JavaDoc buf;
168             // set label text
169
buf = new StringBuffer JavaDoc("<html><body>");
170
171             // if IMAP selectable folder
172
// -> lightgray font color and italic
173
if (not_selectable)
174                 buf.append("<i><font color='#333333'>");
175
176             if (info.getUnseen() > 0) {
177                 // draw folder name and unseen count
178
// -> using bold font
179
buf.append("<b>");
180
181                 // append unseen count to folder name
182
name = name + " (" + info.getUnseen() + ")";
183                 buf.append(name);
184
185                 buf.append("</b>");
186             } else
187                 buf.append(name);
188
189             // if IMAP selectable folder
190
if (not_selectable)
191                 buf.append("</i>");
192
193             if (info.getRecent() > 0) {
194                 // append recent message count
195
// -> using blue font
196
buf.append("<font color='blue'> (");
197                 buf.append(info.getRecent());
198                 buf.append(")");
199             }
200
201             buf.append("</body></html>");
202
203             return buf.toString();
204         } else {
205             return name;
206         }
207     }
208
209     /**
210      * Create HTML tooltip text.
211      *
212      * @param info
213      * mailboxinfo (total/unread/recent count)
214      * @return tooltip text
215      */

216     private String JavaDoc createTooltipText(IMailboxInfo info) {
217         StringBuffer JavaDoc buf = new StringBuffer JavaDoc();
218         buf.append("<html><body>&nbsp;Total: " + info.getExists());
219         buf.append("<br>&nbsp;Unseen: " + info.getUnseen());
220         buf.append("<br>&nbsp;Recent: " + info.getRecent());
221         buf.append("</body></html>");
222         return buf.toString();
223     }
224
225     /**
226      * Returns an icon suitable for the given folder.
227      */

228     public static Icon JavaDoc getFolderIcon(IMailFolder node, boolean expanded) {
229         if (node instanceof LocalRootFolder) {
230             return localRootFolderIcon;
231         } else if (node instanceof IMAPRootFolder) {
232             return imapRootFolderIcon;
233         } else if (node instanceof VirtualFolder) {
234             return virtualFolderIcon;
235         } else if (node instanceof IMailbox) {
236             IMailbox folder = (IMailbox) node;
237             if (folder.isInboxFolder()) {
238                 return inboxIcon;
239             } else if (folder.getId().equals("103")) {
240
241                 return outboxIcon;
242             } else if (folder.getId().equals("107")) {
243                 return templateIcon;
244             } else if (folder.getId().equals("104")) {
245                 return sentIcon;
246             } else if (folder.isTrashFolder()) {
247                 return trashIcon;
248             }
249         }
250         return expanded ? expandedFolderIcon : collapsedFolderIcon;
251     }
252 }
Popular Tags