List of usage examples for com.google.gwt.canvas.client Canvas addMouseMoveHandler
public HandlerRegistration addMouseMoveHandler(MouseMoveHandler handler)
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()); } })); } }