From 76a8ec9f6c829ab5ad3318aea6717432eb399b6c Mon Sep 17 00:00:00 2001 From: irengrig Date: Thu, 3 Nov 2011 23:56:34 +0400 Subject: [PATCH] git log: keep highlight selection between reloads --- .../history/wholeTree/BigTableTableModel.java | 21 +++++++++++++++++-- .../git4idea/history/wholeTree/GitLogUI.java | 2 +- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/plugins/git4idea/src/git4idea/history/wholeTree/BigTableTableModel.java b/plugins/git4idea/src/git4idea/history/wholeTree/BigTableTableModel.java index 704dffdb356f..49d53fda73ae 100644 --- a/plugins/git4idea/src/git4idea/history/wholeTree/BigTableTableModel.java +++ b/plugins/git4idea/src/git4idea/history/wholeTree/BigTableTableModel.java @@ -253,6 +253,13 @@ public class BigTableTableModel extends AbstractTableModel { pair.getSecond() != null && pair.getSecond().equals(commitI.getHash())); } + public void setHeadIfEmpty(VirtualFile root, AbstractHash headHash) { + final TreeHighlighter treeHighlighter = myTreeHighlighter.get(root); + if (treeHighlighter != null && treeHighlighter.getPoint() == null) { + setHead(root, headHash); + } + } + public void setHead(VirtualFile root, AbstractHash headHash) { final TreeHighlighter treeHighlighter = myTreeHighlighter.get(root); if (treeHighlighter != null) { @@ -488,9 +495,19 @@ public class BigTableTableModel extends AbstractTableModel { myRunningRepoIdxs.put(vf, 0); myIdxMap.clear(); } - myTreeHighlighter.clear(); for (VirtualFile virtualFile : myOrder) { - myTreeHighlighter.put(virtualFile, new TreeHighlighter(this, virtualFile, -1)); + if (! myTreeHighlighter.containsKey(virtualFile)) { + myTreeHighlighter.put(virtualFile, new TreeHighlighter(this, virtualFile, -1)); + } + } + for (Iterator iterator = myTreeHighlighter.keySet().iterator(); iterator.hasNext(); ) { + VirtualFile root = iterator.next(); + if (! myOrder.contains(root)) { + iterator.remove(); + } else { + final TreeHighlighter highlighter = myTreeHighlighter.get(root); + highlighter.setPoint(highlighter.getPoint()); + } } } else { myCurrentComparator = CommitIReorderingInsideOneRepoComparator.getInstance(); diff --git a/plugins/git4idea/src/git4idea/history/wholeTree/GitLogUI.java b/plugins/git4idea/src/git4idea/history/wholeTree/GitLogUI.java index 0d143924d104..d544816e2fd7 100644 --- a/plugins/git4idea/src/git4idea/history/wholeTree/GitLogUI.java +++ b/plugins/git4idea/src/git4idea/history/wholeTree/GitLogUI.java @@ -274,7 +274,7 @@ public class GitLogUI implements Disposable { @Override public void reportSymbolicRefs(VirtualFile root, SymbolicRefs symbolicRefs) { myRefs.put(root, symbolicRefs); - myTableModel.setHead(root, symbolicRefs.getHeadHash()); + myTableModel.setHeadIfEmpty(root, symbolicRefs.getHeadHash()); myRecalculatedCommon.clear(); if (myRefs.isEmpty()) return;