+
# gwt-material-addins
-[](https://travis-ci.org/GwtMaterialDesign/gwt-material-addins) [](https://gitter.im/GwtMaterialDesign/gwt-material-addins?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
+[](https://travis-ci.org/GwtMaterialDesign/gwt-material-addins) [](https://gmd-project.slack.com)
Gwt Material Design Extra Components for https://github.com/GwtMaterialDesign/gwt-material + * Default : "#00000000" + */ + @JsOverlay + public final void setBackColor(String backColor) { + this.backColor = backColor; + } + + @JsOverlay + public final Number getPadding() { + return padding; + } + + /** + * Specifies the padding surrounding the icon in percents in the range 0.0 to 0.5. Additional padding might be + * inserted by Jdenticon to ensure the icon is aligned to the pixel grid. For jdenticon.drawIcon() the default + * value is 0. For all other methods the default value is 0.08. + * Default : 0 or 0.08 + */ + @JsOverlay + public final void setPadding(Number padding) { + this.padding = padding; + } + + @JsOverlay + public final String getReplaceMode() { + return replaceMode; + } + + /** + * Specifies when icons will be rendered. This option has no effect on Node.js. + *
+ * { 'css-property': 'value' }
+ *
+ */
+ public void setContainerCss(Object containerCss) {
+ this.options.containerCss = containerCss;
+ }
+
+ public String getContainerCssClass() {
+ return options.containerCssClass;
+ }
+
+ /**
+ * Appended a class to the container
+ */
+ public void setContainerCssClass(String containerCssClass) {
+ this.options.containerCssClass = containerCssClass;
+ }
+
+ public Object[] getData() {
+ return options.data;
+ }
+
+ /**
+ * Allows rendering dropdown options from an array.
+ */
+ public void setData(Object[] data) {
+ this.options.data = data;
+ }
+
+ public Object getDataAdapter() {
+ return options.dataAdapter;
+ }
+
+ /**
+ * Used to override the built-in DataAdapter.
+ */
+ public void setDataAdapter(Object dataAdapter) {
+ this.options.dataAdapter = dataAdapter;
+ }
+
+ public boolean isDebug() {
+ return options.debug;
+ }
+
+ /**
+ * Enable debugging messages in the browser console.
+ */
+ public void setDebug(boolean debug) {
+ this.options.debug = debug;
+ }
+
+ public Object getDir() {
+ return options.dir;
+ }
+
+ public void setDir(Object dir) {
+ this.options.dir = dir;
+ }
+
+ public Object getDropdownAdapter() {
+ return options.dropdownAdapter;
+ }
+
+ /**
+ * Used to override the built-in DropdownAdapter
+ */
+ public void setDropdownAdapter(Object dropdownAdapter) {
+ this.options.dropdownAdapter = dropdownAdapter;
+ }
+
+ public boolean isDropdownAutoWidth() {
+ return options.dropdownAutoWidth;
+ }
+
+ /**
+ * Will adapt dropdown width to it's parent
+ */
+ public void setDropdownAutoWidth(boolean dropdownAutoWidth) {
+ this.options.dropdownAutoWidth = dropdownAutoWidth;
+ }
+
+ public Object getDropdownCss() {
+ return options.dropdownCss;
+ }
+
+ /**
+ * Adds custom CSS to the dropdown. Expects key-value pairs:
+ *
+ * { 'css-property': 'value' }
+ *
+ */
+ public void setDropdownCss(Object dropdownCss) {
+ this.options.dropdownCss = dropdownCss;
+ }
+
+ public String getDropdownCssClass() {
+ return options.dropdownCssClass;
+ }
+
+ public void setDropdownCssClass(String dropdownCssClass) {
+ this.options.dropdownCssClass = dropdownCssClass;
+ }
+
+ /**
+ * Append Css class to the dropdown
+ */
+ public void setDropdownParent(JQueryElement dropdownParent) {
+ this.options.dropdownParent = dropdownParent;
+ }
+
+ public Functions.Func getEscapeMarkup() {
+ return options.escapeMarkup;
+ }
+
+ /**
+ * Handles automatic escaping of content rendered by custom templates.
+ */
+ public void setEscapeMarkup(Functions.Func escapeMarkup) {
+ this.options.escapeMarkup = escapeMarkup;
+ }
+
+ public Functions.FuncRet2null
* @see #setTarget(Widget)
*/
+ @Override
public void open() {
setCutOutStyle();
@@ -159,7 +161,7 @@ public void open() {
} else {
focusElement.getStyle().setProperty("boxShadow", "0px 0px 0px " + backgroundSize + " " + computedBackgroundColor);
}
-
+
if (circle) {
focusElement.getStyle().setProperty("WebkitBorderRadius", "50%");
focusElement.getStyle().setProperty("borderRadius", "50%");
@@ -206,10 +208,17 @@ protected void setCutOutStyle() {
* Closes the cut out. It is the same as calling
* {@link #close(boolean)} with false.
*/
+ @Override
public void close() {
this.close(false);
}
+ @Override
+ public boolean isOpen() {
+ String display = getElement().getStyle().getDisplay();
+ return display != null && display.equals(Display.BLOCK.getCssName());
+ }
+
/**
* Closes the cut out.
*
diff --git a/src/main/java/gwt/material/design/addins/client/dark/AddinsDarkThemeLoader.java b/src/main/java/gwt/material/design/addins/client/dark/AddinsDarkThemeLoader.java
new file mode 100644
index 000000000..49702ebfc
--- /dev/null
+++ b/src/main/java/gwt/material/design/addins/client/dark/AddinsDarkThemeLoader.java
@@ -0,0 +1,56 @@
+/*
+ * #%L
+ * GwtMaterial
+ * %%
+ * Copyright (C) 2015 - 2019 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%
+ */
+package gwt.material.design.addins.client.dark;
+
+import gwt.material.design.addins.client.autocomplete.MaterialAutoCompleteDarkTheme;
+import gwt.material.design.addins.client.bubble.MaterialBubbleDarkTheme;
+import gwt.material.design.addins.client.carousel.MaterialCarouselDarkTheme;
+import gwt.material.design.addins.client.combobox.MaterialComboBoxDarkTheme;
+import gwt.material.design.addins.client.fileuploader.MaterialFileUploaderDarkTheme;
+import gwt.material.design.addins.client.overlay.MaterialOverlayDarkTheme;
+import gwt.material.design.addins.client.rating.MaterialRatingDarkTheme;
+import gwt.material.design.addins.client.richeditor.MaterialRichEditorDarkTheme;
+import gwt.material.design.addins.client.splitpanel.MaterialSplitPanelDarkTheme;
+import gwt.material.design.addins.client.stepper.MaterialStepperDarkTheme;
+import gwt.material.design.addins.client.subheader.MaterialSubheaderDarkTheme;
+import gwt.material.design.addins.client.timepicker.MaterialTimePickerDarkTheme;
+import gwt.material.design.addins.client.tree.MaterialTreeDarkTheme;
+import gwt.material.design.addins.client.window.MaterialWindowDarkTheme;
+import gwt.material.design.client.theme.dark.DarkThemeLoader;
+
+public class AddinsDarkThemeLoader extends DarkThemeLoader {
+
+ public AddinsDarkThemeLoader() {
+ super(new MaterialAutoCompleteDarkTheme(),
+ new MaterialBubbleDarkTheme(),
+ new MaterialComboBoxDarkTheme(),
+ new MaterialCarouselDarkTheme(),
+ new MaterialFileUploaderDarkTheme(),
+ new MaterialOverlayDarkTheme(),
+ new MaterialTimePickerDarkTheme(),
+ new MaterialRatingDarkTheme(),
+ new MaterialRichEditorDarkTheme(),
+ new MaterialStepperDarkTheme(),
+ new MaterialSplitPanelDarkTheme(),
+ new MaterialSubheaderDarkTheme(),
+ new MaterialTreeDarkTheme(),
+ new MaterialWindowDarkTheme());
+ }
+}
diff --git a/src/main/java/gwt/material/design/addins/client/dark/AddinsDarkThemeReloader.java b/src/main/java/gwt/material/design/addins/client/dark/AddinsDarkThemeReloader.java
new file mode 100644
index 000000000..f87ca94ec
--- /dev/null
+++ b/src/main/java/gwt/material/design/addins/client/dark/AddinsDarkThemeReloader.java
@@ -0,0 +1,45 @@
+/*
+ * #%L
+ * GwtMaterial
+ * %%
+ * Copyright (C) 2015 - 2019 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%
+ */
+package gwt.material.design.addins.client.dark;
+
+import gwt.material.design.client.theme.dark.DarkThemeLoader;
+import gwt.material.design.client.theme.dark.DarkThemeManager;
+
+public class AddinsDarkThemeReloader {
+
+ static AddinsDarkThemeReloader instance;
+
+ public void reload(Class extends DarkThemeLoader> widgetLoader) {
+ DarkThemeLoader addinsLoader = DarkThemeManager.get().getLoader(AddinsDarkThemeLoader.class);
+ if (addinsLoader != null) {
+ DarkThemeLoader child = addinsLoader.getChild(widgetLoader);
+ if (child != null && child instanceof AddinsWidgetDarkTheme) {
+ ((AddinsWidgetDarkTheme) child).suppressReload();
+ }
+ }
+ }
+
+ public static AddinsDarkThemeReloader get() {
+ if (instance == null) {
+ instance = new AddinsDarkThemeReloader();
+ }
+ return instance;
+ }
+}
diff --git a/src/main/java/gwt/material/design/addins/client/dark/AddinsWidgetDarkTheme.java b/src/main/java/gwt/material/design/addins/client/dark/AddinsWidgetDarkTheme.java
new file mode 100644
index 000000000..1cd3fa784
--- /dev/null
+++ b/src/main/java/gwt/material/design/addins/client/dark/AddinsWidgetDarkTheme.java
@@ -0,0 +1,52 @@
+/*
+ * #%L
+ * GwtMaterial
+ * %%
+ * Copyright (C) 2015 - 2019 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%
+ */
+package gwt.material.design.addins.client.dark;
+
+import com.google.gwt.resources.client.TextResource;
+import gwt.material.design.client.theme.dark.DarkThemeLoader;
+import gwt.material.design.client.theme.dark.DarkThemeManager;
+
+public class AddinsWidgetDarkTheme extends DarkThemeLoader {
+
+ private boolean suppressReload;
+
+ public AddinsWidgetDarkTheme(TextResource resource) {
+ super(resource, false);
+ }
+
+ public void suppressReload() {
+ if (!suppressReload) {
+ setInjectResource(true);
+ reload();
+ suppressReload = true;
+ }
+ }
+
+ @Override
+ public void load() {
+ if (DarkThemeManager.get().isDarkMode()) {
+ super.load();
+ }
+ }
+
+ public boolean isSuppressReload() {
+ return suppressReload;
+ }
+}
diff --git a/src/main/java/gwt/material/design/addins/client/dnd/MaterialDnd.java b/src/main/java/gwt/material/design/addins/client/dnd/MaterialDnd.java
index 1e35b1a0b..7c23c03f4 100644
--- a/src/main/java/gwt/material/design/addins/client/dnd/MaterialDnd.java
+++ b/src/main/java/gwt/material/design/addins/client/dnd/MaterialDnd.java
@@ -25,13 +25,19 @@
import gwt.material.design.addins.client.base.constants.AddinsCssName;
import gwt.material.design.addins.client.dnd.constants.DragEvents;
import gwt.material.design.addins.client.dnd.constants.DropEvents;
+import gwt.material.design.addins.client.dnd.constants.ResizeEvents;
+import gwt.material.design.addins.client.dnd.event.InteractDragEvent;
+import gwt.material.design.addins.client.dnd.event.dispatch.DragEventDispatcher;
+import gwt.material.design.addins.client.dnd.event.dispatch.DropEventDispatcher;
+import gwt.material.design.addins.client.dnd.event.dispatch.ResizeEventDispatcher;
+import gwt.material.design.addins.client.dnd.event.listener.DefaultDragMoveEventListener;
+import gwt.material.design.addins.client.dnd.event.listener.DragEventListener;
import gwt.material.design.addins.client.dnd.js.JsDnd;
import gwt.material.design.addins.client.dnd.js.JsDragOptions;
import gwt.material.design.addins.client.dnd.js.JsDropOptions;
+import gwt.material.design.addins.client.dnd.js.JsResizableOptions;
import gwt.material.design.client.MaterialDesignBase;
import gwt.material.design.client.base.MaterialWidget;
-import gwt.material.design.client.events.*;
-import gwt.material.design.jquery.client.api.Event;
//@formatter:off
@@ -73,28 +79,39 @@ public class MaterialDnd {
private Element[] ignoreFrom;
private JsDropOptions dropOptions;
private JsDragOptions dragOptions;
+ private JsResizableOptions resizableOptions;
private String ignoreFromClassName;
+ private DragEventListener dragMoveListener;
+ private DragEventDispatcher dragEventDispatcher;
+ private DropEventDispatcher dropEventDispatcher;
+ private ResizeEventDispatcher resizeEventDispatcher;
- protected MaterialDnd(MaterialWidget target) {
+ public MaterialDnd(MaterialWidget target) {
this.target = target;
+ this.dragEventDispatcher = new DragEventDispatcher(target);
+ this.dropEventDispatcher = new DropEventDispatcher(target);
+ this.resizeEventDispatcher = new ResizeEventDispatcher(target);
}
- protected MaterialDnd draggable() {
+ public MaterialDnd draggable() {
if (jsDnd == null) {
jsDnd = JsDnd.interact(target.getElement());
// Events
- jsDnd.off(DragEvents.DRAG_MOVE).on(DragEvents.DRAG_MOVE, event -> {
- move(event);
- DragMoveEvent.fire(this.target);
+ jsDnd.off(DragEvents.DRAG_START).on(DragEvents.DRAG_START, event -> {
+ dragEventDispatcher.fireDragStartEvent();
return true;
});
- jsDnd.off(DragEvents.DRAG_START).on(DragEvents.DRAG_START, event -> {
- DragStartEvent.fire(this.target);
+ jsDnd.off(DragEvents.DRAG_MOVE).on(DragEvents.DRAG_MOVE, (event) -> {
+ if (dragMoveListener == null) {
+ dragMoveListener = new DefaultDragMoveEventListener();
+ }
+ dragMoveListener.register((InteractDragEvent) event);
+ dragEventDispatcher.fireDragMoveEvent();
return true;
});
jsDnd.off(DragEvents.DRAG_END).on(DragEvents.DRAG_END, event -> {
- DragEndEvent.fire(this.target);
+ dragEventDispatcher.fireDragEndEvent();
return true;
});
}
@@ -102,16 +119,6 @@ protected MaterialDnd draggable() {
return this;
}
- public MaterialDnd draggable(JsDragOptions options) {
- dragOptions = options;
- if (target.isAttached()) {
- draggable();
- } else {
- target.registerHandler(target.addAttachHandler(event -> draggable(), true));
- }
- return this;
- }
-
public static MaterialDnd draggable(MaterialWidget target) {
return draggable(target, JsDragOptions.create());
}
@@ -126,23 +133,23 @@ protected MaterialDnd dropzone() {
// Events
jsDnd.off(DropEvents.DROP_ACTIVATE).on(DropEvents.DROP_ACTIVATE, event -> {
- DropActivateEvent.fire(this.target);
+ dropEventDispatcher.fireDropActiveEvent();
return true;
});
jsDnd.off(DragEvents.DRAG_ENTER).on(DragEvents.DRAG_ENTER, event -> {
- DragEnterEvent.fire(this.target, event.getRelatedTarget());
+ dragEventDispatcher.fireDragEnterEvent(event.getRelatedTarget());
return true;
});
jsDnd.off(DragEvents.DRAG_LEAVE).on(DragEvents.DRAG_LEAVE, event -> {
- DragLeaveEvent.fire(this.target, event.getRelatedTarget());
+ dragEventDispatcher.fireDragLeaveEvent(event.getRelatedTarget());
return true;
});
jsDnd.off(DropEvents.DROP).on(DropEvents.DROP, event -> {
- DropEvent.fire(this.target, event.getRelatedTarget());
+ dropEventDispatcher.fireDropEvent(event.getRelatedTarget());
return true;
});
jsDnd.off(DropEvents.DROP_DEACTIVATE).on(DropEvents.DROP_DEACTIVATE, event -> {
- DropDeactivateEvent.fire(this.target);
+ dropEventDispatcher.fireDropDeactivateEvent();
return true;
});
}
@@ -151,6 +158,49 @@ protected MaterialDnd dropzone() {
return this;
}
+ protected MaterialDnd resizable() {
+ if (jsDnd == null) {
+ jsDnd = JsDnd.interact(target.getElement());
+
+ }
+ jsDnd.off(ResizeEvents.RESIZE_MOVE).on(ResizeEvents.RESIZE_MOVE, e -> {
+ resizeEventDispatcher.fireResizeMoveEvent();
+ return true;
+ });
+ jsDnd.resizable(resizableOptions);
+ return this;
+ }
+
+ public void unload() {
+ unloadDragEvents();
+ unloadDropEvents();
+ }
+
+ public void unloadDragEvents() {
+ jsDnd.off(DragEvents.DRAG_MOVE);
+ jsDnd.off(DragEvents.DRAG_START);
+ jsDnd.off(DragEvents.DRAG_END);
+ jsDnd.off(DropEvents.DROP_ACTIVATE);
+ jsDnd.off(DragEvents.DRAG_ENTER);
+ jsDnd.off(DragEvents.DRAG_LEAVE);
+ }
+
+ public void unloadDropEvents() {
+ jsDnd.off(DropEvents.DROP_ACTIVATE);
+ jsDnd.off(DropEvents.DROP);
+ jsDnd.off(DropEvents.DROP_DEACTIVATE);
+ }
+
+ public MaterialDnd draggable(JsDragOptions options) {
+ dragOptions = options;
+ if (target.isAttached()) {
+ draggable();
+ } else {
+ target.registerHandler(target.addAttachHandler(event -> draggable(), true));
+ }
+ return this;
+ }
+
public MaterialDnd dropzone(JsDropOptions options) {
dropOptions = options;
if (target.isAttached()) {
@@ -161,6 +211,16 @@ public MaterialDnd dropzone(JsDropOptions options) {
return this;
}
+ public MaterialDnd resizable(JsResizableOptions options) {
+ resizableOptions = options;
+ if (target.isAttached()) {
+ resizable();
+ } else {
+ target.registerHandler(target.addAttachHandler(event -> resizable(), true));
+ }
+ return this;
+ }
+
public static MaterialDnd dropzone(MaterialWidget target) {
return dropzone(target, JsDropOptions.create());
}
@@ -169,6 +229,10 @@ public static MaterialDnd dropzone(MaterialWidget target, JsDropOptions options)
return new MaterialDnd(target).dropzone(options);
}
+ public static MaterialDnd resizable(MaterialWidget target, JsResizableOptions resizableOptions) {
+ return new MaterialDnd(target).resizable(resizableOptions);
+ }
+
public void ignoreFrom(UIObject uiObject) {
ignoreFrom(uiObject.getElement());
}
@@ -212,20 +276,31 @@ public JsDropOptions getDropOptions() {
return dropOptions;
}
+ public void setDropOptions(JsDropOptions dropOptions) {
+ this.dropOptions = dropOptions;
+ }
+
public JsDragOptions getDragOptions() {
return dragOptions;
}
- public static native void move(Event event) /*-{
- var target = event.target,
- x = (parseFloat(target.getAttribute('data-x')) || 0) + event.dx,
- y = (parseFloat(target.getAttribute('data-y')) || 0) + event.dy;
+ public void setDragOptions(JsDragOptions dragOptions) {
+ this.dragOptions = dragOptions;
+ }
- target.style.webkitTransform =
- target.style.transform =
- 'translate(' + x + 'px, ' + y + 'px)';
+ public DragEventListener getDragMoveListener() {
+ return dragMoveListener;
+ }
+
+ public void setDragMoveListener(DragEventListener dragMoveListener) {
+ this.dragMoveListener = dragMoveListener;
+ }
- target.setAttribute('data-x', x);
- target.setAttribute('data-y', y);
- }-*/;
-}
\ No newline at end of file
+ public JsResizableOptions getResizableOptions() {
+ return resizableOptions;
+ }
+
+ public void setResizableOptions(JsResizableOptions resizableOptions) {
+ this.resizableOptions = resizableOptions;
+ }
+}
diff --git a/src/main/java/gwt/material/design/addins/client/inputmask/MaterialTextInputMask.java b/src/main/java/gwt/material/design/addins/client/dnd/constants/ResizeEvents.java
similarity index 70%
rename from src/main/java/gwt/material/design/addins/client/inputmask/MaterialTextInputMask.java
rename to src/main/java/gwt/material/design/addins/client/dnd/constants/ResizeEvents.java
index a87aa3519..9249063d0 100644
--- a/src/main/java/gwt/material/design/addins/client/inputmask/MaterialTextInputMask.java
+++ b/src/main/java/gwt/material/design/addins/client/dnd/constants/ResizeEvents.java
@@ -2,7 +2,7 @@
* #%L
* GwtMaterial
* %%
- * Copyright (C) 2015 - 2018 GwtMaterialDesign
+ * Copyright (C) 2015 - 2020 GwtMaterialDesign
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -17,12 +17,9 @@
* limitations under the License.
* #L%
*/
-package gwt.material.design.addins.client.inputmask;
+package gwt.material.design.addins.client.dnd.constants;
-public class MaterialTextInputMask extends MaterialInputMask+ * Defaults to false + */ + public void setChunking(boolean chunking) { + options.chunking = chunking; + } + + public boolean isForceChunking() { + return options.forceChunking; + } + + /** + * If chunking is enabled, this defines whether every file should be chunked, even if the file size is below chunkSize. + * This means, that the additional chunk form data will be submitted and the chunksUploaded callback will be invoked. + *
+ * Defaults to false + */ + public void setForceChunking(boolean forceChunking) { + options.forceChunking = forceChunking; + } + + public long getChunkSize() { + return options.chunkSize; + } + + /** + * If chunking is true, then this defines the chunk size in bytes. + * Defaults to 2000000 + */ + public void setChunkSize(long chunkSize) { + options.chunkSize = chunkSize; + } + + public boolean isParallelChunkUploads() { + return options.parallelChunkUploads; + } + + /** + * If true, the individual chunks of a file are being uploaded simultaneously. + */ + public void setParallelChunkUploads(boolean parallelChunkUploads) { + options.parallelChunkUploads = parallelChunkUploads; + } + + public boolean isRetryChunks() { + return options.retryChunks; + } + + /** + * Whether a chunk should be retried if it fails. + * Defaults to false + */ + public void setRetryChunks(boolean retryChunks) { + options.retryChunks = retryChunks; + } + + public int getRetryChunksLimit() { + return options.retryChunksLimit; + } + + /** + * If retryChunks is true, how many times should it be retried. + * Defaults to 3 + */ + public void setRetryChunksLimit(int retryChunksLimit) { + options.retryChunksLimit = retryChunksLimit; + } + + public String getParamName() { + return options.paramName; + } + + /** + * The name of the file param that gets transferred. NOTE: If you have the option uploadMultiple set to true, then + * Dropzone will append [] to the name. + * Defaults to "file" + */ + public void setParamName(String paramName) { + options.paramName = paramName; + } + + public boolean isCreateImageThumbnails() { + return options.createImageThumbnails; + } + + /** + * Whether thumbnails for images should be generated + * Defaults to true + */ + public void setCreateImageThumbnails(boolean createImageThumbnails) { + options.createImageThumbnails = createImageThumbnails; + } + + public int getMaxThumbnailFilesize() { + return options.maxThumbnailFilesize; + } + + /** + * In MB. When the filename exceeds this limit, the thumbnail will not be generated. + * Defaults to 10 MB + */ + public void setMaxThumbnailFilesize(int maxThumbnailFilesize) { + options.maxThumbnailFilesize = maxThumbnailFilesize; + } + + public int getThumbnailWidth() { + return options.thumbnailWidth; + } + + /** + * If null, the ratio of the image will be used to calculate it. + * Defaults to 120 + */ + public void setThumbnailWidth(int thumbnailWidth) { + options.thumbnailWidth = thumbnailWidth; + } + + public int getThumbnailHeight() { + return options.thumbnailHeight; + } + + /** + * The same as thumbnailWidth. If both are null, images will not be resized. + * Defaults to 120 + */ + public void setThumbnailHeight(int thumbnailHeight) { + options.thumbnailHeight = thumbnailHeight; + } + + public String getThumbnailMethod() { + return options.thumbnailMethod; + } + + /** + * How the images should be scaled down in case both, thumbnailWidth and thumbnailHeight are provided. Can be either + * contain or crop. + * Defaults to "crop" + */ + public void setThumbnailMethod(String thumbnailMethod) { + options.thumbnailMethod = thumbnailMethod; + } + + public int getResizeWidth() { + return options.resizeWidth; + } + + /** + * If set, images will be resized to these dimensions before being uploaded. If only one, resizeWidth or resizeHeight + * is provided, the original aspect ratio of the file will be preserved. + * The options.transformFile function uses these options, so if the transformFile function is overridden, these options + * don't do anything. + * Defaults to null + */ + public void setResizeWidth(int resizeWidth) { + options.resizeWidth = resizeWidth; + } + + public int getResizeHeight() { + return options.resizeHeight; + } + + /** + * See resizeWidth. + * Defaults to null + */ + public void setResizeHeight(int resizeHeight) { + options.resizeHeight = resizeHeight; + } + + public String getResizeMimeType() { + return options.resizeMimeType; + } + + /** + * The mime type of the resized image (before it gets uploaded to the server). If null the original mime type will be used. + * To force jpeg, for example, use image/jpeg. See resizeWidth for more information. + * Defaults to null + */ + public void setResizeMimeType(String resizeMimeType) { + options.resizeMimeType = resizeMimeType; + } + + public double getResizeQuality() { + return options.resizeQuality; + } + + /** + * The quality of the resized images. See resizeWidth. + * Defaults to 0.8 + */ + public void setResizeQuality(double resizeQuality) { + options.resizeQuality = resizeQuality; + } + + public String getResizeMethod() { + return options.resizeMethod; + } + + /** + * How the images should be scaled down in case both, resizeWidth and resizeHeight are provided. Can be either contain or crop. + * Defaults to "contain" + */ + public void setResizeMethod(String resizeMethod) { + options.resizeMethod = resizeMethod; + } + + public int getFilsizeBase() { + return options.filesizeBase; + } + + /** + * The base that is used to calculate the filesize. You can change this to 1024 if you would rather display kibibytes, + * mebibytes, etc... 1024 is technically incorrect, because 1024 bytes are 1 kibibyte not 1 kilobyte. You can change + * this to 1024 if you don't care about validity. + * Defaults to 1000 + */ + public void setFilesizeBase(int filsizeBase) { + options.filesizeBase = filsizeBase; + } + + public Object getHeaders() { + return options.headers; + } + + /** + * An optional object to send additional headers to the server. Eg: { "My-Awesome-Header": "header value" } + * Defaults to null + */ + public void setHeaders(Object headers) { + options.headers = headers; + } + + public boolean isIgnoreHiddenFiles() { + return options.ignoreHiddenFiles; + } + + /** + * Whether hidden files in directories should be ignored. + * Defaults to true + */ + public void setIgnoreHiddenFiles(boolean ignoreHiddenFiles) { + options.ignoreHiddenFiles = ignoreHiddenFiles; + } + + public boolean isAddRemoveLinks() { + return options.addRemoveLinks; + } + + /** + * If true, this will add a link to every file preview to remove or cancel (if already uploading) the file. + * The dictCancelUpload, dictCancelUploadConfirmation and dictRemoveFile options are used for the wording. + * Defaults to false + */ + public void setAddRemoveLinks(boolean addRemoveLinks) { + options.addRemoveLinks = addRemoveLinks; + } + + public Object getHiddenInputContainer() { + return options.hiddenInputContainer; + } + + /** + * This is the element the hidden input field (which is used when clicking on the dropzone to trigger file selection) + * will be appended to. This might be important in case you use frameworks to switch the content of your page. + *
+ * Can be a selector string, or an element directly. + * Defaults to "body" + */ + public void setHiddenInputContainer(Object hiddenInputContainer) { + options.hiddenInputContainer = hiddenInputContainer; + } + + public Object getCapture() { + return options.capture; + } + + /** + * If null, no capture type will be specified If camera, mobile devices will skip the file selection and choose camera + * If microphone, mobile devices will skip the file selection and choose the microphone If camcorder, mobile devices + * will skip the file selection and choose the camera in video mode On apple devices multiple must be set to false. + * AcceptedFiles may need to be set to an appropriate mime type (e.g. "image/*", "audio/*", or "video/*"). + *
+ * Defaults to null
+ */
+ public void setCapture(Object capture) {
+ options.capture = capture;
+ }
+
+ public Functions.Func1> handler) {
+ return addHandler((ProcessingMultipleEvent.ProcessingMultipleHandler
> handler) {
+ return addHandler((SendingMultipleEvent.SendingMultipleHandler
> handler) {
+ return addHandler((SuccessMultipleEvent.SuccessMulttipleHandler
> handler) {
+ return addHandler((CompleteMultipleEvent.CompleteMulttipleHandler
> handler) {
+ return addHandler((CanceledMultipleEvent.CanceledMulttipleHandler
> handler);
+
+ /**
+ * @see #addSendingHandler(SendingEvent.SendingHandler)
+ */
+ HandlerRegistration addSendingMultipleHandler(SendingMultipleEvent.SendingMultipleHandler
> handler);
+
+ /**
+ * @see #addSuccessHandler(SuccessEvent.SuccessHandler)
+ */
+ HandlerRegistration addSuccessMultipleHandler(SuccessMultipleEvent.SuccessMulttipleHandler
> handler);
+
+ /**
+ * @see #addCompleteHandler(CompleteEvent.CompleteHandler)
+ */
+ HandlerRegistration addCompleteMultipleHandler(CompleteMultipleEvent.CompleteMulttipleHandler
> handler);
+
+ /**
+ * @see #addCanceledHandler(CanceledEvent.CanceledHandler)
+ */
+ HandlerRegistration addCanceledMultipleHandler(CanceledMultipleEvent.CanceledMulttipleHandler
> handler);
+
+ /**
+ * Called when all files in the list are removed and the dropzone is reset to initial state.
+ */
+ HandlerRegistration addResetHandler(ResetEvent.ResetHandler handler);
+
+ /**
+ * Called when all files in the queue finish uploading.
+ */
+ HandlerRegistration addQueueCompleteHandler(QueueCompleteEvent.QueueCompleteHandler handler);
+}
diff --git a/src/main/java/gwt/material/design/addins/client/fileuploader/constants/FileUploaderEvents.java b/src/main/java/gwt/material/design/addins/client/fileuploader/constants/FileUploaderEvents.java
index 175841350..d61bac0e4 100644
--- a/src/main/java/gwt/material/design/addins/client/fileuploader/constants/FileUploaderEvents.java
+++ b/src/main/java/gwt/material/design/addins/client/fileuploader/constants/FileUploaderEvents.java
@@ -34,4 +34,14 @@ public interface FileUploaderEvents extends DragEvents, DropEvents {
String CANCELED = "canceled";
String MAX_FILES_REACHED = "maxfilesreached";
String MAX_FILES_EXCEEDED = "maxfilesexceeded";
+ String ERROR = "error";
+ String THUMBNAIL = "thumbnail";
+ String PROCESSING = "processing";
+ String PROCESSING_MULTIPLE = "processingmultiple";
+ String SENDING_MULTIPLE = "sendingmultiple";
+ String SUCCESS_MULTIPLE = "successmultiple";
+ String COMPLETE_MULTIPLE = "completemultiple";
+ String CANCELED_MULTIPLE = "canceledmultiple";
+ String RESET = "reset";
+ String QUEUE_COMPLETE = "queuecomplete";
}
diff --git a/src/main/java/gwt/material/design/addins/client/fileuploader/events/AddedFileEvent.java b/src/main/java/gwt/material/design/addins/client/fileuploader/events/AddedFileEvent.java
index 207fe1b71..4960308c4 100644
--- a/src/main/java/gwt/material/design/addins/client/fileuploader/events/AddedFileEvent.java
+++ b/src/main/java/gwt/material/design/addins/client/fileuploader/events/AddedFileEvent.java
@@ -21,7 +21,7 @@
import com.google.gwt.event.shared.EventHandler;
import com.google.gwt.event.shared.GwtEvent;
-import gwt.material.design.addins.client.fileuploader.base.HasFileUpload;
+import gwt.material.design.addins.client.fileuploader.base.HasFileUploadHandlers;
public class AddedFileEvent