1 package org.columba.core.gui.search; 2 3 import java.awt.BorderLayout ; 4 import java.awt.Component ; 5 import java.awt.event.MouseEvent ; 6 import java.util.Iterator ; 7 import java.util.List ; 8 9 import javax.swing.BorderFactory ; 10 import javax.swing.DefaultListModel ; 11 import javax.swing.ImageIcon ; 12 import javax.swing.JComponent ; 13 import javax.swing.JLabel ; 14 import javax.swing.JList ; 15 import javax.swing.JPanel ; 16 import javax.swing.ListCellRenderer ; 17 import javax.swing.UIManager ; 18 19 import org.columba.core.gui.base.DoubleClickListener; 20 import org.columba.core.gui.search.api.IResultPanel; 21 import org.columba.core.resourceloader.IconKeys; 22 import org.columba.core.resourceloader.ImageLoader; 23 import org.columba.core.search.api.IResultEvent; 24 import org.columba.core.search.api.ISearchResult; 25 import org.jdesktop.swingx.JXHyperlink; 26 import org.jdesktop.swingx.JXList; 27 import org.jdesktop.swingx.decorator.AlternateRowHighlighter; 28 import org.jdesktop.swingx.decorator.Highlighter; 29 import org.jdesktop.swingx.decorator.HighlighterPipeline; 30 31 public class GenericResultPanel extends JXList implements IResultPanel { 32 33 private String providerNamespace; 34 35 private DefaultListModel listModel; 36 37 private String providerName; 38 39 public GenericResultPanel(String providerName, String providerNamespace) { 40 super(); 41 42 this.providerName = providerName; 43 this.providerNamespace = providerNamespace; 44 45 listModel = new DefaultListModel (); 46 setModel(listModel); 47 setCellRenderer(new MyListCellRenderer()); 48 setBorder(null); 49 setHighlighters(new HighlighterPipeline( 50 new Highlighter[] { AlternateRowHighlighter.genericGrey })); 51 52 addMouseListener(new DoubleClickListener() { 53 54 @Override 55 public void doubleClick(MouseEvent event) { 56 } 58 }); 59 } 60 61 public String getSearchCriteriaTechnicalName() { 62 return providerName; 63 } 64 65 public String getProviderTechnicalName() { 66 return providerNamespace; 67 } 68 69 public void resultArrived(IResultEvent event) { 70 if (!event.getProviderName().equals(this.providerName)) 71 return; 72 73 List <ISearchResult> result = event.getSearchResults(); 74 75 Iterator <ISearchResult> it = result.iterator(); 76 while (it.hasNext()) { 77 listModel.addElement(it.next()); 78 } 79 80 revalidate(); 82 } 83 84 public void clearSearch(IResultEvent event) { 85 listModel.clear(); 86 } 87 88 class MyListCellRenderer extends JPanel implements ListCellRenderer { 89 91 private JXHyperlink titleLabel = new JXHyperlink(); 92 93 private JLabel descriptionLabel = new JLabel (); 94 95 private JPanel topPanel; 96 97 MyListCellRenderer() { 98 setLayout(new BorderLayout ()); 99 100 titleLabel.setClickedColor(UIManager.getColor("Label.foreground")); 101 titleLabel 102 .setUnclickedColor(UIManager.getColor("Label.foreground")); 103 titleLabel.setOpaque(false); 105 titleLabel.setBorderPainted(true); 106 107 topPanel = new JPanel (); 108 topPanel.setLayout(new BorderLayout ()); 109 110 topPanel.add(titleLabel, BorderLayout.CENTER); 112 113 add(topPanel, BorderLayout.NORTH); 114 add(descriptionLabel, BorderLayout.CENTER); 115 116 topPanel.setOpaque(true); 117 setOpaque(true); 118 119 setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2)); 120 121 } 122 123 public Component getListCellRendererComponent(JList list, Object value, 124 int index, boolean isSelected, boolean cellHasFocus) { 125 126 if (isSelected) { 127 setBackground(list.getSelectionBackground()); 128 setForeground(list.getSelectionForeground()); 129 130 topPanel.setBackground(list.getSelectionBackground()); 131 topPanel.setForeground(list.getSelectionForeground()); 132 } else { 133 setBackground(list.getBackground()); 134 setForeground(list.getForeground()); 135 topPanel.setBackground(list.getBackground()); 136 topPanel.setForeground(list.getForeground()); 137 } 138 139 ISearchResult result = (ISearchResult) value; 140 141 titleLabel.setText(result.getTitle()); 142 143 ImageIcon icon = null; 144 if (providerNamespace.equals("org.columba.contact")) 145 icon = ImageLoader.getSmallIcon(IconKeys.USER); 146 else if (providerNamespace.equals("org.columba.mail")) 147 icon = ImageLoader.getSmallIcon(IconKeys.COMPUTER); 148 149 titleLabel.setIcon(icon); 150 descriptionLabel.setText(result.getDescription()); 151 152 return this; 153 } 154 155 } 156 157 public JComponent getView() { 158 return this; 159 } 160 161 public ImageIcon getIcon() { 162 return null; 163 } 164 165 public String getTitle(String searchTerm) { 166 return providerName; 167 } 168 169 public String getDescription(String searchTerm) { 170 return providerNamespace; 171 } 172 173 public void reset(IResultEvent event) { 174 listModel.clear(); 175 } 176 177 public void finished(IResultEvent event) { 178 180 } 181 } 182 | Popular Tags |