1 package org.columba.mail.gui.table; 17 18 import java.awt.Color ; 19 import java.awt.Component ; 20 import java.awt.Font ; 21 22 import javax.swing.JTable ; 23 import javax.swing.JTree ; 24 import javax.swing.UIManager ; 25 import javax.swing.table.TableColumn ; 26 import javax.swing.tree.DefaultTreeCellRenderer ; 27 28 import org.columba.mail.gui.table.model.MessageNode; 29 import org.columba.mail.message.ColumbaHeader; 30 import org.columba.mail.message.IColumbaHeader; 31 import org.columba.ristretto.message.Flags; 32 33 47 public class SubjectTreeRenderer extends DefaultTreeCellRenderer { 48 private Font plainFont; 49 50 private Font boldFont; 51 52 private Font underlinedFont; 53 54 private JTable table; 55 56 private TableColumn tc; 57 58 61 public SubjectTreeRenderer(JTable table) { 62 super(); 63 64 this.table = table; 65 66 boldFont = UIManager.getFont("Label.font"); 67 boldFont = boldFont.deriveFont(Font.BOLD); 68 69 plainFont = UIManager.getFont("Label.font"); 70 71 underlinedFont = UIManager.getFont("Tree.font"); 72 underlinedFont = underlinedFont.deriveFont(Font.ITALIC); 73 74 setOpaque(true); 75 76 setBackground(null); 77 setBackgroundNonSelectionColor(null); 78 } 79 80 public void setBounds(int x, int y, int w, int h) { 81 if (tc == null) { 82 tc = table.getColumn("Subject"); 83 } 84 85 super.setBounds(x, y, tc.getWidth() - x, h); 86 } 87 88 93 public Component getTreeCellRendererComponent(JTree tree, Object value, 94 boolean selected, boolean expanded, boolean leaf, int row, 95 boolean hasFocus) { 96 super.getTreeCellRendererComponent(tree, value, selected, expanded, 97 leaf, row, hasFocus); 98 99 MessageNode messageNode = (MessageNode) value; 100 101 if (messageNode.getUserObject().equals("root")) { 102 setText("..."); 103 setIcon(null); 104 105 return this; 106 } 107 108 IColumbaHeader header = messageNode.getHeader(); 109 110 if (header == null) { 111 return this; 112 } 113 114 Flags flags = ((ColumbaHeader) header).getFlags(); 115 116 if (flags != null) { 117 if (!flags.getSeen()) { 118 if (!getFont().equals(boldFont)) { 119 setFont(boldFont); 120 } 121 } else if (messageNode.isHasRecentChildren()) { 122 if (!getFont().equals(underlinedFont)) { 123 setFont(underlinedFont); 124 } 125 } else { 126 if (!getFont().equals(plainFont)) { 127 setFont(plainFont); 128 } 129 } 130 } 131 132 Color msgColor = (Color ) header.get("columba.color"); 133 134 if (selected) 135 setBackground(UIManager.getColor("Table.selectionBackground")); 136 else 137 setBackground(table.getBackground()); 138 139 if (msgColor != null) { 140 if (selected) 141 setForeground(UIManager.getColor("Table.selectionForeground")); 142 else { 143 if (msgColor.equals(Color.BLACK) == false) 144 setForeground(msgColor); 145 else 146 setForeground(table.getForeground()); 147 148 } 149 } 150 151 String subject = (String ) header.get("columba.subject"); 152 153 if (subject != null) { 154 setText(subject); 155 } else { 156 setText("null"); 157 } 158 159 setIcon(null); 160 161 return this; 162 } 163 164 } | Popular Tags |