1 package org.columba.contact.gui.box; 2 3 import java.awt.BorderLayout ; 4 import java.awt.Color ; 5 import java.awt.Component ; 6 import java.awt.Graphics ; 7 import java.awt.Insets ; 8 import java.util.Iterator ; 9 import java.util.List ; 10 11 import javax.swing.BorderFactory ; 12 import javax.swing.JLabel ; 13 import javax.swing.JList ; 14 import javax.swing.JPanel ; 15 import javax.swing.JTextField ; 16 import javax.swing.ListCellRenderer ; 17 import javax.swing.ListModel ; 18 import javax.swing.border.AbstractBorder ; 19 import javax.swing.border.Border ; 20 21 import org.columba.addressbook.model.IContactModelPartial; 22 import org.columba.core.resourceloader.IconKeys; 23 import org.columba.core.resourceloader.ImageLoader; 24 import org.jdesktop.swingx.JXHyperlink; 25 import org.jdesktop.swingx.JXList; 26 import org.jdesktop.swingx.decorator.Highlighter; 27 import org.jdesktop.swingx.decorator.HighlighterPipeline; 28 import org.jdesktop.swingx.decorator.RolloverHighlighter; 29 30 class ContactList extends JXList { 31 32 public ContactList() { 33 super(); 34 35 setCellRenderer(new MyListCellRenderer()); 36 37 setBorder(null); 38 setHighlighters(new HighlighterPipeline( 39 new Highlighter[] { new RolloverHighlighter(new Color (248, 248, 40 248), Color.white) })); 41 setRolloverEnabled(true); 42 43 } 44 45 public void addAll(List <IContactModelPartial> list) { 46 Iterator <IContactModelPartial> it = list.iterator(); 47 while (it.hasNext()) { 48 addElement(it.next()); 49 } 50 } 51 52 public void add(IContactModelPartial result) { 53 addElement(result); 54 } 55 56 60 61 64 65 public void installJTextField(JTextField input) { 66 if (input != null) { 67 FilteringModel model = (FilteringModel) getModel(); 68 input.getDocument().addDocumentListener(model); 69 } 70 } 71 72 75 76 public void uninstallJTextField(JTextField input) { 77 if (input != null) { 78 FilteringModel model = (FilteringModel) getModel(); 79 input.getDocument().removeDocumentListener(model); 80 } 81 } 82 83 86 87 public void setModel(ListModel model) { 88 if (!(model instanceof FilteringModel)) { 89 throw new IllegalArgumentException (); 90 } else { 91 super.setModel(model); 92 } 93 } 94 95 98 public void addElement(IContactModelPartial element) { 99 ((FilteringModel) getModel()).addElement(element); 100 } 101 102 class MyListCellRenderer extends JPanel implements ListCellRenderer { 103 104 private JLabel iconLabel = new JLabel (); 105 106 private JLabel titleLabel = new JLabel (); 107 108 private JXHyperlink descriptionLabel = new JXHyperlink(); 109 110 private JPanel centerPanel; 111 112 private Border lineBorder = new HeaderSeparatorBorder(new Color (230, 113 230, 230)); 114 115 MyListCellRenderer() { 116 setLayout(new BorderLayout ()); 117 118 centerPanel = new JPanel (); 119 centerPanel.setLayout(new BorderLayout ()); 120 121 centerPanel.add(titleLabel, BorderLayout.NORTH); 122 centerPanel.add(descriptionLabel, BorderLayout.CENTER); 123 add(iconLabel, BorderLayout.WEST); 124 add(centerPanel, BorderLayout.CENTER); 125 126 setBorder(BorderFactory.createCompoundBorder(lineBorder, 127 BorderFactory.createEmptyBorder(2, 2, 2, 2))); 128 iconLabel.setBorder(BorderFactory.createEmptyBorder(2, 4, 2, 4)); 129 130 centerPanel.setOpaque(false); 131 setOpaque(true); 132 133 } 134 135 public Component getListCellRendererComponent(JList list, Object value, 136 int index, boolean isSelected, boolean cellHasFocus) { 137 138 if (isSelected) { 139 setBackground(list.getSelectionBackground()); 140 setForeground(list.getSelectionForeground()); 141 } else { 142 setBackground(list.getBackground()); 143 setForeground(list.getForeground()); 144 } 145 146 IContactModelPartial result = (IContactModelPartial) value; 147 148 titleLabel.setText(result.getName()); 149 iconLabel.setIcon(ImageLoader.getSmallIcon(IconKeys.USER)); 150 descriptionLabel.setText(result.getAddress()); 151 152 return this; 153 } 154 155 } 156 157 class HeaderSeparatorBorder extends AbstractBorder { 158 159 protected Color color; 160 161 public HeaderSeparatorBorder(Color color) { 162 super(); 163 164 this.color = color; 165 } 166 167 184 public void paintBorder(Component c, Graphics g, int x, int y, 185 int width, int height) { 186 Color oldColor = g.getColor(); 187 g.setColor(color); 188 g.drawLine(x, y + height - 1, x + width - 1, y + height - 1); 189 190 g.setColor(oldColor); 191 } 192 193 199 public Insets getBorderInsets(Component c) { 200 return new Insets (0, 0, 1, 0); 201 } 202 203 211 public Insets getBorderInsets(Component c, Insets insets) { 212 insets.left = insets.top = insets.right = insets.bottom = 1; 213 return insets; 214 } 215 216 } 217 } 218 | Popular Tags |