Take a look to gwtupload you can use either all the library in your
application or just the DecoratedFileUpload to customize your button with
whatever widget you want.

http://code.google.com/p/gwtupload/wiki/CustomWidgets

- Manolo

On Thu, Sep 22, 2011 at 9:56 AM, Sante <[email protected]> wrote:

> I've tryed, but not go this post.
>
> mimelist are set in VUpload constructor
>
> I post java file:
>
> /*
> @ITMillApache2LicenseForJavaFiles@
>  */
>
> package com.vaadin.terminal.gwt.client.ui;
>
> import com.google.gwt.core.client.GWT;
> import com.google.gwt.core.client.Scheduler;
> import com.google.gwt.dom.client.DivElement;
> import com.google.gwt.dom.client.Document;
> import com.google.gwt.dom.client.FormElement;
> import com.google.gwt.event.dom.client.ClickEvent;
> import com.google.gwt.event.dom.client.ClickHandler;
> import com.google.gwt.user.client.Command;
> import com.google.gwt.user.client.Element;
> import com.google.gwt.user.client.Event;
> import com.google.gwt.user.client.Timer;
> import com.google.gwt.user.client.ui.FileUpload;
> import com.google.gwt.user.client.ui.FlowPanel;
> import com.google.gwt.user.client.ui.FormPanel;
> import com.google.gwt.user.client.ui.Hidden;
> import com.google.gwt.user.client.ui.Panel;
> import com.google.gwt.user.client.ui.SimplePanel;
> import com.vaadin.terminal.gwt.client.ApplicationConnection;
> import com.vaadin.terminal.gwt.client.BrowserInfo;
> import com.vaadin.terminal.gwt.client.Paintable;
> import com.vaadin.terminal.gwt.client.UIDL;
> import com.vaadin.terminal.gwt.client.VConsole;
> import com.vaadin.terminal.gwt.client.VTooltip;
> import com.google.gwt.dom.client.InputElement;
>
> /**
>  *
>  * Note, we are not using GWT FormPanel as we want to listen
> submitcomplete
>  * events even though the upload component is already detached.
>  *
>  */
> public class VUpload extends SimplePanel implements Paintable {
>
>        private final class MyFileUpload extends FileUpload {
>                @Override
>                public void onBrowserEvent(Event event) {
>
>                        super.onBrowserEvent(event);
>                        if (event.getTypeInt() == Event.ONCHANGE) {
>                                if (immediate && fu.getFilename() != null
>                                                &&
> !"".equals(fu.getFilename())) {
>                                        submit();
>                                }
>                        } else if (BrowserInfo.get().isIE()
>                                        && event.getTypeInt() ==
> Event.ONFOCUS) {
>                                // IE and user has clicked on hidden
> textarea part of upload
>                                // field. Manually open file selector, other
> browsers do it by
>                                // default.
>                                fireNativeClick(fu.getElement());
>                                // also remove focus to enable hack if user
> presses cancel
>                                // button
>                                fireNativeBlur(fu.getElement());
>                        }
>                }
>
>                public String getAccept() {
>                        return ((InputElement)
> fu.getElement().cast()).getAccept();
>                }
>
>                public void setAccept(String accept) {
>                        ((InputElement)
> fu.getElement().cast()).setAccept(accept);
>                }
>        }
>
>        public static final String CLASSNAME = "v-upload";
>
>        /**
>         * FileUpload component that opens native OS dialog to select file.
>         */
>        MyFileUpload fu = new MyFileUpload();
>
>        Panel panel = new FlowPanel();
>
>        UploadIFrameOnloadStrategy onloadstrategy = GWT
>                        .create(UploadIFrameOnloadStrategy.class);
>
>        ApplicationConnection client;
>
>        private String paintableId;
>
>        /**
>         * Button that initiates uploading
>         */
>        private final VButton submitButton;
>
>        /**
>         * When expecting big files, programmer may initiate some UI changes
> when
>         * uploading the file starts. Bit after submitting file we'll visit
> the
>         * server to check possible changes.
>         */
>        private Timer t;
>
>        /**
>         * some browsers tries to send form twice if submit is called in
> button
>         * click handler, some don't submit at all without it, so we need to
> track
>         * if form is already being submitted
>         */
>        private boolean submitted = false;
>
>        private boolean enabled = true;
>
>        private boolean immediate;
>
>        private Hidden maxfilesize = new Hidden();
>
>        private FormElement element;
>
>        private com.google.gwt.dom.client.Element synthesizedFrame;
>
>        private int nextUploadId;
>
>        public VUpload() {
>
>  super(com.google.gwt.dom.client.Document.get().createFormElement());
>
>                element = getElement().cast();
>                setEncoding(getElement(), FormPanel.ENCODING_MULTIPART);
>                element.setMethod(FormPanel.METHOD_POST);
>
>                String mimeList =
> "application/vnd.ms-excel,application/msexcel," +
>
>  "application/x-msexcel,application/x-ms-excel," +
>
>  "application/vnd.ms-excel,application/x-excel," +
>
>  "application/x-dos_ms_excel,application/xls," +
>                                "application/vnd.openxmlformats-
> officedocument.spreadsheetml.sheet";
>
>                fu.getElement().setPropertyString("accept", mimeList);
>
>                setWidget(panel);
>                panel.add(maxfilesize);
>                panel.add(fu);
>                submitButton = new VButton();
>                submitButton.addClickHandler(new ClickHandler() {
>                        public void onClick(ClickEvent event) {
>                                if (immediate) {
>                                        // fire click on upload (eg. focused
> button and hit space)
>                                        fireNativeClick(fu.getElement());
>                                } else {
>                                        submit();
>                                }
>                        }
>                });
>                panel.add(submitButton);
>
>                setStyleName(CLASSNAME);
>
>                sinkEvents(VTooltip.TOOLTIP_EVENTS);
>        }
>
>        @Override
>        public void onBrowserEvent(Event event) {
>                if ((event.getTypeInt() & VTooltip.TOOLTIP_EVENTS) > 0) {
>                        client.handleTooltipEvent(event, this);
>                }
>                super.onBrowserEvent(event);
>        }
>
>        private static native void setEncoding(Element form, String
> encoding)
>        /*-{
>          form.enctype = encoding;
>          // For IE6
>          form.encoding = encoding;
>        }-*/;
>
>        public void updateFromUIDL(UIDL uidl, ApplicationConnection client)
> {
>                if (client.updateComponent(this, uidl, true)) {
>                        return;
>                }
>                if (uidl.hasAttribute("notStarted")) {
>                        t.schedule(400);
>                        return;
>                }
>                if (uidl.hasAttribute("forceSubmit")) {
>                        element.submit();
>                        return;
>                }
>                setImmediate(uidl.getBooleanAttribute("immediate"));
>                this.client = client;
>                paintableId = uidl.getId();
>                nextUploadId = uidl.getIntAttribute("nextid");
>                final String action = client.translateVaadinUri(uidl
>                                .getStringVariable("action"));
>                element.setAction(action);
>                if (uidl.hasAttribute("buttoncaption")) {
>
>  submitButton.setText(uidl.getStringAttribute("buttoncaption"));
>                        submitButton.setVisible(true);
>                } else {
>                        submitButton.setVisible(false);
>                }
>                fu.setName(paintableId + "_file");
>
>                if (uidl.hasAttribute("disabled") ||
> uidl.hasAttribute("readonly"))
> {
>                        disableUpload();
>                } else if (!uidl.getBooleanAttribute("state")) {
>                        // Enable the button only if an upload is not in
> progress
>                        enableUpload();
>                        ensureTargetFrame();
>                }
>        }
>
>        private void setImmediate(boolean booleanAttribute) {
>                if (immediate != booleanAttribute) {
>                        immediate = booleanAttribute;
>                        if (immediate) {
>                                fu.sinkEvents(Event.ONCHANGE);
>                                fu.sinkEvents(Event.ONFOCUS);
>                        }
>                }
>                setStyleName(getElement(), CLASSNAME + "-immediate",
> immediate);
>        }
>
>        private static native void fireNativeClick(Element element)
>        /*-{
>            element.click();
>        }-*/;
>
>        private static native void fireNativeBlur(Element element)
>        /*-{
>            element.blur();
>        }-*/;
>
>        protected void disableUpload() {
>                submitButton.setEnabled(false);
>                if (!submitted) {
>                        // Cannot disable the fileupload while submitting or
> the file won't
>                        // be submitted at all
>                        fu.getElement().setPropertyBoolean("disabled",
> true);
>                }
>                enabled = false;
>        }
>
>        protected void enableUpload() {
>                submitButton.setEnabled(true);
>                fu.getElement().setPropertyBoolean("disabled", false);
>                enabled = true;
>                if (submitted) {
>                        /*
>                         * An old request is still in progress (most likely
> cancelled),
>                         * ditching that target frame to make it possible to
> send a new
>                         * file. A new target frame is created later."
>                         */
>                        cleanTargetFrame();
>                        submitted = false;
>                }
>        }
>
>        /**
>         * Re-creates file input field and populates panel. This is needed
> as
> we
>         * want to clear existing values from our current file input field.
>         */
>        private void rebuildPanel() {
>                panel.remove(submitButton);
>                panel.remove(fu);
>                fu = new MyFileUpload();
>                fu.setName(paintableId + "_file");
>                fu.getElement().setPropertyBoolean("disabled", !enabled);
>                panel.add(fu);
>                panel.add(submitButton);
>                if (immediate) {
>                        fu.sinkEvents(Event.ONCHANGE);
>                }
>        }
>
>        /**
>         * Called by JSNI (hooked via {@link #onloadstrategy})
>         */
>        private void onSubmitComplete() {
>                /* Needs to be run dereferred to avoid various browser
> issues. */
>                Scheduler.get().scheduleDeferred(new Command() {
>                        public void execute() {
>                                if (submitted) {
>                                        if (client != null) {
>                                                if (t != null) {
>                                                        t.cancel();
>                                                }
>                                                VConsole.log("VUpload:Submit
> complete");
>
>  client.sendPendingVariableChanges();
>                                        }
>
>                                        rebuildPanel();
>
>                                        submitted = false;
>                                        enableUpload();
>                                        if (!isAttached()) {
>                                                /*
>                                                 * Upload is complete when
> upload is already abandoned.
>                                                 */
>                                                cleanTargetFrame();
>                                        }
>                                }
>                        }
>                });
>        }
>
>        private void submit() {
>                if (fu.getFilename().length() == 0 || submitted || !enabled)
> {
>                        VConsole
>                                        .log("Submit cancelled (disabled, no
> file or already
> submitted)");
>                        return;
>                }
>                // flush possibly pending variable changes, so they will be
> handled
>                // before upload
>                client.sendPendingVariableChanges();
>
>                element.submit();
>                submitted = true;
>                VConsole.log("Submitted form");
>
>                disableUpload();
>
>                /*
>                 * Visit server a moment after upload has started to see
> possible
>                 * changes from UploadStarted event. Will be cleared on
> complete.
>                 */
>                t = new Timer() {
>                        @Override
>                        public void run() {
>                                VConsole
>                                                .log("Visiting server to see
> if upload started event changed
> UI.");
>                                client.updateVariable(paintableId,
> "pollForStart",
>                                                nextUploadId, true);
>                        }
>                };
>                t.schedule(800);
>        }
>
>        @Override
>        protected void onAttach() {
>                super.onAttach();
>                if (client != null) {
>                        ensureTargetFrame();
>                }
>        }
>
>        private void ensureTargetFrame() {
>                if (synthesizedFrame == null) {
>                        // Attach a hidden IFrame to the form. This is the
> target iframe to
>                        // which
>                        // the form will be submitted. We have to create the
> iframe using
>                        // innerHTML,
>                        // because setting an iframe's 'name' property
> dynamically doesn't
>                        // work on
>                        // most browsers.
>                        DivElement dummy =
> Document.get().createDivElement();
>                        dummy.setInnerHTML("<iframe src=\"javascript:''\"
> name='"
>                                        + getFrameName()
>                                        + "'
> style='position:absolute;width:0;height:0;border:0'>");
>                        synthesizedFrame = dummy.getFirstChildElement();
>
>  Document.get().getBody().appendChild(synthesizedFrame);
>                        element.setTarget(getFrameName());
>                        onloadstrategy.hookEvents(synthesizedFrame, this);
>                }
>        }
>
>        private String getFrameName() {
>                return paintableId + "_TGT_FRAME";
>        }
>
>        @Override
>        protected void onDetach() {
>                super.onDetach();
>                if (!submitted) {
>                        cleanTargetFrame();
>                }
>        }
>
>        private void cleanTargetFrame() {
>                if (synthesizedFrame != null) {
>
>  Document.get().getBody().removeChild(synthesizedFrame);
>                        onloadstrategy.unHookEvents(synthesizedFrame);
>                        synthesizedFrame = null;
>                 }
>        }
>
> }
>
>
> On 21 Set, 17:16, Jim Douglas <[email protected]> wrote:
> > accept:
> >
> > http://groups.google.com/group/google-web-toolkit/browse_thread/threa...
> >
> > styling:
> >
> > http://www.quirksmode.org/dom/inputfile.html
> >
> > On Sep 21, 5:20 am, Sante <[email protected]> wrote:
> >
> >
> >
> > > How to set accept property in FileUpload??
> > > Becase I use this property for file filtering.
> >
> > > Exist a way to customizing FileUpload via css style?
> >
> > > I'm using vaadin framework the runs on gwt.
> >
> > > Best Regards
>
> --
> You received this message because you are subscribed to the Google Groups
> "Google Web Toolkit" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/google-web-toolkit?hl=en.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-web-toolkit?hl=en.

Reply via email to