提交 8e444cc1 编写于 作者: S serge-rider

#9822 Action handler added + hover tracking (disabled)


Former-commit-id: 9e0393e3
上级 1e51f6ef
......@@ -32,4 +32,6 @@ public interface INavigatorItemRenderer {
void paintNodeDetails(DBNNode node, Tree tree, GC gc, Event event);
void showDetailsToolTip(DBNNode node, Tree tree, Event event);
void performAction(DBNNode node, Tree tree, Event event, boolean defaultAction);
}
......@@ -34,6 +34,6 @@ public interface INavigatorNodeActionHandler {
String getNodeActionToolTip(INavigatorModelView view, DBNNode node);
void handleNodeAction(INavigatorModelView view, DBNNode node, Event event);
void handleNodeAction(INavigatorModelView view, DBNNode node, Event event, boolean defaultAction);
}
......@@ -45,7 +45,7 @@ public class NNAHDataSourceConfiguration extends NavigatorNodeActionHandlerAbstr
}
@Override
public void handleNodeAction(INavigatorModelView view, DBNNode node, Event event) {
public void handleNodeAction(INavigatorModelView view, DBNNode node, Event event, boolean defaultAction) {
}
}
......@@ -49,7 +49,7 @@ public class NNAHDataSourceReadOnly extends NavigatorNodeActionHandlerAbstract {
}
@Override
public void handleNodeAction(INavigatorModelView view, DBNNode node, Event event) {
public void handleNodeAction(INavigatorModelView view, DBNNode node, Event event, boolean defaultAction) {
}
}
......@@ -61,7 +61,8 @@ public class NNAHDataSourceTunnel extends NavigatorNodeActionHandlerAbstract {
}
@Override
public void handleNodeAction(INavigatorModelView view, DBNNode node, Event event) {
public void handleNodeAction(INavigatorModelView view, DBNNode node, Event event, boolean defaultAction) {
}
}
......@@ -136,8 +136,26 @@ public class DatabaseNavigatorTree extends Composite implements INavigatorListen
this.setItemRenderer(new DefaultNavigatorNodeRenderer());
{
//tree.addListener(SWT.EraseItem, event -> eraseItem(tree, event));
tree.addListener(SWT.PaintItem, event -> paintItem(tree, event));
//tree.addListener(SWT.EraseItem, event -> onEraseItem(tree, event));
tree.addListener(SWT.PaintItem, event -> onPaintItem(tree, event));
if (false) {
// See comments for StatisticsNavigatorNodeRenderer.PAINT_ACTION_HOVER
Listener mouseListener = e -> {
TreeItem item = tree.getItem(new Point(e.x, e.y));
if (item != null) {
Rectangle itemBounds = item.getBounds();
Point treeSize = tree.getSize();
tree.redraw(itemBounds.x, itemBounds.y, treeSize.x, treeSize.y, false);
}
};
tree.addListener(SWT.MouseMove, mouseListener);
//tree.addListener(SWT.MouseHover, mouseListener);
tree.addListener(SWT.MouseEnter, mouseListener);
tree.addListener(SWT.MouseExit, mouseListener);
}
tree.addListener(SWT.MouseDown, event -> onItemMouseDown(tree, event, false));
tree.addListener(SWT.MouseDoubleClick, event -> onItemMouseDown(tree, event, true));
}
}
......@@ -178,7 +196,7 @@ public class DatabaseNavigatorTree extends Composite implements INavigatorListen
this.itemRenderer = itemRenderer;
}
private void eraseItem(Tree tree, Event event) {
private void onEraseItem(Tree tree, Event event) {
if (itemRenderer != null) {
Object element = event.item.getData();
if (element instanceof DBNNode) {
......@@ -187,7 +205,7 @@ public class DatabaseNavigatorTree extends Composite implements INavigatorListen
}
}
private void paintItem(Tree tree, Event event) {
private void onPaintItem(Tree tree, Event event) {
if (itemRenderer != null) {
Object element = event.item.getData();
if (element instanceof DBNNode) {
......@@ -196,6 +214,18 @@ public class DatabaseNavigatorTree extends Composite implements INavigatorListen
}
}
private void onItemMouseDown(Tree tree, Event event, boolean defaultAction) {
if (itemRenderer != null) {
TreeItem item = tree.getItem(new Point(event.x, event.y));
if (item != null) {
Object element = item.getData();
if (element instanceof DBNNode) {
itemRenderer.performAction((DBNNode) element, tree, event, defaultAction);
}
}
}
}
public void setInput(DBNNode rootNode) {
treeViewer.setInput(new DatabaseNavigatorContent(rootNode));
}
......
......@@ -90,4 +90,9 @@ public class DefaultNavigatorNodeRenderer implements INavigatorItemRenderer {
}
@Override
public void performAction(DBNNode node, Tree tree, Event event, boolean defaultAction) {
}
}
......@@ -72,6 +72,10 @@ public class StatisticsNavigatorNodeRenderer extends DefaultNavigatorNodeRendere
private static final RGB HOST_NAME_FG_DARK = new RGB(140,140,140);
private static final RGB HOST_NAME_FG_LIGHT = new RGB(105,105,105);
// Disabled because of performance and a couple of glitches
// Sometimes hover bg remains after mouse move
private static final boolean PAINT_ACTION_HOVER = false;
private final INavigatorModelView view;
private static final ByteNumberFormat numberFormat = new ByteNumberFormat();
......@@ -136,6 +140,17 @@ public class StatisticsNavigatorNodeRenderer extends DefaultNavigatorNodeRendere
}
}
@Override
public void performAction(DBNNode node, Tree tree, Event event, boolean defaultAction) {
if (DBWorkbench.getPlatform().getPreferenceStore().getBoolean(NavigatorPreferences.NAVIGATOR_SHOW_NODE_ACTIONS)) {
// Detect active action
INavigatorNodeActionHandler overActionButton = getActionButtonFor(node, tree, event);
if (overActionButton != null) {
overActionButton.handleNodeAction(view, node, event, defaultAction);
}
}
}
private String getDetailsTipText(DBNNode element, Tree tree, Event event) {
if (element instanceof DBNDatabaseNode) {
if (element instanceof DBNDataSource) {
......@@ -282,8 +297,21 @@ public class StatisticsNavigatorNodeRenderer extends DefaultNavigatorNodeRendere
// event.height * 2 / 3;
xPos -= imageSize;
widthOccupied += imageSize;
//gc.fillRectangle(xPos, event.y + (event.height - imageSize) / 2, imageBounds.width, imageBounds.height);
Point mousePos = tree.getDisplay().getCursorLocation();
Point itemPos = tree.toDisplay(xPos, event.y + (event.height - imageSize) / 2);
if (PAINT_ACTION_HOVER) {
if (mousePos.x >= itemPos.x - 1 && mousePos.x <= itemPos.x + imageBounds.width + 2 &&
mousePos.y > itemPos.y - 1 && mousePos.y < itemPos.y + imageBounds.height + 2) {
Color oldBackground = gc.getBackground();
Color overBG = UIUtils.getSharedColor(new RGB(200, 200, 255));
gc.setBackground(overBG);
gc.fillRoundRectangle(xPos - 1, event.y + (event.height - imageSize) / 2 - 1, imageBounds.width + 2, imageBounds.height + 2, 2, 2);
gc.setBackground(oldBackground);
}
}
gc.drawImage(image, xPos, event.y + (event.height - imageSize) / 2);
// gc.drawImage(image,
// 0, 0, imageBounds.width, imageBounds.height,
// xPos, event.y + (event.height - imageSize) / 2, imageBounds.width, imageBounds.height);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册