KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > lucane > applications > calendar > gui > EventDescriptionPanel


1 /*
2  * Lucane - a collaborative platform
3  * Copyright (C) 2004 Vincent Fiack <vfiack@mail15.com>
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18  */

19
20 package org.lucane.applications.calendar.gui;
21
22 import java.awt.*;
23 import java.awt.event.*;
24 import java.util.*;
25
26 import javax.swing.*;
27
28 import org.lucane.client.Client;
29 import org.lucane.client.widgets.DialogBox;
30 import org.lucane.client.widgets.HTMLEditor;
31 import org.lucane.applications.calendar.*;
32 import org.lucane.applications.calendar.Event;
33
34 public class EventDescriptionPanel extends JPanel
35 implements ActionListener
36 {
37     private transient CalendarPlugin plugin;
38     private Event event;
39     
40     private Calendar start;
41     private Calendar end;
42     
43     private JComboBox type;
44     private JTextField title;
45     private JTextField organizer;
46     private JCheckBox isPublic;
47     private JCheckBox isEditable;
48     private JComboBox startDay;
49     private JComboBox startMonth;
50     private JComboBox startYear;
51     private JComboBox startHour;
52     private JComboBox startMinute;
53     private JButton btnFindFreeTime;
54     private JComboBox endDay;
55     private JComboBox endMonth;
56     private JComboBox endYear;
57     private JComboBox endHour;
58     private JComboBox endMinute;
59     private JComboBox recurence;
60     private HTMLEditor description;
61     
62     public EventDescriptionPanel(CalendarPlugin plugin, Event event)
63     {
64         super(new BorderLayout());
65         
66         this.plugin = plugin;
67         this.event = event;
68         
69         this.start = Calendar.getInstance();
70         this.start.setTime(event.getStartDate());
71         this.end = Calendar.getInstance();
72         this.end.setTime(event.getEndDate());
73         
74         try {
75             initFields();
76         } catch(Exception JavaDoc e) {
77             DialogBox.error(tr("err.unableToGetEventData"));
78             e.printStackTrace();
79         }
80         
81         JPanel top = new JPanel(new BorderLayout());
82         
83         //-- labels
84
JPanel labels = new JPanel(new GridLayout(0, 1));
85         labels.add(new JLabel(tr("event.title")));
86         labels.add(new JLabel(tr("event.type")));
87         labels.add(new JLabel(tr("event.recurence")));
88         labels.add(new JLabel(tr("event.organizer")));
89         labels.add(new JLabel(tr("event.public")));
90         labels.add(new JLabel(tr("event.editable")));
91         labels.add(new JLabel(tr("event.start")));
92         labels.add(new JLabel(tr("event.end")));
93         top.add(labels, BorderLayout.WEST);
94         
95         //-- fields
96
JPanel container;
97         JPanel date;
98         JPanel fields = new JPanel(new GridLayout(0, 1));
99         fields.add(title);
100         fields.add(type);
101         fields.add(recurence);
102         fields.add(organizer);
103         fields.add(isPublic);
104         fields.add(isEditable);
105         
106         date = new JPanel(new BorderLayout());
107         date.add(startDay, BorderLayout.WEST);
108         date.add(startMonth, BorderLayout.CENTER);
109         date.add(startYear, BorderLayout.EAST);
110         container = new JPanel(new BorderLayout());
111         container.add(date, BorderLayout.CENTER);
112         JPanel start = new JPanel(new GridLayout(1, 2));
113         start.add(startHour);
114         start.add(startMinute);
115         start.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 10));
116         container.add(start, BorderLayout.EAST);
117         
118         JPanel hollyShit = new JPanel(new BorderLayout());
119         hollyShit.add(container, BorderLayout.WEST);
120         hollyShit.add(btnFindFreeTime, BorderLayout.EAST);
121         
122         JPanel dateContainer = new JPanel(new BorderLayout());
123         dateContainer.add(hollyShit, BorderLayout.WEST);
124         fields.add(dateContainer);
125         
126         date = new JPanel(new BorderLayout());
127         date.add(endDay, BorderLayout.WEST);
128         date.add(endMonth, BorderLayout.CENTER);
129         date.add(endYear, BorderLayout.EAST);
130         container = new JPanel(new BorderLayout());
131         container.add(date, BorderLayout.CENTER);
132         JPanel end = new JPanel(new GridLayout(1, 2));
133         end.add(endHour);
134         end.add(endMinute);
135         end.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0));
136         container.add(end, BorderLayout.EAST);
137         dateContainer = new JPanel(new BorderLayout());
138         dateContainer.add(container, BorderLayout.WEST);
139         fields.add(dateContainer);
140
141         top.add(fields, BorderLayout.CENTER);
142         
143         this.add(top, BorderLayout.NORTH);
144         this.add(description, BorderLayout.CENTER);
145     }
146     
147     private void initFields()
148     throws Exception JavaDoc
149     {
150         String JavaDoc userName = Client.getInstance().getMyInfos().getName();
151         boolean isOrganizer = event.getOrganizer().equals(userName);
152         boolean isEditable = isOrganizer || (event.isEditable() && event.hasAttendee(userName));
153         
154         //-- event title
155
title = new JTextField(event.getTitle());
156         title.setEditable(isEditable);
157
158         //-- event type
159
type = new JComboBox();
160         type.setRenderer(new TranslatedRenderer(plugin));
161         Iterator i = plugin.getEventTypes().iterator();
162         while(i.hasNext())
163             type.addItem(i.next());
164         type.setEnabled(isEditable);
165         type.setSelectedItem(event.getType());
166         
167         //-- event organizer
168
organizer = new JTextField(event.getOrganizer());
169         organizer.setEditable(false);
170         
171         //-- event recurence
172
recurence = new JComboBox();
173         recurence.addItem(tr("recur.none"));
174         recurence.addItem(tr("recur.day"));
175         recurence.addItem(tr("recur.week"));
176         recurence.addItem(tr("recur.month"));
177         recurence.addItem(tr("recur.year"));
178         recurence.setSelectedIndex(event.getRecurrence());
179         recurence.setEnabled(isEditable);
180         
181         //-- event display
182
isPublic = new JCheckBox("", event.isPublic());
183         isPublic.setEnabled(isOrganizer);
184         
185         //-- event editable?
186
this.isEditable = new JCheckBox("", event.isEditable());
187         this.isEditable.setEnabled(isOrganizer);
188         
189         //-- event date
190
startDay = new JComboBox();
191         startMonth = new JComboBox();
192         startYear = new JComboBox();
193         startDay.setEnabled(isEditable);
194         startMonth.setEnabled(isEditable);
195         startYear.setEnabled(isEditable);
196         initStartDateCombos();
197         
198         endDay = new JComboBox();
199         endMonth = new JComboBox();
200         endYear = new JComboBox();
201         endDay.setEnabled(isEditable);
202         endMonth.setEnabled(isEditable);
203         endYear.setEnabled(isEditable);
204         initEndDateCombos();
205         
206         //-- event time
207
startHour = new JComboBox();
208         startMinute = new JComboBox();
209         endHour = new JComboBox();
210         endMinute = new JComboBox();
211         startHour.setEnabled(isEditable);
212         startMinute.setEnabled(isEditable);
213         endHour.setEnabled(isEditable);
214         endMinute.setEnabled(isEditable);
215         initHourCombos();
216         
217         btnFindFreeTime = new JButton(plugin.getImageIcon("search.png"));
218         btnFindFreeTime.setToolTipText(tr("btn.findFreeTime"));
219         btnFindFreeTime.addActionListener(this);
220         btnFindFreeTime.setEnabled(isEditable);
221         
222         
223         //-- event description
224
description = new HTMLEditor();
225         description.setText(event.getDescription());
226         description.setBorder(BorderFactory.createTitledBorder(tr("event.description")));
227         description.setEditable(isEditable);
228         description.setToolbarVisible(isEditable);
229     }
230     
231     protected void resetDates()
232     {
233         this.start.setTime(event.getStartDate());
234         this.end.setTime(event.getEndDate());
235         initStartDateCombos();
236         initEndDateCombos();
237         initHourCombos();
238     }
239     
240     private void initStartDateCombos()
241     {
242         int maxDays = start.getActualMaximum(Calendar.DAY_OF_MONTH);
243         int currentDay = start.get(Calendar.DAY_OF_MONTH);
244         startDay.removeActionListener(this);
245         startDay.removeAllItems();
246         for(int i=1;i<=maxDays;i++)
247             startDay.addItem(new Integer JavaDoc(i));
248         startDay.setSelectedIndex(currentDay-1);
249         startDay.addActionListener(this);
250         
251         int monthIndex = start.get(Calendar.MONTH);
252         startMonth.removeActionListener(this);
253         startMonth.removeAllItems();
254         for(int i=1;i<=12;i++)
255             startMonth.addItem(tr("month." + i));
256         startMonth.setSelectedIndex(monthIndex);
257         startMonth.addActionListener(this);
258         
259         int currentYear = start.get(Calendar.YEAR);
260         startYear.removeActionListener(this);
261         startYear.removeAllItems();
262         for(int i=-3;i<4;i++)
263             startYear.addItem(new Integer JavaDoc(currentYear+i));
264         startYear.setSelectedIndex(3);
265         startYear.addActionListener(this);
266     }
267     
268     private void initEndDateCombos()
269     {
270         int maxDays = end.getActualMaximum(Calendar.DAY_OF_MONTH);
271         int currentDay = end.get(Calendar.DAY_OF_MONTH);
272         endDay.removeActionListener(this);
273         endDay.removeAllItems();
274         for(int i=1;i<=maxDays;i++)
275             endDay.addItem(new Integer JavaDoc(i));
276         endDay.setSelectedIndex(currentDay-1);
277         endDay.addActionListener(this);
278
279         int monthIndex = end.get(Calendar.MONTH);
280         endMonth.removeActionListener(this);
281         endMonth.removeAllItems();
282         for(int i=1;i<=12;i++)
283             endMonth.addItem(tr("month." + i));
284         endMonth.setSelectedIndex(monthIndex);
285         endMonth.addActionListener(this);
286         
287         int currentYear = end.get(Calendar.YEAR);
288         endYear.removeActionListener(this);
289         endYear.removeAllItems();
290         for(int i=-3;i<4;i++)
291             endYear.addItem(new Integer JavaDoc(currentYear+i));
292         endYear.setSelectedIndex(3);
293         endYear.addActionListener(this);
294     }
295     
296     private void initHourCombos()
297     {
298         startHour.removeActionListener(this);
299         endHour.removeActionListener(this);
300         for(int i=0;i<10;i++)
301         {
302             startHour.addItem("0" +i);
303             endHour.addItem("0" +i);
304         }
305         for(int i=10;i<24;i++)
306         {
307             startHour.addItem("" +i);
308             endHour.addItem("" +i);
309         }
310         startHour.setSelectedIndex(event.getStartHour());
311         endHour.setSelectedIndex(event.getEndHour());
312         startHour.addActionListener(this);
313         endHour.addActionListener(this);
314     
315         startMinute.removeActionListener(this);
316         startMinute.addItem("00");
317         startMinute.addItem("15");
318         startMinute.addItem("30");
319         startMinute.addItem("45");
320         startMinute.setSelectedIndex(event.getStartMinute()/15);
321         startMinute.addActionListener(this);
322
323         endMinute.removeActionListener(this);
324         endMinute.addItem("00");
325         endMinute.addItem("15");
326         endMinute.addItem("30");
327         endMinute.addItem("45");
328         endMinute.setSelectedIndex(event.getEndMinute()/15);
329         endMinute.addActionListener(this);
330     }
331     
332     public Event createEvent()
333     {
334         //-- check if the user can edit this event
335
String JavaDoc userName = Client.getInstance().getMyInfos().getName();
336         boolean isOrganizer = event.getOrganizer().equals(userName);
337         boolean isEditable = isOrganizer || (event.isEditable() && event.hasAttendee(userName));
338         if(!isEditable)
339             return this.event;
340         
341         int id = event.getId();
342         String JavaDoc type = (String JavaDoc)this.type.getSelectedItem();
343         String JavaDoc title = this.title.getText();
344         String JavaDoc organizer = event.getOrganizer();
345         boolean isPublic = this.isPublic.isSelected();
346         isEditable = this.isEditable.isSelected();
347         int recurence = this.recurence.getSelectedIndex();
348         String JavaDoc description = this.description.getText();
349         
350         start.set(Calendar.DAY_OF_MONTH, startDay.getSelectedIndex()+1);
351         start.set(Calendar.MONTH, startMonth.getSelectedIndex());
352         start.set(Calendar.YEAR, ((Integer JavaDoc)startYear.getSelectedItem()).intValue());
353         start.set(Calendar.HOUR_OF_DAY, Integer.parseInt((String JavaDoc)startHour.getSelectedItem()));
354         start.set(Calendar.MINUTE, Integer.parseInt((String JavaDoc)startMinute.getSelectedItem()));
355         long startTime = start.getTimeInMillis();
356         
357         end.set(Calendar.DAY_OF_MONTH, endDay.getSelectedIndex()+1);
358         end.set(Calendar.MONTH, endMonth.getSelectedIndex());
359         end.set(Calendar.YEAR, ((Integer JavaDoc)endYear.getSelectedItem()).intValue());
360         end.set(Calendar.HOUR_OF_DAY, Integer.parseInt((String JavaDoc)endHour.getSelectedItem()));
361         end.set(Calendar.MINUTE, Integer.parseInt((String JavaDoc)endMinute.getSelectedItem()));
362         long endTime = end.getTimeInMillis();
363         
364         return new Event(id, type, title, organizer, isPublic, isEditable,
365                 startTime, endTime, recurence, description);
366     }
367     
368     public void actionPerformed(ActionEvent ae)
369     {
370         //-- start date combos
371
if(ae.getSource() == startDay)
372         {
373             start.set(Calendar.DAY_OF_MONTH, startDay.getSelectedIndex()+1);
374             initStartDateCombos();
375             if(end.before(start))
376             {
377                 end.set(Calendar.DAY_OF_MONTH, startDay.getSelectedIndex()+1);
378                 initEndDateCombos();
379             }
380         }
381         else if(ae.getSource() == startMonth)
382         {
383             start.set(Calendar.MONTH, startMonth.getSelectedIndex());
384             initStartDateCombos();
385             if(end.before(start))
386             {
387                 end.set(Calendar.MONTH, startMonth.getSelectedIndex());
388                 initEndDateCombos();
389             }
390         }
391         else if(ae.getSource() == startYear)
392         {
393             start.set(Calendar.YEAR, ((Integer JavaDoc)startYear.getSelectedItem()).intValue());
394             initStartDateCombos();
395             if(end.before(start))
396             {
397                 end.set(Calendar.YEAR, ((Integer JavaDoc)startYear.getSelectedItem()).intValue());
398                 initEndDateCombos();
399             }
400         }
401         else if(ae.getSource() == startHour)
402         {
403             start.set(Calendar.HOUR_OF_DAY, Integer.parseInt((String JavaDoc)startHour.getSelectedItem()));
404         }
405         else if(ae.getSource() == startMinute)
406         {
407             start.set(Calendar.MINUTE, Integer.parseInt((String JavaDoc)startMinute.getSelectedItem()));
408         }
409
410         
411         //-- end date combos
412
else if(ae.getSource() == endDay)
413         {
414             end.set(Calendar.DAY_OF_MONTH, endDay.getSelectedIndex()+1);
415             initEndDateCombos();
416             if(start.after(end))
417             {
418                 start.set(Calendar.DAY_OF_MONTH, endDay.getSelectedIndex()+1);
419                 initStartDateCombos();
420             }
421         }
422         else if(ae.getSource() == endMonth)
423         {
424             end.set(Calendar.MONTH, endMonth.getSelectedIndex());
425             initEndDateCombos();
426             if(start.after(end))
427             {
428                 start.set(Calendar.MONTH, endMonth.getSelectedIndex());
429                 initStartDateCombos();
430             }
431         }
432         else if(ae.getSource() == endYear)
433         {
434             end.set(Calendar.YEAR, ((Integer JavaDoc)endYear.getSelectedItem()).intValue());
435             initEndDateCombos();
436             if(start.after(end))
437             {
438                 start.set(Calendar.YEAR, ((Integer JavaDoc)endYear.getSelectedItem()).intValue());
439                 initStartDateCombos();
440             }
441         }
442         else if(ae.getSource() == endHour)
443         {
444             end.set(Calendar.HOUR_OF_DAY, Integer.parseInt((String JavaDoc)endHour.getSelectedItem()));
445         }
446         else if(ae.getSource() == endMinute)
447         {
448             end.set(Calendar.MINUTE, Integer.parseInt((String JavaDoc)endMinute.getSelectedItem()));
449         }
450
451         
452         //replicate hours in event object
453
event.getStartDate().setTime(start.getTimeInMillis());
454         event.getEndDate().setTime(end.getTimeInMillis());
455         
456         if(ae.getSource() == btnFindFreeTime)
457             new FreeBusyDialog(plugin, event, this).show();
458     }
459     
460     private String JavaDoc tr(String JavaDoc s)
461     {
462         return plugin.tr(s);
463     }
464 }
Popular Tags