KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > mail > gui > table > plugins > MultiLineRenderer


1 // The contents of this file are subject to the Mozilla Public License Version
2
// 1.1
3
//(the "License"); you may not use this file except in compliance with the
4
//License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
5
//
6
//Software distributed under the License is distributed on an "AS IS" basis,
7
//WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
8
//for the specific language governing rights and
9
//limitations under the License.
10
//
11
//The Original Code is "The Columba Project"
12
//
13
//The Initial Developers of the Original Code are Frederik Dietz and Timo
14
// Stich.
15
//Portions created by Frederik Dietz and Timo Stich are Copyright (C) 2003.
16
//
17
//All Rights Reserved.
18
package org.columba.mail.gui.table.plugins;
19
20 import java.awt.BorderLayout JavaDoc;
21 import java.awt.Color JavaDoc;
22 import java.awt.Component JavaDoc;
23 import java.awt.Font JavaDoc;
24
25 import javax.swing.BorderFactory JavaDoc;
26 import javax.swing.JLabel JavaDoc;
27 import javax.swing.JPanel JavaDoc;
28 import javax.swing.JTable JavaDoc;
29 import javax.swing.UIManager JavaDoc;
30 import javax.swing.border.Border JavaDoc;
31 import javax.swing.border.EmptyBorder JavaDoc;
32 import javax.swing.table.TableCellRenderer JavaDoc;
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 /**
42  * MultiLine renderer uses a two-row JPanel to display as much information as
43  * possible in a very narrow JTable column.
44  * <p>
45  * Horrible experimental hack - you have been warned!
46  *
47  * @author fdietz
48  */

49 public class MultiLineRenderer extends JPanel JavaDoc implements TableCellRenderer JavaDoc,
50         IExtensionInterface {
51
52     private static final java.util.logging.Logger JavaDoc LOG = java.util.logging.Logger
53             .getLogger("org.columba.mail.gui.table.plugins");
54
55     private Font JavaDoc plainFont;
56
57     private Font JavaDoc boldFont;
58
59     private Font JavaDoc underlinedFont;
60
61     protected static Border JavaDoc outterBorder = new EmptyBorder JavaDoc(2, 1, 2, 2);
62
63     protected static Border JavaDoc lineBorder = new HeaderSeparatorBorder(
64             new Color JavaDoc(248, 248, 248));
65
66     protected static Border JavaDoc noFocusBorder = BorderFactory.createCompoundBorder(
67             lineBorder, outterBorder);
68
69     // We need a place to store the color the JLabel should be returned
70
// to after its foreground and background colors have been set
71
// to the selection background color.
72
// These ivars will be made protected when their names are finalized.
73
private Color JavaDoc unselectedForeground;
74
75     private Color JavaDoc unselectedBackground;
76
77     private JLabel JavaDoc 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 JavaDoc());
103
104         statusRenderer = new StatusRenderer();
105         fromRenderer = new FromRenderer();
106         dateRenderer = new DateRenderer();
107         attachmentRenderer = new AttachmentRenderer();
108
109         subjectLabel = new JLabel JavaDoc();
110         subjectLabel.setForeground(Color.darkGray);
111
112         JPanel JavaDoc p3 = new JPanel JavaDoc();
113         p3.setBorder(BorderFactory.createEmptyBorder(0, 2, 0, 2));
114         p3.setOpaque(false);
115         p3.setLayout(new BorderLayout JavaDoc());
116         add(p3, BorderLayout.WEST);
117         p3.add(statusRenderer, BorderLayout.NORTH);
118
119         JPanel JavaDoc p = new JPanel JavaDoc();
120         p.setOpaque(false);
121         p.setLayout(new BorderLayout JavaDoc());
122         add(p, BorderLayout.CENTER);
123
124         JPanel JavaDoc p2 = new JPanel JavaDoc();
125         p2.setOpaque(false);
126         p2.setLayout(new BorderLayout JavaDoc());
127         // p2.setBorder(BorderFactory.createEmptyBorder(0,0,2,0));
128
p.add(p2, BorderLayout.NORTH);
129
130         p2.add(fromRenderer, BorderLayout.CENTER);
131         p2.add(dateRenderer, BorderLayout.EAST);
132
133         JPanel JavaDoc p4 = new JPanel JavaDoc();
134         p4.setOpaque(false);
135         p4.setLayout(new BorderLayout JavaDoc());
136         p.add(p4, BorderLayout.CENTER);
137
138         p4.add(subjectLabel, BorderLayout.CENTER);
139         p4.add(attachmentRenderer, BorderLayout.EAST);
140
141     }
142
143     /**
144      * @see javax.swing.table.TableCellRenderer#getTableCellRendererComponent(javax.swing.JTable,
145      * java.lang.Object, boolean, boolean, int, int)
146      */

147     public Component JavaDoc getTableCellRendererComponent(JTable JavaDoc table, Object JavaDoc 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             // setBorder(UIManager.getBorder("Table.focusCellHighlightBorder"));
166
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             // setBorder(noFocusBorder);
174
}
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         // TreePath path = tree.getPathForRow(row);
188
MessageNode messageNode = (MessageNode) value;
189
190         IColumbaHeader header = messageNode.getHeader();
191
192         if (header == null) {
193             LOG.info("header is null"); //$NON-NLS-1$
194

195             return this;
196         }
197
198         Flags flags = ((ColumbaHeader) header).getFlags();
199
200         if (flags != null) {
201             // mark as bold if message is unseen
202
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 JavaDoc msgColor = (Color JavaDoc) 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 JavaDoc subject = (String JavaDoc) 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