1 package org.columba.calendar.ui.frame; 19 20 import java.awt.event.MouseAdapter ; 21 import java.awt.event.MouseEvent ; 22 import java.io.InputStream ; 23 import java.util.Calendar ; 24 25 import javax.swing.BorderFactory ; 26 import javax.swing.JScrollPane ; 27 import javax.swing.UIManager ; 28 29 import org.columba.api.gui.frame.IContainer; 30 import org.columba.api.gui.frame.IDock; 31 import org.columba.api.gui.frame.IDockable; 32 import org.columba.calendar.base.api.IActivity; 33 import org.columba.calendar.model.api.IComponent; 34 import org.columba.calendar.model.api.IComponentInfo; 35 import org.columba.calendar.model.api.IDateRange; 36 import org.columba.calendar.model.api.IEventInfo; 37 import org.columba.calendar.resourceloader.ResourceLoader; 38 import org.columba.calendar.store.CalendarStoreFactory; 39 import org.columba.calendar.store.api.ICalendarStore; 40 import org.columba.calendar.ui.action.ActivityMovedAction; 41 import org.columba.calendar.ui.action.EditActivityAction; 42 import org.columba.calendar.ui.action.NewAppointmentAction; 43 import org.columba.calendar.ui.calendar.MainCalendarController; 44 import org.columba.calendar.ui.calendar.api.ActivitySelectionChangedEvent; 45 import org.columba.calendar.ui.calendar.api.IActivitySelectionChangedListener; 46 import org.columba.calendar.ui.calendar.api.ICalendarView; 47 import org.columba.calendar.ui.frame.api.ICalendarMediator; 48 import org.columba.calendar.ui.list.CalendarListController; 49 import org.columba.calendar.ui.list.api.ICalendarListView; 50 import org.columba.calendar.ui.navigation.NavigationController; 51 import org.columba.calendar.ui.navigation.api.DateRangeChangedEvent; 52 import org.columba.calendar.ui.navigation.api.ICalendarNavigationView; 53 import org.columba.calendar.ui.navigation.api.IDateRangeChangedListener; 54 import org.columba.calendar.ui.tagging.CalendarTagList; 55 import org.columba.core.config.ViewItem; 56 import org.columba.core.context.base.api.IStructureValue; 57 import org.columba.core.context.semantic.api.ISemanticContext; 58 import org.columba.core.gui.frame.DockFrameController; 59 import org.columba.core.gui.tagging.TagList; 60 import org.columba.core.gui.tagging.TagPopupMenu; 61 62 66 public class CalendarFrameMediator extends DockFrameController implements 67 ICalendarMediator { 68 69 public static final String PROP_FILTERED = "filterRow"; 70 71 private CalendarListController listController; 72 73 public MainCalendarController calendarController; 74 75 private ICalendarNavigationView navigationController; 76 77 private IDockable listPanel; 78 79 private IDockable calendarPanel; 80 81 private IDockable navigationPanel; 82 83 private IDockable tagListDockable; 84 85 88 public CalendarFrameMediator(ViewItem viewItem) { 89 super(viewItem); 90 91 93 calendarController = new MainCalendarController(this); 94 95 calendarController 96 .addSelectionChangedListener(new MyActivitySelectionChangedListener()); 97 98 navigationController = new NavigationController(); 99 100 navigationController 101 .addSelectionChangedListener(new IDateRangeChangedListener() { 102 public void selectionChanged(DateRangeChangedEvent object) { 103 calendarController.setVisibleDateRange(object 104 .getDateRange()); 105 106 } 107 }); 108 109 listController = new CalendarListController(this); 110 listController.getView().addMouseListener(new ListMouseListener()); 111 112 registerDockables(); 113 114 initContextMenu(); 115 116 } 117 118 private void initContextMenu() { 119 listController.createPopupMenu(this); 120 calendarController.createPopupMenu(this); 121 } 122 123 private void registerDockables() { 124 125 JScrollPane treeScrollPane = new JScrollPane (listController.getView()); 127 treeScrollPane.getViewport().setBackground( 130 UIManager.getColor("List.background")); 131 treeScrollPane.setBackground(UIManager.getColor("List.background")); 132 treeScrollPane.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2)); 133 listPanel = registerDockable("calendar_tree", ResourceLoader.getString( 134 "global", "dockable_calendarlist"), treeScrollPane, null); 135 136 141 navigationPanel = registerDockable("navigation", ResourceLoader 142 .getString("global", "dockable_navigation"), 143 navigationController.getView(), null); 144 145 calendarPanel = registerDockable("main_calendar", ResourceLoader 146 .getString("global", "dockable_maincalendar"), 147 calendarController.getView(), null); 148 149 155 160 } 161 162 165 public void loadDefaultPosition() { 166 167 super.dock(calendarPanel, IDock.REGION.CENTER); 168 super.dock(listPanel, calendarPanel, IDock.REGION.WEST, 0.2f); 169 super.dock(navigationPanel, listPanel, IDock.REGION.SOUTH, 0.2f); 170 171 super.setSplitProportion(listPanel, 0.2f); 172 super.setSplitProportion(calendarPanel, 0.2f); 173 } 174 175 176 177 180 public void extendMenu(IContainer container) { 181 InputStream is = this.getClass().getResourceAsStream( 182 "/org/columba/calendar/action/menu.xml"); 183 getContainer().extendMenu(this, is); 184 } 185 186 189 public void extendToolBar(IContainer container) { 190 191 InputStream is2 = this.getClass().getResourceAsStream( 192 "/org/columba/calendar/action/toolbar.xml"); 193 getContainer().extendToolbar(this, is2); 194 } 195 196 199 public void showDayView() { 200 201 calendarController.setViewMode(ICalendarView.VIEW_MODE_DAY); 202 203 navigationController 204 .setSelectionMode(NavigationController.SELECTION_MODE_DAY); 205 206 } 207 208 211 public void showWeekView() { 212 calendarController.setViewMode(ICalendarView.VIEW_MODE_WEEK); 213 214 navigationController 215 .setSelectionMode(NavigationController.SELECTION_MODE_WEEK); 216 217 } 218 219 222 public void showWorkWeekView() { 223 calendarController.setViewMode(ICalendarView.VIEW_MODE_WORK_WEEK); 224 225 navigationController 226 .setSelectionMode(NavigationController.SELECTION_MODE_WORK_WEEK); 227 228 } 229 230 233 public void showMonthView() { 234 calendarController.setViewMode(ICalendarView.VIEW_MODE_MONTH); 235 236 navigationController 237 .setSelectionMode(NavigationController.SELECTION_MODE_MONTH); 238 239 } 240 241 244 public ICalendarView getCalendarView() { 245 return calendarController; 246 } 247 248 251 public ICalendarListView getListView() { 252 return listController; 253 } 254 255 258 public ICalendarNavigationView getNavigationView() { 259 return navigationController; 260 } 261 262 265 class ListMouseListener extends MouseAdapter { 266 267 270 public void mousePressed(MouseEvent event) { 271 if (event.isPopupTrigger()) { 272 processPopup(event); 273 } 274 } 275 276 279 public void mouseReleased(MouseEvent event) { 280 if (event.isPopupTrigger()) { 281 processPopup(event); 282 } 283 } 284 285 288 public void mouseClicked(MouseEvent event) { 289 if (event.getClickCount() == 2) { 291 292 } 293 } 294 295 protected void processPopup(final MouseEvent event) { 296 297 listController.getPopupMenu().show(event.getComponent(), 298 event.getX(), event.getY()); 299 300 } 301 } 302 303 306 public void fireFilterUpdated() { 307 calendarController.recreateFilterRows(); 308 309 } 310 311 314 public void fireActivityMoved(IActivity activity) { 315 new ActivityMovedAction(this).actionPerformed(null); 316 } 317 318 321 public void fireStartActivityEditing(IActivity activity) { 322 new EditActivityAction(this).actionPerformed(null); 323 } 324 325 public void fireCreateActivity(IDateRange range) { 326 new NewAppointmentAction(this, range).actionPerformed(null); 327 } 328 329 333 @Override 334 public String getString(String sPath, String sName, String sID) { 335 return ResourceLoader.getString(sPath, sID); 336 } 337 338 class MyActivitySelectionChangedListener implements 339 IActivitySelectionChangedListener { 340 341 MyActivitySelectionChangedListener() { 342 } 343 344 public void selectionChanged(ActivitySelectionChangedEvent object) { 345 IActivity[] selection = object.getSelection(); 346 if (selection == null) 347 return; 348 349 if (selection.length == 1) { 350 351 ICalendarStore store = CalendarStoreFactory.getInstance() 352 .getLocaleStore(); 353 IComponentInfo c = store.get(selection[0].getId()); 354 355 if (c.getType().equals(IComponent.TYPE.EVENT)) { 356 IEventInfo event = (IEventInfo) c; 357 358 String summary = event.getEvent().getSummary(); 359 String description = event.getEvent().getDescription(); 360 String location = event.getEvent().getLocation(); 361 Calendar dtStart = event.getEvent().getDtStart(); 362 Calendar dtEnd = event.getEvent().getDtEnd(); 363 364 IStructureValue value = getSemanticContext().createValue(); 366 367 IStructureValue eventValue = value.addChild( 369 ISemanticContext.CONTEXT_NODE_EVENT, 370 ISemanticContext.CONTEXT_NAMESPACE_CORE); 371 372 eventValue.setString(ISemanticContext.CONTEXT_ATTR_SUMMARY, 374 ISemanticContext.CONTEXT_NAMESPACE_CORE, summary); 375 eventValue.setString( 377 ISemanticContext.CONTEXT_ATTR_DESCRIPTION, 378 ISemanticContext.CONTEXT_NAMESPACE_CORE, 379 description); 380 eventValue.setString( 382 ISemanticContext.CONTEXT_ATTR_LOCATION, 383 ISemanticContext.CONTEXT_NAMESPACE_CORE, location); 384 385 IStructureValue dateRangeValue = eventValue.addChild( 387 ISemanticContext.CONTEXT_NODE_DATERANGE, 388 ISemanticContext.CONTEXT_NAMESPACE_CORE); 389 dateRangeValue.setDate( 390 ISemanticContext.CONTEXT_ATTR_STARTDATE, 391 ISemanticContext.CONTEXT_NAMESPACE_CORE, dtStart.getTime()); 392 dateRangeValue.setDate( 393 ISemanticContext.CONTEXT_ATTR_ENDDATE, 394 ISemanticContext.CONTEXT_NAMESPACE_CORE, dtEnd.getTime()); 395 } 396 } 397 } 398 399 } 400 401 } | Popular Tags |