|
Lines 18-23
Link Here
|
| 18 |
import org.eclipse.swt.widgets.ToolTip; |
18 |
import org.eclipse.swt.widgets.ToolTip; |
| 19 |
import org.eclipse.swt.widgets.Tree; |
19 |
import org.eclipse.swt.widgets.Tree; |
| 20 |
import org.eclipse.swt.widgets.TreeItem; |
20 |
import org.eclipse.swt.widgets.TreeItem; |
|
|
21 |
import org.eclipse.ui.PlatformUI; |
| 21 |
|
22 |
|
| 22 |
/** |
23 |
/** |
| 23 |
* @author Mik Kersten |
24 |
* @author Mik Kersten |
|
Lines 29-34
Link Here
|
| 29 |
|
30 |
|
| 30 |
private TreeItem lastItem; |
31 |
private TreeItem lastItem; |
| 31 |
|
32 |
|
|
|
33 |
private TreeItem currentItem; |
| 34 |
|
| 35 |
private long lastMoveTime; |
| 36 |
|
| 37 |
private long startMoveTime; |
| 38 |
|
| 32 |
private final TreeViewer viewer; |
39 |
private final TreeViewer viewer; |
| 33 |
|
40 |
|
| 34 |
private final BrowseFilteredListener browseFilteredListener; |
41 |
private final BrowseFilteredListener browseFilteredListener; |
|
Lines 114-136
Link Here
|
| 114 |
return; |
126 |
return; |
| 115 |
} |
127 |
} |
| 116 |
Tree tree = (Tree) e.widget; |
128 |
Tree tree = (Tree) e.widget; |
| 117 |
TreeItem item = findItem(tree, e.y); |
129 |
final TreeItem item = findItem(tree, e.y); |
| 118 |
if (item != null && !item.isDisposed()) { |
130 |
if (item != null && !item.isDisposed()) { |
| 119 |
if (lastItem != null && !lastItem.isDisposed() && !lastItem.equals(item)) { |
131 |
if (lastItem != null && !lastItem.isDisposed() && !lastItem.equals(item)) { |
|
|
132 |
boolean redraw = lastItem.getData(ID_HOVER) != NodeState.LESS; |
| 120 |
lastItem.setData(ID_HOVER, NodeState.LESS); |
133 |
lastItem.setData(ID_HOVER, NodeState.LESS); |
|
|
134 |
if (redraw) {// hide the + immediately |
| 135 |
redrawTree(lastItem); |
| 136 |
} |
| 121 |
} |
137 |
} |
| 122 |
|
138 |
currentItem = item; |
| 123 |
if (item.getData(ID_HOVER) != NodeState.MORE_ERROR) { |
139 |
long currentTime = System.currentTimeMillis(); |
| 124 |
item.setData(ID_HOVER, NodeState.MORE); |
140 |
if (currentTime - lastMoveTime > 250) {// user paused movement |
| 125 |
} |
141 |
startMoveTime = currentTime; |
| 126 |
if (lastItem == null || (!lastItem.isDisposed() && !lastItem.equals(item))) { |
|
|
| 127 |
redrawTree(lastItem); |
| 128 |
} |
142 |
} |
| 129 |
lastItem = item; |
143 |
lastMoveTime = currentTime; |
|
|
144 |
// be responsive for small moves but delay more for bigger ones |
| 145 |
int delay = Math.min(100, (int) ((currentTime - startMoveTime) / 4.0)); |
| 146 |
PlatformUI.getWorkbench().getDisplay().timerExec(delay, new Runnable() { |
| 147 |
public void run() {// do nothing if we aren't using the most recent item |
| 148 |
if (currentItem == item && !item.isDisposed()) { |
| 149 |
if (item.getData(ID_HOVER) != NodeState.MORE_ERROR) { |
| 150 |
item.setData(ID_HOVER, NodeState.MORE); |
| 151 |
} |
| 152 |
if (lastItem == null || (!lastItem.isDisposed() && !lastItem.equals(item))) { |
| 153 |
redrawTree(lastItem); |
| 154 |
redrawTree(item); |
| 155 |
} |
| 156 |
lastItem = item; |
| 157 |
} |
| 158 |
} |
| 159 |
}); |
| 130 |
} else { |
160 |
} else { |
| 131 |
if (lastItem != null && !lastItem.isDisposed() && !lastItem.equals(item)) { |
161 |
if (lastItem != null && !lastItem.isDisposed() && !lastItem.equals(item)) { |
| 132 |
lastItem.setData(ID_HOVER, NodeState.LESS); |
162 |
lastItem.setData(ID_HOVER, NodeState.LESS); |