123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- /*
- * Copyright 2000-2016 Vaadin Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
- package com.vaadin.v7.client.ui.calendar.schedule;
-
- import java.util.Date;
- import java.util.List;
-
- import com.google.gwt.user.client.ui.HorizontalPanel;
- import com.vaadin.v7.client.ui.VCalendar;
-
- /**
- *
- * @since 7.1
- * @author Vaadin Ltd.
- *
- */
- public class WeeklyLongEvents extends HorizontalPanel implements HasTooltipKey {
-
- public static final int EVENT_HEIGTH = 15;
-
- public static final int EVENT_MARGIN = 1;
-
- private int rowCount = 0;
-
- private VCalendar calendar;
-
- private boolean undefinedWidth;
-
- public WeeklyLongEvents(VCalendar calendar) {
- setStylePrimaryName("v-calendar-weekly-longevents");
- this.calendar = calendar;
- }
-
- public void addDate(Date d) {
- DateCellContainer dcc = new DateCellContainer();
- dcc.setDate(d);
- dcc.setCalendar(calendar);
- add(dcc);
- }
-
- public void setWidthPX(int width) {
- if (getWidgetCount() == 0) {
- return;
- }
- undefinedWidth = (width < 0);
-
- updateCellWidths();
- }
-
- public void addEvents(List<CalendarEvent> events) {
- for (CalendarEvent e : events) {
- addEvent(e);
- }
- }
-
- public void addEvent(CalendarEvent calendarEvent) {
- updateEventSlot(calendarEvent);
-
- int dateCount = getWidgetCount();
- Date from = calendarEvent.getStart();
- Date to = calendarEvent.getEnd();
- boolean started = false;
- for (int i = 0; i < dateCount; i++) {
- DateCellContainer dc = (DateCellContainer) getWidget(i);
- Date dcDate = dc.getDate();
- int comp = dcDate.compareTo(from);
- int comp2 = dcDate.compareTo(to);
- WeeklyLongEventsDateCell eventLabel = dc
- .getDateCell(calendarEvent.getSlotIndex());
- eventLabel.setStylePrimaryName("v-calendar-event");
- if (comp >= 0 && comp2 <= 0) {
- eventLabel.setEvent(calendarEvent);
- eventLabel.setCalendar(calendar);
-
- eventLabel.addStyleDependentName("all-day");
- if (comp == 0) {
- eventLabel.addStyleDependentName("start");
- }
- if (comp2 == 0) {
- eventLabel.addStyleDependentName("end");
- }
- if (!started && comp > 0 && comp2 <= 0) {
- eventLabel.addStyleDependentName("continued-from");
- } else if (i == (dateCount - 1)) {
- eventLabel.addStyleDependentName("continued-to");
- }
- final String extraStyle = calendarEvent.getStyleName();
- if (extraStyle != null && !extraStyle.isEmpty()) {
- eventLabel.addStyleDependentName(extraStyle + "-all-day");
- }
- if (!started) {
- if (calendar.isEventCaptionAsHtml()) {
- eventLabel.setHTML(calendarEvent.getCaption());
- } else {
- eventLabel.setText(calendarEvent.getCaption());
- }
- started = true;
- }
- }
- }
- }
-
- private void updateEventSlot(CalendarEvent e) {
- boolean foundFreeSlot = false;
- int slot = 0;
- while (!foundFreeSlot) {
- if (isSlotFree(slot, e.getStart(), e.getEnd())) {
- e.setSlotIndex(slot);
- foundFreeSlot = true;
-
- } else {
- slot++;
- }
- }
- }
-
- private boolean isSlotFree(int slot, Date start, Date end) {
- int dateCount = getWidgetCount();
-
- // Go over all dates this week
- for (int i = 0; i < dateCount; i++) {
- DateCellContainer dc = (DateCellContainer) getWidget(i);
- Date dcDate = dc.getDate();
- int comp = dcDate.compareTo(start);
- int comp2 = dcDate.compareTo(end);
-
- // check if the date is in the range we need
- if (comp >= 0 && comp2 <= 0) {
-
- // check if the slot is taken
- if (dc.hasEvent(slot)) {
- return false;
- }
- }
- }
-
- return true;
- }
-
- public int getRowCount() {
- return rowCount;
- }
-
- public void updateCellWidths() {
- int cells = getWidgetCount();
- if (cells <= 0) {
- return;
- }
-
- int cellWidth = -1;
-
- // if width is undefined, use the width of the first cell
- // otherwise use distributed sizes
- if (undefinedWidth) {
- cellWidth = calendar.getWeekGrid().getDateCellWidth()
- - calendar.getWeekGrid().getDateSlotBorder();
- }
-
- for (int i = 0; i < cells; i++) {
- DateCellContainer dc = (DateCellContainer) getWidget(i);
-
- if (undefinedWidth) {
- dc.setWidth(cellWidth + "px");
-
- } else {
- dc.setWidth(
- calendar.getWeekGrid().getDateCellWidths()[i] + "px");
- }
- }
- }
-
- @Override
- public String getTooltipKey() {
- return null;
- }
- }
|