1 17 package org.columba.mail.gui.tree.util; 18 19 import java.awt.Component ; 20 import java.awt.Font ; 21 22 import javax.swing.Icon ; 23 import javax.swing.JTree ; 24 import javax.swing.UIManager ; 25 import javax.swing.tree.DefaultTreeCellRenderer ; 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 40 public class FolderTreeCellRenderer extends DefaultTreeCellRenderer { 41 private static Icon expandedFolderIcon; 42 43 private static Icon collapsedFolderIcon; 44 45 private static Icon virtualFolderIcon; 46 47 private static Icon localRootFolderIcon; 48 49 private static Icon imapRootFolderIcon; 50 51 private static Icon inboxIcon; 52 53 private static Icon outboxIcon; 54 55 private static Icon trashIcon; 56 57 private static Icon templateIcon; 58 59 private static Icon 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 plainFont; 76 77 private Font boldFont; 78 79 private Font italicFont; 80 81 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 103 public Component getTreeCellRendererComponent(JTree tree, Object value, 104 boolean isSelected, boolean expanded, boolean leaf, int row, 105 boolean hasFocusVar) { 106 111 super.getTreeCellRendererComponent(tree, value, isSelected, expanded, 112 leaf, row, hasFocusVar); 113 114 118 IMailFolder treeNode = (IMailFolder) value; 119 122 if (value instanceof IMailbox) { 123 IMailbox folder = (IMailbox) value; 124 125 IMailboxInfo info = folder.getMessageFolderInfo(); 127 128 IFolderItem item = folder.getConfiguration(); 130 131 if (item == null) 132 return this; 133 134 setToolTipText(createTooltipText(info)); 136 137 setText(createLabelText(info, item)); 139 140 } else { 141 setText(treeNode.getName()); 142 } 143 144 setIcon(getFolderIcon(treeNode, expanded)); 145 return this; 146 } 147 148 157 private String createLabelText(IMailboxInfo info, IFolderItem item) { 158 159 String name = item.getString("property", "name"); 161 boolean not_selectable = item.getBooleanWithDefault("selectable", true) == false; 164 165 if (not_selectable || info.getUnseen() > 0 || info.getRecent() > 0) { 166 167 StringBuffer buf; 168 buf = new StringBuffer ("<html><body>"); 170 171 if (not_selectable) 174 buf.append("<i><font color='#333333'>"); 175 176 if (info.getUnseen() > 0) { 177 buf.append("<b>"); 180 181 name = name + " (" + info.getUnseen() + ")"; 183 buf.append(name); 184 185 buf.append("</b>"); 186 } else 187 buf.append(name); 188 189 if (not_selectable) 191 buf.append("</i>"); 192 193 if (info.getRecent() > 0) { 194 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 216 private String createTooltipText(IMailboxInfo info) { 217 StringBuffer buf = new StringBuffer (); 218 buf.append("<html><body> Total: " + info.getExists()); 219 buf.append("<br> Unseen: " + info.getUnseen()); 220 buf.append("<br> Recent: " + info.getRecent()); 221 buf.append("</body></html>"); 222 return buf.toString(); 223 } 224 225 228 public static Icon 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 |