/ftr-gwt-library-date/src/main/java/eu/future/earth/gwt/client/date/weeklist/WeekListDayPanel.java
http://ftr-gwt-library.googlecode.com/ · Java · 313 lines · 238 code · 49 blank · 26 comment · 50 complexity · 1359fca0bacfe706ac8aaa6887eded2d MD5 · raw file
- /*
- * Copyright 2007 Future Earth, info@future-earth.eu
- *
- * 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 eu.future.earth.gwt.client.date.weeklist;
-
- import java.util.ArrayList;
- import java.util.Calendar;
- import java.util.Collections;
- import java.util.Date;
- import java.util.GregorianCalendar;
- import java.util.List;
-
- import org.cobogw.gwt.user.client.CSS;
-
- import com.google.gwt.core.client.GWT;
- import com.google.gwt.event.dom.client.MouseDownEvent;
- import com.google.gwt.event.dom.client.MouseDownHandler;
- import com.google.gwt.event.dom.client.MouseMoveEvent;
- import com.google.gwt.event.dom.client.MouseMoveHandler;
- import com.google.gwt.event.dom.client.MouseOutEvent;
- import com.google.gwt.event.dom.client.MouseOutHandler;
- import com.google.gwt.event.dom.client.MouseUpEvent;
- import com.google.gwt.event.dom.client.MouseUpHandler;
- import com.google.gwt.event.shared.HandlerRegistration;
- import com.google.gwt.user.client.ui.FlowPanel;
- import com.google.gwt.user.client.ui.FocusPanel;
- import com.google.gwt.user.client.ui.VerticalPanel;
- import com.google.gwt.user.client.ui.Widget;
-
- import eu.future.earth.gwt.client.FtrGwtDateCss;
- import eu.future.earth.gwt.client.date.DateEvent;
- import eu.future.earth.gwt.client.date.DateEvent.DateEventActions;
- import eu.future.earth.gwt.client.date.DateEventListener;
- import eu.future.earth.gwt.client.date.DateRenderer;
- import eu.future.earth.gwt.client.date.EventPanel;
- import eu.future.earth.gwt.client.date.EventWildComparator;
- import eu.future.earth.gwt.client.date.HasDateEventHandlers;
- import eu.future.earth.gwt.client.date.week.DayEventElement;
- import eu.future.earth.gwt.client.date.week.DayHelper;
-
- public class WeekListDayPanel<T> extends FocusPanel implements MouseDownHandler, MouseMoveHandler, MouseUpHandler, MouseOutHandler, DayEventElement<T>, HasDateEventHandlers<T>, DateEventListener<T> {
-
- private Calendar helper = new GregorianCalendar();
-
- private DayHelper<T> theDay = new DayHelper<T>();
-
- private DateRenderer<T> renderer = null;
-
- private String startTimeString = null;
-
- private EventWildComparator<T> sorter = new EventWildComparator<T>();
-
- private List<EventPanel<? extends T>> events = new ArrayList<EventPanel<? extends T>>();
-
- public Date getDate() {
- return theDay.getTime();
- }
-
- private VerticalPanel body = null;
-
- private FlowPanel topper = new FlowPanel();
-
- public WeekListDayPanel(DateRenderer<T> newRenderer) {
- super();
- this.renderer = newRenderer;
- body = new VerticalPanel();
- this.setWidget(topper);
- topper.add(body);
- super.setWidth(getPrefferedWitdh());
- CSS.setProperty(body, CSS.A.WIDTH, "100%");
- CSS.setProperty(this, CSS.A.HEIGHT, "100%");
- CSS.setProperty(this, CSS.A.BORDER_RIGHT_COLOR, "#d0e4f6");
- CSS.setProperty(this, CSS.A.BORDER_RIGHT_STYLE, CSS.V.BORDER_STYLE.SOLID);
- CSS.setProperty(this, CSS.A.BORDER_RIGHT_WIDTH, "2px");
- theDay.setRenderer(newRenderer);
- setStyleName(FtrGwtDateCss.DAY_PANEL);
- this.addMouseOutHandler(this);
- this.addMouseDownHandler(this);
- this.addMouseUpHandler(this);
- }
-
- public void destroy() {
- if (getParent() != null) {
- removeFromParent();
- }
- }
-
- public void clearEvents() {
- for (EventPanel<? extends T> ev : events) {
- body.remove(ev);
- }
- events.clear();
- }
-
- public int calculateIntervalSnapForY(int y) {
- return (int) Math.round(((double) y) / renderer.getIntervalHeight());
- }
-
- public void addEventDrop(EventPanel<T> newEvent, boolean sameDay) {
- GWT.log("Not same day", null);
- events.add(newEvent);
- repaintEvents();
- GWT.log("Adding", null);
- DateEvent.fire(this, DateEventActions.DRAG_DROP, newEvent.getValue());
- }
-
- public HandlerRegistration addDateEventHandler(DateEventListener<? extends T> handler) {
- return addHandler(handler, DateEvent.getType());
- }
-
- public void addEvent(EventPanel<? extends T> newEvent, boolean partOfBatch) {
- if (!partOfBatch) {
- removeEvent(newEvent.getValue()); // Be safe
- }
- events.add(newEvent);
- if (!partOfBatch) {
- repaintEvents();
- }
- }
-
- public void updateEvent(EventPanel<? extends T> newEvent) {
- EventPanel<? extends T> found = null;
- for (EventPanel<? extends T> test : events) {
- if (renderer.equal(test.getValue(), newEvent.getValue())) {
- found = test;
- }
- }
- if (found != null) {
- removeEvent(found.getValue(), false);
- }
- events.add(newEvent);
- repaintEvents();
- }
-
- private void paintEvent(EventPanel<? extends T> newEvent) {
- newEvent.repaintTime();
- int wide = getOffsetWidth() - 6;
- if (wide < 0) {
- wide = 80;
- }
- body.add(newEvent);
- }
-
- public EventPanel<? extends T> removeEvent(T event) {
- return removeEvent(event, true);
- }
-
- public EventPanel<? extends T> removeEvent(T event, boolean repaint) {
- for (EventPanel<? extends T> ev : events) {
- if (renderer.equal(ev.getValue(), event)) {
- body.remove(ev);
- events.remove(ev);
- // Only repaint when there is something removed.
- if (repaint) {
- repaintEvents();
- }
- return ev;
- }
- }
- return null;
- }
-
- public void repaintEvents() {
- if (events != null) {
- Collections.sort(events, sorter);
- for (EventPanel<? extends T> ev : events) {
- body.remove(ev);
- paintEvent(ev);
- }
- }
- }
-
- public void repaint(EventPanel<T> notRepaint) {
- if (events != null) {
- Collections.sort(events, sorter);
- for (EventPanel<? extends T> ev : events) {
- if (!renderer.equal(ev.getValue(), notRepaint.getValue())) {
- body.remove(ev);
- paintEvent(ev);
- }
- }
- }
- }
-
- public DateRenderer<T> getRenderer() {
- return renderer;
- }
-
- public void setDay(Calendar newDay) {
- theDay.setTime(newDay.getTime());
- theDay.setFirstDayOfWeek(newDay.getFirstDayOfWeek());
- }
-
- public boolean isDay(T newEvent) {
- if (renderer.isWholeDayEvent(newEvent)) {
- return false;
- }
- return theDay.isDay(newEvent);
- }
-
- protected String getPrefferedWitdh() {
- return "100%";
- }
-
- public void onMouseDown(MouseDownEvent event) {
- if (event.getSource() instanceof Widget) {
- Widget widget = (Widget) event.getSource();
- if (widget != this) {
- startTimeString = widget.getTitle();
- }
- }
- }
-
- public void onMouseOut(MouseOutEvent event) {
- if (event.getSource() instanceof Widget) {
- Widget widget = (Widget) event.getSource();
- if (widget == this) {
- startTimeString = null;
- }
- }
- }
-
- public void onMouseMove(MouseMoveEvent event) {
- if (event.getSource() instanceof Widget) {
- Widget widget = (Widget) event.getSource();
- if (startTimeString != null && widget != this) {
- widget.addStyleName(FtrGwtDateCss.HOURS_SELECTED);
- }
- }
- }
-
- public void onMouseUp(MouseUpEvent event) {
- if (event.getSource() instanceof Widget) {
- Widget widget = (Widget) event.getSource();
- // startTime
- Boolean add12 = false;
- if (startTimeString != null && widget != this) {
- if (startTimeString.indexOf("AM") > -1 || startTimeString.indexOf("PM") > -1) {
- if (renderer.show24HourClock() == false) {
- if (startTimeString.indexOf("PM") > -1) {
- add12 = true;
- }
- }
- startTimeString = startTimeString.substring(0, startTimeString.length() - 3);
- }
- helper.setTime(theDay.getTime());
- final Calendar helperTime = new GregorianCalendar();
-
- helperTime.setTime(theDay.getTime());
- // Transplant the hour and minutes
-
- if (add12 && helperTime.get(Calendar.HOUR_OF_DAY) != 12) {
- helper.set(Calendar.HOUR_OF_DAY, helperTime.get(Calendar.HOUR_OF_DAY) + 12);
- } else {
- helper.set(Calendar.HOUR_OF_DAY, helperTime.get(Calendar.HOUR_OF_DAY));
- }
- // helper.set(Calendar.HOUR_OF_DAY,
- // helperTime.get(Calendar.HOUR_OF_DAY));
- helper.set(Calendar.MINUTE, helperTime.get(Calendar.MINUTE));
- helper.set(Calendar.SECOND, 0);
- helper.set(Calendar.MILLISECOND, 0);
- final Date start = helper.getTime();
-
- // add one interval's worth of time to get to the END of the
- // selected interval
-
- String endTimeString = widget.getTitle();
- if (endTimeString != null) {
- if (endTimeString.indexOf("AM") > -1 || endTimeString.indexOf("PM") > -1) {
- endTimeString = endTimeString.substring(0, endTimeString.length() - 3);
- }
- }
-
- renderer.createNewAfterClick(start, this);
-
- startTimeString = null;
- }
-
- }
- }
-
- public void setElementWide(int newWide) {
- // for (int i = 0; i < events.size(); i++) {
- // final EventPanel ev = (EventPanel) events.get(i);
- // ev.setWidth(newWide + "px");
- // }
-
- }
-
- public void notifyParentOfUpdate(DateEventActions action, T data) {
- DateEvent.fire(this, action, data);
- }
-
- public void handleDateEvent(DateEvent<T> newEvent) {
- GWT.log("Here foor " + newEvent.getCommand(), null);
- DateEvent.fire(this, newEvent.getDate(), newEvent.getCommand(), newEvent.getData());
-
- }
-
- }