List of usage examples for com.google.gwt.event.dom.client DragEnterHandler DragEnterHandler
DragEnterHandler
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; }