1 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 e) { 77 DialogBox.error(tr("err.unableToGetEventData")); 78 e.printStackTrace(); 79 } 80 81 JPanel top = new JPanel(new BorderLayout()); 82 83 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 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 149 { 150 String userName = Client.getInstance().getMyInfos().getName(); 151 boolean isOrganizer = event.getOrganizer().equals(userName); 152 boolean isEditable = isOrganizer || (event.isEditable() && event.hasAttendee(userName)); 153 154 title = new JTextField(event.getTitle()); 156 title.setEditable(isEditable); 157 158 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 organizer = new JTextField(event.getOrganizer()); 169 organizer.setEditable(false); 170 171 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 isPublic = new JCheckBox("", event.isPublic()); 183 isPublic.setEnabled(isOrganizer); 184 185 this.isEditable = new JCheckBox("", event.isEditable()); 187 this.isEditable.setEnabled(isOrganizer); 188 189 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 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 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 (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 (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 (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 (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 String 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 type = (String )this.type.getSelectedItem(); 343 String title = this.title.getText(); 344 String organizer = event.getOrganizer(); 345 boolean isPublic = this.isPublic.isSelected(); 346 isEditable = this.isEditable.isSelected(); 347 int recurence = this.recurence.getSelectedIndex(); 348 String 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 )startYear.getSelectedItem()).intValue()); 353 start.set(Calendar.HOUR_OF_DAY, Integer.parseInt((String )startHour.getSelectedItem())); 354 start.set(Calendar.MINUTE, Integer.parseInt((String )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 )endYear.getSelectedItem()).intValue()); 360 end.set(Calendar.HOUR_OF_DAY, Integer.parseInt((String )endHour.getSelectedItem())); 361 end.set(Calendar.MINUTE, Integer.parseInt((String )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 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 )startYear.getSelectedItem()).intValue()); 394 initStartDateCombos(); 395 if(end.before(start)) 396 { 397 end.set(Calendar.YEAR, ((Integer )startYear.getSelectedItem()).intValue()); 398 initEndDateCombos(); 399 } 400 } 401 else if(ae.getSource() == startHour) 402 { 403 start.set(Calendar.HOUR_OF_DAY, Integer.parseInt((String )startHour.getSelectedItem())); 404 } 405 else if(ae.getSource() == startMinute) 406 { 407 start.set(Calendar.MINUTE, Integer.parseInt((String )startMinute.getSelectedItem())); 408 } 409 410 411 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 )endYear.getSelectedItem()).intValue()); 435 initEndDateCombos(); 436 if(start.after(end)) 437 { 438 start.set(Calendar.YEAR, ((Integer )endYear.getSelectedItem()).intValue()); 439 initStartDateCombos(); 440 } 441 } 442 else if(ae.getSource() == endHour) 443 { 444 end.set(Calendar.HOUR_OF_DAY, Integer.parseInt((String )endHour.getSelectedItem())); 445 } 446 else if(ae.getSource() == endMinute) 447 { 448 end.set(Calendar.MINUTE, Integer.parseInt((String )endMinute.getSelectedItem())); 449 } 450 451 452 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 tr(String s) 461 { 462 return plugin.tr(s); 463 } 464 } | Popular Tags |