package com.gwt.ui.client.gwtupld; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.Style; public class UploadButton { private FileInputElement input; private Element container; private boolean multiple; public UploadButton(Element container, boolean multiple) { this.container = container; this.multiple = multiple; container.getStyle().setPosition(Style.Position.RELATIVE); container.getStyle().setOverflow(Style.Overflow.HIDDEN); container.setDir("ltr"); this.input = createInput(); } /** * Cleans/recreates the file input */ public void reset() { input.removeFromParent(); // TODO: qq.removeClass(this._element, this._options.focusClass); input = createInput(); } private FileInputElement createInput() { FileInputElement input = (FileInputElement) container.getOwnerDocument() .createFileInputElement(); if (multiple) { input.setAttribute("multiple", "multiple"); } // input.setName(this._options.name); input.getStyle().setPosition(Style.Position.ABSOLUTE); // in Opera only 'browse' button // is clickable and it is located at // the right side of the input input.getStyle().setRight(0, Style.Unit.PX); input.getStyle().setTop(0, Style.Unit.PX); // TODO: wtf is this? // 4 persons reported this, the max values that worked for them // were 243, 236, 236, 118 input.getStyle().setFontSize(500, Style.Unit.PX); input.getStyle().setMargin(0, Style.Unit.PX); input.getStyle().setPadding(0, Style.Unit.PX); input.getStyle().setCursor(Style.Cursor.POINTER); input.getStyle().setOpacity(0); /** // TODO qq.attach(input, 'change', function(){ self._options.onChange(input); }); qq.attach(input, 'mouseover', function(){ qq.addClass(self._element, self._options.hoverClass); }); qq.attach(input, 'mouseout', function(){ qq.removeClass(self._element, self._options.hoverClass); }); qq.attach(input, 'focus', function(){ qq.addClass(self._element, self._options.focusClass); }); qq.attach(input, 'blur', function(){ qq.removeClass(self._element, self._options.focusClass); }); // IE and Opera, unfortunately have 2 tab stops on file input // which is unacceptable in our case, disable keyboard access if (window.attachEvent){ // it is IE or Opera input.setAttribute('tabIndex', "-1"); } */ container.appendChild(input); return input; } public FileInputElement getInput() { return input; } }