Class DayEditor

  • All Implemented Interfaces:
    IEventEditor, org.eclipse.swt.graphics.Drawable

    public class DayEditor
    extends AbstractEventEditor
    implements IEventEditor
    A DayEditor is an SWT control that can display events on a time line that can span one or more days. This class is not intended to be subclassed.
    Since:
    3.2
    • Field Detail

      • headerDisabled

        private final boolean headerDisabled
      • showEventsWithPrecision

        private boolean showEventsWithPrecision
      • NO_HEADER

        public static final int NO_HEADER
        NO_HEADER constant. A style bit constant to indicate that no header should be displayed at the top of the editor window.
        See Also:
        Constant Field Values
      • menu

        private org.eclipse.swt.widgets.Menu menu
      • keyListeners

        private java.util.ArrayList<org.eclipse.swt.events.KeyListener> keyListeners
      • keyListener

        private org.eclipse.swt.events.KeyListener keyListener
      • mouseListeners

        private java.util.ArrayList<org.eclipse.swt.events.MouseListener> mouseListeners
      • cellMouseListener

        private org.eclipse.swt.events.MouseListener cellMouseListener
      • selectCalendarableControlOnSetFocus

        private boolean selectCalendarableControlOnSetFocus
      • cellFocusListener

        private org.eclipse.swt.events.FocusListener cellFocusListener
      • refreshing

        private boolean refreshing
      • numberOfAllDayEventRows

        private int numberOfAllDayEventRows
      • calendar

        java.util.Calendar calendar
      • refreshEventControlPositions

        private java.lang.Runnable refreshEventControlPositions
      • selectCompositeTableOnMouseDownAdapter

        org.eclipse.swt.events.MouseAdapter selectCompositeTableOnMouseDownAdapter
      • background

        private org.eclipse.swt.graphics.Color background
    • Constructor Detail

      • DayEditor

        public DayEditor​(org.eclipse.swt.widgets.Composite parent,
                         int style)
        Constructor DayEditor. Constructs a calendar control that can display events on one or more days.
        Parameters:
        parent -
        style - DayEditor.NO_HEADER or SWT.NO_TRIM means not to display a header.
    • Method Detail

      • setTimeBreakdown

        public void setTimeBreakdown​(int numberOfDays,
                                     int numberOfDivisionsInHour)
        Description copied from interface: IEventEditor
        Method setTimeBreakdown. Call this method exactly once after constructing the control in order to set the number of day columns to display.

        This method may be executed exactly once. Executing more than once will result in undefined behavior.

        This method is a hint. It may be ignored by specific implementations (ie: a month view).

        Specified by:
        setTimeBreakdown in interface IEventEditor
        Parameters:
        numberOfDays - The number of days to display.
        numberOfDivisionsInHour - 1 == one line per hour; 2 == every 1/2 hour; 4 = every 1/4 hour; etc...
        See Also:
        IEventEditor.setTimeBreakdown(int, int)
      • createCompositeTable

        private void createCompositeTable​(int numberOfDays,
                                          int numberOfDivisionsInHour)
        This method initializes compositeTable
        Parameters:
        numberOfDays - The number of day columns to display
      • setMenu

        public void setMenu​(org.eclipse.swt.widgets.Menu menu)
        Overrides:
        setMenu in class org.eclipse.swt.widgets.Control
        See Also:
        Control.setMenu(org.eclipse.swt.widgets.Menu)
      • addKeyListener

        public void addKeyListener​(org.eclipse.swt.events.KeyListener listener)
        Overrides:
        addKeyListener in class org.eclipse.swt.widgets.Control
        See Also:
        Control.addKeyListener(org.eclipse.swt.events.KeyListener)
      • removeKeyListener

        public void removeKeyListener​(org.eclipse.swt.events.KeyListener listener)
        Overrides:
        removeKeyListener in class org.eclipse.swt.widgets.Control
        See Also:
        Control.removeKeyListener(org.eclipse.swt.events.KeyListener)
      • addMouseListener

        public void addMouseListener​(org.eclipse.swt.events.MouseListener listener)
        Overrides:
        addMouseListener in class org.eclipse.swt.widgets.Control
      • removeMouseListener

        public void removeMouseListener​(org.eclipse.swt.events.MouseListener listener)
        Overrides:
        removeMouseListener in class org.eclipse.swt.widgets.Control
      • fireMouseDownEvent

        protected void fireMouseDownEvent​(org.eclipse.swt.events.MouseEvent e)
      • fireMouseUpEvent

        protected void fireMouseUpEvent​(org.eclipse.swt.events.MouseEvent e)
      • fireMouseDoubleClickEvent

        protected void fireMouseDoubleClickEvent​(org.eclipse.swt.events.MouseEvent e)
      • computeNewTopRowBasedOnSelection

        private int computeNewTopRowBasedOnSelection​(CalendarableItem newSelection)
      • setSelectionByDayAndRow

        private void setSelectionByDayAndRow​(int day,
                                             int row,
                                             CalendarableItem aboutToSelect)
      • getFirstCalendarableAt

        protected CalendarableItem getFirstCalendarableAt​(int day,
                                                          int row)
        (non-API) Method getFirstCalendarableAt. Finds the calendarable event at the specified day/row in DayRow coordinates. If no calendarable exists at the specified coordinates, does nothing.
        Parameters:
        day - The day offset
        row - The row offset in DayRow coordinates
        Returns:
        the first Calendarable in the specified (day, row) or null if none.
      • getAllDayCalendarableAt

        protected CalendarableItem getAllDayCalendarableAt​(int day,
                                                           int row)
        Find the all day event that is positioned at the specified day and row in viewport coordinates
        Parameters:
        day -
        row -
        Returns:
        The found Calendarable or null if none
      • setSelection

        public void setSelection​(CalendarableItem newSelection)
        Method selectCalendarable. Selects the specified Calendarable event.
        Parameters:
        newSelection - The Calendarable to select.
      • selectCalenderableControl

        private void selectCalenderableControl​(CalendarableItem newSelection)
      • getSelection

        public DayEditorSelection getSelection()
        Method getSelection. Returns the selection. This is computed as follows:
        1. If a CalendarableItem is currently selected, it is returned.
        2. If the selection rectangle is in an all-day event row, null is returned.
        3. Otherwise, the date/time corresponding to the selection rectangle is returned as a java.util.Date.
        Returns:
        the current DayEditorSelection
      • fireEdit

        public boolean fireEdit​(CalendarableItem toEdit)
        Fire the itemEdit event.
        Parameters:
        toEdit - The CalendarableItem to edit.
        Returns:
        true if the object represented by the CalendarableItem was changed; false otherwise.
      • addItemDeleteHandler

        public void addItemDeleteHandler​(CalendarableItemEventHandler handler)
        Adds the handler to the collection of handlers who will be notified when a CalendarableItem is deleted from the receiver, by sending it one of the messages defined in the CalendarableItemEventHandler abstract class.

        itemDeleted is called when the CalendarableItem is deleted.

        Specified by:
        addItemDeleteHandler in interface IEventEditor
        Parameters:
        handler - the handler which should be notified
        Throws:
        java.lang.IllegalArgumentException -
        • ERROR_NULL_ARGUMENT - if the handler is null
        org.eclipse.swt.SWTException -
        • ERROR_WIDGET_DISPOSED - if the receiver has been disposed
        See Also:
        CalendarableItemEventHandler, #removeDeleteItemHandler
      • removeItemDeleteHandler

        public void removeItemDeleteHandler​(CalendarableItemEventHandler handler)
        Removes the handler from the collection of handlers who will be notified when a CalendarableItem is deleted from the receiver, by sending it one of the messages defined in the CalendarableItemEventHandler abstract class.

        itemDeleted is called when the CalendarableItem is deleted.

        Specified by:
        removeItemDeleteHandler in interface IEventEditor
        Parameters:
        handler - the handler which should be notified
        Throws:
        java.lang.IllegalArgumentException -
        • ERROR_NULL_ARGUMENT - if the handler is null
        org.eclipse.swt.SWTException -
        • ERROR_WIDGET_DISPOSED - if the receiver has been disposed
        See Also:
        CalendarableItemEventHandler, #addDeleteItemHandler
      • fireDisposeItemStrategy

        private boolean fireDisposeItemStrategy​(CalendarableItem item)
      • addItemDisposeHandler

        public void addItemDisposeHandler​(CalendarableItemEventHandler handler)
        Adds the handler to the collection of handler who will be notified when a CalendarableItem's control is disposed, by sending it one of the messages defined in the CalendarableItemEventHandler abstract class. This is normally used to remove any data bindings that may be attached to the (now-unused) CalendarableItem.

        itemDeleted is called when the CalendarableItem is deleted.

        Specified by:
        addItemDisposeHandler in interface IEventEditor
        Parameters:
        handler - the handler which should be notified
        Throws:
        java.lang.IllegalArgumentException -
        • ERROR_NULL_ARGUMENT - if the handler is null
        org.eclipse.swt.SWTException -
        • ERROR_WIDGET_DISPOSED - if the receiver has been disposed
        See Also:
        CalendarableItemEventHandler, #removeCalendarableItemDisposeHandler
      • removeItemDisposeHandler

        public void removeItemDisposeHandler​(CalendarableItemEventHandler handler)
        Removes the handler from the collection of handlers who will be notified when a CalendarableItem is disposed, by sending it one of the messages defined in the CalendarableItemEventHandler abstract class. This is normally used to remove any data bindings that may be attached to the (now-unused) CalendarableItem.

        itemDeleted is called when the CalendarableItem is deleted.

        Specified by:
        removeItemDisposeHandler in interface IEventEditor
        Parameters:
        handler - the handler which should be notified
        Throws:
        java.lang.IllegalArgumentException -
        • ERROR_NULL_ARGUMENT - if the handler is null
        org.eclipse.swt.SWTException -
        • ERROR_WIDGET_DISPOSED - if the receiver has been disposed
        See Also:
        CalendarableItemEventHandler, #removeDeleteListener
      • getDefaultStartHour

        public int getDefaultStartHour()
        Returns:
        Returns the defaultStartHour.
      • setDefaultStartHour

        public void setDefaultStartHour​(int defaultStartHour)
        Parameters:
        defaultStartHour - The defaultStartHour to set.
      • setEventCountProvider

        public void setEventCountProvider​(EventCountProvider eventCountProvider)
        Description copied from interface: IEventEditor
        Set the strategy pattern object that can return how many events to display for specific periods of time.

        Note that having a separate event count provider and event content provider assumes that the implementer is single-threaded and that the count can't change between calling the count provider and the content provider.

        Specified by:
        setEventCountProvider in interface IEventEditor
        Parameters:
        eventCountProvider - The eventCountProvider to set.
      • setEventContentProvider

        public void setEventContentProvider​(EventContentProvider eventContentProvider)
        Description copied from interface: IEventEditor
        Sets the strategy pattern object that can set the properties of the event objects in order to display the data associated with the specified event.

        Note that having a separate event count provider and event content provider assumes that the implementer is single-threaded and that the count can't change between calling the count provider and the content provider.

        Specified by:
        setEventContentProvider in interface IEventEditor
        Parameters:
        eventContentProvider - The eventContentProvider to set.
      • setStartDate

        public void setStartDate​(java.util.Date startDate)
        Description copied from interface: IEventEditor
        Set the start date for this event editor. How this is interpreted depends on how time is being visualized.

        For example, a month editor would only pay attention to the month portion of the date. A multi-day editor would make the date passed be the first date edited in the set of days being visualized.

        Specified by:
        setStartDate in interface IEventEditor
        Parameters:
        startDate - The date representing what slice of time to visualize in the editor. null is not permitted. Passing null will result in undefined behavior.
        See Also:
        IEventEditor.setStartDate(java.util.Date)
      • getStartDate

        public java.util.Date getStartDate()
        Description copied from interface: IEventEditor
        Return the current start date for this event editor. This is the date that was set in setStartDate.
        Specified by:
        getStartDate in interface IEventEditor
        Returns:
        The start date, or null if no start date has been specified yet.
        See Also:
        IEventEditor.getStartDate()
      • refresh

        public void refresh​(java.util.Date date)
        Description copied from interface: IEventEditor
        Tells the IEventEditor to refresh its display for the specified date. If the specified date is not being displayed, the request will be ignored. If null is passed as the date, the entire display is refreshed.
        Specified by:
        refresh in interface IEventEditor
        Parameters:
        date - The date to refresh or null to refresh everything.
        See Also:
        IEventEditor.refresh(java.util.Date)
      • computeLayoutFor

        private void computeLayoutFor​(java.util.Date date)
      • computeNumRowsInCollection

        private int computeNumRowsInCollection​(int numberOfDivisionsInHour)
      • convertViewportRowToDayRow

        private int convertViewportRowToDayRow​(int row)
      • convertDayRowToViewportCoordinates

        private int convertDayRowToViewportCoordinates​(int row)
      • computeDateTimeFromViewportCoordinates

        private java.util.Date computeDateTimeFromViewportCoordinates​(org.eclipse.swt.graphics.Point viewportSelection,
                                                                      int visibleAllDayEventRows)
      • computeRowForCalendarable

        private int computeRowForCalendarable​(CalendarableItem calendarable,
                                              int day)
        Parameters:
        calendarable -
        day -
        Returns:
        The row in DayRow coordinates
      • updateVisibleRows

        private void updateVisibleRows()
      • refreshRow

        private void refreshRow​(int currentObjectOffset,
                                TimeSlice timeSlice)
      • refreshColumnHeaders

        protected void refreshColumnHeaders​(java.util.LinkedList<org.eclipse.swt.custom.CLabel> columns)
        (non-API) Method initializeColumnHeaders. Called internally when the column header text needs to be updated.
        Parameters:
        columns - A LinkedList of CLabels representing the column objects
      • freeObsoleteCalendarableEventControls

        private void freeObsoleteCalendarableEventControls​(java.util.List<CalendarableItem> removedCalendarables)
      • computeEventRowsForDate

        private void computeEventRowsForDate​(java.util.Date date)
      • computeEventRowsForNewDays

        private void computeEventRowsForNewDays()
      • computeEventLayout

        private void computeEventLayout​(EventLayoutComputer dayModel,
                                        int dayOffset)
      • layoutEventControlsDeferred

        private void layoutEventControlsDeferred()
      • layoutEventControls

        private void layoutEventControls()
      • computeColumns

        protected org.eclipse.swt.graphics.Point[] computeColumns​(int day,
                                                                  int numberOfColumns,
                                                                  org.eclipse.swt.widgets.Control[] gridRows)
      • fillControlData

        private void fillControlData​(CalendarableItem calendarable,
                                     int clippingStyle)
      • layoutAllDayEvent

        private void layoutAllDayEvent​(int day,
                                       int allDayEventRow,
                                       CalendarableItem calendarable,
                                       org.eclipse.swt.widgets.Control[] gridRows)
      • layoutTimedEvent

        private void layoutTimedEvent​(int day,
                                      org.eclipse.swt.graphics.Point[] columnPositions,
                                      CalendarableItem calendarable,
                                      org.eclipse.swt.widgets.Control[] gridRows)
      • findRowDiff

        private int findRowDiff​(CalendarableItem calendarable,
                                java.util.Calendar time,
                                boolean subtractDiff)
        For finding the pixel difference between filling the entire row, and filling only partially. Used For rendering more accurate & precise event durations.
        Parameters:
        calendarable -
        time -
        subtractDiff - set to true to subtract rather than add
        Returns:
      • eventRowIsVisible

        private boolean eventRowIsVisible​(int eventRow)
      • timedEventIsVisible

        private boolean timedEventIsVisible​(int firstVisibleRow,
                                            int lastVisibleRow,
                                            int startRow,
                                            int endRow)
      • createCalendarableControl

        private void createCalendarableControl​(CalendarableItem calendarable)
      • getTimeSliceBounds

        private org.eclipse.swt.graphics.Rectangle getTimeSliceBounds​(int day,
                                                                      int eventRow,
                                                                      org.eclipse.swt.widgets.Control[] gridRows)
      • freeCalendarableControl

        private void freeCalendarableControl​(CalendarableItem calendarableItem)
      • getBoundsInDayEditorCoordinates

        private org.eclipse.swt.graphics.Rectangle getBoundsInDayEditorCoordinates​(org.eclipse.swt.widgets.Control slot)
      • setBackground

        public void setBackground​(org.eclipse.swt.graphics.Color color)
        Overrides:
        setBackground in class org.eclipse.swt.widgets.Control
        See Also:
        Control.setBackground(org.eclipse.swt.graphics.Color)
      • setFocus

        public boolean setFocus()
        Overrides:
        setFocus in class org.eclipse.swt.widgets.Composite
        See Also:
        Composite.setFocus()
      • showEventsWithPrecision

        public void showEventsWithPrecision​(boolean option)