/******************************************************************************* * Copyright (c) 2006 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.erlide.ui.editors.erl.outline; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.MouseMoveListener; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.widgets.Item; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeItem; /** * QuickOutlineMouseMoveListener * */ public class QuickOutlineMouseMoveListener implements MouseMoveListener { private TreeItem fLastItem; private final TreeViewer fTreeViewer; /** * */ public QuickOutlineMouseMoveListener(final TreeViewer treeViewer) { fLastItem = null; fTreeViewer = treeViewer; } @Override public void mouseMove(final MouseEvent e) { final Tree tree = fTreeViewer.getTree(); if (tree.equals(e.getSource())) { final Object o = tree.getItem(new Point(e.x, e.y)); if (o != null && !o.equals(fLastItem)) { fLastItem = (TreeItem) o; tree.setSelection(new TreeItem[] { fLastItem }); } else if (e.y < tree.getItemHeight() / 4) { // Scroll up final Point p = tree.toDisplay(e.x, e.y); final Item item = fTreeViewer.scrollUp(p.x, p.y); if (item instanceof TreeItem) { fLastItem = (TreeItem) item; tree.setSelection(new TreeItem[] { fLastItem }); } } else if (e.y > tree.getBounds().height - tree.getItemHeight() / 4) { // Scroll down final Point p = tree.toDisplay(e.x, e.y); final Item item = fTreeViewer.scrollDown(p.x, p.y); if (item instanceof TreeItem) { fLastItem = (TreeItem) item; tree.setSelection(new TreeItem[] { fLastItem }); } } } } }