1 package org.columba.mail.gui.config.filter; 19 20 import java.awt.BorderLayout ; 21 import java.awt.GridLayout ; 22 import java.awt.event.ActionEvent ; 23 import java.awt.event.ActionListener ; 24 import java.awt.event.KeyEvent ; 25 26 import javax.swing.BorderFactory ; 27 import javax.swing.JButton ; 28 import javax.swing.JComboBox ; 29 import javax.swing.JComponent ; 30 import javax.swing.JDialog ; 31 import javax.swing.JFrame ; 32 import javax.swing.JLabel ; 33 import javax.swing.JPanel ; 34 import javax.swing.JTextField ; 35 import javax.swing.KeyStroke ; 36 import javax.swing.SwingConstants ; 37 38 import org.columba.api.gui.frame.IFrameMediator; 39 import org.columba.core.filter.Filter; 40 import org.columba.core.filter.FilterRule; 41 import org.columba.core.filter.IFilter; 42 import org.columba.core.filter.IFilterRule; 43 import org.columba.core.gui.base.ButtonWithMnemonic; 44 import org.columba.core.gui.base.LabelWithMnemonic; 45 import org.columba.core.gui.base.SingleSideEtchedBorder; 46 import org.columba.core.help.HelpManager; 47 import org.columba.core.resourceloader.IconKeys; 48 import org.columba.core.resourceloader.ImageLoader; 49 import org.columba.mail.util.MailResourceLoader; 50 51 import com.jgoodies.forms.builder.PanelBuilder; 52 import com.jgoodies.forms.layout.CellConstraints; 53 import com.jgoodies.forms.layout.FormLayout; 54 55 56 public class FilterDialog extends JDialog implements ActionListener { 57 58 private JTextField nameTextField; 59 60 private JButton addActionButton; 61 62 private IFilter filter; 63 64 private JFrame frame; 65 66 private CriteriaList criteriaList; 67 68 private ActionList actionList; 69 70 private JComboBox condList; 71 72 private IFrameMediator mediator; 73 74 private JLabel nameLabel; 75 76 private JLabel executeActionLabel; 77 78 private JButton addCriteriaButton; 79 80 85 86 90 private boolean dialogWasCancelled = true; 91 92 public FilterDialog(IFrameMediator mediator, IFilter filter) { 93 super(mediator.getView().getFrame(), true); 94 95 this.mediator = mediator; 96 97 setTitle(MailResourceLoader.getString("dialog", "filter", 98 "dialog_title")); 99 this.filter = filter; 100 101 initComponents(); 103 updateComponents(true); 104 pack(); 105 setLocationRelativeTo(null); 106 setVisible(true); 107 } 108 109 private JPanel createPanel() { 110 111 FormLayout formlayout1 = new FormLayout( 112 "FILL:DEFAULT:NONE,6DLU,FILL:DEFAULT:GROW(1.0),CENTER:DEFAULT:NONE", 113 "CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,6DLU,CENTER:DEFAULT:NONE,3DLU,FILL:DEFAULT:GROW(1.0),6DLU,CENTER:DEFAULT:NONE,3DLU,FILL:DEFAULT:GROW(1.0),CENTER:DEFAULT:NONE"); 114 115 CellConstraints cc = new CellConstraints(); 116 PanelBuilder builder = new PanelBuilder(formlayout1); 117 118 builder.add(createPanel1(), cc.xywh(2, 2, 2, 1)); 119 120 builder.addSeparator(MailResourceLoader.getString("dialog", "filter", 121 "if"), cc.xywh(2, 4, 2, 1)); 122 123 builder.add(createPanel2(), cc.xy(3, 6)); 124 125 builder.addSeparator(MailResourceLoader.getString("dialog", "filter", 126 "then"), cc.xywh(2, 8, 2, 1)); 127 128 builder.add(createPanel3(), cc.xy(3, 10)); 129 130 builder.setDefaultDialogBorder(); 131 132 return builder.getPanel(); 133 } 134 135 private JPanel createPanel1() { 136 JPanel jpanel1 = new JPanel (); 137 FormLayout formlayout1 = new FormLayout( 138 "LEFT:DEFAULT:NONE,3DLU,FILL:DEFAULT:GROW(1.0)", 139 "FILL:DEFAULT:NONE"); 140 CellConstraints cc = new CellConstraints(); 141 jpanel1.setLayout(formlayout1); 142 143 jpanel1.add(nameLabel, cc.xy(1, 1)); 144 145 jpanel1.add(nameTextField, cc.xy(3, 1)); 146 147 return jpanel1; 148 } 149 150 private JPanel createPanel2() { 151 JPanel jpanel1 = new JPanel (); 152 FormLayout formlayout1 = new FormLayout( 153 "FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),FILL:DEFAULT:NONE,3DLU,FILL:DEFAULT:NONE", 154 "FILL:DEFAULT:NONE,3DLU,FILL:DEFAULT:GROW(1.0)"); 155 CellConstraints cc = new CellConstraints(); 156 jpanel1.setLayout(formlayout1); 157 158 160 jpanel1.add(executeActionLabel, cc.xy(3, 1)); 161 162 jpanel1.add(condList, cc.xy(5, 1)); 163 164 jpanel1.add(criteriaList, cc.xywh(1, 3, 5, 1)); 165 166 return jpanel1; 167 } 168 169 private JPanel createPanel3() { 170 JPanel jpanel1 = new JPanel (); 171 FormLayout formlayout1 = new FormLayout( 172 "FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0)", 173 "FILL:DEFAULT:NONE,3DLU,FILL:DEFAULT:GROW(1.0)"); 174 CellConstraints cc = new CellConstraints(); 175 jpanel1.setLayout(formlayout1); 176 177 179 jpanel1.add(actionList, cc.xywh(1, 3, 2, 1)); 180 181 return jpanel1; 182 } 183 184 private void initComponents() { 185 getContentPane().setLayout(new BorderLayout ()); 186 187 nameLabel = new LabelWithMnemonic(MailResourceLoader.getString( 188 "dialog", "filter", "filter_description")); 189 190 nameTextField = new JTextField (22); 191 nameLabel.setLabelFor(nameTextField); 192 193 executeActionLabel = new LabelWithMnemonic(MailResourceLoader 194 .getString("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 executeActionLabel.setLabelFor(condList); 203 204 criteriaList = new CriteriaList(filter); 205 206 addCriteriaButton = new ButtonWithMnemonic(MailResourceLoader 207 .getString("dialog", "filter", "add_criteria")); 208 addCriteriaButton.setIcon(ImageLoader.getIcon(IconKeys.LIST_ADD)); 209 addCriteriaButton.addActionListener(this); 210 addCriteriaButton.setActionCommand("ADD_CRITERIA"); 211 212 addActionButton = new ButtonWithMnemonic(MailResourceLoader.getString( 213 "dialog", "filter", "add_action")); 214 addActionButton.setIcon(ImageLoader.getIcon(IconKeys.LIST_REMOVE)); 215 addActionButton.addActionListener(this); 216 addActionButton.setActionCommand("ADD_ACTION"); 217 218 actionList = new ActionList(mediator, filter, frame); 219 220 getContentPane().add(createPanel(), BorderLayout.CENTER); 221 222 createBottomPanel(); 223 } 224 225 228 private void createBottomPanel() { 229 JPanel bottomPanel = new JPanel (new BorderLayout ()); 230 bottomPanel.setBorder(new SingleSideEtchedBorder(SwingConstants.TOP)); 231 232 JPanel buttonPanel = new JPanel (new GridLayout (1, 2, 6, 0)); 233 buttonPanel.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12)); 234 235 ButtonWithMnemonic okButton = new ButtonWithMnemonic(MailResourceLoader 236 .getString("global", "ok")); 237 okButton.setActionCommand("CLOSE"); okButton.addActionListener(this); 239 buttonPanel.add(okButton); 240 241 ButtonWithMnemonic cancelButton = new ButtonWithMnemonic( 242 MailResourceLoader.getString("global", "cancel")); 243 cancelButton.setActionCommand("CANCEL"); cancelButton.addActionListener(this); 245 buttonPanel.add(cancelButton); 246 247 ButtonWithMnemonic helpButton = new ButtonWithMnemonic( 248 MailResourceLoader.getString("global", "help")); 249 buttonPanel.add(helpButton); 250 bottomPanel.add(buttonPanel, BorderLayout.EAST); 251 getContentPane().add(bottomPanel, BorderLayout.SOUTH); 252 getRootPane().setDefaultButton(okButton); 253 getRootPane().registerKeyboardAction(this, "CANCEL", 254 KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), 255 JComponent.WHEN_IN_FOCUSED_WINDOW); 256 257 HelpManager.getInstance().enableHelpOnButton(helpButton, 259 "organizing_and_managing_your_email_3"); 260 HelpManager.getInstance().enableHelpKey(getRootPane(), 261 "organizing_and_managing_your_email_3"); 262 } 263 264 public void updateComponents(boolean b) { 265 if (b) { 266 criteriaList.updateComponents(b); 268 actionList.updateComponents(b); 269 270 nameTextField.setText(filter.getName()); 272 nameTextField.selectAll(); 273 274 IFilterRule filterRule = filter.getFilterRule(); 276 String value = filterRule.getCondition(); 277 278 if (value.equals("matchall")) { 279 condList.setSelectedIndex(0); 280 } else { 281 condList.setSelectedIndex(1); 282 } 283 } else { 284 criteriaList.updateComponents(b); 286 actionList.updateComponents(b); 287 288 filter.setName(nameTextField.getText()); 289 290 int index = condList.getSelectedIndex(); 291 IFilterRule filterRule = filter.getFilterRule(); 292 293 if (index == 0) { 294 filterRule.setCondition("matchall"); 295 } else { 296 filterRule.setCondition("matchany"); 297 } 298 } 299 } 300 301 public void actionPerformed(ActionEvent e) { 302 String action = e.getActionCommand(); 303 304 if (action.equals("CLOSE")) { 305 updateComponents(false); 306 setVisible(false); 307 308 dialogWasCancelled = false; 310 } else if (action.equals("CANCEL")) { 311 setVisible(false); 312 dialogWasCancelled = true; 313 } else if (action.equals("ADD_CRITERION")) { 314 criteriaList.add(); 315 } else if (action.equals("ADD_ACTION")) { 316 actionList.add(); 318 } 319 } 320 321 329 public boolean wasCancelled() { 330 return dialogWasCancelled; 331 } 332 } | Popular Tags |