git log: keep highlight selection between reloads

This commit is contained in:
irengrig
2011-11-10 20:22:51 +04:00
parent b212632219
commit 76a8ec9f6c
2 changed files with 20 additions and 3 deletions
@@ -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<VirtualFile> 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();
@@ -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;