Package com.allen_sauer.gwt.dnd.client.drop

Source Code of com.allen_sauer.gwt.dnd.client.drop.DayViewDropController

package com.allen_sauer.gwt.dnd.client.drop;

import java.util.Date;

import com.allen_sauer.gwt.dnd.client.DragContext;
import com.bradrydzewski.gwt.calendar.client.Appointment;
import com.bradrydzewski.gwt.calendar.client.dayview.AppointmentWidget;
import com.google.gwt.user.client.ui.AbsolutePanel;
import com.google.gwt.user.client.ui.Widget;

public class DayViewDropController extends AbsolutePositionDropController {

  private int gridX;

  private int gridY;
 
  int intervalsPerHour;
  int snapSize;
  int columns;
  int rows;
  Date date;
  private int maxProxyHeight = -1;
 
  public void setColumns(int columns) {
    this.columns = columns;
  }

  public void setDate(Date date) {
    this.date = date;
  }
 
  public void setSnapSize(int snapSize) {
    this.snapSize = snapSize;
  }
 
  public void setIntervalsPerHour(int intervalsPerHour) {
    this.intervalsPerHour = intervalsPerHour;
    this.rows = intervalsPerHour*24;
  }

  public void setMaxProxyHeight(int maxProxyHeight) {
    this.maxProxyHeight = maxProxyHeight;
  }
 
  public DayViewDropController(AbsolutePanel dropTarget) {
    super(dropTarget);
  }

  @SuppressWarnings("deprecation")
  @Override
  public void onDrop(DragContext context) {

    super.onDrop(context);
   
    //get the top and left position and the widget
    int top =draggableList.get(0).desiredY;
    int left=draggableList.get(0).desiredX;
    Widget widget=context.draggable;

    //set the 'snapped' top and left position of the widget
    left = Math.max(0, Math.min(left, dropTarget.getOffsetWidth() - widget.getOffsetWidth()));
    top = Math.max(0, Math.min(top, dropTarget.getOffsetHeight() - widget.getOffsetHeight()));
    left = Math.round((float) left / gridX) * gridX;
    top = Math.round((float) top / gridY) * gridY;
   
    //figure out which row the appointment was dragged to
    int intervalStart = (int) Math.floor(top / gridY);
    int intervalSpan = Math.round(widget.getOffsetHeight() / snapSize);
   
    //figure out which day (column) the appointment was dragged to
    int day = (int) Math.floor(left / gridX);
    day = Math.max(0, day);
    day = Math.min(day, columns-1);

    //get the appointment, create the start & end date
    Appointment appt = ((AppointmentWidget)widget).getAppointment();
    Date start = (Date)date.clone();
    Date end = (Date)date.clone();
   
    start.setDate(start.getDate()+day);
    end.setDate(end.getDate()+day);
   
        start.setHours(0);
        start.setMinutes(0);
        start.setSeconds(0);
        start.setMinutes((intervalStart)*(60/intervalsPerHour));
        end.setHours(0);
        end.setMinutes(0);
        end.setSeconds(0);
        end.setMinutes((intervalStart + intervalSpan)*(60/intervalsPerHour));
   

    appt.setStart(start);
    appt.setEnd(end);
   
   
   
  }

 
//  @Override
//  public void drop(Widget widget, int left, int top) {
//     
//  }
 
//  @Override
//  public void drop(Widget widget, int left, int top) {
//    left = Math.max(0, Math.min(left, dropTarget.getOffsetWidth() - widget.getOffsetWidth()));
//    top = Math.max(0, Math.min(top, dropTarget.getOffsetHeight() - widget.getOffsetHeight()));
//    left = Math.round((float) left / gridX) * gridX;
//    top = Math.round((float) top / gridY) * gridY;
//   
//    System.out.println("on drop");
//   
//   
//    int intervalStart = (int) Math.floor(top / rows);
//    int intervalSpan = 2;
//    int day = (int) Math.floor(left / columns);
//    day = Math.min(0, day);
//    day = Math.min(day, columns);
//    day = day-1; //convert to a 0-based day index
//   
//    Appointment appt = ((AppointmentWidget)widget).getAppointment();
//    Date start = (Date)date.clone();
//    Date end = (Date)date.clone();
//   
//    start.setDate(start.getDate()+day);
//    end.setDate(end.getDate()+day);
//   
//        start.setHours(0);
//        start.setMinutes((intervalStart)*(60/intervalsPerHour));
//        end.setHours(0);
//        end.setMinutes((intervalStart + intervalSpan)*(60/intervalsPerHour));
//   
//        System.out.println("new start: "+start);
//       
//    appt.setStart(start);
//    appt.setEnd(end);
//   
//   
//  }
 
  @Override
  public void onMove(DragContext context) {
    super.onMove(context);

    gridX = (int) Math.floor(dropTarget.getOffsetWidth() / columns);
    gridY = (int) Math.floor(dropTarget.getOffsetHeight() / rows);

   
    for (Draggable draggable : draggableList) {
      draggable.desiredX = context.desiredDraggableX - dropTargetOffsetX + draggable.relativeX;
      draggable.desiredY = context.desiredDraggableY - dropTargetOffsetY + draggable.relativeY;
     
      draggable.desiredX = Math.max(0, Math.min(draggable.desiredX, dropTargetClientWidth - draggable.offsetWidth));
      draggable.desiredY = Math.max(0, Math.min(draggable.desiredY, dropTargetClientHeight - draggable.offsetHeight));
      draggable.desiredX = (int)Math.floor((double) draggable.desiredX / gridX) * gridX;
      draggable.desiredY = (int)Math.round((double) draggable.desiredY / gridY) * gridY;
     
      dropTarget.add(draggable.positioner, draggable.desiredX, draggable.desiredY);
    }
  }

  @Override
  public void onEnter(DragContext context) {
    super.onEnter(context);
   
    for (Draggable draggable : draggableList) {
      int width = draggable.positioner.getOffsetWidth();
      int height = draggable.positioner.getOffsetHeight();
      if (maxProxyHeight > 0 && height > maxProxyHeight) {
        height = maxProxyHeight - 5;
      }
     
      draggable.positioner.setPixelSize(width, height);
    }
  }
}
TOP

Related Classes of com.allen_sauer.gwt.dnd.client.drop.DayViewDropController

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.