1 package org.columba.mail.gui.config.search; 17 18 import java.awt.BorderLayout ; 19 import java.awt.Dimension ; 20 import java.awt.GridLayout ; 21 import java.awt.event.ActionEvent ; 22 import java.awt.event.ActionListener ; 23 import java.awt.event.KeyEvent ; 24 25 import javax.swing.BorderFactory ; 26 import javax.swing.JButton ; 27 import javax.swing.JCheckBox ; 28 import javax.swing.JComboBox ; 29 import javax.swing.JComponent ; 30 import javax.swing.JDialog ; 31 import javax.swing.JLabel ; 32 import javax.swing.JPanel ; 33 import javax.swing.KeyStroke ; 34 import javax.swing.SwingConstants ; 35 36 import org.columba.api.gui.frame.IFrameMediator; 37 import org.columba.core.filter.FilterRule; 38 import org.columba.core.filter.IFilterRule; 39 import org.columba.core.folder.api.IFolder; 40 import org.columba.core.gui.base.ButtonWithMnemonic; 41 import org.columba.core.gui.base.CheckBoxWithMnemonic; 42 import org.columba.core.gui.base.LabelWithMnemonic; 43 import org.columba.core.gui.base.SingleSideEtchedBorder; 44 import org.columba.core.gui.util.DialogHeaderPanel; 45 import org.columba.core.resourceloader.IconKeys; 46 import org.columba.core.resourceloader.ImageLoader; 47 import org.columba.mail.command.MailFolderCommandReference; 48 import org.columba.mail.folder.IMailFolder; 49 import org.columba.mail.folder.IMailbox; 50 import org.columba.mail.folder.virtual.VirtualFolder; 51 import org.columba.mail.gui.config.filter.CriteriaList; 52 import org.columba.mail.gui.frame.MailFrameMediator; 53 import org.columba.mail.gui.tree.FolderTreeModel; 54 import org.columba.mail.gui.tree.util.SelectSearchFolderDialog; 55 import org.columba.mail.gui.tree.util.TreeNodeList; 56 import org.columba.mail.util.MailResourceLoader; 57 58 import com.jgoodies.forms.builder.PanelBuilder; 59 import com.jgoodies.forms.layout.CellConstraints; 60 import com.jgoodies.forms.layout.FormLayout; 61 62 68 public class SearchFrame extends JDialog implements ActionListener { 69 private JLabel folderLabel; 70 71 private JLabel nameLabel; 72 73 private JButton selectButton; 74 75 private JButton searchButton; 76 77 private JCheckBox includeSubfolderButton; 78 79 private CriteriaList criteriaList; 80 81 private VirtualFolder destFolder; 82 83 private JComboBox condList; 84 85 private IFrameMediator frameController; 86 87 public SearchFrame(IFrameMediator frameController, IMailbox searchFolder) { 88 super(frameController.getView().getFrame(), true); 89 90 this.frameController = frameController; 91 this.destFolder = (VirtualFolder) searchFolder; 92 93 setTitle(MailResourceLoader.getString("dialog", "filter", 94 "searchdialog_title")); 95 96 initComponents(); 97 updateComponents(true); 98 pack(); 99 setLocationRelativeTo(null); 100 setVisible(true); 101 } 102 103 public SearchFrame(IFrameMediator frameController, IMailbox searchFolder, 104 IMailbox sourceFolder) { 105 super(frameController.getView().getFrame(), true); 106 107 this.frameController = frameController; 108 this.destFolder = (VirtualFolder) searchFolder; 109 110 setTitle(MailResourceLoader.getString("dialog", "filter", 111 "searchdialog_title")); 112 113 initComponents(); 114 115 updateComponents(true); 116 117 setSourceFolder(sourceFolder); 118 119 pack(); 120 setLocationRelativeTo(null); 121 setVisible(true); 122 } 123 124 public JPanel createPanel() { 125 126 FormLayout formlayout1 = new FormLayout("6DLU,FILL:DEFAULT:GROW(1.0)", 127 "CENTER:DEFAULT:NONE,6DLU,CENTER:DEFAULT:NONE,6DLU,FILL:DEFAULT:GROW(1.0)"); 128 formlayout1.setRowGroups(new int[][] { { 5 } }); 129 CellConstraints cc = new CellConstraints(); 130 PanelBuilder builder = new PanelBuilder(formlayout1); 131 builder.setDefaultDialogBorder(); 132 133 builder.add(createPanel1(), cc.xywh(1, 1, 2, 1)); 134 135 builder.addSeparator(MailResourceLoader.getString("dialog", "filter", 136 "if"), cc.xywh(1, 3, 2, 1)); 137 138 builder.add(createPanel2(), cc.xy(2, 5)); 139 140 return builder.getPanel(); 141 } 142 143 public JPanel createPanel1() { 144 JPanel jpanel1 = new JPanel (); 145 FormLayout formlayout1 = new FormLayout( 146 "LEFT:DEFAULT:NONE,3DLU,FILL:DEFAULT:GROW(1.0),3DLU,FILL:DEFAULT:NONE", 147 "FILL:DEFAULT:NONE"); 148 CellConstraints cc = new CellConstraints(); 149 jpanel1.setLayout(formlayout1); 150 151 jpanel1.add(folderLabel, cc.xy(1, 1)); 152 153 jpanel1.add(selectButton, cc.xy(3, 1)); 154 155 jpanel1.add(includeSubfolderButton, cc.xy(5, 1)); 156 157 return jpanel1; 158 } 159 160 public JPanel createPanel2() { 161 JPanel jpanel1 = new JPanel (); 162 FormLayout formlayout1 = new FormLayout( 163 "FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),FILL:DEFAULT:NONE,3DLU,FILL:DEFAULT:NONE", 164 "FILL:DEFAULT:NONE,3DLU,FILL:DEFAULT:GROW(1.0)"); 165 CellConstraints cc = new CellConstraints(); 166 jpanel1.setLayout(formlayout1); 167 168 jpanel1.add(nameLabel, cc.xy(3, 1)); 169 170 jpanel1.add(condList, cc.xy(5, 1)); 171 172 jpanel1.add(criteriaList, cc.xywh(1, 3, 5, 1)); 173 174 return jpanel1; 175 } 176 177 180 protected void initComponents() { 181 182 folderLabel = new LabelWithMnemonic(MailResourceLoader.getString( 183 "dialog", "filter", "choose_folder")); 184 185 selectButton = new JButton (); 186 folderLabel.setLabelFor(selectButton); 187 selectButton.setActionCommand("SELECT"); 188 selectButton.addActionListener(this); 189 190 includeSubfolderButton = new CheckBoxWithMnemonic(MailResourceLoader 191 .getString("dialog", "filter", "include_subfolders")); 192 193 nameLabel = new LabelWithMnemonic(MailResourceLoader.getString( 194 "dialog", "filter", "execute_actions")); 195 196 String [] cond = { 197 MailResourceLoader 198 .getString("dialog", "filter", "all_criteria"), 199 MailResourceLoader 200 .getString("dialog", "filter", "any_criteria") }; 201 condList = new JComboBox (cond); 202 203 criteriaList = new CriteriaList(destFolder.getFilter()); 204 criteriaList.setPreferredSize(new Dimension (500, 100)); 205 206 getContentPane().setLayout(new BorderLayout ()); 207 getContentPane().add(createPanel(), BorderLayout.CENTER); 208 209 getContentPane().add(createBottomPanel(), BorderLayout.SOUTH); 210 211 getContentPane().add( 212 new DialogHeaderPanel(MailResourceLoader.getString("dialog", 213 "filter", "header_title"), MailResourceLoader 214 .getString("dialog", "filter", "header_description"), 215 ImageLoader.getIcon(IconKeys.SEARCH)), 216 BorderLayout.NORTH); 217 } 218 219 222 private JPanel createBottomPanel() { 223 JPanel bottom = new JPanel (new BorderLayout ()); 224 bottom.setBorder(new SingleSideEtchedBorder(SwingConstants.TOP)); 225 226 JPanel buttonPanel = new JPanel (new GridLayout (1, 3, 6, 0)); 227 buttonPanel.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12)); 228 searchButton = new JButton (MailResourceLoader.getString("dialog", 229 "filter", "search")); 230 searchButton.setIcon(ImageLoader.getIcon(IconKeys.SEARCH)); 231 searchButton.addActionListener(this); 232 searchButton.setActionCommand("SEARCH"); 233 buttonPanel.add(searchButton); 234 235 ButtonWithMnemonic closeButton = new ButtonWithMnemonic( 236 MailResourceLoader.getString("global", "close")); 237 closeButton.addActionListener(this); 238 closeButton.setActionCommand("CLOSE"); 239 buttonPanel.add(closeButton); 240 241 ButtonWithMnemonic helpButton = new ButtonWithMnemonic( 242 MailResourceLoader.getString("global", "help")); 243 helpButton.addActionListener(this); 244 helpButton.setActionCommand("HELP"); 245 helpButton.setEnabled(false); 246 buttonPanel.add(helpButton); 247 bottom.add(buttonPanel, BorderLayout.EAST); 248 249 getRootPane().setDefaultButton(searchButton); 250 getRootPane().registerKeyboardAction(this, "CLOSE", 251 KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), 252 JComponent.WHEN_IN_FOCUSED_WINDOW); 253 254 return bottom; 255 } 256 257 public void updateComponents(boolean b) { 258 if (b) { 259 IFilterRule filterRule = destFolder.getFilter().getFilterRule(); 260 String value = filterRule.getCondition(); 261 262 if (value.equals("matchall")) { 263 condList.setSelectedIndex(0); 264 } else { 265 condList.setSelectedIndex(1); 266 } 267 268 boolean isInclude = Boolean.valueOf( 269 destFolder.getConfiguration().getString("property", 270 "include_subfolders")).booleanValue(); 271 272 includeSubfolderButton.setSelected(isInclude); 273 274 String uid = destFolder.getConfiguration().getString("property", 275 "source_uid"); 276 277 IMailFolder f = (IMailFolder) FolderTreeModel.getInstance() 278 .getFolder(uid); 279 280 if (f == null) { 283 uid = "101"; 284 destFolder.getConfiguration().setString("property", 285 "source_uid", uid); 286 f = (IMailbox) FolderTreeModel.getInstance().getFolder(uid); 287 } 288 289 selectButton.setText(f.getTreePath()); 290 291 criteriaList.updateComponents(b); 292 } else { 293 IFilterRule filterRule = destFolder.getFilter().getFilterRule(); 295 int index = condList.getSelectedIndex(); 296 297 if (index == 0) { 298 filterRule.setCondition("matchall"); 299 } else { 300 filterRule.setCondition("matchany"); 301 } 302 303 if (includeSubfolderButton.isSelected()) { 304 destFolder.getConfiguration().setString("property", 305 "include_subfolders", "true"); 306 } else { 307 destFolder.getConfiguration().setString("property", 308 "include_subfolders", "false"); 309 } 310 311 String path = selectButton.getText(); 312 TreeNodeList list = new TreeNodeList(path); 313 IMailFolder folder = (IMailFolder) FolderTreeModel.getInstance() 314 .getFolder(list); 315 String uid = folder.getId(); 316 destFolder.getConfiguration().setString("property", "source_uid", 317 uid); 318 319 criteriaList.updateComponents(b); 320 } 321 } 322 323 public void setSourceFolder(IMailbox f) { 324 selectButton.setText(f.getTreePath()); 325 } 326 327 public void actionPerformed(ActionEvent e) { 328 String action = e.getActionCommand(); 329 330 if (action.equals("CLOSE")) { 331 updateComponents(false); 332 setVisible(false); 333 } else if (action.equals("ADD_CRITERION")) { 334 criteriaList.add(); 335 } else if (action.equals("SELECT")) { 336 SelectSearchFolderDialog dialog = new SelectSearchFolderDialog( 337 frameController); 338 339 if (dialog.success()) { 340 IFolder folder = dialog.getSelectedFolder(); 341 String path = folder.getTreePath(); 342 343 selectButton.setText(path); 344 } 345 } else if (action.equals("SEARCH")) { 346 updateComponents(false); 347 setVisible(false); 348 349 try { 350 ((VirtualFolder) destFolder).deactivate(); 353 ((VirtualFolder) destFolder).addSearchToHistory(); 354 } catch (Exception ex) { 355 ex.printStackTrace(); 356 } 357 358 MailFolderCommandReference r = new MailFolderCommandReference( 359 destFolder); 360 ((MailFrameMediator) frameController).setTreeSelection(r); 361 } 362 } 363 } | Popular Tags |