1 package org.columba.mail.gui.table.plugins; 19 20 import java.awt.BorderLayout ; 21 import java.awt.Color ; 22 import java.awt.Component ; 23 import java.awt.Font ; 24 25 import javax.swing.BorderFactory ; 26 import javax.swing.JLabel ; 27 import javax.swing.JPanel ; 28 import javax.swing.JTable ; 29 import javax.swing.UIManager ; 30 import javax.swing.border.Border ; 31 import javax.swing.border.EmptyBorder ; 32 import javax.swing.table.TableCellRenderer ; 33 34 import org.columba.api.plugin.IExtensionInterface; 35 import org.columba.mail.gui.message.viewer.HeaderSeparatorBorder; 36 import org.columba.mail.gui.table.model.MessageNode; 37 import org.columba.mail.message.ColumbaHeader; 38 import org.columba.mail.message.IColumbaHeader; 39 import org.columba.ristretto.message.Flags; 40 41 49 public class MultiLineRenderer extends JPanel implements TableCellRenderer , 50 IExtensionInterface { 51 52 private static final java.util.logging.Logger LOG = java.util.logging.Logger 53 .getLogger("org.columba.mail.gui.table.plugins"); 54 55 private Font plainFont; 56 57 private Font boldFont; 58 59 private Font underlinedFont; 60 61 protected static Border outterBorder = new EmptyBorder (2, 1, 2, 2); 62 63 protected static Border lineBorder = new HeaderSeparatorBorder( 64 new Color (248, 248, 248)); 65 66 protected static Border noFocusBorder = BorderFactory.createCompoundBorder( 67 lineBorder, outterBorder); 68 69 private Color unselectedForeground; 74 75 private Color unselectedBackground; 76 77 private JLabel subjectLabel; 78 79 private AttachmentRenderer attachmentRenderer; 80 81 private StatusRenderer statusRenderer; 82 83 private FromRenderer fromRenderer; 84 85 private DateRenderer dateRenderer; 86 87 public MultiLineRenderer() { 88 boldFont = UIManager.getFont("Tree.font"); 89 boldFont = boldFont.deriveFont(Font.BOLD); 90 91 plainFont = UIManager.getFont("Tree.font"); 92 93 underlinedFont = UIManager.getFont("Tree.font"); 94 underlinedFont = underlinedFont.deriveFont(Font.ITALIC); 95 96 unselectedForeground = UIManager.getColor("Table.foreground"); 97 unselectedBackground = UIManager.getColor("Table.background"); 98 99 setOpaque(true); 100 setBorder(noFocusBorder); 101 102 setLayout(new BorderLayout ()); 103 104 statusRenderer = new StatusRenderer(); 105 fromRenderer = new FromRenderer(); 106 dateRenderer = new DateRenderer(); 107 attachmentRenderer = new AttachmentRenderer(); 108 109 subjectLabel = new JLabel (); 110 subjectLabel.setForeground(Color.darkGray); 111 112 JPanel p3 = new JPanel (); 113 p3.setBorder(BorderFactory.createEmptyBorder(0, 2, 0, 2)); 114 p3.setOpaque(false); 115 p3.setLayout(new BorderLayout ()); 116 add(p3, BorderLayout.WEST); 117 p3.add(statusRenderer, BorderLayout.NORTH); 118 119 JPanel p = new JPanel (); 120 p.setOpaque(false); 121 p.setLayout(new BorderLayout ()); 122 add(p, BorderLayout.CENTER); 123 124 JPanel p2 = new JPanel (); 125 p2.setOpaque(false); 126 p2.setLayout(new BorderLayout ()); 127 p.add(p2, BorderLayout.NORTH); 129 130 p2.add(fromRenderer, BorderLayout.CENTER); 131 p2.add(dateRenderer, BorderLayout.EAST); 132 133 JPanel p4 = new JPanel (); 134 p4.setOpaque(false); 135 p4.setLayout(new BorderLayout ()); 136 p.add(p4, BorderLayout.CENTER); 137 138 p4.add(subjectLabel, BorderLayout.CENTER); 139 p4.add(attachmentRenderer, BorderLayout.EAST); 140 141 } 142 143 147 public Component getTableCellRendererComponent(JTable table, Object value, 148 boolean isSelected, boolean hasFocus, int row, int column) { 149 150 if (isSelected) { 151 super.setForeground(table.getSelectionForeground()); 152 super.setBackground(table.getSelectionBackground()); 153 } else { 154 super 155 .setForeground((unselectedForeground != null) ? unselectedForeground 156 : table.getForeground()); 157 super 158 .setBackground((unselectedBackground != null) ? unselectedBackground 159 : table.getBackground()); 160 } 161 162 setFont(table.getFont()); 163 164 if (hasFocus) { 165 if (table.isCellEditable(row, column)) { 167 super.setForeground(UIManager 168 .getColor("Table.focusCellForeground")); 169 super.setBackground(UIManager 170 .getColor("Table.focusCellBackground")); 171 } 172 } else { 173 } 175 176 setBorder(noFocusBorder); 177 178 statusRenderer.getTableCellRendererComponent(table, value, isSelected, 179 hasFocus, row, column); 180 fromRenderer.getTableCellRendererComponent(table, value, isSelected, 181 hasFocus, row, column); 182 dateRenderer.getTableCellRendererComponent(table, value, isSelected, 183 hasFocus, row, column); 184 attachmentRenderer.getTableCellRendererComponent(table, value, 185 isSelected, hasFocus, row, column); 186 187 MessageNode messageNode = (MessageNode) value; 189 190 IColumbaHeader header = messageNode.getHeader(); 191 192 if (header == null) { 193 LOG.info("header is null"); 195 return this; 196 } 197 198 Flags flags = ((ColumbaHeader) header).getFlags(); 199 200 if (flags != null) { 201 if (!flags.getSeen()) { 203 if (!getFont().equals(boldFont)) { 204 setFont(boldFont); 205 } 206 } else if (messageNode.isHasRecentChildren()) { 207 if (!getFont().equals(underlinedFont)) { 208 setFont(underlinedFont); 209 } 210 } else if (!getFont().equals(plainFont)) { 211 setFont(plainFont); 212 } 213 } 214 215 Color msgColor = (Color ) header.get("columba.color"); 216 217 if (isSelected) 218 setBackground(UIManager.getColor("Table.selectionBackground")); 219 else 220 setBackground(table.getBackground()); 221 222 if (msgColor != null) { 223 if (isSelected) 224 setForeground(UIManager.getColor("Table.selectionForeground")); 225 else { 226 if (msgColor.equals(Color.BLACK) == false) 227 setForeground(msgColor); 228 else 229 setForeground(table.getForeground()); 230 231 } 232 } 233 234 String subject = (String ) header.get("columba.subject"); 235 if (isSelected) 236 subjectLabel.setForeground(UIManager 237 .getColor("Table.selectionForeground")); 238 else 239 subjectLabel.setForeground(Color.DARK_GRAY); 240 241 subjectLabel.setText(subject); 242 243 return this; 244 } 245 246 } 247 | Popular Tags |