| /* |
| * Copyright 2011 Google Inc. |
| * |
| * 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.google.gwt.event.dom.client; |
| |
| import com.google.gwt.core.client.GWT; |
| import com.google.gwt.dom.client.DataTransfer; |
| import com.google.gwt.dom.client.PartialSupport; |
| import com.google.gwt.event.shared.EventHandler; |
| |
| /** |
| * Base class for drag and drop events. |
| * |
| * @param <H> handler type |
| */ |
| @PartialSupport |
| public abstract class DragDropEventBase<H extends EventHandler> extends DomEvent<H> { |
| |
| /** |
| * Detector for browser support of drag events. |
| */ |
| static class DragSupportDetector { |
| |
| private final boolean isSupported = detectDragSupport(); |
| |
| /** |
| * Using a run-time check, return true if drag events are supported. |
| * |
| * @return true if supported, false otherwise. |
| */ |
| public boolean isSupported() { |
| return isSupported; |
| } |
| |
| private native boolean detectDragSupport() /*-{ |
| var elem = document.createElement('div'); |
| elem.setAttribute('ondragstart', 'return;'); |
| return (typeof elem.ondragstart) == "function"; |
| }-*/; |
| } |
| |
| /** |
| * Detector for permutations that do not support drag events. |
| */ |
| static class DragSupportDetectorNo extends DragSupportDetector { |
| @Override |
| public boolean isSupported() { |
| return false; |
| } |
| } |
| |
| /** |
| * The implementation singleton. |
| */ |
| private static DragSupportDetector impl; |
| |
| /** |
| * Runtime check for whether drag events are supported in this browser. |
| * |
| * @return true if supported, false if not |
| */ |
| public static boolean isSupported() { |
| if (impl == null) { |
| impl = GWT.create(DragSupportDetector.class); |
| } |
| return impl.isSupported(); |
| } |
| |
| /** |
| * Get the data for the specified format from the {@link DataTransfer} object. |
| * |
| * @param format the format |
| * @return the data for the specified format |
| */ |
| public String getData(String format) { |
| DataTransfer dt = getDataTransfer(); |
| return getDataTransfer().getData(format); |
| } |
| |
| /** |
| * Get the {@link DataTransfer} associated with the current drag event. |
| * |
| * @return the {@link DataTransfer} object |
| */ |
| public DataTransfer getDataTransfer() { |
| return getNativeEvent().getDataTransfer(); |
| } |
| |
| /** |
| * Set the data in the {@link DataTransfer} object for the specified format. |
| * |
| * @param format the format |
| * @param data the data to associate with the format |
| */ |
| public void setData(String format, String data) { |
| getDataTransfer().setData(format, data); |
| } |
| } |