Created
December 1, 2016 16:42
-
-
Save gklka/b7781526cb1487e6c01d64d5c11bc518 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /** | |
| * Calculates the left and right positions of each events. This comes handy specially if events | |
| * are overlapping. | |
| * | |
| * @param eventRects The events along with their wrapper class. | |
| */ | |
| private void computePositionOfEvents(List<EventRect> eventRects) { | |
| // Make "collision groups" for all events that collide with others. | |
| List<List<EventRect>> collisionGroups = new ArrayList<List<EventRect>>(); | |
| for (EventRect eventRect : eventRects) { | |
| boolean isPlaced = false; | |
| outerLoop: | |
| for (List<EventRect> collisionGroup : collisionGroups) { | |
| for (EventRect groupEvent : collisionGroup) { | |
| if (isEventsCollide(groupEvent.event, eventRect.event) && groupEvent.event.isAllDay() == eventRect.event.isAllDay()) { | |
| collisionGroup.add(eventRect); | |
| isPlaced = true; | |
| break outerLoop; | |
| } | |
| } | |
| } | |
| if (!isPlaced) { | |
| List<EventRect> newGroup = new ArrayList<EventRect>(); | |
| newGroup.add(eventRect); | |
| collisionGroups.add(newGroup); | |
| } | |
| } | |
| for (List<EventRect> collisionGroup : collisionGroups) { | |
| expandEventsToMaxWidth(collisionGroup); | |
| } | |
| } | |
| /** | |
| * Expands all the events to maximum possible width. The events will try to occupy maximum | |
| * space available horizontally. | |
| * | |
| * @param collisionGroup The group of events which overlap with each other. | |
| */ | |
| private void expandEventsToMaxWidth(List<EventRect> collisionGroup) { | |
| // Expand the events to maximum possible width. | |
| List<List<EventRect>> columns = new ArrayList<List<EventRect>>(); | |
| columns.add(new ArrayList<EventRect>()); | |
| for (EventRect eventRect : collisionGroup) { | |
| boolean isPlaced = false; | |
| for (List<EventRect> column : columns) { | |
| if (column.size() == 0) { | |
| column.add(eventRect); | |
| isPlaced = true; | |
| } else if (!isEventsCollide(eventRect.event, column.get(column.size() - 1).event)) { | |
| column.add(eventRect); | |
| isPlaced = true; | |
| break; | |
| } | |
| } | |
| if (!isPlaced) { | |
| List<EventRect> newColumn = new ArrayList<EventRect>(); | |
| newColumn.add(eventRect); | |
| columns.add(newColumn); | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment