Example usage for com.google.gwt.canvas.client Canvas addMouseMoveHandler

List of usage examples for com.google.gwt.canvas.client Canvas addMouseMoveHandler

Introduction

In this page you can find the example usage for com.google.gwt.canvas.client Canvas addMouseMoveHandler.

Prototype

public HandlerRegistration addMouseMoveHandler(MouseMoveHandler handler) 

Source Link

Usage

From source file:stroom.widget.htree.client.TreeRenderer.java

License:Apache License

private void bind() {
    if (selectionModel != null) {
        final SetSelectionModel<T> setSelectionModel = (SetSelectionModel<T>) selectionModel;
        selectedSet = new HashSet<T>(setSelectionModel.getSelectedSet());

        final Canvas topCanvas = canvas.getLayer(TreeRenderer.ARROW_LAYER);
        registerHandler(topCanvas.addClickHandler(new ClickHandler() {
            @Override//from ww  w.  ja  va  2 s . co  m
            public void onClick(final ClickEvent event) {
                final double x = event.getX() - PADDING;
                final double y = event.getY() - PADDING;
                final TreeForTreeLayout<T> tree = treeLayout.getTree();
                if (tree != null) {
                    final T root = tree.getRoot();
                    if (root != null) {
                        final T item = getItemAtPos(x, y, root);
                        if (item != null) {
                            selectionModel.setSelected(item, true);

                        } else if (selectionModel instanceof MySingleSelectionModel<?>) {
                            final MySingleSelectionModel<T> singleSelectionModel = (MySingleSelectionModel<T>) setSelectionModel;
                            final T lastSelection = singleSelectionModel.getSelectedObject();
                            if (lastSelection != null) {
                                selectionModel.setSelected(lastSelection, false);
                            }
                        }
                    }
                }
            }
        }));
        registerHandler(topCanvas.addMouseMoveHandler(new MouseMoveHandler() {
            @Override
            public void onMouseMove(final MouseMoveEvent event) {
                final double x = event.getX() - PADDING;
                final double y = event.getY() - PADDING;
                final TreeForTreeLayout<T> tree = treeLayout.getTree();
                if (tree != null) {
                    final T root = tree.getRoot();
                    if (root != null) {
                        final T item = getItemAtPos(x, y, root);
                        // Remove highlight from previous item.
                        if (lastItemUnderCursor != null && !lastItemUnderCursor.equals(item)) {
                            final boolean selected = setSelectionModel.getSelectedSet()
                                    .contains(lastItemUnderCursor);
                            final boolean mouseOver = false;
                            Bounds bounds = treeLayout.getNodeBounds().get(lastItemUnderCursor);
                            // The last item might have been removed from
                            // the
                            // tree.
                            if (bounds != null) {
                                bounds = pad(bounds);
                                cellRenderer.render(bounds, lastItemUnderCursor, mouseOver, selected);
                            }
                        }

                        // Highlight new item.
                        if (item != null && !item.equals(lastItemUnderCursor)) {
                            final boolean selected = setSelectionModel.getSelectedSet().contains(item);
                            final boolean mouseOver = true;
                            Bounds bounds = treeLayout.getNodeBounds().get(item);
                            bounds = pad(bounds);
                            cellRenderer.render(bounds, item, mouseOver, selected);
                        }

                        // Set new item.
                        lastItemUnderCursor = item;

                        // Set the cursor.
                        if (item != null) {
                            topCanvas.getElement().getStyle().setCursor(Cursor.POINTER);
                        } else {
                            topCanvas.getElement().getStyle().setCursor(Cursor.DEFAULT);
                        }
                    }
                }
            }
        }));
        registerHandler(selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
            @Override
            public void onSelectionChange(final SelectionChangeEvent event) {
                // Select items.
                for (final T selected : setSelectionModel.getSelectedSet()) {
                    final boolean alreadySelected = selectedSet.remove(selected);
                    if (!alreadySelected) {
                        Bounds bounds = treeLayout.getNodeBounds().get(selected);
                        bounds = pad(bounds);
                        cellRenderer.render(bounds, selected, selected.equals(lastItemUnderCursor), true);
                    }
                }

                // Deselect everything else from previous selection.
                for (final T selected : selectedSet) {
                    final Bounds bounds = treeLayout.getNodeBounds().get(selected);
                    if (bounds != null) {
                        final Bounds paddedBounds = pad(bounds);
                        cellRenderer.render(paddedBounds, selected, selected.equals(lastItemUnderCursor),
                                false);
                    }
                }

                // Save current selection.
                selectedSet = new HashSet<T>(setSelectionModel.getSelectedSet());
            }
        }));
    }
}