mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
RunDashboard: support node links
- Store aimed object as component client property.
This commit is contained in:
+3
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.intellij.execution.dashboard.hyperlink;
|
||||
|
||||
import com.intellij.openapi.util.Key;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.awt.event.MouseEvent;
|
||||
@@ -25,6 +26,8 @@ import java.awt.event.MouseEvent;
|
||||
* @author Konstantin Aleev
|
||||
*/
|
||||
public interface RunDashboardHyperlinkComponent {
|
||||
Key<Object> AIMED_OBJECT = Key.create("RunDashboardAimedObject") ;
|
||||
|
||||
void onClick(@NotNull MouseEvent event);
|
||||
|
||||
void setAimed(boolean aimed);
|
||||
|
||||
+15
@@ -16,11 +16,13 @@
|
||||
package com.intellij.execution.dashboard.tree;
|
||||
|
||||
import com.intellij.execution.dashboard.hyperlink.RunDashboardHyperlinkComponent;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.openapi.vcs.changes.issueLinks.LinkMouseListenerBase;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.MouseAdapter;
|
||||
import java.awt.event.MouseEvent;
|
||||
@@ -57,11 +59,24 @@ public abstract class RunDashboardLinkMouseListenerBase extends LinkMouseListene
|
||||
}
|
||||
}
|
||||
|
||||
if (component instanceof JComponent) {
|
||||
Object oldValue = UIUtil.getClientProperty(component, RunDashboardHyperlinkComponent.AIMED_OBJECT);
|
||||
Object newValue = getAimedObject(e);
|
||||
if (!Comparing.equal(oldValue, newValue)) {
|
||||
shouldRepaint = true;
|
||||
UIUtil.putClientProperty((JComponent)component, RunDashboardHyperlinkComponent.AIMED_OBJECT, newValue);
|
||||
}
|
||||
}
|
||||
|
||||
if (shouldRepaint) {
|
||||
repaintComponent(e);
|
||||
}
|
||||
}
|
||||
|
||||
protected Object getAimedObject(MouseEvent e) {
|
||||
return null;
|
||||
}
|
||||
|
||||
protected abstract void repaintComponent(MouseEvent e);
|
||||
|
||||
@Override
|
||||
|
||||
+21
-3
@@ -18,10 +18,12 @@ package com.intellij.execution.dashboard.tree;
|
||||
import com.intellij.execution.dashboard.hyperlink.RunDashboardHyperlinkComponent;
|
||||
import com.intellij.ui.ColoredTreeCellRenderer;
|
||||
import com.intellij.ui.treeStructure.Tree;
|
||||
import com.intellij.util.ObjectUtils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.tree.DefaultMutableTreeNode;
|
||||
import javax.swing.tree.DefaultTreeModel;
|
||||
import javax.swing.tree.TreeNode;
|
||||
import javax.swing.tree.TreePath;
|
||||
@@ -38,12 +40,28 @@ public class RunDashboardTreeMouseListener extends RunDashboardLinkMouseListener
|
||||
myTree = tree;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Object getAimedObject(MouseEvent e) {
|
||||
Object aimedObject = null;
|
||||
final TreePath path = myTree.getPathForLocation(e.getX(), e.getY());
|
||||
if (path != null) {
|
||||
DefaultMutableTreeNode treeNode = ObjectUtils.tryCast(path.getLastPathComponent(), DefaultMutableTreeNode.class);
|
||||
if (treeNode != null) {
|
||||
aimedObject = treeNode.getUserObject();
|
||||
}
|
||||
}
|
||||
return aimedObject;
|
||||
}
|
||||
|
||||
protected void repaintComponent(MouseEvent e) {
|
||||
final TreePath path = myTree.getPathForLocation(e.getX(), e.getY());
|
||||
if (path != null) {
|
||||
final TreeNode treeNode = (TreeNode)path.getLastPathComponent();
|
||||
// Invoke nodeChanged() in order to repaint ExpandableItemsHandler's tooltip component.
|
||||
((DefaultTreeModel)myTree.getModel()).nodeChanged(treeNode);
|
||||
DefaultTreeModel treeModel = ObjectUtils.tryCast(myTree.getModel(), DefaultTreeModel.class);
|
||||
if (treeModel != null) {
|
||||
// Invoke nodeChanged() in order to repaint ExpandableItemsHandler's tooltip component.
|
||||
treeModel.nodeChanged(treeNode);
|
||||
}
|
||||
}
|
||||
|
||||
// Repaint all tree since nodes which cursor just leaved should be repaint too.
|
||||
@@ -65,7 +83,7 @@ public class RunDashboardTreeMouseListener extends RunDashboardLinkMouseListener
|
||||
|
||||
Object tag = null;
|
||||
|
||||
Component component = myTree.getCellRenderer().getTreeCellRendererComponent(myTree, treeNode, false, false, treeNode.isLeaf(), row, true);
|
||||
Component component = myTree.getCellRenderer().getTreeCellRendererComponent(myTree, treeNode, true, false, treeNode.isLeaf(), row, true);
|
||||
if (component instanceof ColoredTreeCellRenderer) {
|
||||
tag = ((ColoredTreeCellRenderer)component).getFragmentTagAt(dx);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user