KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > calendar > ui > dialog > RecurrenceDialog


1 package org.columba.calendar.ui.dialog;
2
3 import java.awt.BorderLayout JavaDoc;
4 import java.awt.Component JavaDoc;
5 import java.awt.Frame JavaDoc;
6 import java.awt.GridLayout JavaDoc;
7 import java.awt.event.ActionEvent JavaDoc;
8 import java.awt.event.ActionListener JavaDoc;
9 import java.awt.event.KeyEvent JavaDoc;
10
11 import javax.swing.BorderFactory JavaDoc;
12 import javax.swing.ButtonGroup JavaDoc;
13 import javax.swing.JComboBox JavaDoc;
14 import javax.swing.JComponent JavaDoc;
15 import javax.swing.JDialog JavaDoc;
16 import javax.swing.JPanel JavaDoc;
17 import javax.swing.JRadioButton JavaDoc;
18 import javax.swing.JTextField JavaDoc;
19 import javax.swing.KeyStroke JavaDoc;
20 import javax.swing.SwingConstants JavaDoc;
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 JavaDoc implements ActionListener JavaDoc {
39     
40     private static final String JavaDoc RECURRENCE_DAILY = "Daily";
41
42     private static final String JavaDoc RECURRENCE_WEEKLY = "Weekly";
43
44     private static final String JavaDoc RECURRENCE_MONTHLY = "Monthly";
45
46     private static final String JavaDoc 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     // frequency
55
JComboBox JavaDoc freqComboBox = new JComboBox JavaDoc();
56     
57     // no end
58
JRadioButton JavaDoc rNoEnd = new JRadioButton JavaDoc();
59
60     // maximum occurrences
61
JRadioButton JavaDoc rMaxOccurrences = new JRadioButton JavaDoc();
62     JTextField JavaDoc maxOccurrences = new JTextField JavaDoc("0");
63     
64     // end date
65
JRadioButton JavaDoc rUntilDate = new JRadioButton JavaDoc();
66     DatePicker endDatePicker;
67
68     public RecurrenceDialog(Frame JavaDoc parentFrame, IEventInfo model) {
69         super(parentFrame, true);
70
71         endDatePicker = new DatePicker();
72         
73         this.model = model;
74
75         setLayout(new BorderLayout JavaDoc());
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 JavaDoc createPanel() {
98         JPanel JavaDoc jpanel1 = new JPanel JavaDoc();
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         // enable all radio buttons
129
rNoEnd.setEnabled(true);
130         rMaxOccurrences.setEnabled(true);
131         rUntilDate.setEnabled(true);
132
133         ButtonGroup JavaDoc group = new ButtonGroup JavaDoc();
134         group.add(rNoEnd);
135         group.add(rMaxOccurrences);
136         group.add(rUntilDate);
137
138         rNoEnd.setSelected(true);
139         
140         // disable all
141
endDatePicker.setEnabled(false);
142         maxOccurrences.setEnabled(false);
143
144         return b.getPanel();
145     }
146     
147     private JPanel JavaDoc createMaxOccurrencesPanel() {
148         
149         JPanel JavaDoc panel = new JPanel JavaDoc();
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 JavaDoc createUntilDatePanel() {
169         JPanel JavaDoc panel = new JPanel JavaDoc();
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                 // it has to be set
205
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 JavaDoc(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                 // it has to be set
225
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 JavaDoc e) {
248                     // LOG.severe("no number!")
249
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 JavaDoc createButtonPanel() {
259         JPanel JavaDoc bottom = new JPanel JavaDoc();
260         bottom.setLayout(new BorderLayout JavaDoc());
261         bottom.setBorder(new SingleSideEtchedBorder(SwingConstants.TOP));
262
263         ButtonWithMnemonic cancelButton = new ButtonWithMnemonic(
264                 MailResourceLoader.getString("global", "cancel"));
265
266         //$NON-NLS-1$ //$NON-NLS-2$
267
cancelButton.addActionListener(this);
268         cancelButton.setActionCommand("CANCEL"); //$NON-NLS-1$
269

270         ButtonWithMnemonic okButton = new ButtonWithMnemonic(MailResourceLoader
271                 .getString("global", "ok"));
272
273         //$NON-NLS-1$ //$NON-NLS-2$
274
okButton.addActionListener(this);
275         okButton.setActionCommand("OK"); //$NON-NLS-1$
276
okButton.setDefaultCapable(true);
277         getRootPane().setDefaultButton(okButton);
278
279         ButtonWithMnemonic helpButton = new ButtonWithMnemonic(
280                 MailResourceLoader.getString("global", "help"));
281
282         // associate with JavaHelp
283
HelpManager.getInstance().enableHelpOnButton(helpButton,
284                 "configuring_columba");
285
286         JPanel JavaDoc buttonPanel = new JPanel JavaDoc();
287         buttonPanel.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12));
288         buttonPanel.setLayout(new GridLayout JavaDoc(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 JavaDoc arg0) {
303         String JavaDoc action = arg0.getActionCommand();
304         
305         if (action.equals("OK")) //$NON-NLS-1$
306
{
307             // check if the user entered valid data
308
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             // disable date picker
318
endDatePicker.setEnabled(false);
319             // enable max occurrences
320
maxOccurrences.setEnabled(true);
321         } else if (action.equals("until")) {
322             // disable max occurrences
323
maxOccurrences.setEnabled(false);
324             // enable until
325
endDatePicker.setEnabled(true);
326         } else if (action.equals("forever")) {
327             // disable other
328
endDatePicker.setEnabled(false);
329             maxOccurrences.setEnabled(false);
330         }
331     }
332
333     /**
334      * @return Returns the model.
335      */

336     public IEventInfo getModel() {
337         return model;
338     }
339
340 }
341
Popular Tags