1 package org.columba.mail.gui.filtertoolbar; 19 20 import java.awt.event.ActionEvent ; 21 import java.awt.event.ActionListener ; 22 import java.awt.event.ItemEvent ; 23 import java.awt.event.ItemListener ; 24 import java.awt.event.KeyEvent ; 25 import java.awt.event.KeyListener ; 26 27 import javax.swing.BorderFactory ; 28 import javax.swing.JButton ; 29 import javax.swing.JPanel ; 30 import javax.swing.JRadioButtonMenuItem ; 31 import javax.swing.JTextField ; 32 import javax.swing.event.DocumentEvent ; 33 import javax.swing.event.DocumentListener ; 34 35 import org.columba.api.selection.ISelectionListener; 36 import org.columba.api.selection.SelectionChangedEvent; 37 import org.columba.core.command.CommandProcessor; 38 import org.columba.core.filter.FilterCriteria; 39 import org.columba.core.folder.api.IFolder; 40 import org.columba.core.gui.base.ButtonWithMnemonic; 41 import org.columba.core.gui.base.ComboMenu; 42 import org.columba.core.gui.util.CTextField; 43 import org.columba.mail.command.IMailFolderCommandReference; 44 import org.columba.mail.command.MailFolderCommandReference; 45 import org.columba.mail.filter.MailFilterFactory; 46 import org.columba.mail.folder.IMailbox; 47 import org.columba.mail.folder.virtual.VirtualFolder; 48 import org.columba.mail.gui.config.search.SearchFrame; 49 import org.columba.mail.gui.frame.MailFrameMediator; 50 import org.columba.mail.gui.table.command.ViewHeaderListCommand; 51 import org.columba.mail.gui.tree.FolderTreeModel; 52 import org.columba.mail.resourceloader.MailImageLoader; 53 import org.columba.mail.util.MailResourceLoader; 54 55 import com.jgoodies.forms.builder.PanelBuilder; 56 import com.jgoodies.forms.layout.CellConstraints; 57 import com.jgoodies.forms.layout.FormLayout; 58 59 64 65 public class FilterToolbar extends JPanel implements ActionListener , 66 ItemListener , ISelectionListener { 67 68 public JButton clearButton; 69 70 private JButton searchButton; 71 72 private ComboMenu criteriaComboMenu; 73 74 private JTextField textField; 75 76 private MailFrameMediator frameMediator; 77 78 private IFolder sourceFolder; 79 80 private String selectedItem; 81 82 private boolean active; 83 84 String [] strs = new String [] { "subject_contains", "from_contains", 85 "to_contains", "cc_contains", "bcc_contains", "body_contains", 86 "separator", "unread_messages", "flagged_messages", 87 "high_priority", "spam_message", "separator", "custom_search" }; 88 89 private IFolder selectedFolder; 90 91 public FilterToolbar(MailFrameMediator frameMediator) { 92 super(); 93 this.frameMediator = frameMediator; 94 95 selectedItem = strs[0]; 96 97 initComponents(); 98 layoutComponents(); 99 100 frameMediator.registerTreeSelectionListener(this); 101 } 102 103 private ComboMenu createComboMenu() { 104 ComboMenu c = new ComboMenu(); 105 for (int i = 0; i < strs.length; i++) { 106 if (strs[i].equals("separator")) 107 c.addSeparator(); 108 else { 109 JRadioButtonMenuItem m = c.addMenuItem(strs[i], 110 MailResourceLoader.getString("filter", "filter", 111 strs[i])); 112 113 switch (i) { 114 case 7: 115 m.setIcon(MailImageLoader 116 .getSmallIcon("message-mail-unread.png")); 117 break; 118 case 8: 119 m.setIcon(MailImageLoader.getSmallIcon("flag.png")); 120 break; 121 case 9: 122 m 123 .setIcon(MailImageLoader 124 .getSmallIcon("priority-high.png")); 125 break; 126 case 10: 127 m.setIcon(MailImageLoader 128 .getSmallIcon("mail-mark-junk.png")); 129 break; 130 } 131 } 132 } 133 134 return c; 135 } 136 137 public void initComponents() { 138 139 criteriaComboMenu = createComboMenu(); 140 criteriaComboMenu.addItemListener(this); 141 142 textField = new CTextField(); 143 144 textField.addActionListener(this); 145 textField.setActionCommand("TEXTFIELD"); 146 textField.addKeyListener(new MyKeyListener()); 147 148 clearButton = new ButtonWithMnemonic(MailResourceLoader.getString( 149 "menu", "mainframe", "filtertoolbar_clear")); 150 clearButton.setToolTipText(MailResourceLoader.getString("menu", 151 "mainframe", "filtertoolbar_clear_tooltip")); 152 clearButton.setActionCommand("CLEAR"); 153 clearButton.addActionListener(this); 154 clearButton.setEnabled(false); 155 156 searchButton = new JButton ("Search"); 157 searchButton.setActionCommand("SEARCH"); 158 searchButton.addActionListener(this); 159 searchButton.setDefaultCapable(true); 160 searchButton.setEnabled(false); 161 } 162 163 public void layoutComponents() { 164 setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1)); 165 166 FormLayout l = new FormLayout( 167 "default, 3dlu, fill:default:grow, 3dlu, default, 3dlu, default", 168 "fill:default:grow"); 169 PanelBuilder b = new PanelBuilder(l, this); 170 171 CellConstraints c = new CellConstraints(); 172 173 b.add(criteriaComboMenu, c.xy(1, 1)); 174 175 b.add(textField, c.xy(3, 1)); 176 177 b.add(searchButton, c.xy(5, 1)); 178 179 b.add(clearButton, c.xy(7, 1)); 180 181 } 182 183 private int getIndex(String name) { 184 for (int i = 0; i < strs.length; i++) { 185 if (name.equals(strs[i])) 186 return i; 187 } 188 189 return -1; 190 } 191 192 public void actionPerformed(ActionEvent e) { 193 String action = e.getActionCommand(); 194 195 if (action.equals("SEARCH")) { 196 executeSearch(); 197 198 } else if (action.equals("CLEAR")) { 199 200 resetToolbar(); 201 202 MailFolderCommandReference r = new MailFolderCommandReference( 204 sourceFolder); 205 frameMediator.setTreeSelection(r); 206 207 frameMediator.setTableSelection(r); 208 CommandProcessor.getInstance().addOp( 209 new ViewHeaderListCommand(frameMediator, r)); 210 } 211 212 } 213 214 217 private void resetToolbar() { 218 active = false; 219 clearButton.setEnabled(false); 220 221 textField.setText(""); 222 } 223 224 227 private void executeSearch() { 228 clearButton.setEnabled(true); 229 active = true; 230 231 int index = getIndex(selectedItem); 233 234 FilterCriteria c = createFilterCriteria(index); 236 237 if (!selectedFolder.getId().equals("106")) 238 sourceFolder = selectedFolder; 239 240 VirtualFolder searchFolder = prepareSearchFolder(c, sourceFolder); 242 243 try { 244 searchFolder.addSearchToHistory(); 246 } catch (Exception e) { 247 e.printStackTrace(); 248 } 249 250 252 MailFolderCommandReference r = new MailFolderCommandReference( 253 searchFolder); 254 255 frameMediator.setTableSelection(r); 256 257 CommandProcessor.getInstance().addOp( 258 new ViewHeaderListCommand(frameMediator, r)); 259 } 260 261 268 private VirtualFolder prepareSearchFolder(FilterCriteria c, IFolder folder) { 269 VirtualFolder searchFolder = (VirtualFolder) FolderTreeModel 271 .getInstance().getFolder("106"); 272 273 searchFolder.getFilter().getFilterRule().removeAll(); 275 276 searchFolder.getFilter().getFilterRule().add(c); 278 279 searchFolder.getConfiguration().setString("property", 281 "include_subfolders", "false"); 282 283 String uid = folder.getId(); 284 285 searchFolder.getConfiguration().setString("property", "source_uid", 287 uid); 288 289 searchFolder.deactivate(); 290 291 return searchFolder; 292 } 293 294 301 private FilterCriteria createFilterCriteria(int index) { 302 String pattern = textField.getText(); 303 FilterCriteria c = null; 304 switch (index) { 305 306 case 0: 307 c = MailFilterFactory.createSubjectContains(pattern); 308 break; 309 case 1: 310 c = MailFilterFactory.createFromContains(pattern); 311 break; 312 case 2: 313 c = MailFilterFactory.createToContains(pattern); 314 break; 315 case 3: 316 c = MailFilterFactory.createCcContains(pattern); 317 break; 318 case 4: 319 c = MailFilterFactory.createBccContains(pattern); 320 break; 321 case 5: 322 c = MailFilterFactory.createBodyContains(pattern); 323 break; 324 case 7: 325 c = MailFilterFactory.createUnreadMessages(); 326 break; 327 case 8: 328 c = MailFilterFactory.createFlaggedMessages(); 329 break; 330 case 9: 331 c = MailFilterFactory.createHighPriority(); 332 break; 333 case 10: 334 c = MailFilterFactory.createSpamMessages(); 335 break; 336 337 } 338 339 return c; 340 } 341 342 public void setPattern(String pattern) { 343 textField.setText(pattern); 344 } 345 346 351 class MyKeyListener implements KeyListener { 352 public void keyTyped(KeyEvent e) { 353 } 354 355 public void keyPressed(KeyEvent e) { 356 } 357 358 public void keyReleased(KeyEvent e) { 359 char ch = e.getKeyChar(); 360 361 if (ch == KeyEvent.VK_ENTER) { 362 executeSearch(); 363 } 364 } 365 } 366 367 372 class MyDocumentListener implements DocumentListener { 373 374 public void insertUpdate(DocumentEvent e) { 375 update(); 376 } 377 378 public void removeUpdate(DocumentEvent e) { 379 update(); 380 } 381 382 public void changedUpdate(DocumentEvent e) { 383 } 385 386 public void update() { 387 if (sourceFolder == null) 388 return; 389 390 } 391 } 392 393 396 public void itemStateChanged(ItemEvent event) { 397 selectedItem = (String ) event.getItem(); 398 399 if (selectedItem.equals("custom_search")) { 401 executeCustomSearch(); 402 criteriaComboMenu.setSelectedItem(0); 403 return; 404 } 405 406 int selectedIndex = getIndex(selectedItem); 408 if (selectedIndex >= 0 && selectedIndex <= 5) { 409 textField.setEnabled(true); 410 textField.requestFocus(); 411 } else { 412 textField.setEnabled(false); 413 414 executeSearch(); 416 } 417 418 } 419 420 424 private void executeCustomSearch() { 425 IMailbox searchFolder = (IMailbox) FolderTreeModel.getInstance() 426 .getFolder("106"); 427 428 IMailbox folder = (IMailbox) frameMediator.getTableSelection() 429 .getSourceFolder(); 430 431 if (folder == null) { 432 return; 433 } 434 435 new SearchFrame(frameMediator, searchFolder, folder); 436 } 437 438 443 public void selectionChanged(SelectionChangedEvent e) { 444 IMailFolderCommandReference ref = frameMediator.getTreeSelection(); 446 447 if (ref != null) { 448 selectedFolder = ref.getSourceFolder(); 449 searchButton.setEnabled(true); 450 } else { 451 searchButton.setEnabled(false); 452 } 453 454 if (active) { 455 resetToolbar(); 456 active = false; 457 } 458 } 459 } | Popular Tags |