All Downloads are FREE. Search and download functionalities are using the official Maven repository.

gwt.material.design.addins.client.dnd.MaterialDnd Maven / Gradle / Ivy

There is a newer version: 2.8.3
Show newest version
package gwt.material.design.addins.client.dnd;

/*
 * #%L
 * GwtMaterial
 * %%
 * Copyright (C) 2015 - 2016 GwtMaterialDesign
 * %%
 * 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.
 * #L%
 */


import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.Element;
import com.google.gwt.event.logical.shared.AttachEvent;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.ui.Widget;
import gwt.material.design.addins.client.MaterialAddins;
import gwt.material.design.addins.client.dnd.base.HasDraggable;
import gwt.material.design.addins.client.dnd.constants.Restriction;
import gwt.material.design.addins.client.dnd.events.DragEndEvent;
import gwt.material.design.addins.client.dnd.events.DragMoveEvent;
import gwt.material.design.addins.client.dnd.events.DragStartEvent;
import gwt.material.design.client.MaterialDesignBase;
import gwt.material.design.client.base.MaterialWidget;

//@formatter:off
/**
 * Drag and drop feature on Material Design specs are great UX guide to
 * provide a delightful motion on dragging and dropping gestures.
 *
 * 

Java Usage

*
 *{@code
 *
 * MaterialDnd dnd = new MaterialDnd();
 * // Set the draggable object
 * dnd.setDraggable(widget);
 *
 * // Set the ignored widget when dragging the element
 * dnd.setIgnoreFrom(toolbar);
 *
 * }
 * 
* * @author kevzlou7979 * @see Drag and Drop */ //@formatter:on public class MaterialDnd extends MaterialWidget implements HasDraggable { static { if(MaterialAddins.isDebug()) { MaterialDesignBase.injectDebugJs(MaterialDndDebugClientBundle.INSTANCE.dndDebugJs()); } else { MaterialDesignBase.injectJs(MaterialDndClientBundle.INSTANCE.dndJs()); } } private boolean inertia; private Widget target; private Widget ignoreFrom; private Restriction restriction = new Restriction(); public MaterialDnd() { super(Document.get().createDivElement()); } public boolean isInertia() { return inertia; } public void setInertia(boolean inertia) { this.inertia = inertia; } @Override public void setTarget(final Widget target) { this.target = target; if(!target.isAttached()) { target.addAttachHandler(new AttachEvent.Handler() { @Override public void onAttachOrDetach(AttachEvent event) { if(event.isAttached()) { initDraggable(target.getElement(), isInertia(), restriction.getRestriction().getValue(), restriction.isEndOnly(), restriction.getTop(), restriction.getLeft(), restriction.getBottom(), restriction.getRight()); } } }); } else { initDraggable(target.getElement(), isInertia(), restriction.getRestriction().getValue(), restriction.isEndOnly(), restriction.getTop(), restriction.getLeft(), restriction.getBottom(), restriction.getRight()); } } /** * Initialize the draggable widget and it's properties * @param target */ private native void initDraggable(Element target, boolean inertia, String restriction, boolean endOnly, double top, double left, double bottom, double right) /*-{ var that = this; $wnd.jQuery(document).ready(function() { $wnd.interact(target) .draggable({ inertia: inertia, restrict: { restriction: restriction, endOnly: endOnly, elementRect: { top: top, left: left, bottom: bottom, right: right} }, onstart: dragStartListener, onmove: dragMoveListener, onend: dragEndListener, }); function dragEndListener(event) { [email protected]::fireDragEndEvent()(); } function dragStartListener(event) { [email protected]::fireDragStartEvent()(); } function dragMoveListener (event) { var target = event.target, x = (parseFloat(target.getAttribute('data-x')) || 0) + event.dx, y = (parseFloat(target.getAttribute('data-y')) || 0) + event.dy; target.style.webkitTransform = target.style.transform = 'translate(' + x + 'px, ' + y + 'px)'; target.setAttribute('data-x', x); target.setAttribute('data-y', y); [email protected]::fireDragMoveEvent()(); } }); }-*/; @Override public Widget getTarget() { return target; } @Override public void setIgnoreFrom(final Widget ignoreFrom) { this.ignoreFrom = ignoreFrom; if(!target.isAttached() && !ignoreFrom.isAttached()) { ignoreFrom.addAttachHandler(new AttachEvent.Handler() { @Override public void onAttachOrDetach(AttachEvent event) { if(event.isAttached()) { initIgnoreFrom(target.getElement(), ignoreFrom.getElement()); } } }); }else { initIgnoreFrom(target.getElement(), ignoreFrom.getElement()); } } @Override public void setIgnoreFrom(final String selector) { if(!target.isAttached()){ target.addAttachHandler(new AttachEvent.Handler() { @Override public void onAttachOrDetach(AttachEvent event) { initIgnoreFrom(target.getElement(), selector); } }); } else { initIgnoreFrom(target.getElement(), selector); } } /** * Initialize the ignoreFrom function as selector to exclude any widget from dragging */ private native void initIgnoreFrom(Element target, String selector) /*-{ $wnd.interact(target).ignoreFrom(selector); }-*/; /** * Initialize the ignoreFrom function to exclude any widget from dragging */ private native void initIgnoreFrom(Element target, Element ignoreFrom) /*-{ $wnd.interact(target).ignoreFrom(ignoreFrom); }-*/; @Override public Widget isIgnoreFrom() { return ignoreFrom; } @Override public void setRestriction(Restriction restriction) { this.restriction = restriction; } @Override public Restriction getRestriction() { return restriction; } @Override public HandlerRegistration addDragStartHandler(final DragStartEvent.DragStartHandler handler) { return addHandler(new DragStartEvent.DragStartHandler() { @Override public void onDragStart(DragStartEvent event) { if(isEnabled()){ handler.onDragStart(event); } } }, DragStartEvent.TYPE); } private void fireDragStartEvent() { DragStartEvent.fire(this); } @Override public HandlerRegistration addDragMoveHandler(final DragMoveEvent.DragMoveHandler handler) { return addHandler(new DragMoveEvent.DragMoveHandler() { @Override public void onDragMove(DragMoveEvent event) { if(isEnabled()){ handler.onDragMove(event); } } }, DragMoveEvent.TYPE); } private void fireDragMoveEvent() { DragMoveEvent.fire(this); } @Override public HandlerRegistration addDragEndHandler(final DragEndEvent.DragEndHandler handler) { return addHandler(new DragEndEvent.DragEndHandler() { @Override public void onDragEnd(DragEndEvent event) { if(isEnabled()){ handler.onDragEnd(event); } } }, DragEndEvent.TYPE); } private void fireDragEndEvent() { DragEndEvent.fire(this); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy