KickJava   Java API By Example, From Geeks To Geeks.

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


1 // The contents of this file are subject to the Mozilla Public License Version
2
// 1.1
3
//(the "License"); you may not use this file except in compliance with the
4
//License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
5
//
6
//Software distributed under the License is distributed on an "AS IS" basis,
7
//WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
8
//for the specific language governing rights and
9
//limitations under the License.
10
//
11
//The Original Code is "The Columba Project"
12
//
13
//The Initial Developers of the Original Code are Frederik Dietz and Timo
14
// Stich.
15
//Portions created by Frederik Dietz and Timo Stich are Copyright (C) 2003.
16
//
17
//All Rights Reserved.
18
package org.columba.calendar.ui.dialog;
19
20 import java.awt.BorderLayout JavaDoc;
21 import java.awt.GridLayout JavaDoc;
22 import java.awt.event.ActionEvent JavaDoc;
23 import java.awt.event.ActionListener JavaDoc;
24 import java.awt.event.KeyEvent JavaDoc;
25 import java.util.Calendar JavaDoc;
26
27 import javax.swing.BorderFactory JavaDoc;
28 import javax.swing.JButton JavaDoc;
29 import javax.swing.JCheckBox JavaDoc;
30 import javax.swing.JComboBox JavaDoc;
31 import javax.swing.JComponent JavaDoc;
32 import javax.swing.JDialog JavaDoc;
33 import javax.swing.JFrame JavaDoc;
34 import javax.swing.JLabel JavaDoc;
35 import javax.swing.JPanel JavaDoc;
36 import javax.swing.JScrollPane JavaDoc;
37 import javax.swing.JTextArea JavaDoc;
38 import javax.swing.JTextField JavaDoc;
39 import javax.swing.KeyStroke JavaDoc;
40 import javax.swing.SwingConstants JavaDoc;
41
42 import org.columba.calendar.base.CalendarItem;
43 import org.columba.calendar.model.api.IEventInfo;
44 import org.columba.calendar.model.api.IRecurrence;
45 import org.columba.calendar.ui.comp.CalendarPicker;
46 import org.columba.calendar.ui.comp.DatePicker;
47 import org.columba.calendar.ui.comp.TimePicker;
48 import org.columba.core.gui.base.ButtonWithMnemonic;
49 import org.columba.core.gui.base.SingleSideEtchedBorder;
50 import org.columba.core.gui.util.DialogHeaderPanel;
51 import org.columba.core.help.HelpManager;
52 import org.columba.core.resourceloader.IconKeys;
53 import org.columba.core.resourceloader.ImageLoader;
54 import org.columba.mail.util.MailResourceLoader;
55
56 import com.jgoodies.forms.builder.PanelBuilder;
57 import com.jgoodies.forms.layout.CellConstraints;
58 import com.jgoodies.forms.layout.FormLayout;
59
60
61 public class EditEventDialog extends JDialog JavaDoc implements ActionListener JavaDoc {
62
63     JTextField JavaDoc summaryTextField = new JTextField JavaDoc();
64
65     JTextField JavaDoc locationTextField = new JTextField JavaDoc();
66
67     JTextArea JavaDoc descriptionTextArea = new JTextArea JavaDoc(3, 40);
68
69     JComboBox JavaDoc classComboBox = new JComboBox JavaDoc();
70
71     CalendarPicker calendarPicker = new CalendarPicker();
72
73     JTextField JavaDoc categoriesTextField = new JTextField JavaDoc();
74
75     JButton JavaDoc categoriesButton = new JButton JavaDoc();
76
77     JCheckBox JavaDoc allDayCheckBox = new JCheckBox JavaDoc();
78
79     TimePicker startTimePicker = new TimePicker();
80
81     TimePicker endTimePicker = new TimePicker();
82
83     JCheckBox JavaDoc alarmCheckBox = new JCheckBox JavaDoc();
84
85     JComboBox JavaDoc alarmComboBox = new JComboBox JavaDoc();
86
87     JButton JavaDoc alarmButton = new JButton JavaDoc();
88     
89     // click on this button will open the recurrence dialog
90
JButton JavaDoc recurrenceButton = new JButton JavaDoc();
91     JCheckBox JavaDoc recurrenceCheckBox = new JCheckBox JavaDoc();
92
93     DatePicker startDayDatePicker;
94
95     DatePicker endDayDatePicker;
96
97     boolean success = false;
98
99     private IEventInfo model;
100
101     public EditEventDialog(JFrame JavaDoc parentFrame, IEventInfo model) {
102         super(parentFrame, true);
103
104         this.model = model;
105
106         startDayDatePicker = new DatePicker();
107
108         endDayDatePicker = new DatePicker();
109
110         alarmComboBox.addItem("15 minutes before");
111         alarmComboBox.addItem("1 hour before");
112         alarmComboBox.addItem("1 day before");
113
114         classComboBox.addItem("Private");
115         classComboBox.addItem("Public");
116         classComboBox.addItem("Confidential");
117
118         descriptionTextArea.setEnabled(true);
119         categoriesButton.setEnabled(false);
120         categoriesTextField.setEnabled(false);
121         allDayCheckBox.setEnabled(true);
122         classComboBox.setEnabled(false);
123         
124         categoriesButton.setEnabled(false);
125         alarmButton.setEnabled(false);
126         alarmCheckBox.setEnabled(false);
127         alarmComboBox.setEnabled(false);
128         recurrenceButton.setEnabled(false);
129         
130         setLayout(new BorderLayout JavaDoc());
131         getContentPane().add(
132                 new DialogHeaderPanel("New Appointment",
133                         "Edit Appointment Properties", ImageLoader
134                                 .getIcon(IconKeys.USER)),
135                 BorderLayout.NORTH);
136         getContentPane().add(createPanel(), BorderLayout.CENTER);
137         getContentPane().add(createButtonPanel(), BorderLayout.SOUTH);
138
139         getRootPane().registerKeyboardAction(this, "CANCEL",
140                 KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0),
141                 JComponent.WHEN_IN_FOCUSED_WINDOW);
142
143         updateComponents(true);
144
145         pack();
146         setLocationRelativeTo(null);
147         setVisible(true);
148
149     }
150
151     private JPanel JavaDoc createButtonPanel() {
152         JPanel JavaDoc bottom = new JPanel JavaDoc();
153         bottom.setLayout(new BorderLayout JavaDoc());
154         bottom.setBorder(new SingleSideEtchedBorder(SwingConstants.TOP));
155
156         ButtonWithMnemonic cancelButton = new ButtonWithMnemonic(
157                 MailResourceLoader.getString("global", "cancel"));
158
159         //$NON-NLS-1$ //$NON-NLS-2$
160
cancelButton.addActionListener(this);
161         cancelButton.setActionCommand("CANCEL"); //$NON-NLS-1$
162

163         ButtonWithMnemonic okButton = new ButtonWithMnemonic(MailResourceLoader
164                 .getString("global", "ok"));
165
166         //$NON-NLS-1$ //$NON-NLS-2$
167
okButton.addActionListener(this);
168         okButton.setActionCommand("OK"); //$NON-NLS-1$
169
okButton.setDefaultCapable(true);
170         getRootPane().setDefaultButton(okButton);
171
172         ButtonWithMnemonic helpButton = new ButtonWithMnemonic(
173                 MailResourceLoader.getString("global", "help"));
174
175         // associate with JavaHelp
176
HelpManager.getInstance().enableHelpOnButton(helpButton,
177                 "configuring_columba");
178
179         JPanel JavaDoc buttonPanel = new JPanel JavaDoc();
180         buttonPanel.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12));
181         buttonPanel.setLayout(new GridLayout JavaDoc(1, 3, 6, 0));
182         buttonPanel.add(okButton);
183         buttonPanel.add(cancelButton);
184         buttonPanel.add(helpButton);
185
186         bottom.add(buttonPanel, BorderLayout.EAST);
187
188         return bottom;
189     }
190
191     private JPanel JavaDoc createPanel() {
192         JPanel JavaDoc jpanel1 = new JPanel JavaDoc();
193         FormLayout formlayout1 = new FormLayout(
194                 "FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),FILL:DEFAULT:NONE,FILL:DEFAULT:NONE",
195                 "3dlu,CENTER:DEFAULT:NONE,3dlu,FILL:DEFAULT:GROW(1.0),6dlu,CENTER:DEFAULT:NONE,3dlu,CENTER:DEFAULT:NONE,3dlu");
196         CellConstraints cc = new CellConstraints();
197         jpanel1.setLayout(formlayout1);
198
199         PanelBuilder b = new PanelBuilder(formlayout1);
200         b.setDefaultDialogBorder();
201
202         b.addSeparator("General Information", cc.xywh(2, 2, 2, 1));
203
204         b.add(createPanel1(), cc.xy(3, 4));
205
206         b.addSeparator("Date and Time", cc.xywh(2, 6, 2, 1));
207
208         b.add(createPanel2(), cc.xy(3, 8));
209
210         return b.getPanel();
211     }
212
213     private JPanel JavaDoc createPanel1() {
214         JPanel JavaDoc jpanel1 = new JPanel JavaDoc();
215         FormLayout formlayout1 = new FormLayout(
216                 "3dlu,FILL:DEFAULT:NONE,3dlu,FILL:DEFAULT:GROW(1.0),3dlu,FILL:DEFAULT:NONE,3dlu,FILL:DEFAULT:NONE",
217                 "3dlu,CENTER:DEFAULT:NONE,3dlu,CENTER:DEFAULT:NONE,3dlu,CENTER:DEFAULT:NONE,3dlu,CENTER:DEFAULT:NONE,3dlu,FILL:DEFAULT:GROW(1.0)");
218         CellConstraints cc = new CellConstraints();
219         jpanel1.setLayout(formlayout1);
220
221         JLabel JavaDoc jlabel1 = new JLabel JavaDoc();
222         jlabel1.setText("Summary:");
223         jpanel1.add(jlabel1, new CellConstraints(2, 2, CellConstraints.RIGHT,
224                 CellConstraints.DEFAULT));
225
226         JLabel JavaDoc jlabel2 = new JLabel JavaDoc();
227         jlabel2.setText("Location:");
228         jpanel1.add(jlabel2, new CellConstraints(2, 4, CellConstraints.RIGHT,
229                 CellConstraints.DEFAULT));
230
231         JLabel JavaDoc jlabel3 = new JLabel JavaDoc();
232         jlabel3.setText("Description:");
233         jpanel1.add(jlabel3, new CellConstraints(2, 10, 1, 1,
234                 CellConstraints.DEFAULT, CellConstraints.TOP));
235
236         JLabel JavaDoc jlabel4 = new JLabel JavaDoc();
237         jlabel4.setText("Class:");
238         jpanel1.add(jlabel4, new CellConstraints(2, 6, CellConstraints.RIGHT,
239                 CellConstraints.DEFAULT));
240
241         jpanel1.add(summaryTextField, cc.xywh(4, 2, 5, 1));
242
243         jpanel1.add(locationTextField, cc.xywh(4, 4, 5, 1));
244
245         JScrollPane JavaDoc jscrollpane1 = new JScrollPane JavaDoc();
246         jscrollpane1.setViewportView(descriptionTextArea);
247         jscrollpane1
248                 .setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
249         jscrollpane1
250                 .setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
251         jpanel1.add(jscrollpane1, cc.xywh(4, 10, 5, 1));
252
253         jpanel1.add(classComboBox, cc.xy(4, 6));
254
255         JLabel JavaDoc jlabel5 = new JLabel JavaDoc();
256         jlabel5.setText("Calendar:");
257         jpanel1.add(jlabel5, new CellConstraints(6, 6, CellConstraints.RIGHT,
258                 CellConstraints.DEFAULT));
259
260         jpanel1.add(calendarPicker, cc.xy(8, 6));
261
262         jpanel1.add(new JLabel JavaDoc("Categories:"), new CellConstraints(2, 8,
263                 CellConstraints.RIGHT, CellConstraints.DEFAULT));
264
265         jpanel1.add(categoriesTextField, cc.xywh(4, 8, 3, 1));
266
267         categoriesButton.setActionCommand("Categories...");
268         categoriesButton.setText("Select ...");
269         jpanel1.add(categoriesButton, cc.xy(8, 8));
270
271         return jpanel1;
272     }
273
274     private JPanel JavaDoc createPanel2() {
275         JPanel JavaDoc jpanel1 = new JPanel JavaDoc();
276         FormLayout formlayout1 = new FormLayout(
277                 "3dlu,FILL:DEFAULT:NONE,3dlu,FILL:DEFAULT:GROW(1.0),3dlu,FILL:DEFAULT:GROW(1.0),3dlu,FILL:DEFAULT:NONE",
278                 "3dlu,FILL:DEFAULT:NONE,3dlu,FILL:DEFAULT:NONE,3dlu,FILL:DEFAULT:NONE,3dlu,FILL:DEFAULT:NONE,3dlu");
279         CellConstraints cc = new CellConstraints();
280         jpanel1.setLayout(formlayout1);
281
282         JLabel JavaDoc jlabel1 = new JLabel JavaDoc();
283         jlabel1.setText("Start Time:");
284         jpanel1.add(jlabel1, new CellConstraints(2, 2, 1, 1,
285                 CellConstraints.RIGHT, CellConstraints.DEFAULT));
286
287         allDayCheckBox.setActionCommand("All Day");
288         allDayCheckBox.addActionListener(this);
289         allDayCheckBox.setText("All Day");
290         jpanel1.add(allDayCheckBox, cc.xy(8, 2));
291
292         JLabel JavaDoc jlabel2 = new JLabel JavaDoc();
293         jlabel2.setText("End Time:");
294         jpanel1.add(jlabel2, new CellConstraints(2, 4, 1, 1,
295                 CellConstraints.RIGHT, CellConstraints.DEFAULT));
296
297         jpanel1.add(startDayDatePicker, cc.xy(4, 2));
298
299         jpanel1.add(endDayDatePicker, cc.xy(4, 4));
300
301         jpanel1.add(startTimePicker, cc.xy(6, 2));
302
303         jpanel1.add(endTimePicker, cc.xy(6, 4));
304
305         alarmCheckBox.setActionCommand("Alarm");
306         alarmCheckBox.setText("Alarm");
307         jpanel1.add(alarmCheckBox, new CellConstraints(2, 6, 1, 1,
308                 CellConstraints.RIGHT, CellConstraints.DEFAULT));
309
310         jpanel1.add(createPanel3(), cc.xywh(4, 6, 3, 1));
311
312         recurrenceCheckBox.setText("Recurrence");
313         recurrenceCheckBox.setActionCommand("Recurrence");
314         recurrenceCheckBox.addActionListener(this);
315         jpanel1.add(recurrenceCheckBox, new CellConstraints(2, 8, 1, 1,
316                 CellConstraints.RIGHT, CellConstraints.DEFAULT));
317
318         jpanel1.add(createPanel4(), cc.xywh(4, 8, 3, 1));
319
320         return jpanel1;
321     }
322
323     private JPanel JavaDoc createPanel3() {
324         JPanel JavaDoc jpanel1 = new JPanel JavaDoc();
325         FormLayout formlayout1 = new FormLayout(
326                 "FILL:DEFAULT:GROW(1.0),3dlu,FILL:DEFAULT:NONE",
327                 "CENTER:DEFAULT:NONE");
328         CellConstraints cc = new CellConstraints();
329         jpanel1.setLayout(formlayout1);
330
331         jpanel1.add(alarmComboBox, cc.xy(1, 1));
332
333         alarmButton.setActionCommand("Customize...");
334         alarmButton.setText("Customize...");
335         jpanel1.add(alarmButton, cc.xy(3, 1));
336
337         return jpanel1;
338     }
339     
340     private JPanel JavaDoc createPanel4() {
341         JPanel JavaDoc jpanel4 = new JPanel JavaDoc();
342
343         FormLayout formlayout1 = new FormLayout(
344                 "CENTER:DEFAULT:NONE,3dlu,FILL:DEFAULT:NONE",
345                 "CENTER:DEFAULT:NONE");
346         CellConstraints cc = new CellConstraints();
347         jpanel4.setLayout(formlayout1);
348         
349         recurrenceButton.setActionCommand("RecurrenceDialog");
350         recurrenceButton.setText("Recurrence...");
351         recurrenceButton.addActionListener(this);
352         
353         jpanel4.add(recurrenceButton, cc.xy(1, 1));
354         return jpanel4;
355     }
356
357     public boolean success() {
358         return success;
359     }
360
361     public void updateComponents(boolean b) {
362         if (b) {
363             summaryTextField.setText(model.getEvent().getSummary());
364             locationTextField.setText(model.getEvent().getLocation());
365             categoriesTextField.setText(model.getEvent().getCategories());
366             descriptionTextArea.setText(model.getEvent().getDescription());
367             
368             if (model.getEvent().isAllDayEvent()) {
369                 // disable time pickers
370
startTimePicker.setEnabled(false);
371                 endTimePicker.setEnabled(false);
372             } else {
373                 // enable time pickers
374
startTimePicker.setEnabled(true);
375                 endTimePicker.setEnabled(true);
376             }
377
378             Calendar JavaDoc start = model.getEvent().getDtStart();
379             startDayDatePicker.setDate(start);
380             startTimePicker.setTime(start.get(Calendar.HOUR_OF_DAY), start.get(Calendar.MINUTE));
381             Calendar JavaDoc end = model.getEvent().getDtEnd();
382             endDayDatePicker.setDate(end);
383             endTimePicker.setTime(end.get(Calendar.HOUR_OF_DAY), end.get(Calendar.MINUTE));
384             
385             allDayCheckBox.setSelected(model.getEvent().isAllDayEvent());
386             
387             String JavaDoc calendar = model.getCalendar();
388             if ( calendar != null )
389                 calendarPicker.setSelectedItem(model.getCalendar());
390             else
391                 calendarPicker.setSelectedIndex(0);
392
393             if (model.getEvent().getRecurrence() != null && model.getEvent().getRecurrence().getType() != IRecurrence.RECURRENCE_NONE) {
394                 recurrenceCheckBox.setSelected(true);
395                 recurrenceButton.setEnabled(true);
396             }
397             
398             categoriesTextField.setText(model.getEvent().getCategories());
399             
400         } else {
401             model.getEvent().setSummary(summaryTextField.getText());
402             model.getEvent().setLocation(locationTextField.getText());
403             model.getEvent().setCategories(categoriesTextField.getText());
404             model.getEvent().setDescription(descriptionTextArea.getText());
405
406             Calendar JavaDoc start = startDayDatePicker.getDate();
407             Calendar JavaDoc end = endDayDatePicker.getDate();
408             int startHour = 0;
409             int startMinutes = 0;
410             int endHour = 0;
411             int endMinutes = 0;
412             
413             if (allDayCheckBox.isSelected()) {
414                 
415                 // disable time pickers
416
startTimePicker.setEnabled(false);
417                 endTimePicker.setEnabled(false);
418                 
419                 startHour = 0;
420                 startMinutes = 0;
421                 start.set(Calendar.HOUR_OF_DAY, startHour);
422                 start.set(Calendar.MINUTE, startMinutes);
423
424                 endHour = 0;
425                 endMinutes = 0;
426                 end.set(Calendar.HOUR_OF_DAY, endHour);
427                 end.set(Calendar.MINUTE, endMinutes);
428
429             } else {
430                 // enable time pickers
431
startTimePicker.setEnabled(true);
432                 endTimePicker.setEnabled(true);
433
434                 startHour = startTimePicker.getHour();
435                 startMinutes = startTimePicker.getMinutes();
436                 start.set(Calendar.HOUR_OF_DAY, startHour);
437                 start.set(Calendar.MINUTE, startMinutes);
438
439                 endHour = endTimePicker.getHour();
440                 endMinutes = endTimePicker.getMinutes();
441                 end.set(Calendar.HOUR_OF_DAY, endHour);
442                 end.set(Calendar.MINUTE, endMinutes);
443             }
444             
445             model.getEvent().setDtStart(start);
446
447             model.getEvent().setAllDayEvent(allDayCheckBox.isSelected());
448             
449             model.getEvent().setDtEnd(end);
450
451             CalendarItem calendar = (CalendarItem) calendarPicker.getSelectedItem();
452             model.setCalendar(calendar.getId());
453             
454             // update modification timestamp
455
model.getEvent().setDtStamp(Calendar.getInstance());
456             
457             model.getEvent().setCategories(categoriesTextField.getText());
458             
459             if (!recurrenceCheckBox.isSelected()) {
460                 if (model.getEvent().getRecurrence() != null)
461                     model.getEvent().setRecurrence(null);
462             }
463         }
464     }
465
466     public void actionPerformed(ActionEvent JavaDoc e) {
467         String JavaDoc action = e.getActionCommand();
468
469         if (action.equals("OK")) //$NON-NLS-1$
470
{
471             // check if the user entered valid data
472
success = true;
473
474             updateComponents(false);
475
476             setVisible(false);
477         } else if (action.equals("CANCEL")) {
478             success = false;
479             setVisible(false);
480         } else if (action.equals("All Day")) {
481             if (allDayCheckBox.isSelected()) {
482                 // disable time pickers
483
startTimePicker.setEnabled(false);
484                 endTimePicker.setEnabled(false);
485             } else {
486                 // enable time pickers
487
startTimePicker.setEnabled(true);
488                 endTimePicker.setEnabled(true);
489             }
490         } else if (action.equals("RecurrenceDialog")) {
491             RecurrenceDialog r = new RecurrenceDialog(null, model);
492             if (r.success()) {
493                 model = r.getModel();
494             }
495         } else if (action.equals("Recurrence")) {
496             if (recurrenceCheckBox.isSelected()) {
497                 // enable button
498
recurrenceButton.setEnabled(true);
499             } else {
500                 // disable button
501
recurrenceButton.setEnabled(false);
502             }
503         }
504     }
505
506     /**
507      * @return Returns the model.
508      */

509     public IEventInfo getModel() {
510         return model;
511     }
512
513 }
514
Popular Tags