Example usage for com.google.gwt.event.dom.client DragLeaveHandler DragLeaveHandler

List of usage examples for com.google.gwt.event.dom.client DragLeaveHandler DragLeaveHandler

Introduction

In this page you can find the example usage for com.google.gwt.event.dom.client DragLeaveHandler DragLeaveHandler.

Prototype

DragLeaveHandler

Source Link

Usage

From source file:ch.unifr.pai.mindmap.client.mindmap.BackgroundImgRepo.java

License:Apache License

/**
 * @param bgImg/*from   w  w  w  . j av  a2s . c  om*/
 *            - the image object that shall be adapted accordingly to the chosen data-url
 */
public BackgroundImgRepo(Image bgImg) {
    super();
    add(fp);
    add(previewImage);
    getElement().getStyle().setOverflow(Overflow.VISIBLE);
    this.bgImg = bgImg;
    this.setHeight("100%");
    this.setWidth("100%");
    fp.getElement().getStyle().setBackgroundColor("grey");
    fp.setWidth("100%");
    fp.setHeight("100%");
    fp.setWidget(hp);
    hp.setWidth("100%");
    hp.setHeight("100%");
    fp.setWidget(hp);
    previewImage.getElement().getStyle().setPosition(Position.ABSOLUTE);
    previewImage.getElement().getStyle().setTop(-120, Unit.PX);
    previewImage.getElement().getStyle().setHeight(110, Unit.PX);
    previewImage.getElement().getStyle().setBorderWidth(2, Unit.PX);
    previewImage.getElement().getStyle().setBorderColor("black");
    previewImage.getElement().getStyle().setBorderStyle(BorderStyle.SOLID);
    previewImage.getElement().getStyle().setDisplay(Display.NONE);

    // Add a button for cleaning the browser as well
    PushButton emptyBg = new PushButton(new Image(GWT.getModuleBaseURL() + "images/emptyscreen.png")) {
        @Override
        public void onBrowserEvent(Event event) {
            if (MultiCursorController.isDefaultCursor(event)) {
                super.onBrowserEvent(event);
            }
        }
    };
    emptyBg.setTitle("Remove background-image");
    emptyBg.getElement().getStyle().setDisplay(Display.INLINE_BLOCK);
    emptyBg.addClickHandler(new ClickHandler() {

        @Override
        public void onClick(ClickEvent event) {
            if (MultiCursorController.isDefaultCursor(event.getNativeEvent())) {
                BackgroundImgRepo.this.bgImg.setVisible(false);
            }
        }
    });
    hp.add(emptyBg);
    fp.addDragOverHandler(new DragOverHandler() {

        @Override
        public void onDragOver(DragOverEvent event) {
            fp.getElement().getStyle().setBackgroundColor("darkgrey");
        }
    });
    fp.addDragLeaveHandler(new DragLeaveHandler() {

        @Override
        public void onDragLeave(DragLeaveEvent event) {
            fp.getElement().getStyle().setBackgroundColor("grey");
        }

    });
    fp.addDropHandler(new DropHandler() {

        /**
         * Prevents the default behavior of the browser (otherwise, the browser would open the image in the current tab), reads the dragged files and adds
         * them as {@link PushButton} to the panel.
         * 
         * @see com.google.gwt.event.dom.client.DropHandler#onDrop(com.google.gwt.event.dom.client.DropEvent)
         */
        /*
         * (non-Javadoc)
         * @see com.google.gwt.event.dom.client.DropHandler#onDrop(com.google.gwt.event.dom.client.DropEvent)
         */
        @Override
        public void onDrop(DropEvent event) {
            // event.stopPropagation();
            event.preventDefault();
            fp.getElement().getStyle().setBackgroundColor("grey");
            JsArray<JavaScriptObject> files = getDataTransferFiles(event.getDataTransfer());
            for (int i = 0; i < files.length(); i++) {
                final Image img = new Image();
                PushButton button = new PushButton(img) {
                    @Override
                    public void onBrowserEvent(Event event) {
                        if (MultiCursorController.isDefaultCursor(event)) {
                            super.onBrowserEvent(event);
                        }
                    }

                };
                button.setTitle("Set this image as background");
                button.addClickHandler(new ClickHandler() {

                    /**
                     * Set the image of the button as the current background image
                     * 
                     * @see com.google.gwt.event.dom.client.ClickHandler#onClick(com.google.gwt.event.dom.client.ClickEvent)
                     */
                    @Override
                    public void onClick(ClickEvent event) {
                        if (MultiCursorController.isDefaultCursor(event.getNativeEvent())) {
                            BackgroundImgRepo.this.bgImg.setVisible(true);
                            BackgroundImgRepo.this.bgImg.getElement().setAttribute("src",
                                    img.getElement().getAttribute("src"));
                        }
                    }
                });
                button.addMouseOverHandler(new MouseOverHandler() {

                    /**
                     * Show the preview image at the appropriate position and replace the data-url
                     * 
                     * @see com.google.gwt.event.dom.client.MouseOverHandler#onMouseOver(com.google.gwt.event.dom.client.MouseOverEvent)
                     */
                    @Override
                    public void onMouseOver(MouseOverEvent event) {
                        if (MultiCursorController.isDefaultCursor(event.getNativeEvent())) {
                            BackgroundImgRepo.this.previewImage.getElement().getStyle()
                                    .setDisplay(Display.BLOCK);
                            BackgroundImgRepo.this.previewImage.getElement().setAttribute("src",
                                    img.getElement().getAttribute("src"));
                            Scheduler.get().scheduleDeferred(new ScheduledCommand() {

                                @Override
                                public void execute() {
                                    previewImage.getElement().getStyle().setLeft(img.getAbsoluteLeft()
                                            - BackgroundImgRepo.this.getAbsoluteLeft()
                                            - previewImage.getOffsetWidth() / 2 + img.getOffsetWidth() / 2,
                                            Unit.PX);
                                }
                            });
                        }
                    }
                });
                button.addMouseOutHandler(new MouseOutHandler() {

                    /**
                     * Hide the preview image
                     * 
                     * @see com.google.gwt.event.dom.client.MouseOutHandler#onMouseOut(com.google.gwt.event.dom.client.MouseOutEvent)
                     */
                    @Override
                    public void onMouseOut(MouseOutEvent event) {
                        if (MultiCursorController.isDefaultCursor(event.getNativeEvent())) {

                            BackgroundImgRepo.this.previewImage.getElement().getStyle()
                                    .setDisplay(Display.NONE);
                        }
                    }
                });
                // img.getElement().getStyle().setMargin(5, Unit.PX);
                // img.getElement().getStyle().setDisplay(Display.INLINE_BLOCK);
                img.setHeight("35px");
                button.getElement().getStyle().setDisplay(Display.INLINE_BLOCK);
                hp.add(button);
                addBackgroundImage(img.getElement(), files.get(i));
            }

        }
    });
}

From source file:co.fxl.gui.gwt.GWTElement.java

License:Open Source License

@SuppressWarnings("unchecked")
public R addDragOverListener(final IDragMoveListener l) {
    hasDragListener = true;//from  w  w  w.ja  v  a  2  s .c  o  m
    if (dummyDragListener != null) {
        dummyDragListener.removeHandler();
    }
    container.widget.addDomHandler(new DragOverHandler() {

        @Override
        public void onDragOver(DragOverEvent event) {
            event.preventDefault();
            l.onDragOver(new GWTPoint(event));
        }
    }, DragOverEvent.getType());
    container.widget.addDomHandler(new DragLeaveHandler() {

        @Override
        public void onDragLeave(final DragLeaveEvent event) {
            event.preventDefault();
            l.onDragOut(new GWTPoint(event));
        }
    }, DragLeaveEvent.getType());
    return (R) this;
}

From source file:com.akjava.gwt.html5.client.file.FileUtils.java

License:Apache License

public static FileUploadForm createSingleFileUploadForm(final DataURLListener listener, final boolean reset,
        boolean supportOnDrop) {
    final FileUploadForm form = new FileUploadForm();
    form.getDropPanel().addDragOverHandler(new DragOverHandler() {

        @Override/*ww w  .java2  s.  c om*/
        public void onDragOver(DragOverEvent event) {
            event.preventDefault();
            if (form.isShowDragOverBorder()) {
                form.getDropPanel().setBorderWidth(2);
            }
        }
    });
    form.getDropPanel().addDragLeaveHandler(new DragLeaveHandler() {

        @Override
        public void onDragLeave(DragLeaveEvent event) {
            event.preventDefault();
            if (form.isShowDragOverBorder()) {
                form.getDropPanel().setBorderWidth(0);
            }
        }
    });
    if (supportOnDrop) {
        form.getDropPanel().addDropHandler(new DropHandler() {

            @Override
            public void onDrop(DropEvent event) {

                event.preventDefault();
                if (form.isShowDragOverBorder()) {
                    form.getDropPanel().setBorderWidth(0);
                }

                final FileReader reader = FileReader.createFileReader();
                final JsArray<File> files = FileUtils.transferToFile(event.getNativeEvent());
                if (files.length() > 0) {
                    reader.setOnLoad(new FileHandler() {
                        @Override
                        public void onLoad() {
                            listener.uploaded(files.get(0), reader.getResultAsString());
                            if (reset) {
                                form.reset();
                            }
                        }
                    });
                    reader.readAsDataURL(files.get(0));
                }
                event.stopPropagation();//maybe stop root drop,//TODO 
            }
        });
    }

    form.getFileUpload().addChangeHandler(new ChangeHandler() {
        @Override
        public void onChange(ChangeEvent event) {
            final FileReader reader = FileReader.createFileReader();
            final JsArray<File> files = FileUtils.toFile(event.getNativeEvent());
            if (files.length() > 0) {
                reader.setOnLoad(new FileHandler() {
                    @Override
                    public void onLoad() {
                        listener.uploaded(files.get(0), reader.getResultAsString());
                        if (reset) {
                            form.reset();
                        }
                    }
                });
                reader.readAsDataURL(files.get(0));
            }

        }
    });
    return form;
}

From source file:com.akjava.gwt.html5.client.file.FileUtils.java

License:Apache License

public static FileUploadForm createSingleFileUploadForm(final DataArrayListener listener, final boolean reset,
        boolean supportOnDrop) {
    final FileUploadForm form = new FileUploadForm();
    form.getDropPanel().addDragOverHandler(new DragOverHandler() {

        @Override/*  w w w .  j  av a2 s .co  m*/
        public void onDragOver(DragOverEvent event) {
            event.preventDefault();
            if (form.isShowDragOverBorder()) {
                form.getDropPanel().setBorderWidth(2);
            }
        }
    });
    form.getDropPanel().addDragLeaveHandler(new DragLeaveHandler() {

        @Override
        public void onDragLeave(DragLeaveEvent event) {
            event.preventDefault();
            if (form.isShowDragOverBorder()) {
                form.getDropPanel().setBorderWidth(0);
            }
        }
    });
    if (supportOnDrop) {
        form.getDropPanel().addDropHandler(new DropHandler() {

            @Override
            public void onDrop(DropEvent event) {

                event.preventDefault();
                if (form.isShowDragOverBorder()) {
                    form.getDropPanel().setBorderWidth(0);
                }

                final FileReader reader = FileReader.createFileReader();
                final JsArray<File> files = FileUtils.transferToFile(event.getNativeEvent());
                if (files.length() > 0) {
                    reader.setOnLoad(new FileHandler() {
                        @Override
                        public void onLoad() {
                            listener.uploaded(files.get(0), reader.getResultAsBuffer());
                            if (reset) {
                                form.reset();
                            }
                        }
                    });
                    reader.readAsArrayBuffer(files.get(0));
                }
                event.stopPropagation();//maybe stop root drop,//TODO 
            }
        });
    }

    form.getFileUpload().addChangeHandler(new ChangeHandler() {
        @Override
        public void onChange(ChangeEvent event) {
            final FileReader reader = FileReader.createFileReader();
            final JsArray<File> files = FileUtils.toFile(event.getNativeEvent());
            if (files.length() > 0) {
                reader.setOnLoad(new FileHandler() {
                    @Override
                    public void onLoad() {
                        listener.uploaded(files.get(0), reader.getResultAsBuffer());
                        if (reset) {
                            form.reset();
                        }
                    }
                });
                reader.readAsArrayBuffer(files.get(0));
            }

        }
    });
    return form;
}

From source file:com.akjava.gwt.html5.client.file.FileUtils.java

License:Apache License

public static FileUploadForm createSingleTextFileUploadForm(final DataURLListener listener, final boolean reset,
        final String textEncode) {
    final FileUploadForm form = new FileUploadForm();
    form.getDropPanel().addDragOverHandler(new DragOverHandler() {

        @Override//from   ww  w  .j av  a  2s. co  m
        public void onDragOver(DragOverEvent event) {
            event.preventDefault();
            if (form.isShowDragOverBorder()) {
                form.getDropPanel().setBorderWidth(2);
            }
        }
    });
    form.getDropPanel().addDragLeaveHandler(new DragLeaveHandler() {

        @Override
        public void onDragLeave(DragLeaveEvent event) {
            event.preventDefault();
            if (form.isShowDragOverBorder()) {
                form.getDropPanel().setBorderWidth(0);
            }
        }
    });

    form.getDropPanel().addDropHandler(new DropHandler() {

        @Override
        public void onDrop(DropEvent event) {

            event.preventDefault();
            if (form.isShowDragOverBorder()) {
                form.getDropPanel().setBorderWidth(0);
            }

            final FileReader reader = FileReader.createFileReader();
            final JsArray<File> files = FileUtils.transferToFile(event.getNativeEvent());
            if (files.length() > 0) {
                reader.setOnLoad(new FileHandler() {
                    @Override
                    public void onLoad() {
                        listener.uploaded(files.get(0), reader.getResultAsString());
                        if (reset) {
                            form.reset();
                        }
                    }
                });
                reader.readAsText(files.get(0), textEncode);
            }
            event.stopPropagation();//maybe stop root drop,//TODO 
        }

    });
    //form.getFileUpload().add
    form.getFileUpload().addChangeHandler(new ChangeHandler() {
        @Override
        public void onChange(ChangeEvent event) {
            //GWT.log("onChange:");
            final FileReader reader = FileReader.createFileReader();
            final JsArray<File> files = FileUtils.toFile(event.getNativeEvent());
            if (files.length() > 0) {
                reader.setOnLoad(new FileHandler() {
                    @Override
                    public void onLoad() {
                        listener.uploaded(files.get(0), reader.getResultAsString());
                        if (reset) {
                            form.reset();
                        }
                    }
                });
                reader.readAsText(files.get(0), textEncode);
            }

        }
    });
    return form;
}

From source file:com.bearsoft.gwt.ui.widgets.grid.Grid.java

public Grid(ProvidesKey<T> aKeyProvider) {
    super();/* ww w .j  a v a2  s . c  o  m*/
    getElement().getStyle().setPosition(Style.Position.RELATIVE);
    getElement().appendChild(tdsStyleElement);
    getElement().appendChild(cellsStyleElement);
    getElement().appendChild(oddRowsStyleElement);
    getElement().appendChild(evenRowsStyleElement);
    setRowsHeight(25);
    hive = new FlexTable();
    setWidget(hive);
    hive.setCellPadding(0);
    hive.setCellSpacing(0);
    hive.setBorderWidth(0);
    headerLeft = new GridSection<T>(aKeyProvider);
    headerLeftContainer = new ScrollPanel(headerLeft);
    headerRight = new GridSection<T>(aKeyProvider);
    headerRightContainer = new ScrollPanel(headerRight);
    frozenLeft = new GridSection<T>(aKeyProvider) {

        @Override
        protected void replaceAllChildren(List<T> values, SafeHtml html) {
            super.replaceAllChildren(values, html);
            footerLeft.redrawFooters();
        }

        @Override
        protected void replaceChildren(List<T> values, int start, SafeHtml html) {
            super.replaceChildren(values, start, html);
            footerLeft.redrawFooters();
        }

    };

    frozenLeftContainer = new ScrollPanel(frozenLeft);
    frozenRight = new GridSection<T>(aKeyProvider) {

        @Override
        protected void replaceAllChildren(List<T> values, SafeHtml html) {
            super.replaceAllChildren(values, html);
            footerRight.redrawFooters();
        }

        @Override
        protected void replaceChildren(List<T> values, int start, SafeHtml html) {
            super.replaceChildren(values, start, html);
            footerRight.redrawFooters();
        }

    };
    frozenRightContainer = new ScrollPanel(frozenRight);
    scrollableLeft = new GridSection<T>(aKeyProvider) {

        @Override
        protected void replaceAllChildren(List<T> values, SafeHtml html) {
            super.replaceAllChildren(values, html);
            footerLeft.redrawFooters();
        }

        @Override
        protected void replaceChildren(List<T> values, int start, SafeHtml html) {
            super.replaceChildren(values, start, html);
            footerLeft.redrawFooters();
        }

    };
    scrollableLeftContainer = new ScrollPanel(scrollableLeft);
    scrollableRight = new GridSection<T>(aKeyProvider) {

        @Override
        protected void replaceAllChildren(List<T> values, SafeHtml html) {
            super.replaceAllChildren(values, html);
            footerRight.redrawFooters();
        }

        @Override
        protected void replaceChildren(List<T> values, int start, SafeHtml html) {
            super.replaceChildren(values, start, html);
            footerRight.redrawFooters();
        }
    };
    scrollableRightContainer = new ScrollPanel(scrollableRight);
    footerLeft = new GridSection<>(aKeyProvider);
    footerLeftContainer = new ScrollPanel(footerLeft);
    footerRight = new GridSection<>(aKeyProvider);
    footerRightContainer = new ScrollPanel(footerRight);
    // positioning context / overflow setup
    // overflow
    for (Widget w : new Widget[] { headerLeftContainer, headerRightContainer, frozenLeftContainer,
            frozenRightContainer, scrollableLeftContainer, footerLeftContainer, footerRightContainer }) {
        w.getElement().getStyle().setOverflow(Style.Overflow.HIDDEN);
    }
    // scrollableRightContainer.getElement().getStyle().setOverflow(Style.Overflow.AUTO);
    // default value
    // context
    for (Widget w : new Widget[] { headerLeftContainer, headerRightContainer, frozenLeftContainer,
            frozenRightContainer, scrollableLeftContainer, scrollableRightContainer, footerLeftContainer,
            footerRightContainer }) {
        w.getElement().getFirstChildElement().getStyle().setPosition(Style.Position.ABSOLUTE);
    }
    // propagation of some widths
    headerLeft.setWidthPropagator(new GridWidthPropagator<T>(headerLeft) {

        @Override
        public void changed() {
            super.changed();
            propagateHeaderWidth();
        }

    });
    for (GridSection<T> section : (GridSection<T>[]) new GridSection<?>[] { headerRight, frozenLeft,
            frozenRight, scrollableLeft, scrollableRight, footerLeft, footerRight }) {
        section.setWidthPropagator(new GridWidthPropagator<>(section));
    }
    headerLeft.setColumnsPartners(new AbstractCellTable[] { frozenLeft, scrollableLeft, footerLeft });
    headerRight.setColumnsPartners(new AbstractCellTable[] { frozenRight, scrollableRight, footerRight });
    ColumnsRemover leftColumnsRemover = new ColumnsRemoverAdapter<T>(headerLeft, frozenLeft, scrollableLeft,
            footerLeft);
    ColumnsRemover rightColumnsRemover = new ColumnsRemoverAdapter<T>(headerRight, frozenRight, scrollableRight,
            footerRight);
    for (GridSection<T> section : (GridSection<T>[]) new GridSection<?>[] { headerLeft, frozenLeft,
            scrollableLeft, footerLeft }) {
        section.setColumnsRemover(leftColumnsRemover);
    }
    for (GridSection<T> section : (GridSection<T>[]) new GridSection<?>[] { headerRight, frozenRight,
            scrollableRight, footerRight }) {
        section.setColumnsRemover(rightColumnsRemover);
    }
    for (GridSection<T> section : (GridSection<T>[]) new GridSection<?>[] { frozenLeft, scrollableLeft,
            footerLeft }) {
        section.setHeaderSource(headerLeft);
    }
    for (GridSection<T> section : (GridSection<T>[]) new GridSection<?>[] { frozenRight, scrollableRight,
            footerRight }) {
        section.setHeaderSource(headerRight);
    }
    for (GridSection<T> section : (GridSection<T>[]) new GridSection<?>[] { headerLeft, frozenLeft,
            scrollableLeft }) {
        section.setFooterSource(footerLeft);
    }
    for (GridSection<T> section : (GridSection<T>[]) new GridSection<?>[] { headerRight, frozenRight,
            scrollableRight }) {
        section.setFooterSource(footerRight);
    }

    // hive organization
    hive.setWidget(0, 0, headerLeftContainer);
    hive.setWidget(0, 1, headerRightContainer);
    hive.setWidget(1, 0, frozenLeftContainer);
    hive.setWidget(1, 1, frozenRightContainer);
    hive.setWidget(2, 0, scrollableLeftContainer);
    hive.setWidget(2, 1, scrollableRightContainer);
    hive.setWidget(3, 0, footerLeftContainer);
    hive.setWidget(3, 1, footerRightContainer);

    for (Widget w : new Widget[] { headerLeftContainer, headerRightContainer, frozenLeftContainer,
            frozenRightContainer, scrollableLeftContainer, scrollableRightContainer, footerLeftContainer,
            footerRightContainer }) {
        w.setWidth("100%");
        w.setHeight("100%");
    }
    // misc
    for (Widget w : new Widget[] { headerRightContainer, frozenRightContainer, footerRightContainer,
            scrollableLeftContainer }) {
        w.getElement().getParentElement().getStyle().setOverflow(Style.Overflow.HIDDEN);
    }
    hive.getElement().getStyle().setTableLayout(Style.TableLayout.FIXED);
    hive.getElement().getStyle().setPosition(Style.Position.RELATIVE);
    for (CellTable<?> tbl : new CellTable<?>[] { headerLeft, headerRight, frozenLeft, frozenRight,
            scrollableLeft, scrollableRight, footerLeft, footerRight }) {
        tbl.setTableLayoutFixed(true);
    }
    // header
    headerLeft.setHeaderBuilder(new ThemedHeaderOrFooterBuilder<T>(headerLeft, false, this));
    headerLeft.setFooterBuilder(new NullHeaderOrFooterBuilder<T>(headerLeft, true));
    headerRight.setHeaderBuilder(new ThemedHeaderOrFooterBuilder<T>(headerRight, false, this));
    headerRight.setFooterBuilder(new NullHeaderOrFooterBuilder<T>(headerRight, true));
    // footer
    footerLeft.setHeaderBuilder(new NullHeaderOrFooterBuilder<T>(footerLeft, false));
    footerLeft.setFooterBuilder(new ThemedHeaderOrFooterBuilder<T>(footerLeft, true));
    footerRight.setHeaderBuilder(new NullHeaderOrFooterBuilder<T>(footerRight, false));
    footerRight.setFooterBuilder(new ThemedHeaderOrFooterBuilder<T>(footerRight, true));
    // data bodies
    for (GridSection<?> section : new GridSection<?>[] { frozenLeft, frozenRight, scrollableLeft,
            scrollableRight }) {
        GridSection<T> gSection = (GridSection<T>) section;
        gSection.setHeaderBuilder(new NullHeaderOrFooterBuilder<T>(gSection, false));
        gSection.setFooterBuilder(new NullHeaderOrFooterBuilder<T>(gSection, true));
    }
    for (GridSection<?> section : new GridSection<?>[] { headerLeft, headerRight, frozenLeft, frozenRight,
            scrollableLeft, scrollableRight, footerLeft, footerRight }) {
        section.setAutoHeaderRefreshDisabled(true);
    }
    for (GridSection<?> section : new GridSection<?>[] { headerLeft, headerRight, footerLeft, footerRight }) {
        section.setAutoFooterRefreshDisabled(true);
    }
    // cells
    installCellBuilders();

    scrollableRightContainer.addScrollHandler(new ScrollHandler() {

        @Override
        public void onScroll(ScrollEvent event) {
            int aimTop = scrollableRightContainer.getElement().getScrollTop();
            int aimLeft = scrollableRightContainer.getElement().getScrollLeft();

            scrollableLeftContainer.getElement().setScrollTop(aimTop);
            int factTopDelta = aimTop - scrollableLeftContainer.getElement().getScrollTop();
            if (factTopDelta > 0) {
                scrollableLeftContainer.getElement().getStyle().setBottom(factTopDelta, Style.Unit.PX);
            } else {
                scrollableLeftContainer.getElement().getStyle().clearBottom();
            }
            headerRightContainer.getElement().setScrollLeft(aimLeft);
            int factLeftDelta0 = aimLeft - headerRightContainer.getElement().getScrollLeft();
            if (factLeftDelta0 > 0) {
                headerRightContainer.getElement().getStyle().setRight(factLeftDelta0, Style.Unit.PX);
            } else {
                headerRightContainer.getElement().getStyle().clearRight();
            }
            frozenRightContainer.getElement().setScrollLeft(aimLeft);
            int factLeftDelta1 = aimLeft - frozenRightContainer.getElement().getScrollLeft();
            if (factLeftDelta1 > 0) {
                frozenRightContainer.getElement().getStyle().setRight(factLeftDelta1, Style.Unit.PX);
            } else {
                frozenRightContainer.getElement().getStyle().clearRight();
            }
            footerRightContainer.getElement()
                    .setScrollLeft(scrollableRightContainer.getElement().getScrollLeft());
            int factLeftDelta2 = aimLeft - footerRightContainer.getElement().getScrollLeft();
            if (factLeftDelta2 > 0) {
                footerRightContainer.getElement().getStyle().setRight(factLeftDelta2, Style.Unit.PX);
            } else {
                footerRightContainer.getElement().getStyle().clearRight();
            }
        }

    });
    ghostLine = Document.get().createDivElement();
    ghostLine.addClassName(RULER_STYLE);
    ghostLine.getStyle().setPosition(Style.Position.ABSOLUTE);
    ghostLine.getStyle().setTop(0, Style.Unit.PX);
    ghostColumn = Document.get().createDivElement();
    ghostColumn.addClassName(COLUMN_PHANTOM_STYLE);
    ghostColumn.getStyle().setPosition(Style.Position.ABSOLUTE);
    ghostColumn.getStyle().setTop(0, Style.Unit.PX);
    addDomHandler(new DragEnterHandler() {

        @Override
        public void onDragEnter(DragEnterEvent event) {
            if (DraggedColumn.instance != null) {
                if (DraggedColumn.instance.isMove()) {
                    event.preventDefault();
                    event.stopPropagation();
                    DraggedColumn<T> target = findTargetDraggedColumn(event.getNativeEvent().getEventTarget());
                    if (target != null) {
                        showColumnMoveDecorations(target);
                        event.getDataTransfer().<XDataTransfer>cast().setDropEffect("move");
                    } else {
                        event.getDataTransfer().<XDataTransfer>cast().setDropEffect("none");
                    }
                } else {
                }
            } else {
                event.getDataTransfer().<XDataTransfer>cast().setDropEffect("none");
            }
        }
    }, DragEnterEvent.getType());
    addDomHandler(new DragHandler() {

        @Override
        public void onDrag(DragEvent event) {
            if (DraggedColumn.instance != null && DraggedColumn.instance.isResize()) {
                event.stopPropagation();
                /*
                int newWidth = event.getNativeEvent().getClientX() - DraggedColumn.instance.getCellElement().getAbsoluteLeft();
                if (newWidth > MINIMUM_COLUMN_WIDTH) {
                   event.getDataTransfer().<XDataTransfer> cast().setDropEffect("move");
                } else {
                   event.getDataTransfer().<XDataTransfer> cast().setDropEffect("none");
                }
                */
            }
        }
    }, DragEvent.getType());
    addDomHandler(new DragOverHandler() {

        @Override
        public void onDragOver(DragOverEvent event) {
            if (DraggedColumn.instance != null) {
                event.preventDefault();
                event.stopPropagation();
                if (DraggedColumn.instance.isMove()) {
                    DraggedColumn<T> target = findTargetDraggedColumn(event.getNativeEvent().getEventTarget());
                    if (target != null) {
                        event.getDataTransfer().<XDataTransfer>cast().setDropEffect("move");
                    } else {
                        hideColumnDecorations();
                        event.getDataTransfer().<XDataTransfer>cast().setDropEffect("none");
                    }
                } else {
                    Element hostElement = Grid.this.getElement();
                    int clientX = event.getNativeEvent().getClientX();
                    int hostAbsX = hostElement.getAbsoluteLeft();
                    int hostScrollX = hostElement.getScrollLeft();
                    int docScrollX = hostElement.getOwnerDocument().getScrollLeft();
                    int relativeX = clientX - hostAbsX + hostScrollX + docScrollX;
                    ghostLine.getStyle().setLeft(relativeX, Style.Unit.PX);
                    ghostLine.getStyle().setHeight(hostElement.getClientHeight(), Style.Unit.PX);
                    if (ghostLine.getParentElement() != hostElement) {
                        hostElement.appendChild(ghostLine);
                    }
                }
            }
        }
    }, DragOverEvent.getType());
    addDomHandler(new DragLeaveHandler() {

        @Override
        public void onDragLeave(DragLeaveEvent event) {
            if (DraggedColumn.instance != null) {
                event.stopPropagation();
                if (DraggedColumn.instance.isMove()) {
                    if (event.getNativeEvent().getEventTarget() == (JavaScriptObject) Grid.this.getElement()) {
                        hideColumnDecorations();
                    }
                }
            }
        }
    }, DragLeaveEvent.getType());
    addDomHandler(new DragEndHandler() {

        @Override
        public void onDragEnd(DragEndEvent event) {
            event.stopPropagation();
            hideColumnDecorations();
            DraggedColumn.instance = null;
        }
    }, DragEndEvent.getType());
    addDomHandler(new DropHandler() {

        @Override
        public void onDrop(DropEvent event) {
            DraggedColumn<?> source = DraggedColumn.instance;
            DraggedColumn<T> target = targetDraggedColumn;
            hideColumnDecorations();
            DraggedColumn.instance = null;
            if (source != null) {
                event.preventDefault();
                event.stopPropagation();
                if (source.isMove()) {
                    AbstractCellTable<T> sourceSection = (AbstractCellTable<T>) source.getTable();
                    // target table may be any section in our grid
                    if (target != null) {
                        Header<?> sourceHeader = source.getHeader();
                        Header<?> targetHeader = target.getHeader();
                        if (sourceHeader instanceof DraggableHeader<?>
                                && targetHeader instanceof DraggableHeader<?>) {
                            DraggableHeader<T> sourceDH = (DraggableHeader<T>) sourceHeader;
                            DraggableHeader<T> targetDH = (DraggableHeader<T>) targetHeader;
                            moveColumnNode(sourceDH.getHeaderNode(), targetDH.getHeaderNode());
                        } else {
                            int sourceIndex = source.getColumnIndex();
                            int targetIndex = target.getColumnIndex();
                            GridSection<T> targetSection = (GridSection<T>) target.getTable();

                            boolean isSourceLeft = sourceSection == headerLeft || sourceSection == frozenLeft
                                    || sourceSection == scrollableLeft || sourceSection == footerLeft;
                            boolean isTargetLeft = targetSection == headerLeft || targetSection == frozenLeft
                                    || targetSection == scrollableLeft || targetSection == footerLeft;
                            sourceSection = isSourceLeft ? headerLeft : headerRight;
                            targetSection = isTargetLeft ? headerLeft : headerRight;
                            int generalSourceIndex = isSourceLeft ? sourceIndex : sourceIndex + frozenColumns;
                            int generalTargetIndex = isTargetLeft ? targetIndex : targetIndex + frozenColumns;
                            Header<?> header = sourceSection.getHeader(sourceIndex);
                            if (header instanceof DraggableHeader) {
                                ((DraggableHeader) header).setTable(targetSection);
                            }
                            if (generalSourceIndex != generalTargetIndex) {
                                Column<T, ?> column = (Column<T, ?>) source.getColumn();
                                if (!(header instanceof DraggableHeader)
                                        || ((DraggableHeader) header).isMoveable()) {
                                    moveColumn(generalSourceIndex, generalTargetIndex);
                                }
                            }
                        }
                    }
                } else {
                    Header<?> header = source.getHeader();
                    if (!(header instanceof DraggableHeader) || ((DraggableHeader) header).isResizable()) {
                        int newWidth = Math.max(
                                event.getNativeEvent().getClientX() - source.getCellElement().getAbsoluteLeft(),
                                MINIMUM_COLUMN_WIDTH);
                        // Source and target tables are the same, so we can
                        // cast to DraggedColumn<T> with no care
                        setColumnWidthFromHeaderDrag(((DraggedColumn<T>) source).getColumn(), newWidth,
                                Style.Unit.PX);
                    }
                }
            }
        }
    }, DropEvent.getType());

    columnsChevron.getElement().getStyle().setPosition(Style.Position.ABSOLUTE);
    columnsChevron.getElement().addClassName(COLUMNS_CHEVRON_STYLE);
    getElement().appendChild(columnsChevron.getElement());
    columnsChevron.addDomHandler(new ClickHandler() {

        @Override
        public void onClick(ClickEvent event) {
            PopupPanel pp = new PopupPanel();
            pp.setAutoHideEnabled(true);
            pp.setAutoHideOnHistoryEventsEnabled(true);
            pp.setAnimationEnabled(true);
            MenuBar columnsMenu = new MenuBar(true);
            fillColumns(columnsMenu, headerLeft);
            fillColumns(columnsMenu, headerRight);
            pp.setWidget(columnsMenu);
            pp.setPopupPosition(columnsChevron.getAbsoluteLeft(), columnsChevron.getAbsoluteTop());
            pp.showRelativeTo(columnsChevron);
        }

        private void fillColumns(MenuBar aTarget, final GridSection<T> aSection) {
            for (int i = 0; i < aSection.getColumnCount(); i++) {
                Header<?> h = aSection.getHeader(i);
                final Column<T, ?> column = aSection.getColumn(i);
                SafeHtml rendered;
                if (h.getValue() instanceof String) {
                    String hVal = (String) h.getValue();
                    rendered = hVal.startsWith("<html>") ? SafeHtmlUtils.fromTrustedString(hVal.substring(6))
                            : SafeHtmlUtils.fromString(hVal);
                } else {
                    Cell.Context context = new Cell.Context(0, i, h.getKey());
                    SafeHtmlBuilder sb = new SafeHtmlBuilder();
                    h.render(context, sb);
                    rendered = sb.toSafeHtml();
                }
                MenuItemCheckBox miCheck = new MenuItemCheckBox(!aSection.isColumnHidden(column),
                        rendered.asString(), true);
                miCheck.addValueChangeHandler(new ValueChangeHandler<Boolean>() {

                    @Override
                    public void onValueChange(ValueChangeEvent<Boolean> event) {
                        if (Boolean.TRUE.equals(event.getValue())) {
                            showColumn(column);
                        } else {
                            hideColumn(column);
                        }
                        Grid.this.onResize();
                    }

                });
                aTarget.addItem(miCheck);
            }
        }

    }, ClickEvent.getType());

    ColumnSortEvent.Handler sectionSortHandler = new ColumnSortEvent.Handler() {

        @Override
        public void onColumnSort(ColumnSortEvent event) {
            boolean isCtrlKey = ((GridSection<?>) event.getSource()).isCtrlKey();
            boolean contains = false;
            int containsAt = -1;
            for (int i = 0; i < sortList.size(); i++) {
                if (sortList.get(i).getColumn() == event.getColumn()) {
                    contains = true;
                    containsAt = i;
                    break;
                }
            }
            if (!contains) {
                if (!isCtrlKey) {
                    sortList.clear();
                }
                sortList.insert(sortList.size(), new ColumnSortList.ColumnSortInfo(event.getColumn(), true));
            } else {
                boolean wasAscending = sortList.get(containsAt).isAscending();
                if (!isCtrlKey) {
                    sortList.clear();
                    if (wasAscending) {
                        sortList.push(new ColumnSortList.ColumnSortInfo(event.getColumn(), false));
                    }
                } else {
                    sortList.remove(sortList.get(containsAt));
                    if (wasAscending) {
                        sortList.insert(containsAt,
                                new ColumnSortList.ColumnSortInfo(event.getColumn(), false));
                    }
                }
            }
            ColumnSortEvent.fire(Grid.this, sortList);
        }
    };
    headerLeft.getColumnSortList().setLimit(1);
    headerLeft.addColumnSortHandler(sectionSortHandler);
    headerRight.getColumnSortList().setLimit(1);
    headerRight.addColumnSortHandler(sectionSortHandler);
    gridColor = PublishedColor.create(211, 211, 211, 255);
    regenerateDynamicTDStyles();
    regenerateDynamicOddRowsStyles();
    getElement().<XElement>cast().addResizingTransitionEnd(this);
}

From source file:com.eas.grid.Grid.java

public Grid(ProvidesKey<T> aKeyProvider) {
    super();/*from   w w  w.j ava 2 s  . co m*/
    getElement().getStyle().setPosition(Style.Position.RELATIVE);
    getElement().appendChild(tdsStyleElement);
    getElement().appendChild(cellsStyleElement);
    getElement().appendChild(oddRowsStyleElement);
    getElement().appendChild(evenRowsStyleElement);
    setRowsHeight(30);
    hive = new FlexTable();
    setWidget(hive);
    hive.setCellPadding(0);
    hive.setCellSpacing(0);
    hive.setBorderWidth(0);
    headerLeft = new GridSection<T>(aKeyProvider);
    headerLeftContainer = new ScrollPanel(headerLeft);
    headerRight = new GridSection<T>(aKeyProvider);
    headerRightContainer = new ScrollPanel(headerRight);
    frozenLeft = new GridSection<T>(aKeyProvider) {

        @Override
        protected void replaceAllChildren(List<T> values, SafeHtml html) {
            super.replaceAllChildren(values, html);
            footerLeft.redrawFooters();
            frozenLeftRendered();
        }

        @Override
        protected void replaceChildren(List<T> values, int start, SafeHtml html) {
            super.replaceChildren(values, start, html);
            footerLeft.redrawFooters();
            frozenLeftRendered();
        }

        @Override
        protected void onFocus() {
            super.onFocus();
            Element focused = getKeyboardSelectedElement();
            if (focused != null)
                focused.setTabIndex(tabIndex);
            FocusEvent.fireNativeEvent(Document.get().createFocusEvent(), Grid.this);
        }

        @Override
        protected void onBlur() {
            super.onBlur();
            FocusEvent.fireNativeEvent(Document.get().createBlurEvent(), Grid.this);
        }
    };

    frozenLeftContainer = new ScrollPanel(frozenLeft);
    frozenRight = new GridSection<T>(aKeyProvider) {

        @Override
        protected void replaceAllChildren(List<T> values, SafeHtml html) {
            super.replaceAllChildren(values, html);
            footerRight.redrawFooters();
            frozenRightRendered();
        }

        @Override
        protected void replaceChildren(List<T> values, int start, SafeHtml html) {
            super.replaceChildren(values, start, html);
            footerRight.redrawFooters();
            frozenRightRendered();
        }

        @Override
        protected void onFocus() {
            super.onFocus();
            Element focused = getKeyboardSelectedElement();
            if (focused != null)
                focused.setTabIndex(tabIndex);
            FocusEvent.fireNativeEvent(Document.get().createFocusEvent(), Grid.this);
        }

        @Override
        protected void onBlur() {
            super.onBlur();
            FocusEvent.fireNativeEvent(Document.get().createBlurEvent(), Grid.this);
        }
    };
    frozenRightContainer = new ScrollPanel(frozenRight);
    scrollableLeft = new GridSection<T>(aKeyProvider) {

        @Override
        protected void replaceAllChildren(List<T> values, SafeHtml html) {
            super.replaceAllChildren(values, html);
            footerLeft.redrawFooters();
            scrollableLeftRendered();
        }

        @Override
        protected void replaceChildren(List<T> values, int start, SafeHtml html) {
            super.replaceChildren(values, start, html);
            footerLeft.redrawFooters();
            scrollableLeftRendered();
        }

        @Override
        protected void onFocus() {
            super.onFocus();
            Element focused = getKeyboardSelectedElement();
            if (focused != null)
                focused.setTabIndex(tabIndex);
            FocusEvent.fireNativeEvent(Document.get().createFocusEvent(), Grid.this);
        }

        @Override
        protected void onBlur() {
            super.onBlur();
            FocusEvent.fireNativeEvent(Document.get().createBlurEvent(), Grid.this);
        }
    };
    scrollableLeftContainer = new ScrollPanel(scrollableLeft);
    scrollableRight = new GridSection<T>(aKeyProvider) {

        @Override
        protected void replaceAllChildren(List<T> values, SafeHtml html) {
            super.replaceAllChildren(values, html);
            footerRight.redrawFooters();
            scrollableRightRendered();
        }

        @Override
        protected void replaceChildren(List<T> values, int start, SafeHtml html) {
            super.replaceChildren(values, start, html);
            footerRight.redrawFooters();
            scrollableRightRendered();
        }

        @Override
        protected void onFocus() {
            super.onFocus();
            Element focused = getKeyboardSelectedElement();
            if (focused != null)
                focused.setTabIndex(tabIndex);
            FocusEvent.fireNativeEvent(Document.get().createFocusEvent(), Grid.this);
        }

        @Override
        protected void onBlur() {
            super.onBlur();
            FocusEvent.fireNativeEvent(Document.get().createBlurEvent(), Grid.this);
        }
    };
    scrollableRightContainer = new ScrollPanel(scrollableRight);
    footerLeft = new GridSection<>(aKeyProvider);
    footerLeftContainer = new ScrollPanel(footerLeft);
    footerRight = new GridSection<>(aKeyProvider);
    footerRightContainer = new ScrollPanel(footerRight);
    // positioning context / overflow setup
    // overflow
    for (Widget w : new Widget[] { headerLeftContainer, headerRightContainer, frozenLeftContainer,
            frozenRightContainer, scrollableLeftContainer, footerLeftContainer, footerRightContainer }) {
        w.getElement().getStyle().setOverflow(Style.Overflow.HIDDEN);
    }
    // scrollableRightContainer.getElement().getStyle().setOverflow(Style.Overflow.AUTO);
    // default value
    // context
    for (Widget w : new Widget[] { headerLeftContainer, headerRightContainer, frozenLeftContainer,
            frozenRightContainer, scrollableLeftContainer, scrollableRightContainer, footerLeftContainer,
            footerRightContainer }) {
        w.getElement().getFirstChildElement().getStyle().setPosition(Style.Position.ABSOLUTE);
    }
    // propagation of some widths
    headerLeft.setWidthPropagator(new GridWidthPropagator<T>(headerLeft) {

        @Override
        public void changed() {
            super.changed();
            propagateHeaderWidth();
        }

    });
    for (GridSection<T> section : (GridSection<T>[]) new GridSection<?>[] { headerRight, frozenLeft,
            frozenRight, scrollableLeft, scrollableRight, footerLeft, footerRight }) {
        section.setWidthPropagator(new GridWidthPropagator<>(section));
    }
    headerLeft.setColumnsPartners(new AbstractCellTable[] { frozenLeft, scrollableLeft, footerLeft });
    headerRight.setColumnsPartners(new AbstractCellTable[] { frozenRight, scrollableRight, footerRight });
    ColumnsRemover leftColumnsRemover = new ColumnsRemoverAdapter<T>(headerLeft, frozenLeft, scrollableLeft,
            footerLeft);
    ColumnsRemover rightColumnsRemover = new ColumnsRemoverAdapter<T>(headerRight, frozenRight, scrollableRight,
            footerRight);
    for (GridSection<T> section : (GridSection<T>[]) new GridSection<?>[] { headerLeft, frozenLeft,
            scrollableLeft, footerLeft }) {
        section.setColumnsRemover(leftColumnsRemover);
    }
    for (GridSection<T> section : (GridSection<T>[]) new GridSection<?>[] { headerRight, frozenRight,
            scrollableRight, footerRight }) {
        section.setColumnsRemover(rightColumnsRemover);
    }
    for (GridSection<T> section : (GridSection<T>[]) new GridSection<?>[] { frozenLeft, scrollableLeft,
            footerLeft }) {
        section.setHeaderSource(headerLeft);
    }
    for (GridSection<T> section : (GridSection<T>[]) new GridSection<?>[] { frozenRight, scrollableRight,
            footerRight }) {
        section.setHeaderSource(headerRight);
    }
    for (GridSection<T> section : (GridSection<T>[]) new GridSection<?>[] { headerLeft, frozenLeft,
            scrollableLeft }) {
        section.setFooterSource(footerLeft);
    }
    for (GridSection<T> section : (GridSection<T>[]) new GridSection<?>[] { headerRight, frozenRight,
            scrollableRight }) {
        section.setFooterSource(footerRight);
    }

    // hive organization
    hive.setWidget(0, 0, headerLeftContainer);
    hive.setWidget(0, 1, headerRightContainer);
    hive.setWidget(1, 0, frozenLeftContainer);
    hive.setWidget(1, 1, frozenRightContainer);
    hive.setWidget(2, 0, scrollableLeftContainer);
    hive.setWidget(2, 1, scrollableRightContainer);
    hive.setWidget(3, 0, footerLeftContainer);
    hive.setWidget(3, 1, footerRightContainer);

    for (Widget w : new Widget[] { headerLeftContainer, headerRightContainer, frozenLeftContainer,
            frozenRightContainer, scrollableLeftContainer, scrollableRightContainer, footerLeftContainer,
            footerRightContainer }) {
        w.setWidth("100%");
        w.setHeight("100%");
    }
    // misc
    for (Widget w : new Widget[] { headerRightContainer, frozenRightContainer, footerRightContainer,
            scrollableLeftContainer }) {
        w.getElement().getParentElement().getStyle().setOverflow(Style.Overflow.HIDDEN);
    }
    hive.getElement().getStyle().setTableLayout(Style.TableLayout.FIXED);
    hive.getElement().getStyle().setPosition(Style.Position.RELATIVE);
    for (CellTable<?> tbl : new CellTable<?>[] { headerLeft, headerRight, frozenLeft, frozenRight,
            scrollableLeft, scrollableRight, footerLeft, footerRight }) {
        tbl.setTableLayoutFixed(true);
    }
    // header
    headerLeft.setHeaderBuilder(new ThemedHeaderOrFooterBuilder<T>(headerLeft, false, this));
    headerLeft.setFooterBuilder(new NullHeaderOrFooterBuilder<T>(headerLeft, true));
    headerRight.setHeaderBuilder(new ThemedHeaderOrFooterBuilder<T>(headerRight, false, this));
    headerRight.setFooterBuilder(new NullHeaderOrFooterBuilder<T>(headerRight, true));
    // footer
    footerLeft.setHeaderBuilder(new NullHeaderOrFooterBuilder<T>(footerLeft, false));
    footerLeft.setFooterBuilder(new ThemedHeaderOrFooterBuilder<T>(footerLeft, true));
    footerRight.setHeaderBuilder(new NullHeaderOrFooterBuilder<T>(footerRight, false));
    footerRight.setFooterBuilder(new ThemedHeaderOrFooterBuilder<T>(footerRight, true));
    // data bodies
    for (GridSection<?> section : new GridSection<?>[] { frozenLeft, frozenRight, scrollableLeft,
            scrollableRight }) {
        GridSection<T> gSection = (GridSection<T>) section;
        gSection.setHeaderBuilder(new NullHeaderOrFooterBuilder<T>(gSection, false));
        gSection.setFooterBuilder(new NullHeaderOrFooterBuilder<T>(gSection, true));
    }
    for (GridSection<?> section : new GridSection<?>[] { headerLeft, headerRight, frozenLeft, frozenRight,
            scrollableLeft, scrollableRight, footerLeft, footerRight }) {
        section.setAutoHeaderRefreshDisabled(true);
    }
    for (GridSection<?> section : new GridSection<?>[] { headerLeft, headerRight, footerLeft, footerRight }) {
        section.setAutoFooterRefreshDisabled(true);
    }
    // cells
    installCellBuilders();

    scrollableRightContainer.addScrollHandler(new ScrollHandler() {

        @Override
        public void onScroll(ScrollEvent event) {
            int aimLeft = scrollableRightContainer.getElement().getScrollLeft();
            if (isHeaderVisible()) {
                headerRightContainer.getElement().setScrollLeft(aimLeft);
                int factLeftDelta0 = aimLeft - headerRightContainer.getElement().getScrollLeft();
                if (factLeftDelta0 > 0) {
                    headerRightContainer.getElement().getStyle().setRight(factLeftDelta0, Style.Unit.PX);
                } else {
                    headerRightContainer.getElement().getStyle().clearRight();
                }
            }
            if (frozenColumns > 0 || frozenRows > 0) {
                int aimTop = scrollableRightContainer.getElement().getScrollTop();

                scrollableLeftContainer.getElement().setScrollTop(aimTop);
                int factTopDelta = aimTop - scrollableLeftContainer.getElement().getScrollTop();
                if (factTopDelta > 0) {
                    scrollableLeftContainer.getElement().getStyle().setBottom(factTopDelta, Style.Unit.PX);
                } else {
                    scrollableLeftContainer.getElement().getStyle().clearBottom();
                }
                frozenRightContainer.getElement().setScrollLeft(aimLeft);
                int factLeftDelta1 = aimLeft - frozenRightContainer.getElement().getScrollLeft();
                if (factLeftDelta1 > 0) {
                    frozenRightContainer.getElement().getStyle().setRight(factLeftDelta1, Style.Unit.PX);
                } else {
                    frozenRightContainer.getElement().getStyle().clearRight();
                }
                footerRightContainer.getElement()
                        .setScrollLeft(scrollableRightContainer.getElement().getScrollLeft());
                int factLeftDelta2 = aimLeft - footerRightContainer.getElement().getScrollLeft();
                if (factLeftDelta2 > 0) {
                    footerRightContainer.getElement().getStyle().setRight(factLeftDelta2, Style.Unit.PX);
                } else {
                    footerRightContainer.getElement().getStyle().clearRight();
                }
            }
        }

    });
    ghostLine = Document.get().createDivElement();
    ghostLine.addClassName(RULER_STYLE);
    ghostLine.getStyle().setPosition(Style.Position.ABSOLUTE);
    ghostLine.getStyle().setTop(0, Style.Unit.PX);
    ghostColumn = Document.get().createDivElement();
    ghostColumn.addClassName(COLUMN_PHANTOM_STYLE);
    ghostColumn.getStyle().setPosition(Style.Position.ABSOLUTE);
    ghostColumn.getStyle().setTop(0, Style.Unit.PX);
    addDomHandler(new DragEnterHandler() {

        @Override
        public void onDragEnter(DragEnterEvent event) {
            if (DraggedColumn.instance != null) {
                if (DraggedColumn.instance.isMove()) {
                    event.preventDefault();
                    event.stopPropagation();
                    DraggedColumn<T> target = findTargetDraggedColumn(event.getNativeEvent().getEventTarget());
                    if (target != null) {
                        showColumnMoveDecorations(target);
                        event.getDataTransfer().<XDataTransfer>cast().setDropEffect("move");
                    } else {
                        event.getDataTransfer().<XDataTransfer>cast().setDropEffect("none");
                    }
                } else {
                }
            }
        }
    }, DragEnterEvent.getType());
    addDomHandler(new DragHandler() {

        @Override
        public void onDrag(DragEvent event) {
            if (DraggedColumn.instance != null && DraggedColumn.instance.isResize()) {
                event.stopPropagation();
            }
        }
    }, DragEvent.getType());
    addDomHandler(new DragOverHandler() {

        @Override
        public void onDragOver(DragOverEvent event) {
            if (DraggedColumn.instance != null) {
                event.preventDefault();
                event.stopPropagation();
                if (DraggedColumn.instance.isMove()) {
                    DraggedColumn<T> target = findTargetDraggedColumn(event.getNativeEvent().getEventTarget());
                    if (target != null) {
                        event.getDataTransfer().<XDataTransfer>cast().setDropEffect("move");
                    } else {
                        hideColumnDecorations();
                        event.getDataTransfer().<XDataTransfer>cast().setDropEffect("none");
                    }
                } else {
                    Element hostElement = Grid.this.getElement();
                    int clientX = event.getNativeEvent().getClientX();
                    int hostAbsX = hostElement.getAbsoluteLeft();
                    int hostScrollX = hostElement.getScrollLeft();
                    int docScrollX = hostElement.getOwnerDocument().getScrollLeft();
                    int relativeX = clientX - hostAbsX + hostScrollX + docScrollX;
                    ghostLine.getStyle().setLeft(relativeX, Style.Unit.PX);
                    ghostLine.getStyle().setHeight(hostElement.getClientHeight(), Style.Unit.PX);
                    if (ghostLine.getParentElement() != hostElement) {
                        hostElement.appendChild(ghostLine);
                    }
                }
            }
        }
    }, DragOverEvent.getType());
    addDomHandler(new DragLeaveHandler() {

        @Override
        public void onDragLeave(DragLeaveEvent event) {
            if (DraggedColumn.instance != null) {
                event.stopPropagation();
                if (DraggedColumn.instance.isMove()) {
                    if (event.getNativeEvent().getEventTarget() == (JavaScriptObject) Grid.this.getElement()) {
                        hideColumnDecorations();
                    }
                }
            }
        }
    }, DragLeaveEvent.getType());
    addDomHandler(new DragEndHandler() {

        @Override
        public void onDragEnd(DragEndEvent event) {
            if (DraggedColumn.instance != null) {
                event.stopPropagation();
                hideColumnDecorations();
                DraggedColumn.instance = null;
            }
        }
    }, DragEndEvent.getType());
    addDomHandler(new DropHandler() {

        @Override
        public void onDrop(DropEvent event) {
            DraggedColumn<?> source = DraggedColumn.instance;
            DraggedColumn<T> target = targetDraggedColumn;
            hideColumnDecorations();
            DraggedColumn.instance = null;
            if (source != null) {
                event.preventDefault();
                event.stopPropagation();
                if (source.isMove()) {
                    AbstractCellTable<T> sourceSection = (AbstractCellTable<T>) source.getTable();
                    // target table may be any section in our grid
                    if (target != null) {
                        Header<?> sourceHeader = source.getHeader();
                        Header<?> targetHeader = target.getHeader();
                        if (sourceHeader instanceof DraggableHeader<?>
                                && targetHeader instanceof DraggableHeader<?>) {
                            DraggableHeader<T> sourceDH = (DraggableHeader<T>) sourceHeader;
                            DraggableHeader<T> targetDH = (DraggableHeader<T>) targetHeader;
                            moveColumnNode(sourceDH.getHeaderNode(), targetDH.getHeaderNode());
                        } else {
                            int sourceIndex = source.getColumnIndex();
                            int targetIndex = target.getColumnIndex();
                            GridSection<T> targetSection = (GridSection<T>) target.getTable();

                            boolean isSourceLeft = sourceSection == headerLeft || sourceSection == frozenLeft
                                    || sourceSection == scrollableLeft || sourceSection == footerLeft;
                            boolean isTargetLeft = targetSection == headerLeft || targetSection == frozenLeft
                                    || targetSection == scrollableLeft || targetSection == footerLeft;
                            sourceSection = isSourceLeft ? headerLeft : headerRight;
                            targetSection = isTargetLeft ? headerLeft : headerRight;
                            int generalSourceIndex = isSourceLeft ? sourceIndex : sourceIndex + frozenColumns;
                            int generalTargetIndex = isTargetLeft ? targetIndex : targetIndex + frozenColumns;
                            Header<?> header = sourceSection.getHeader(sourceIndex);
                            if (header instanceof DraggableHeader) {
                                ((DraggableHeader) header).setTable(targetSection);
                            }
                            if (generalSourceIndex != generalTargetIndex) {
                                Column<T, ?> column = (Column<T, ?>) source.getColumn();
                                if (!(header instanceof DraggableHeader)
                                        || ((DraggableHeader) header).isMoveable()) {
                                    moveColumn(generalSourceIndex, generalTargetIndex);
                                }
                            }
                        }
                    }
                } else {
                    Header<?> header = source.getHeader();
                    if (!(header instanceof DraggableHeader) || ((DraggableHeader) header).isResizable()) {
                        int newWidth = Math.max(
                                event.getNativeEvent().getClientX() - source.getCellElement().getAbsoluteLeft(),
                                MINIMUM_COLUMN_WIDTH);
                        // Source and target tables are the same, so we can
                        // cast to DraggedColumn<T> with no care
                        setColumnWidthFromHeaderDrag(((DraggedColumn<T>) source).getColumn(), newWidth,
                                Style.Unit.PX);
                    }
                }
            }
        }
    }, DropEvent.getType());

    columnsChevron.getElement().getStyle().setPosition(Style.Position.ABSOLUTE);
    columnsChevron.getElement().addClassName(COLUMNS_CHEVRON_STYLE);
    getElement().appendChild(columnsChevron.getElement());
    columnsChevron.addDomHandler(new ClickHandler() {

        @Override
        public void onClick(ClickEvent event) {
            PlatypusPopupMenu columnsMenu = new PlatypusPopupMenu();
            fillColumns(columnsMenu, headerLeft);
            fillColumns(columnsMenu, headerRight);
            columnsMenu.setPopupPosition(columnsChevron.getAbsoluteLeft(), columnsChevron.getAbsoluteTop());
            columnsMenu.showRelativeTo(columnsChevron);
        }

        private void fillColumns(MenuBar aTarget, final GridSection<T> aSection) {
            for (int i = 0; i < aSection.getColumnCount(); i++) {
                Header<?> h = aSection.getHeader(i);
                final Column<T, ?> column = aSection.getColumn(i);
                SafeHtml rendered;
                if (h.getValue() instanceof String) {
                    String hVal = (String) h.getValue();
                    rendered = hVal.startsWith("<html>") ? SafeHtmlUtils.fromTrustedString(hVal.substring(6))
                            : SafeHtmlUtils.fromString(hVal);
                } else {
                    Cell.Context context = new Cell.Context(0, i, h.getKey());
                    SafeHtmlBuilder sb = new SafeHtmlBuilder();
                    h.render(context, sb);
                    rendered = sb.toSafeHtml();
                }
                MenuItemCheckBox miCheck = new MenuItemCheckBox(!aSection.isColumnHidden(column),
                        rendered.asString(), true);
                miCheck.addValueChangeHandler(new ValueChangeHandler<Boolean>() {

                    @Override
                    public void onValueChange(ValueChangeEvent<Boolean> event) {
                        if (Boolean.TRUE.equals(event.getValue())) {
                            showColumn(column);
                        } else {
                            hideColumn(column);
                        }
                        Grid.this.onResize();
                    }

                });
                aTarget.addItem(miCheck);
            }
        }

    }, ClickEvent.getType());

    ColumnSortEvent.Handler sectionSortHandler = new ColumnSortEvent.Handler() {

        @Override
        public void onColumnSort(ColumnSortEvent event) {
            boolean isCtrlKey = ((GridSection<?>) event.getSource()).isCtrlKey();
            boolean contains = false;
            int containsAt = -1;
            for (int i = 0; i < sortList.size(); i++) {
                if (sortList.get(i).getColumn() == event.getColumn()) {
                    contains = true;
                    containsAt = i;
                    break;
                }
            }
            if (!contains) {
                if (!isCtrlKey) {
                    sortList.clear();
                }
                sortList.insert(sortList.size(), new ColumnSortList.ColumnSortInfo(event.getColumn(), true));
            } else {
                boolean wasAscending = sortList.get(containsAt).isAscending();
                if (!isCtrlKey) {
                    sortList.clear();
                    if (wasAscending) {
                        sortList.push(new ColumnSortList.ColumnSortInfo(event.getColumn(), false));
                    }
                } else {
                    sortList.remove(sortList.get(containsAt));
                    if (wasAscending) {
                        sortList.insert(containsAt,
                                new ColumnSortList.ColumnSortInfo(event.getColumn(), false));
                    }
                }
            }
            ColumnSortEvent.fire(Grid.this, sortList);
        }
    };
    headerLeft.getColumnSortList().setLimit(1);
    headerLeft.addColumnSortHandler(sectionSortHandler);
    headerRight.getColumnSortList().setLimit(1);
    headerRight.addColumnSortHandler(sectionSortHandler);
    gridColor = PublishedColor.create(211, 211, 211, 255);
    regenerateDynamicTDStyles();
    regenerateDynamicOddRowsStyles();
    getElement().<XElement>cast().addResizingTransitionEnd(this);
    setStyleName(GRID_SHELL_STYLE);
}

From source file:com.ephesoft.gxt.core.client.DragDropFlowPanel.java

License:Open Source License

private void attachHandlers() {
    this.addDragOverHandler(new DragOverHandler() {

        @Override/*from w  w  w .  jav a  2s  .c  om*/
        public void onDragOver(final DragOverEvent event) {
            dragEventScroll = true;
        }
    });

    this.addDragLeaveHandler(new DragLeaveHandler() {

        @Override
        public void onDragLeave(final DragLeaveEvent event) {
        }
    });

    this.addDropHandler(new DropHandler() {

        @Override
        public void onDrop(final DropEvent event) {
            event.preventDefault();
            DragDropFlowPanel.this.getElement().getStyle().clearBackgroundColor();
            final int widgetIndex = DragDropFlowPanel.this
                    .getWidgetIndex(DragDropFlowPanel.lastDraggedOverimage);
            setLastDraggedOverimageIndex(widgetIndex);
            final DragImage dragImage = getDraggableImage(event);
            if (null != dragImage && null != DragDropFlowPanel.draggedImage) {
                DragImage image = getImageByUrl(draggedImage.getUrl());
                if (null != image) {
                    title = DragDropFlowPanel.this.getWidget(widgetIndex).getTitle();
                    DragDropFlowPanel.this.remove(image);
                }
                if (widgetIndex != -1) {
                    DragDropFlowPanel.this.insert(dragImage, widgetIndex);
                } else {
                    DragDropFlowPanel.this.add(dragImage);
                }
                if (null != imageSelectionListener) {
                    imageSelectionListener.onDrop(dragImage, getImageURLs(), title);
                }
            }
        }
    });
}

From source file:com.ephesoft.gxt.core.client.ui.widget.MultiFileUploader.java

License:Open Source License

protected void addDropHandler() {

    dragDropLabel.addDragOverHandler(new DragOverHandler() {

        @Override//from   w  w w .j  a  v  a2  s  . c o m
        public void onDragOver(DragOverEvent event) {
            if (isEnableDragDrop()) {
                dragDropLabel.addStyleName(DRAG_OVER_STYLE);
            }
        }
    });

    dragDropLabel.addDragLeaveHandler(new DragLeaveHandler() {

        @Override
        public void onDragLeave(DragLeaveEvent event) {
            if (isEnableDragDrop()) {
                dragDropLabel.removeStyleName(DRAG_OVER_STYLE);
            }
        }
    });
    dragDropLabel.addDropHandler(new DropHandler() {

        @Override
        public void onDrop(DropEvent event) {
            if (isEnableDragDrop()) {
                dragDropLabel.removeStyleName(DRAG_OVER_STYLE);
                final JsArray<JavaScriptObject> droppedFiles = Uploader.getDroppedFiles(event.getNativeEvent())
                        .cast();
                uploader.addFilesToQueue(droppedFiles);
                event.preventDefault();
            }
        }
    });
}

From source file:com.google.gwt.sample.mobilewebapp.client.desktop.DesktopTaskEditView.java

License:Apache License

/**
 * Construct a new {@link DesktopTaskEditView}.
 *//*from  w w w  .  j  a  v a  2 s .  c om*/
public DesktopTaskEditView() {
    // Initialize the styles.
    resources = GWT.create(Resources.class);
    resources.style().ensureInjected();

    // Create the template list.
    templateList = createTaskTemplateList();

    initWidget(uiBinder.createAndBindUi(this));
    nameEditor = EditorDecorator.create(nameField.asEditor(), nameViolation);
    driver.initialize(this);

    // Hide the template list if it isn't supported.
    if (!DragDropEventBase.isSupported()) {
        dockLayoutPanel.setWidgetSize(templateListContainer, 0);
    }

    // Create a new task or modify the current task when done is pressed.
    saveButton.addClickHandler(new ClickHandler() {
        public void onClick(ClickEvent event) {
            if (presenter != null) {
                presenter.saveTask();
            }
        }
    });

    // Delete the current task or cancel when delete is pressed.
    deleteButton.addClickHandler(new ClickHandler() {
        public void onClick(ClickEvent event) {
            if (presenter != null) {
                presenter.deleteTask();
            }
        }
    });

    // Add the form as a drop target.
    editForm.addDomHandler(new DragOverHandler() {
        public void onDragOver(DragOverEvent event) {
            // Highlight the name and notes box.
            nameField.getElement().getStyle().setBackgroundColor("#ffa");
            notesEditor.getElement().getStyle().setBackgroundColor("#ffa");
        }
    }, DragOverEvent.getType());
    editForm.addDomHandler(new DragLeaveHandler() {
        public void onDragLeave(DragLeaveEvent event) {
            EventTarget eventTarget = event.getNativeEvent().getEventTarget();
            if (!Element.is(eventTarget)) {
                return;
            }
            Element target = Element.as(eventTarget);

            if (target == editForm.getElement()) {
                // Un-highlight the name and notes box.
                nameField.getElement().getStyle().clearBackgroundColor();
                notesEditor.getElement().getStyle().clearBackgroundColor();
            }
        }
    }, DragLeaveEvent.getType());
    editForm.addDomHandler(new DropHandler() {
        public void onDrop(DropEvent event) {
            // Prevent the default text drop.
            event.preventDefault();

            // Un-highlight the name and notes box.
            nameField.getElement().getStyle().clearBackgroundColor();
            notesEditor.getElement().getStyle().clearBackgroundColor();

            // Fill in the form.
            try {
                // Get the template the from the data transfer object.
                DataTransfer dataTransfer = event.getNativeEvent().getDataTransfer();
                int templateIndex = Integer.parseInt(dataTransfer.getData("text"));
                TaskProxy template = templateList.getVisibleItem(templateIndex);
                nameField.setValue(template.getName());
                notesEditor.setValue(template.getNotes());
            } catch (NumberFormatException e) {
                // The user probably dragged something other than a template.
            }
        }
    }, DropEvent.getType());
}