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

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

Introduction

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

Prototype

DragEnterHandler

Source Link

Usage

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

public Grid(ProvidesKey<T> aKeyProvider) {
    super();//from  w  w  w  .  java 2  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();//w  w w. j a v  a 2s . com
    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.ponysdk.ui.terminal.ui.PTWidget.java

License:Apache License

private void addDomHandler(final PTInstruction addHandler, final Widget widget, final int domHandlerType,
        final UIService uiService) {

    final DomHandlerType h = DomHandlerType.values()[domHandlerType];
    switch (h) {// w w  w  . j  av  a 2 s.  c om
    case CLICK:
        widget.addDomHandler(new ClickHandler() {

            @Override
            public void onClick(final ClickEvent event) {
                triggerOnClick(addHandler, widget, domHandlerType, uiService, event);
            }

        }, ClickEvent.getType());
        break;
    case MOUSE_OVER:
        widget.addDomHandler(new MouseOverHandler() {

            @Override
            public void onMouseOver(final MouseOverEvent event) {
                triggerDomEvent(addHandler, domHandlerType, uiService);
            }

        }, MouseOverEvent.getType());
        break;
    case BLUR:
        widget.addDomHandler(new BlurHandler() {

            @Override
            public void onBlur(final BlurEvent event) {
                triggerDomEvent(addHandler, domHandlerType, uiService);
            }

        }, BlurEvent.getType());
        break;
    case FOCUS:
        widget.addDomHandler(new FocusHandler() {

            @Override
            public void onFocus(final FocusEvent event) {
                triggerDomEvent(addHandler, domHandlerType, uiService);
            }

        }, FocusEvent.getType());
        break;
    case MOUSE_OUT:
        widget.addDomHandler(new MouseOutHandler() {

            @Override
            public void onMouseOut(final MouseOutEvent event) {
                triggerDomEvent(addHandler, domHandlerType, uiService);
            }

        }, MouseOutEvent.getType());
        break;
    case MOUSE_DOWN:
        widget.addDomHandler(new MouseDownHandler() {

            @Override
            public void onMouseDown(final MouseDownEvent event) {
                triggerDomEvent(addHandler, domHandlerType, uiService);
            }

        }, MouseDownEvent.getType());
        break;
    case MOUSE_UP:
        widget.addDomHandler(new MouseUpHandler() {

            @Override
            public void onMouseUp(final MouseUpEvent event) {
                triggerDomEvent(addHandler, domHandlerType, uiService);
            }

        }, MouseUpEvent.getType());
        break;
    case KEY_PRESS:
        widget.addDomHandler(new KeyPressHandler() {

            @Override
            public void onKeyPress(final KeyPressEvent event) {
                triggerOnKeyPress(addHandler, domHandlerType, uiService, event);
            }

        }, KeyPressEvent.getType());
        break;
    case KEY_UP:

        if (widget instanceof TextBoxBase) {
            final TextBoxBase textBox = (TextBoxBase) widget;
            textBox.addKeyUpHandler(new KeyUpHandler() {

                @Override
                public void onKeyUp(final KeyUpEvent event) {
                    final PTInstruction changeHandlerInstruction = new PTInstruction();
                    changeHandlerInstruction.setObjectID(addHandler.getObjectID());
                    changeHandlerInstruction.put(TYPE.KEY, TYPE.KEY_.EVENT);
                    changeHandlerInstruction.put(HANDLER.KEY, HANDLER.KEY_.STRING_VALUE_CHANGE_HANDLER);
                    changeHandlerInstruction.put(PROPERTY.VALUE, textBox.getText());

                    final PTInstruction eventInstruction = buildEventInstruction(addHandler, domHandlerType);
                    eventInstruction.put(PROPERTY.VALUE, event.getNativeEvent().getKeyCode());

                    if (addHandler.containsKey(PROPERTY.KEY_FILTER)) {
                        final JSONArray jsonArray = addHandler.get(PROPERTY.KEY_FILTER).isArray();
                        for (int i = 0; i < jsonArray.size(); i++) {
                            final JSONNumber keyCode = jsonArray.get(i).isNumber();
                            if (keyCode.doubleValue() == event.getNativeEvent().getKeyCode()) {
                                uiService.stackEvent(changeHandlerInstruction);
                                uiService.stackEvent(eventInstruction);
                                uiService.flushEvents();
                                break;
                            }
                        }
                    } else {
                        uiService.stackEvent(changeHandlerInstruction);
                        uiService.stackEvent(eventInstruction);
                        uiService.flushEvents();
                    }
                }
            });
        } else {
            widget.addDomHandler(new KeyUpHandler() {

                @Override
                public void onKeyUp(final KeyUpEvent event) {
                    final PTInstruction eventInstruction = buildEventInstruction(addHandler, domHandlerType);
                    eventInstruction.put(PROPERTY.VALUE, event.getNativeEvent().getKeyCode());
                    if (eventInstruction.containsKey(PROPERTY.KEY_FILTER)) {
                        final JSONArray jsonArray = addHandler.get(PROPERTY.KEY_FILTER).isArray();
                        for (int i = 0; i < jsonArray.size(); i++) {
                            final JSONNumber keyCode = jsonArray.get(i).isNumber();
                            if (keyCode.doubleValue() == event.getNativeEvent().getKeyCode()) {
                                uiService.triggerEvent(eventInstruction);
                                break;
                            }
                        }
                    } else {
                        uiService.triggerEvent(eventInstruction);
                    }
                }
            }, KeyUpEvent.getType());
        }
        break;
    case DRAG_START:
        widget.getElement().setDraggable(Element.DRAGGABLE_TRUE);
        widget.addBitlessDomHandler(new DragStartHandler() {

            @Override
            public void onDragStart(final DragStartEvent event) {
                event.setData("text", Long.toString(addHandler.getObjectID()));
                event.getDataTransfer().setDragImage(uiObject.getElement(), 10, 10);
                triggerDomEvent(addHandler, domHandlerType, uiService);
            }
        }, DragStartEvent.getType());
        break;
    case DRAG_END:
        widget.addBitlessDomHandler(new DragEndHandler() {

            @Override
            public void onDragEnd(final DragEndEvent event) {
                triggerDomEvent(addHandler, domHandlerType, uiService);
            }
        }, DragEndEvent.getType());
        break;
    case DRAG_ENTER:
        widget.addBitlessDomHandler(new DragEnterHandler() {

            @Override
            public void onDragEnter(final DragEnterEvent event) {
                triggerDomEvent(addHandler, domHandlerType, uiService);
            }
        }, DragEnterEvent.getType());
        break;
    case DRAG_LEAVE:
        widget.addBitlessDomHandler(new DragLeaveHandler() {

            @Override
            public void onDragLeave(final DragLeaveEvent event) {
                triggerDomEvent(addHandler, domHandlerType, uiService);
            }
        }, DragLeaveEvent.getType());
        break;
    case DROP:
        widget.addBitlessDomHandler(new DragOverHandler() {

            @Override
            public void onDragOver(final DragOverEvent event) {
                // required by GWT api
                // triggerDomEvent(addHandler, domHandlerType, uiService);
            }
        }, DragOverEvent.getType());

        widget.addBitlessDomHandler(new DropHandler() {

            @Override
            public void onDrop(final DropEvent event) {
                event.preventDefault();
                final String dragWidgetID = event.getData("text");
                final PTInstruction eventInstruction = buildEventInstruction(addHandler, domHandlerType);
                if (dragWidgetID != null)
                    eventInstruction.put(PROPERTY.DRAG_SRC, Long.parseLong(dragWidgetID));
                uiService.triggerEvent(eventInstruction);
            }
        }, DropEvent.getType());
        break;
    default:
        log.info("Handler not supported #" + h);
        break;
    }
}

From source file:io.apiman.manager.ui.client.local.widgets.DroppableTextArea.java

License:Apache License

@PostConstruct
protected void postConstruct() {
    addDragEnterHandler(new DragEnterHandler() {
        @Override//from  w w w . j a  va  2  s.c  om
        public void onDragEnter(DragEnterEvent event) {
            getElement().addClassName("dropping"); //$NON-NLS-1$
            event.preventDefault();
            event.stopPropagation();
        }
    });
    addDragLeaveHandler(new DragLeaveHandler() {
        @Override
        public void onDragLeave(DragLeaveEvent event) {
            getElement().removeClassName("dropping"); //$NON-NLS-1$
            event.preventDefault();
            event.stopPropagation();
        }
    });
    addDragOverHandler(new DragOverHandler() {
        @Override
        public void onDragOver(DragOverEvent event) {
            if (!getElement().getClassName().contains("dropping")) { //$NON-NLS-1$
                getElement().addClassName("dropping"); //$NON-NLS-1$
            }
            event.preventDefault();
            event.stopPropagation();
        }
    });
    addDropHandler(new DropHandler() {
        @Override
        public void onDrop(DropEvent event) {
            getElement().removeClassName("dropping"); //$NON-NLS-1$
            event.preventDefault();
            event.stopPropagation();
            doDrop(event);
        }
    });
}

From source file:org.iplantc.de.tags.client.views.TagItemImpl.java

License:Apache License

private void activateDnD() {
    this.tagPanel.addStyleName(resources.style().tagEditable()); // Change cursor on hover

    // DnD//from   w  ww. j a va 2s.com
    this.getElement().setDraggable(Element.DRAGGABLE_TRUE);
    this.dndHandlers.add(this.addDomHandler(new DragStartHandler() {
        @Override
        public void onDragStart(DragStartEvent event) {
            event.setData("text", "");
            draggedElement = TagItemImpl.this;
            // FIXME Fire focus cmd
            //                uiHandlers.onFocus();
        }
    }, DragStartEvent.getType()));

    this.dndHandlers.add(this.addDomHandler(new DragEnterHandler() {
        @Override
        public void onDragEnter(DragEnterEvent event) {
            if (draggedElement.equals(TagItemImpl.this))
                return;

            // Calculate the mouse's percentage X position relative to the drag over element
            // 0 = left border; 100 = right border
            int percentagePositionX = (event.getNativeEvent().getClientX() - getAbsoluteLeft()) * 100
                    / getElement().getClientWidth();
            if (percentagePositionX < 50) {
                tagPanel.addStyleName(resources.style().previewLeft());
                tagPanel.removeStyleName(resources.style().previewRight());

            } else {
                tagPanel.addStyleName(resources.style().previewRight());
                tagPanel.removeStyleName(resources.style().previewLeft());
            }
        }
    }, DragEnterEvent.getType()));

    this.dndHandlers.add(this.addDomHandler(new DragOverHandler() {
        @Override
        public void onDragOver(DragOverEvent event) {
            if (draggedElement.equals(TagItemImpl.this))
                return;

            // Calculate the mouse's percentage X position relative to the drag over element
            // 0 = left border; 100 = right border
            int percentagePositionX = (event.getNativeEvent().getClientX() - getAbsoluteLeft()) * 100
                    / getElement().getClientWidth();
            if (percentagePositionX < 50) {
                tagPanel.addStyleName(resources.style().previewLeft());
                tagPanel.removeStyleName(resources.style().previewRight());

            } else {
                tagPanel.addStyleName(resources.style().previewRight());
                tagPanel.removeStyleName(resources.style().previewLeft());
            }
        }
    }, DragOverEvent.getType()));

    this.dndHandlers.add(this.addDomHandler(new DragLeaveHandler() {
        @Override
        public void onDragLeave(DragLeaveEvent event) {
            if (draggedElement.equals(TagItemImpl.this))
                return;

            tagPanel.removeStyleName(resources.style().previewLeft());
            tagPanel.removeStyleName(resources.style().previewRight());
        }
    }, DragLeaveEvent.getType()));

    this.dndHandlers.add(this.addDomHandler(new DropHandler() {
        @Override
        public void onDrop(DropEvent event) {
            if (draggedElement.equals(TagItemImpl.this))
                return;

            event.preventDefault();
            /*uiHandlers.onRelocateTag(draggedElement,
                                     TagItemImpl.this,
                                     tagPanel.getStyleName().contains(resources.style()
                                                                               .previewLeft()) ? InsertionPoint.BEFORE
                                         : InsertionPoint.AFTER);*/
            // FIXME Fire TagRelocated Command
            tagPanel.removeStyleName(resources.style().previewLeft());
            tagPanel.removeStyleName(resources.style().previewRight());
        }
    }, DropEvent.getType()));

    this.dndHandlers.add(this.addDomHandler(new DragEndHandler() {
        @Override
        public void onDragEnd(DragEndEvent event) {
            // FIXME Fire Blur command
            //                uiHandlers.onBlur();
        }
    }, DragEndEvent.getType()));
}

From source file:org.openelis.modules.attachment.client.AttachmentScreenUI.java

License:Open Source License

protected void initialize() {
    ArrayList<Item<Integer>> model1, model2;

    screen = this;

    /*/*from   ww  w.j a  v a 2  s.  c om*/
     * screen fields and widgets
     */
    addScreenHandler(description, AttachmentMeta.getDescription(), new ScreenHandler<String>() {
        public void onStateChange(StateChangeEvent event) {
            description.setEnabled(isState(QUERY, DISPLAY));
            description.setQueryMode(isState(QUERY, DISPLAY));
        }

        public Widget onTab(boolean forward) {
            return forward ? createdDate : abortButton;
        }
    });

    addScreenHandler(createdDate, AttachmentMeta.getCreatedDate(), new ScreenHandler<Datetime>() {
        public void onStateChange(StateChangeEvent event) {
            createdDate.setEnabled(isState(QUERY, DISPLAY));
            createdDate.setQueryMode(isState(QUERY, DISPLAY));
        }

        public Widget onTab(boolean forward) {
            return forward ? querySection : description;
        }
    });

    addScreenHandler(querySection, AttachmentMeta.getSectionId(), new ScreenHandler<Integer>() {
        public void onStateChange(StateChangeEvent event) {
            querySection.setEnabled(isState(QUERY, DISPLAY));
            querySection.setQueryMode(isState(QUERY, DISPLAY));
        }

        public Widget onTab(boolean forward) {
            return forward ? issueText : createdDate;
        }
    });

    addScreenHandler(issueText, AttachmentMeta.getIssueText(), new ScreenHandler<String>() {
        public void onStateChange(StateChangeEvent event) {
            issueText.setEnabled(isState(QUERY, DISPLAY));
            issueText.setQueryMode(isState(QUERY, DISPLAY));
        }

        public Widget onTab(boolean forward) {
            return forward ? searchButton : querySection;
        }
    });

    addScreenHandler(searchButton, "searchButton", new ScreenHandler<Object>() {
        public void onStateChange(StateChangeEvent event) {
            searchButton.setEnabled(isState(QUERY, DISPLAY));
        }

        public Widget onTab(boolean forward) {
            return forward ? tree : issueText;
        }
    });

    addScreenHandler(tree, "tree", new ScreenHandler<Object>() {
        public void onStateChange(StateChangeEvent event) {
            tree.setEnabled(true);
        }

        public Widget onTab(boolean forward) {
            return forward ? attachButton : searchButton;
        }
    });

    tree.addBeforeSelectionHandler(new BeforeSelectionHandler<Integer>() {
        @Override
        public void onBeforeSelection(BeforeSelectionEvent<Integer> event) {
            Integer id;
            Node node;

            if (!isState(UPDATE))
                return;

            /*
             * in Update state, only the nodes that belong to the locked
             * attachment can be selected
             */
            node = tree.getNodeAt(event.getItem());

            if (ATTACHMENT_LEAF.equals(node.getType()))
                id = node.getData();
            else if (ATTACHMENT_ITEM_LEAF.equals(node.getType()))
                id = node.getParent().getData();
            else
                id = null;

            if (!manager.getAttachment().getId().equals(id))
                event.cancel();
        }
    });

    tree.addSelectionHandler(new SelectionHandler<Integer>() {
        @Override
        public void onSelection(SelectionEvent<Integer> event) {
            nodeSelected(event.getSelectedItem());
        }
    });

    tree.addDoubleClickHandler(new DoubleClickHandler() {
        @Override
        public void onDoubleClick(DoubleClickEvent event) {
            if (!isState(UPDATE, DELETE))
                displayAttachment(tree.getNodeAt(tree.getSelectedNode()), null);
        }
    });

    tree.addBeforeCellEditedHandler(new BeforeCellEditedHandler() {
        @Override
        public void onBeforeCellEdited(BeforeCellEditedEvent event) {
            String name;
            Integer sectId;
            SystemUserPermission perm;
            Node node;

            node = tree.getNodeAt(tree.getSelectedNode());
            if (!ATTACHMENT_LEAF.equals(node.getType()) || !isState(UPDATE)
                    || (event.getCol() != 0 && event.getCol() != 2)) {
                event.cancel();
                return;
            }

            perm = UserCache.getPermission();
            sectId = manager.getAttachment().getSectionId();
            try {
                if (sectId != null) {
                    /*
                     * allow changing any field of the attachment only if
                     * the user has complete permission to the current
                     * section
                     */
                    name = SectionCache.getById(sectId).getName();
                    if (!perm.has(name, SectionFlags.COMPLETE)) {
                        event.cancel();
                        return;
                    }
                }

                /*
                 * make sure that the section can't be changed to one that
                 * the user doesn't have complete permission to
                 */
                for (Item<Integer> row : tableSection.getModel()) {
                    name = SectionCache.getById(row.getKey()).getName();
                    row.setEnabled(perm.has(name, SectionFlags.COMPLETE));
                }
            } catch (Exception e) {
                Window.alert(e.getMessage());
                logger.log(Level.SEVERE, e.getMessage(), e);
                event.cancel();
            }
        }
    });

    tree.addCellEditedHandler(new CellEditedHandler() {
        public void onCellUpdated(CellEditedEvent event) {
            Object val;
            AttachmentDO data;

            val = tree.getValueAt(event.getRow(), event.getCol());
            data = manager.getAttachment();
            switch (event.getCol()) {
            case 0:
                data.setDescription((String) val);
                break;
            case 2:
                data.setSectionId((Integer) val);
                break;
            }
        }
    });

    tree.setAllowMultipleSelection(true);

    addScreenHandler(attachButton, "attachButton", new ScreenHandler<Object>() {
        public void onStateChange(StateChangeEvent event) {
            attachButton.setEnabled(false);
        }

        public Widget onTab(boolean forward) {
            return forward ? updateButton : tree;
        }
    });

    addScreenHandler(updateButton, "updateButton", new ScreenHandler<Object>() {
        public void onStateChange(StateChangeEvent event) {
            updateButton.setEnabled(isState(DISPLAY, UPDATE) && manager != null);
            if (isState(UPDATE)) {
                updateButton.lock();
                updateButton.setPressed(true);
            }
        }

        public Widget onTab(boolean forward) {
            return forward ? deleteButton : tree;
        }
    });

    addShortcut(updateButton, 'u', CTRL);

    addScreenHandler(deleteButton, "deleteButton", new ScreenHandler<Object>() {
        public void onStateChange(StateChangeEvent event) {
            deleteButton.setEnabled(isState(DISPLAY, DELETE) && manager != null);
            if (isState(DELETE)) {
                deleteButton.lock();
                deleteButton.setPressed(true);
            }
        }

        public Widget onTab(boolean forward) {
            return forward ? commitButton : updateButton;
        }
    });

    addShortcut(deleteButton, 'd', CTRL);

    addScreenHandler(commitButton, "commitButton", new ScreenHandler<Object>() {
        public void onStateChange(StateChangeEvent event) {
            commitButton.setEnabled(isState(UPDATE, DELETE));
        }

        public Widget onTab(boolean forward) {
            return forward ? deleteButton : abortButton;
        }
    });

    addShortcut(commitButton, 'm', CTRL);

    addScreenHandler(abortButton, "abortButton", new ScreenHandler<Object>() {
        public void onStateChange(StateChangeEvent event) {
            abortButton.setEnabled(isState(UPDATE, DELETE));
        }

        public Widget onTab(boolean forward) {
            return forward ? description : commitButton;
        }
    });

    addShortcut(abortButton, 'o', CTRL);

    fileDrop = new FileDrop(screen, "openelis/upload") {
        public void onDrop(DropEvent event) {
            if (!fileDrop.isEnabled())
                return;

            if (dropIndicator != null) {
                dropIndicator.removeFromParent();
                dropIndicator = null;
            }

            super.onDrop(event);
        }

        public void onDropSuccess() {
            ArrayList<AttachmentManager> ams;

            try {
                /*
                 * don't let a file be dropped for upload if a record is
                 * locked
                 */
                if (isState(UPDATE, DELETE))
                    return;
                setBusy(Messages.get().gen_saving());
                /*
                 * create attachments for the newly uploaded files and get
                 * the managers for them
                 */
                ams = AttachmentService.get().put();
                if (managers == null)
                    managers = new HashMap<Integer, AttachmentManager>();

                for (AttachmentManager am : ams)
                    managers.put(am.getAttachment().getId(), am);
                previousManager = null;
                setState(DISPLAY);
                if (isLoadedFromQuery) {
                    /*
                     * the tree is showing the attachments returned by a
                     * previous search, so they are cleared and only the
                     * attachment created from the uploaded file is shown
                     */
                    isLoadedFromQuery = false;
                    loadTree(ams, true, false, isLoadedFromQuery);
                } else {
                    /*
                     * add the attachment created from uploaded file as the
                     * first one in the tree
                     */
                    loadTree(ams, false, false, isLoadedFromQuery);
                }
                tree.selectNodeAt(0);
                nodeSelected(0);
                setDone(Messages.get().gen_savingComplete());
            } catch (Exception e) {
                Window.alert(e.getMessage());
                logger.log(Level.SEVERE, e.getMessage(), e);
                clearStatus();
            }
        }
    };

    addStateChangeHandler(new StateChangeEvent.Handler() {
        public void onStateChange(StateChangeEvent event) {
            fileDrop.setEnabled(isState(QUERY, DISPLAY));

            if (isState(UPDATE, DELETE) && !closeHandlerAdded && window != null) {
                /*
                 * this handler is not added in initialize() because this
                 * screen can be shown in a modal window and in that case,
                 * the window is not available in initialize()
                 */
                window.addBeforeClosedHandler(new BeforeCloseHandler<WindowInt>() {
                    public void onBeforeClosed(BeforeCloseEvent<WindowInt> event) {
                        if (isState(UPDATE, DELETE)) {
                            event.cancel();
                            setError(Messages.get().gen_mustCommitOrAbort());
                        } else if (dropIndicator != null) {
                            dropIndicator.removeFromParent();
                            dropIndicator = null;
                        }
                    }
                });
                closeHandlerAdded = true;
            }
        }
    });

    fileDrop.addDragEnterHandler(new DragEnterHandler() {
        @Override
        public void onDragEnter(DragEnterEvent event) {
            LayoutPanel panel;

            if (dropIndicator == null) {
                dropIndicator = new DropIndicator();
                panel = (LayoutPanel) screen.getWidget();
                panel.add(dropIndicator);
                panel.setWidgetTopBottom(dropIndicator, 0, Unit.PX, 0, Unit.PX);
            }
        }
    });

    fileDrop.addDragLeaveHandler(new DragLeaveHandler() {
        @Override
        public void onDragLeave(DragLeaveEvent event) {
            if (dropIndicator != null) {
                dropIndicator.removeFromParent();
                dropIndicator = null;
            }
        }
    });

    /*
     * here two separate models are created for the two dropdowns to make
     * sure that any items disabled or enabled in one don't affect the other
     */
    model1 = new ArrayList<Item<Integer>>();
    model2 = new ArrayList<Item<Integer>>();
    for (SectionDO s : SectionCache.getList()) {
        model1.add(new Item<Integer>(s.getId(), s.getName()));
        model2.add(new Item<Integer>(s.getId(), s.getName()));
    }

    querySection.setModel(model1);
    tableSection.setModel(model2);

    /*
     * call for locking and fetching attachments
     */
    if (fetchForUpdateCall == null) {
        fetchForUpdateCall = new AsyncCallbackUI<AttachmentManager>() {
            public void success(AttachmentManager result) {
                Node node;

                manager = result;
                managers.put(manager.getAttachment().getId(), manager);
                setState(UPDATE);

                node = tree.getNodeAt(tree.getSelectedNode());
                if (ATTACHMENT_ITEM_LEAF.equals(node.getType()))
                    node = node.getParent();
                reloadAttachment(node);
                tree.selectNodeAt(node);
                tree.startEditing(tree.getSelectedNode(), 0);
            }

            public void failure(Throwable e) {
                Window.alert(e.getMessage());
                logger.log(Level.SEVERE, e.getMessage() != null ? e.getMessage() : "null", e);
            }

            public void finish() {
                clearStatus();
            }
        };
    }

    /*
     * call for updating an attachment
     */
    if (updateCall == null) {
        updateCall = new AsyncCallbackUI<AttachmentManager>() {
            public void success(AttachmentManager result) {
                Node node;

                manager = result;
                managers.put(manager.getAttachment().getId(), manager);
                setState(DISPLAY);

                node = tree.getNodeAt(tree.getSelectedNode());
                if (ATTACHMENT_ITEM_LEAF.equals(node.getType()))
                    node = node.getParent();
                reloadAttachment(node);
                tree.selectNodeAt(node);
                nodeSelected(tree.getSelectedNode());
                clearStatus();
            }

            public void validationErrors(ValidationErrorsList e) {
                showErrors(e);
            }

            public void failure(Throwable e) {
                Window.alert("commitUpdate(): " + e.getMessage());
                logger.log(Level.SEVERE, e.getMessage() != null ? e.getMessage() : "null", e);
                clearStatus();
            }
        };
    }

    /*
     * call for unlocking an attachment
     */
    if (unlockCall == null) {
        unlockCall = new AsyncCallbackUI<AttachmentManager>() {
            public void success(AttachmentManager result) {
                Node node;

                manager = result;
                managers.put(manager.getAttachment().getId(), manager);
                setState(DISPLAY);

                node = tree.getNodeAt(tree.getSelectedNode());
                if (ATTACHMENT_ITEM_LEAF.equals(node.getType()))
                    node = node.getParent();
                reloadAttachment(node);
                tree.selectNodeAt(node);
                nodeSelected(tree.getSelectedNode());
                setDone(Messages.get().gen_updateAborted());
            }

            public void failure(Throwable e) {
                Window.alert(e.getMessage());
                logger.log(Level.SEVERE, e.getMessage() != null ? e.getMessage() : "null", e);
                clearStatus();
            }
        };
    }

    /*
     * call for deleting attachments
     */
    if (deleteCall == null) {
        deleteCall = new AsyncCallbackUI<Void>() {
            public void success(Void result) {
                setState(DISPLAY);
                setDone(Messages.get().gen_deletingComplete());
            }

            public void validationErrors(ValidationErrorsList e) {
                showErrors(e);
            }

            public void failure(Throwable e) {
                Window.alert(e.getMessage());
                logger.log(Level.SEVERE, e.getMessage() != null ? e.getMessage() : "null", e);
                clearStatus();
            }
        };
    }
}

From source file:org.openelis.ui.widget.Browser.java

License:Open Source License

/**
 * Constructor that takes an arguments if the browser should auto-size to the window,
 * and the number of allowed screens to show at once.
 * @param size/*from   ww w  .java2s  . c  o  m*/
 * @param limit
 */
@UiConstructor
public Browser(int limit) {

    browser = new AbsolutePanel();
    browser.setWidth("100%");
    browser.setHeight("100%");
    layout = new LayoutPanel();
    windows = new HashMap<WindowInt, WindowValues>();
    windowsByKey = new HashMap<String, WindowInt>();

    dragController = new PickupDragController(browser, true);

    dropController = new AbsolutePositionDropController(browser) {
        @Override
        public void onDrop(DragContext context) {
            super.onDrop(context);
            ((WindowInt) context.draggable).positionGlass();
        }
    };

    this.limit = limit;

    layout.add(browser);
    initWidget(layout);

    dragController.setBehaviorDragProxy(true);
    dragController.registerDropController(dropController);
    DOM.setStyleAttribute(browser.getElement(), "overflow", "auto");

    setKeyHandling();

    setCSS(UIResources.INSTANCE.window());

    // These handlers are added to prevent the default drag/drop from happening

    addDomHandler(new DropHandler() {

        @Override
        public void onDrop(DropEvent event) {
            event.preventDefault();
            event.stopPropagation();
        }
    }, DropEvent.getType());

    addDomHandler(new DragEnterHandler() {

        @Override
        public void onDragEnter(DragEnterEvent event) {
            event.preventDefault();
            event.stopPropagation();
        }
    }, DragEnterEvent.getType());

    addDomHandler(new DragLeaveHandler() {

        @Override
        public void onDragLeave(DragLeaveEvent event) {
            event.preventDefault();
            event.stopPropagation();
        }
    }, DragLeaveEvent.getType());

    addDomHandler(new DragOverHandler() {

        @Override
        public void onDragOver(DragOverEvent event) {
            event.stopPropagation();
            event.preventDefault();
        }
    }, DragOverEvent.getType());
}

From source file:org.vectomatic.svg.edit.client.command.edit.EditImageGeometryManipulator.java

License:Open Source License

/**
 * Binds this manipulator to the specified SVG rect.
 * @param element/*w  w w .java  2  s . co m*/
 * The SVG rect this manipulator is applied to.
 * @return The root element of the manipulator
 */
@Override
public OMSVGElement bind(Record record) {
    this.record = record;
    SVGElementModel model = (SVGElementModel) record.getModel();
    mode = Mode.PASSIVE;
    // Create the graphical representations for the manipulator
    // The manipulator has the following SVG structure
    // <g>
    //  <rect/>    position
    //  <g>
    //   <rect/>   top-left corner
    //   <rect/>   bottom-right corner
    //  </g>
    // </g>
    svg = model.getOwner().getSvgElement();
    g = new OMSVGGElement();
    g.setClassNameBaseVal(AppBundle.INSTANCE.css().imageGeometryManipulator());
    posHandle = new OMSVGRectElement();
    OMSVGGElement handleGroup = new OMSVGGElement();
    topLeftHandle = new OMSVGRectElement();
    bottomRightHandle = new OMSVGRectElement();
    g.appendChild(posHandle);
    g.appendChild(handleGroup);
    handleGroup.appendChild(topLeftHandle);
    handleGroup.appendChild(bottomRightHandle);
    monitorModel = true;
    model.addChangeListener(this);
    scheduleInit();

    g.addDragEnterHandler(new DragEnterHandler() {
        @Override
        public void onDragEnter(DragEnterEvent event) {
            g.getElement().setAttribute(ATT_ACCEPT, ATT_ACCEPT_YES);
            event.stopPropagation();
            event.preventDefault();
        }
    });
    g.addDragLeaveHandler(new DragLeaveHandler() {
        @Override
        public void onDragLeave(DragLeaveEvent event) {
            g.getElement().setAttribute(ATT_ACCEPT, ATT_ACCEPT_NO);
            event.stopPropagation();
            event.preventDefault();
        }
    });
    g.addDragOverHandler(new DragOverHandler() {
        @Override
        public void onDragOver(DragOverEvent event) {
            event.stopPropagation();
            event.preventDefault();
        }
    });
    g.addDropHandler(new DropHandler() {
        @Override
        public void onDrop(DropEvent event) {
            g.getElement().setAttribute(ATT_ACCEPT, ATT_ACCEPT_NO);
            processFiles(event.getDataTransfer().<DataTransferExt>cast().getFiles());
            event.stopPropagation();
            event.preventDefault();
        }
    });

    return g;
}