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

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

Introduction

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

Prototype

public HandlerRegistration addClickHandler(ClickHandler 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 w w w . j a  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());
            }
        }));
    }
}