Skip to content

Commit cde120b

Browse files
DenisUngemachBeckerWdf
authored andcommitted
Expand/Collapse for folders in DiffTreeViewer
The default behavior for double click on folders is to expand resp. collapse them. Fix for: eclipse-platform/eclipse.platform.ui#1838
1 parent 5fc5bed commit cde120b

File tree

1 file changed

+27
-0
lines changed
  • team/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer

1 file changed

+27
-0
lines changed

team/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffTreeViewer.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import org.eclipse.compare.CompareUI;
2121
import org.eclipse.compare.CompareViewerPane;
2222
import org.eclipse.compare.INavigatable;
23+
import org.eclipse.compare.ITypedElement;
2324
import org.eclipse.compare.internal.Utilities;
2425
import org.eclipse.compare.internal.patch.DiffViewerComparator;
2526
import org.eclipse.jface.action.Action;
@@ -29,6 +30,7 @@
2930
import org.eclipse.jface.action.ToolBarManager;
3031
import org.eclipse.jface.util.IPropertyChangeListener;
3132
import org.eclipse.jface.util.PropertyChangeEvent;
33+
import org.eclipse.jface.viewers.DoubleClickEvent;
3234
import org.eclipse.jface.viewers.ISelection;
3335
import org.eclipse.jface.viewers.IStructuredSelection;
3436
import org.eclipse.jface.viewers.ITreeContentProvider;
@@ -245,6 +247,7 @@ public boolean hasChange(int changeFlag) {
245247
setLabelProvider(diffViewerLabelProvider);
246248

247249
addSelectionChangedListener(event -> updateActions());
250+
addDoubleClickListener(this::expandCollapseAction);
248251

249252
setComparator(new DiffViewerComparator());
250253

@@ -670,6 +673,30 @@ private void internalSetSelection(TreeItem ti, boolean fireOpen) {
670673
}
671674
}
672675

676+
private void expandCollapseAction(DoubleClickEvent event) {
677+
ISelection s = event.getSelection();
678+
679+
if (s.isEmpty())
680+
return;
681+
682+
if (getElement(s) instanceof DiffNode d) {
683+
if (d.getType() == ITypedElement.FOLDER_TYPE) {
684+
if (getExpandedState(d))
685+
collapseToLevel(d, 1);
686+
else
687+
expandToLevel(d, 1);
688+
}
689+
}
690+
}
691+
692+
private static Object getElement(ISelection selection) {
693+
if (selection instanceof IStructuredSelection ss) {
694+
if (ss.size() == 1)
695+
return ss.getFirstElement();
696+
}
697+
return null;
698+
}
699+
673700
private void updateActions() {
674701
if (fExpandAllAction != null) {
675702
fExpandAllAction.setEnabled(getSelection().isEmpty());

0 commit comments

Comments
 (0)