1 package org.columba.core.gui.search; 2 3 import java.awt.BorderLayout ; 4 import java.awt.Color ; 5 import java.awt.Font ; 6 import java.awt.event.ActionEvent ; 7 import java.awt.event.ActionListener ; 8 import java.util.Iterator ; 9 import java.util.List ; 10 import java.util.Vector ; 11 12 import javax.swing.BorderFactory ; 13 import javax.swing.ButtonGroup ; 14 import javax.swing.JButton ; 15 import javax.swing.JComponent ; 16 import javax.swing.JDialog ; 17 import javax.swing.JFrame ; 18 import javax.swing.JLabel ; 19 import javax.swing.JPanel ; 20 import javax.swing.JRadioButton ; 21 import javax.swing.SwingConstants ; 22 23 import org.columba.core.gui.base.SingleSideEtchedBorder; 24 import org.columba.core.gui.search.api.ICriteriaRenderer; 25 import org.columba.core.search.api.ISearchCriteria; 26 import org.columba.core.search.api.ISearchProvider; 27 28 import com.jgoodies.forms.builder.DefaultFormBuilder; 29 import com.jgoodies.forms.factories.ButtonBarFactory; 30 import com.jgoodies.forms.layout.FormLayout; 31 32 class SearchDialog extends JDialog { 33 34 private JRadioButton rb1; 35 36 private JRadioButton rb2; 37 38 private CriteriaPanel criteriaPanel; 39 40 private JButton searchButton; 41 42 private JButton helpButton; 43 44 private JButton clearButton; 45 46 private JButton closeButton; 47 48 private boolean success = false; 49 50 public SearchDialog(JFrame parent, Iterator <ISearchProvider> it) { 51 super(parent, true); 52 53 setUndecorated(true); 54 55 ((JPanel ) getContentPane()).setBorder(BorderFactory 59 .createLineBorder(Color.lightGray)); 60 61 initCriteriaPanel(it); 62 initComponents(); 63 layoutComponents(); 64 65 pack(); 66 67 initListeners(); 68 69 getRootPane().setDefaultButton(searchButton); 70 } 71 72 private void initListeners() { 73 searchButton.addActionListener(new ActionListener () { 74 public void actionPerformed(ActionEvent e) { 75 success = true; 76 setVisible(false); 77 } 78 }); 79 80 clearButton.addActionListener(new ActionListener () { 81 public void actionPerformed(ActionEvent e) { 82 criteriaPanel.clear(); 83 } 84 }); 85 86 closeButton.addActionListener(new ActionListener () { 87 public void actionPerformed(ActionEvent e) { 88 setVisible(false); 89 } 90 }); 91 } 92 93 @Override 94 public void setVisible(boolean b) { 95 super.setVisible(b); 96 97 if (b) 98 success = true; 99 } 100 101 private void layoutComponents() { 102 103 setLayout(new BorderLayout ()); 104 105 JPanel topPanel = new JPanel (); 106 topPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 0, 10)); 107 108 FormLayout layout = new FormLayout( 109 "left:default:grow, 12dlu, right:default, 3dlu, right:default", 110 ""); 111 112 DefaultFormBuilder builder = new DefaultFormBuilder(layout, topPanel); 114 115 builder.append(new JLabel ()); 116 builder.append(rb1); 117 builder.append(rb2); 118 119 add(topPanel, BorderLayout.NORTH); 120 add(criteriaPanel, BorderLayout.CENTER); 121 122 JPanel bottomPanel = ButtonBarFactory.buildHelpBar(helpButton, 123 searchButton, clearButton, closeButton); 124 125 bottomPanel.setBorder(BorderFactory.createCompoundBorder( 126 new SingleSideEtchedBorder(SwingConstants.TOP), BorderFactory 127 .createEmptyBorder(8, 8, 8, 8))); 128 129 add(bottomPanel, BorderLayout.SOUTH); 130 } 131 132 private void initCriteriaPanel(Iterator <ISearchProvider> it) { 133 criteriaPanel = new CriteriaPanel(); 134 criteriaPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10)); 135 136 boolean firstTime = true; 137 while (it.hasNext()) { 138 ISearchProvider p = it.next(); 139 System.out.println("provider=" + p.getName()); 140 141 JLabel label = new JLabel (p.getName()); 142 label.setIcon(p.getIcon()); 143 label.setFont(label.getFont().deriveFont(Font.BOLD)); 144 145 if (!firstTime) 146 label.setBorder(BorderFactory.createEmptyBorder(10, 0, 0, 0)); 147 else 148 firstTime = false; 149 150 criteriaPanel.addSeparator(label); 151 Iterator <ISearchCriteria> it2 = p.getAllCriteria("").listIterator(); 152 while (it2.hasNext()) { 153 ISearchCriteria c = it2.next(); 154 System.out.println("criteria=" + c.getName()); 155 156 ICriteriaRenderer r = p.getCriteriaRenderer(c 157 .getTechnicalName()); 158 if (r != null) 159 criteriaPanel.addRenderer(r); 160 } 161 162 } 163 } 164 165 private void initComponents() { 166 rb1 = new JRadioButton ("Match All Words"); 167 rb1.setOpaque(false); 168 rb1.setSelected(true); 169 rb2 = new JRadioButton ("Match Any"); 170 rb2.setOpaque(false); 171 ButtonGroup group = new ButtonGroup (); 172 group.add(rb1); 173 group.add(rb2); 174 175 searchButton = new JButton ("Search"); 176 searchButton.setMnemonic('s'); 177 searchButton.setDefaultCapable(true); 178 179 helpButton = new JButton ("Help"); 180 helpButton.setMnemonic('h'); 181 182 clearButton = new JButton ("Clear"); 183 clearButton.setMnemonic('l'); 184 185 closeButton = new JButton ("Close"); 186 closeButton.setMnemonic('c'); 187 188 } 189 190 public boolean isSuccess() { 191 return success; 192 } 193 194 public boolean isMatchAll() { 195 return rb1.isSelected(); 196 } 197 198 public Iterator <ICriteriaRenderer> getAllCriteriaRenderer() { 199 return criteriaPanel.getAllRenderers(); 200 } 201 202 class CriteriaPanel extends JPanel { 203 204 private List <ICriteriaRenderer> list = new Vector <ICriteriaRenderer>(); 205 206 private DefaultFormBuilder builder; 207 208 CriteriaPanel() { 209 210 FormLayout layout = new FormLayout( 211 "3dlu, right:default, 6dlu, left:default:grow, 12dlu, right:default, 6dlu, left:default:grow", 212 ""); 213 214 builder = new DefaultFormBuilder(layout, this); 216 builder.setLeadingColumnOffset(1); 217 } 218 219 public void addSeparator(JComponent c) { 220 221 builder.nextLine(); 222 builder.appendRow("default"); 223 builder.setLeadingColumnOffset(0); 224 builder.append(c, 6); 225 builder.nextLine(); 226 builder.setLeadingColumnOffset(1); 227 228 } 229 230 public void addRenderer(ICriteriaRenderer renderer) { 231 if (renderer == null) 232 throw new IllegalArgumentException ("renderer == null"); 233 234 list.add(renderer); 235 236 builder.append(renderer.getLabel()); 237 builder.append(renderer.getEditor()); 238 } 239 240 public void removeRenderer(ICriteriaRenderer renderer) { 241 list.remove(renderer); 242 } 243 244 public void removeRenderer(int index) { 245 list.remove(index); 246 } 247 248 public Iterator <ICriteriaRenderer> getAllRenderers() { 249 return list.listIterator(); 250 } 251 252 public void clear() { 253 Iterator <ICriteriaRenderer> it = getAllRenderers(); 254 while (it.hasNext()) { 255 ICriteriaRenderer r = it.next(); 256 r.clear(); 257 } 258 } 259 } 260 261 } 262 | Popular Tags |