1 package org.columba.calendar.ui.dialog; 2 3 import java.awt.BorderLayout ; 4 import java.awt.Component ; 5 import java.awt.Frame ; 6 import java.awt.GridLayout ; 7 import java.awt.event.ActionEvent ; 8 import java.awt.event.ActionListener ; 9 import java.awt.event.KeyEvent ; 10 11 import javax.swing.BorderFactory ; 12 import javax.swing.ButtonGroup ; 13 import javax.swing.JComboBox ; 14 import javax.swing.JComponent ; 15 import javax.swing.JDialog ; 16 import javax.swing.JPanel ; 17 import javax.swing.JRadioButton ; 18 import javax.swing.JTextField ; 19 import javax.swing.KeyStroke ; 20 import javax.swing.SwingConstants ; 21 22 import org.columba.calendar.model.Recurrence; 23 import org.columba.calendar.model.api.IEventInfo; 24 import org.columba.calendar.model.api.IRecurrence; 25 import org.columba.calendar.ui.comp.DatePicker; 26 import org.columba.core.gui.base.ButtonWithMnemonic; 27 import org.columba.core.gui.base.SingleSideEtchedBorder; 28 import org.columba.core.gui.util.DialogHeaderPanel; 29 import org.columba.core.help.HelpManager; 30 import org.columba.core.resourceloader.IconKeys; 31 import org.columba.core.resourceloader.ImageLoader; 32 import org.columba.mail.util.MailResourceLoader; 33 34 import com.jgoodies.forms.builder.PanelBuilder; 35 import com.jgoodies.forms.layout.CellConstraints; 36 import com.jgoodies.forms.layout.FormLayout; 37 38 public class RecurrenceDialog extends JDialog implements ActionListener { 39 40 private static final String RECURRENCE_DAILY = "Daily"; 41 42 private static final String RECURRENCE_WEEKLY = "Weekly"; 43 44 private static final String RECURRENCE_MONTHLY = "Monthly"; 45 46 private static final String RECURRENCE_ANNUALLY = "Annually"; 47 48 private static final IRecurrence DEFAULT_RECURRENCE = new Recurrence(Recurrence.RECURRENCE_DAILY); 49 50 private IEventInfo model; 51 52 private boolean success = false; 53 54 JComboBox freqComboBox = new JComboBox (); 56 57 JRadioButton rNoEnd = new JRadioButton (); 59 60 JRadioButton rMaxOccurrences = new JRadioButton (); 62 JTextField maxOccurrences = new JTextField ("0"); 63 64 JRadioButton rUntilDate = new JRadioButton (); 66 DatePicker endDatePicker; 67 68 public RecurrenceDialog(Frame parentFrame, IEventInfo model) { 69 super(parentFrame, true); 70 71 endDatePicker = new DatePicker(); 72 73 this.model = model; 74 75 setLayout(new BorderLayout ()); 76 getContentPane().add( 77 new DialogHeaderPanel("Recurrence", 78 "Edit Recurrence Properties", ImageLoader 79 .getIcon(IconKeys.USER)), 80 BorderLayout.NORTH); 81 getContentPane().add(createPanel(), BorderLayout.CENTER); 82 getContentPane().add(createButtonPanel(), BorderLayout.SOUTH); 83 84 getRootPane().registerKeyboardAction(this, "CANCEL", 85 KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), 86 JComponent.WHEN_IN_FOCUSED_WINDOW); 87 88 updateComponents(true); 89 90 pack(); 91 setLocationRelativeTo(null); 92 setVisible(true); 93 94 } 95 96 97 private Component createPanel() { 98 JPanel jpanel1 = new JPanel (); 99 FormLayout formlayout1 = new FormLayout( 100 "3dlu,FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),3dlu", 101 "3dlu,CENTER:DEFAULT:NONE,3dlu,FILL:DEFAULT:NONE,6dlu,FILL:DEFAULT:NONE,3dlu,FILL:DEFAULT:NONE,3dlu,FILL:DEFAULT:NONE,3dlu,FILL:DEFAULT:NONE,3dlu"); 102 CellConstraints cc = new CellConstraints(); 103 jpanel1.setLayout(formlayout1); 104 105 PanelBuilder b = new PanelBuilder(formlayout1); 106 b.setDefaultDialogBorder(); 107 108 b.addSeparator("Recurrence", cc.xywh(2, 2, 2, 1)); 109 110 freqComboBox.addItem(RECURRENCE_DAILY); 111 freqComboBox.addItem(RECURRENCE_WEEKLY); 112 freqComboBox.addItem(RECURRENCE_MONTHLY); 113 freqComboBox.addItem(RECURRENCE_ANNUALLY); 114 115 b.add(freqComboBox, cc.xy(3, 4)); 116 117 b.addSeparator("End", cc.xywh(2, 6, 2, 1)); 118 119 rNoEnd.setActionCommand("forever"); 120 rNoEnd.addActionListener(this); 121 rNoEnd.setText("Forever"); 122 b.add(rNoEnd, cc.xy(3, 8)); 123 124 b.add(createMaxOccurrencesPanel(), cc.xy(3, 10)); 125 126 b.add(createUntilDatePanel(), cc.xy(3,12)); 127 128 rNoEnd.setEnabled(true); 130 rMaxOccurrences.setEnabled(true); 131 rUntilDate.setEnabled(true); 132 133 ButtonGroup group = new ButtonGroup (); 134 group.add(rNoEnd); 135 group.add(rMaxOccurrences); 136 group.add(rUntilDate); 137 138 rNoEnd.setSelected(true); 139 140 endDatePicker.setEnabled(false); 142 maxOccurrences.setEnabled(false); 143 144 return b.getPanel(); 145 } 146 147 private JPanel createMaxOccurrencesPanel() { 148 149 JPanel panel = new JPanel (); 150 151 FormLayout formlayout1 = new FormLayout( 152 "FILL:DEFAULT:NONE,FILL:DEFAULT:NONE", 153 "CENTER:DEFAULT:NONE"); 154 CellConstraints cc = new CellConstraints(); 155 panel.setLayout(formlayout1); 156 157 rMaxOccurrences.setText("Maximum recurrences"); 158 rMaxOccurrences.setActionCommand("maximum"); 159 rMaxOccurrences.addActionListener(this); 160 panel.add(rMaxOccurrences, cc.xy(1, 1)); 161 162 maxOccurrences.setColumns(2); 163 panel.add(maxOccurrences, cc.xy(2, 1)); 164 165 return panel; 166 } 167 168 private JPanel createUntilDatePanel() { 169 JPanel panel = new JPanel (); 170 171 FormLayout formlayout1 = new FormLayout( 172 "FILL:DEFAULT:NONE,FILL:DEFAULT:NONE", 173 "CENTER:DEFAULT:NONE"); 174 CellConstraints cc = new CellConstraints(); 175 panel.setLayout(formlayout1); 176 177 rUntilDate.setText("Until "); 178 rUntilDate.setActionCommand("until"); 179 rUntilDate.addActionListener(this); 180 panel.add(rUntilDate, cc.xy(1, 1)); 181 panel.add(endDatePicker, cc.xy(2, 1)); 182 183 return panel; 184 185 } 186 187 188 private void updateComponents(boolean b) { 189 IRecurrence r = model.getEvent().getRecurrence(); 190 if (b) { 191 if (r == null) { 192 r = DEFAULT_RECURRENCE; 193 model.getEvent().setRecurrence(r); 194 } 195 if (r.getType() == IRecurrence.RECURRENCE_DAILY) { 196 freqComboBox.setSelectedItem(RECURRENCE_DAILY); 197 } else if (r.getType() == IRecurrence.RECURRENCE_WEEKLY) { 198 freqComboBox.setSelectedItem(RECURRENCE_WEEKLY); 199 } else if (r.getType() == IRecurrence.RECURRENCE_MONTHLY) { 200 freqComboBox.setSelectedItem(RECURRENCE_MONTHLY); 201 } else if (r.getType() == IRecurrence.RECURRENCE_ANNUALLY) { 202 freqComboBox.setSelectedItem(RECURRENCE_ANNUALLY); 203 } else { 204 freqComboBox.setSelectedItem(RECURRENCE_DAILY); 206 r.setType(IRecurrence.RECURRENCE_DAILY); 207 } 208 209 if (r.getEndType() == IRecurrence.RECURRENCE_END_FOREVER) { 210 rNoEnd.setSelected(true); 211 maxOccurrences.setEnabled(false); 212 endDatePicker.setEnabled(false); 213 } else if (r.getEndType() == IRecurrence.RECURRENCE_END_MAXOCCURRENCES) { 214 rMaxOccurrences.setSelected(true); 215 maxOccurrences.setEnabled(true); 216 endDatePicker.setEnabled(false); 217 maxOccurrences.setText((new Integer (r.getEndMaxOccurrences()).toString())); 218 } else if (r.getEndType() == IRecurrence.RECURRENCE_END_ENDDATE) { 219 rUntilDate.setSelected(true); 220 endDatePicker.setDate(r.getEndDate()); 221 maxOccurrences.setEnabled(false); 222 endDatePicker.setEnabled(true); 223 } else { 224 rNoEnd.setSelected(true); 226 maxOccurrences.setEnabled(false); 227 endDatePicker.setEnabled(false); 228 r.setEndType(IRecurrence.RECURRENCE_END_FOREVER); 229 } 230 } else { 231 if (freqComboBox.getSelectedItem().equals(RECURRENCE_DAILY)) { 232 r.setType(IRecurrence.RECURRENCE_DAILY); 233 } else if (freqComboBox.getSelectedItem().equals(RECURRENCE_WEEKLY)) { 234 r.setType(IRecurrence.RECURRENCE_WEEKLY); 235 } else if (freqComboBox.getSelectedItem().equals(RECURRENCE_MONTHLY)) { 236 r.setType(IRecurrence.RECURRENCE_MONTHLY); 237 } else if (freqComboBox.getSelectedItem().equals(RECURRENCE_ANNUALLY)) { 238 r.setType(IRecurrence.RECURRENCE_ANNUALLY); 239 } 240 241 if (rNoEnd.isSelected()) { 242 r.setEndType(IRecurrence.RECURRENCE_END_FOREVER); 243 } else if (rMaxOccurrences.isSelected()) { 244 r.setEndType(IRecurrence.RECURRENCE_END_MAXOCCURRENCES); 245 try { 246 r.setEndMaxOccurrences(Integer.parseInt(maxOccurrences.getText())); 247 } catch (NumberFormatException e) { 248 r.setEndMaxOccurrences(1); 250 } 251 } else if (rUntilDate.isSelected()) { 252 r.setEndType(IRecurrence.RECURRENCE_END_ENDDATE); 253 r.setEndDate(endDatePicker.getDate()); 254 } 255 } 256 } 257 258 private JPanel createButtonPanel() { 259 JPanel bottom = new JPanel (); 260 bottom.setLayout(new BorderLayout ()); 261 bottom.setBorder(new SingleSideEtchedBorder(SwingConstants.TOP)); 262 263 ButtonWithMnemonic cancelButton = new ButtonWithMnemonic( 264 MailResourceLoader.getString("global", "cancel")); 265 266 cancelButton.addActionListener(this); 268 cancelButton.setActionCommand("CANCEL"); 270 ButtonWithMnemonic okButton = new ButtonWithMnemonic(MailResourceLoader 271 .getString("global", "ok")); 272 273 okButton.addActionListener(this); 275 okButton.setActionCommand("OK"); okButton.setDefaultCapable(true); 277 getRootPane().setDefaultButton(okButton); 278 279 ButtonWithMnemonic helpButton = new ButtonWithMnemonic( 280 MailResourceLoader.getString("global", "help")); 281 282 HelpManager.getInstance().enableHelpOnButton(helpButton, 284 "configuring_columba"); 285 286 JPanel buttonPanel = new JPanel (); 287 buttonPanel.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12)); 288 buttonPanel.setLayout(new GridLayout (1, 3, 6, 0)); 289 buttonPanel.add(okButton); 290 buttonPanel.add(cancelButton); 291 buttonPanel.add(helpButton); 292 293 bottom.add(buttonPanel, BorderLayout.EAST); 294 295 return bottom; 296 } 297 298 public boolean success() { 299 return success; 300 } 301 302 public void actionPerformed(ActionEvent arg0) { 303 String action = arg0.getActionCommand(); 304 305 if (action.equals("OK")) { 307 success = true; 309 310 updateComponents(false); 311 312 setVisible(false); 313 } else if (action.equals("CANCEL")) { 314 success = false; 315 setVisible(false); 316 } else if (action.equals("maximum")) { 317 endDatePicker.setEnabled(false); 319 maxOccurrences.setEnabled(true); 321 } else if (action.equals("until")) { 322 maxOccurrences.setEnabled(false); 324 endDatePicker.setEnabled(true); 326 } else if (action.equals("forever")) { 327 endDatePicker.setEnabled(false); 329 maxOccurrences.setEnabled(false); 330 } 331 } 332 333 336 public IEventInfo getModel() { 337 return model; 338 } 339 340 } 341 | Popular Tags |