Skip to content

Commit 52a0f9a

Browse files
committed
GH-55 Expand All Threads and Collapse All Threads actions for Java Threads view
1 parent 338c36f commit 52a0f9a

File tree

2 files changed

+45
-1
lines changed

2 files changed

+45
-1
lines changed

visualvm/heapviewer/src/com/sun/tools/visualvm/heapviewer/java/impl/JavaThreadsView.java

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,9 @@
5959
import com.sun.tools.visualvm.heapviewer.ui.HeapViewerNodeAction;
6060
import com.sun.tools.visualvm.heapviewer.ui.PluggableTreeTableView;
6161
import com.sun.tools.visualvm.heapviewer.ui.TreeTableViewColumn;
62+
import javax.swing.AbstractAction;
63+
import javax.swing.JPopupMenu;
64+
import javax.swing.SwingUtilities;
6265
import org.openide.util.NbBundle;
6366
import org.openide.util.lookup.ServiceProvider;
6467

@@ -74,7 +77,9 @@
7477
"JavaThreadsView_TooltipObjects=Objects",
7578
"JavaThreadsView_TooltipHTML=HTML",
7679
"JavaThreadsView_Details=Details:",
77-
"JavaThreadsView_SelectAction=Select in Threads"
80+
"JavaThreadsView_SelectAction=Select in Threads",
81+
"JavaThreadsView_ExpandAction=Expand All Threads",
82+
"JavaThreadsView_CollapseAction=Collapse All Threads"
7883
})
7984
public class JavaThreadsView extends HeapViewerFeature {
8085

@@ -112,6 +117,35 @@ protected void childrenChanged() {
112117
CCTNode[] children = getRoot().getChildren();
113118
for (CCTNode child : children) expandNode((HeapViewerNode)child);
114119
}
120+
@Override
121+
protected void populatePopup(HeapViewerNode node, JPopupMenu popup) {
122+
if (popup.getComponentCount() > 0) popup.addSeparator();
123+
124+
popup.add(new AbstractAction(Bundle.JavaThreadsView_ExpandAction()) {
125+
@Override
126+
public void actionPerformed(ActionEvent e) {
127+
SwingUtilities.invokeLater(new Runnable() {
128+
@Override
129+
public void run() {
130+
CCTNode[] children = getRoot().getChildren();
131+
for (CCTNode child : children) expandNode((HeapViewerNode)child);
132+
}
133+
});
134+
}
135+
});
136+
137+
popup.add(new AbstractAction(Bundle.JavaThreadsView_CollapseAction()) {
138+
@Override
139+
public void actionPerformed(ActionEvent e) {
140+
SwingUtilities.invokeLater(new Runnable() {
141+
@Override
142+
public void run() {
143+
collapseChildren((HeapViewerNode)getRoot());
144+
}
145+
});
146+
}
147+
});
148+
}
115149
};
116150
objectsView.setViewName(Bundle.JavaThreadsView_Name());
117151

visualvm/heapviewer/src/com/sun/tools/visualvm/heapviewer/ui/TreeTableView.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,11 @@ public void expandNode(HeapViewerNode node) {
242242
treeTable.expandPath(HeapViewerNode.fromNode(node));
243243
}
244244

245+
public void collapseChildren(HeapViewerNode node) {
246+
if (treeTable == null) return;
247+
treeTable.collapseChildren(HeapViewerNode.fromNode(node));
248+
}
249+
245250

246251
// protected void willBeSorted(List<RowSorter.SortKey> sortKeys) {}
247252

@@ -380,6 +385,8 @@ protected void populatePopup(JPopupMenu popup, Object value, Object userValue) {
380385
HeapViewerNodeAction.Actions.forNode(node, actionProviders, context, actions, new PinAction(node), new ResetPinAction());
381386
nodeActions.populatePopup(popup);
382387

388+
TreeTableView.this.populatePopup(node, popup);
389+
383390
if (popup.getComponentCount() > 0) popup.addSeparator();
384391
popup.add(treeTable.createCopyMenuItem());
385392
TreeTableView.this.populatePopupLast(node, popup);
@@ -499,6 +506,9 @@ public boolean requestFocusInWindow() {
499506
return comp;
500507
}
501508

509+
protected void populatePopup(HeapViewerNode node, JPopupMenu popup) {
510+
}
511+
502512
protected void populatePopupLast(HeapViewerNode node, JPopupMenu popup) {
503513
if (filterComponent.getComponentCount() > 0) {
504514
popup.addSeparator();

0 commit comments

Comments
 (0)