{"thread":{"id":"13009","subject":"[EGIT PATCH 3/3] Use RevFlag to highlight find results in the history page.","startedAt":"2008-04-06T21:42:18Z","lastAt":"2008-04-06T21:42:18Z","messageCount":1,"participants":["Roger C. Soares"],"isPatch":true,"patchVersion":1,"patchTotal":3},"messages":[{"id":"73775","messageId":"1207518138-4215-1-git-send-email-rogersoares@intelinet.com.br","threadId":"13009","inReplyTo":null,"subject":"[EGIT PATCH 3/3] Use RevFlag to highlight find results in the history page.","fromName":"Roger C. Soares","fromEmail":"rogersoares@intelinet.com.br","sentAt":"2008-04-06T21:42:18Z","receivedAt":"2008-04-06T21:42:18Z","isPatch":true,"sender":{"key":"rogersoares@intelinet.com.br","avatar":null},"body":"Make the toolbar aware of the highlight flag so that we can\nroolback CommitGraphTable and prevent it from consulting a Map\nin it's doPaint method.\n\nSigned-off-by: Roger C. Soares <rogersoares@intelinet.com.br>\n---\n .../egit/ui/internal/history/CommitGraphTable.java |   13 ++++-----\n .../egit/ui/internal/history/FindResults.java      |   27 +++++++++++++++++++-\n .../egit/ui/internal/history/FindToolbar.java      |    6 +++-\n .../ui/internal/history/FindToolbarThread.java     |   12 ++++----\n .../egit/ui/internal/history/GitHistoryPage.java   |   18 +++++++++++--\n 5 files changed, 58 insertions(+), 18 deletions(-)\n\ndiff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/CommitGraphTable.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/CommitGraphTable.java\nindex 1b1d16b..74837f8 100644\n--- a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/CommitGraphTable.java\n+++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/CommitGraphTable.java\n@@ -49,6 +49,7 @@ import org.spearce.egit.ui.UIPreferences;\n import org.spearce.egit.ui.UIText;\n import org.spearce.jgit.revplot.PlotCommit;\n import org.spearce.jgit.revwalk.RevCommit;\n+import org.spearce.jgit.revwalk.RevFlag;\n \n class CommitGraphTable {\n \tprivate static Font highlightFont() {\n@@ -80,7 +81,7 @@ class CommitGraphTable {\n \n \tprivate SWTCommitList allCommits;\n \n-\tprivate FindResults findResults;\n+\tprivate RevFlag highlight;\n \n \tCommitGraphTable(final Composite parent) {\n \t\tnFont = Activator.getFont(UIPreferences.THEME_CommitGraphNormalFont);\n@@ -158,10 +159,10 @@ class CommitGraphTable {\n \t\t\t\tnew Transfer[] { TextTransfer.getInstance() }, DND.CLIPBOARD);\n \t}\n \n-\tvoid setInput(final FindResults fResults, final SWTCommitList list,\n+\tvoid setInput(final RevFlag hFlag, final SWTCommitList list,\n \t\t\tfinal SWTCommit[] asArray) {\n \t\tfinal SWTCommitList oldList = allCommits;\n-\t\tfindResults = fResults;\n+\t\thighlight = hFlag;\n \t\tallCommits = list;\n \t\ttable.setInput(asArray);\n \t\tif (asArray != null && asArray.length > 0) {\n@@ -210,10 +211,8 @@ class CommitGraphTable {\n \t}\n \n \tvoid doPaint(final Event event) {\n-\t\tTableItem ti = (TableItem) event.item;\n-\t\tfinal RevCommit c = (RevCommit) ti.getData();\n-\t\tif (findResults != null\n-\t\t\t\t&& findResults.isFoundAt(table.getTable().indexOf(ti)))\n+\t\tfinal RevCommit c = (RevCommit) ((TableItem) event.item).getData();\n+\t\tif (highlight != null && c.has(highlight))\n \t\t\tevent.gc.setFont(hFont);\n \t\telse\n \t\t\tevent.gc.setFont(nFont);\ndiff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/FindResults.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/FindResults.java\nindex 49ee4fc..f754424 100644\n--- a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/FindResults.java\n+++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/FindResults.java\n@@ -16,11 +16,16 @@\n  */\n package org.spearce.egit.ui.internal.history;\n \n+import java.util.ArrayList;\n import java.util.Arrays;\n import java.util.Iterator;\n import java.util.LinkedHashMap;\n+import java.util.List;\n import java.util.Map;\n \n+import org.spearce.jgit.revwalk.RevFlag;\n+import org.spearce.jgit.revwalk.RevObject;\n+\n /**\n  * Results for the find toolbar. This object stores the rows in the history\n  * table that contain a match to a given pattern.\n@@ -31,10 +36,14 @@ import java.util.Map;\n public class FindResults {\n \tprivate Map<Integer, Integer> matchesMap = new LinkedHashMap<Integer, Integer>();\n \n+\tprivate List<RevObject> revObjList = new ArrayList<RevObject>();\n+\n \tInteger[] keysArray;\n \n \tprivate int matchesCount;\n \n+\tprivate RevFlag highlight;\n+\n \t/**\n \t * Returns if the index in the history table matches the find pattern.\n \t *\n@@ -155,7 +164,13 @@ public class FindResults {\n \t * Cleans the find results. All match item indexes are removed.\n \t */\n \tpublic synchronized void clear() {\n+\t\tif (highlight != null) {\n+\t\t\tfor (RevObject o : revObjList) {\n+\t\t\t\to.remove(highlight);\n+\t\t\t}\n+\t\t}\n \t\tmatchesMap.clear();\n+\t\trevObjList.clear();\n \t\tkeysArray = null;\n \t\tmatchesCount = 0;\n \t}\n@@ -166,10 +181,14 @@ public class FindResults {\n \t *\n \t * @param matchIx\n \t *            the history table item index that matches a find pattern.\n+\t * @param revObj\n+\t *            The RevObject that will have the highlight tag set.\n \t */\n-\tpublic synchronized void add(int matchIx) {\n+\tpublic synchronized void add(int matchIx, RevObject revObj) {\n \t\tmatchesMap.put(Integer.valueOf(matchIx), Integer\n \t\t\t\t.valueOf(++matchesCount));\n+\t\trevObjList.add(revObj);\n+\t\trevObj.add(highlight);\n \t\tkeysArray = null;\n \t}\n \n@@ -182,4 +201,10 @@ public class FindResults {\n \t\treturn keysArray;\n \t}\n \n+\tvoid setHighlightFlag(RevFlag hFlag) {\n+\t\tif (highlight != null) {\n+\t\t\tclear();\n+\t\t}\n+\t\tthis.highlight = hFlag;\n+\t}\n }\ndiff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/FindToolbar.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/FindToolbar.java\nindex 5715d12..7f66eeb 100644\n--- a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/FindToolbar.java\n+++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/FindToolbar.java\n@@ -52,6 +52,7 @@ import org.spearce.egit.ui.Activator;\n import org.spearce.egit.ui.UIIcons;\n import org.spearce.egit.ui.UIPreferences;\n import org.spearce.egit.ui.UIText;\n+import org.spearce.jgit.revwalk.RevFlag;\n \n /**\n  * A toolbar for the history page.\n@@ -409,12 +410,15 @@ public class FindToolbar extends Composite {\n \t * Sets the table that will have its selected items changed by this toolbar.\n \t * Sets the list to be searched.\n \t *\n+\t * @param hFlag\n \t * @param historyTable\n \t * @param commitArray\n \t */\n-\tpublic void setInput(final Table historyTable, final SWTCommit[] commitArray) {\n+\tpublic void setInput(final RevFlag hFlag, final Table historyTable,\n+\t\t\tfinal SWTCommit[] commitArray) {\n \t\tthis.fileRevisions = commitArray;\n \t\tthis.historyTable = historyTable;\n+\t\tfindResults.setHighlightFlag(hFlag);\n \t}\n \n \tvoid progressUpdate(int percent) {\ndiff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/FindToolbarThread.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/FindToolbarThread.java\nindex 95a545a..8a20f5f 100644\n--- a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/FindToolbarThread.java\n+++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/FindToolbarThread.java\n@@ -131,7 +131,7 @@ public class FindToolbarThread extends Thread {\n \t\t\t\t\t\t}\n \t\t\t\t\t\tif (contentId.indexOf(findPattern) != -1) {\n \t\t\t\t\t\t\ttotalMatches++;\n-\t\t\t\t\t\t\tfindResults.add(i);\n+\t\t\t\t\t\t\tfindResults.add(i, revision);\n \t\t\t\t\t\t\tnotFound = false;\n \t\t\t\t\t\t}\n \t\t\t\t\t}\n@@ -145,7 +145,7 @@ public class FindToolbarThread extends Thread {\n \t\t\t\t\t\t}\n \t\t\t\t\t\tif (comment.indexOf(findPattern) != -1) {\n \t\t\t\t\t\t\ttotalMatches++;\n-\t\t\t\t\t\t\tfindResults.add(i);\n+\t\t\t\t\t\t\tfindResults.add(i, revision);\n \t\t\t\t\t\t\tnotFound = false;\n \t\t\t\t\t\t}\n \t\t\t\t\t}\n@@ -159,7 +159,7 @@ public class FindToolbarThread extends Thread {\n \t\t\t\t\t\t}\n \t\t\t\t\t\tif (author.indexOf(findPattern) != -1) {\n \t\t\t\t\t\t\ttotalMatches++;\n-\t\t\t\t\t\t\tfindResults.add(i);\n+\t\t\t\t\t\t\tfindResults.add(i, revision);\n \t\t\t\t\t\t\tnotFound = false;\n \t\t\t\t\t\t}\n \t\t\t\t\t}\n@@ -172,7 +172,7 @@ public class FindToolbarThread extends Thread {\n \t\t\t\t\t\t\t}\n \t\t\t\t\t\t\tif (email.indexOf(findPattern) != -1) {\n \t\t\t\t\t\t\t\ttotalMatches++;\n-\t\t\t\t\t\t\t\tfindResults.add(i);\n+\t\t\t\t\t\t\t\tfindResults.add(i, revision);\n \t\t\t\t\t\t\t\tnotFound = false;\n \t\t\t\t\t\t\t}\n \t\t\t\t\t\t}\n@@ -187,7 +187,7 @@ public class FindToolbarThread extends Thread {\n \t\t\t\t\t\t}\n \t\t\t\t\t\tif (committer.indexOf(findPattern) != -1) {\n \t\t\t\t\t\t\ttotalMatches++;\n-\t\t\t\t\t\t\tfindResults.add(i);\n+\t\t\t\t\t\t\tfindResults.add(i, revision);\n \t\t\t\t\t\t\tnotFound = false;\n \t\t\t\t\t\t}\n \t\t\t\t\t}\n@@ -200,7 +200,7 @@ public class FindToolbarThread extends Thread {\n \t\t\t\t\t\t\t}\n \t\t\t\t\t\t\tif (email.indexOf(findPattern) != -1) {\n \t\t\t\t\t\t\t\ttotalMatches++;\n-\t\t\t\t\t\t\t\tfindResults.add(i);\n+\t\t\t\t\t\t\t\tfindResults.add(i, revision);\n \t\t\t\t\t\t\t\tnotFound = false;\n \t\t\t\t\t\t\t}\n \t\t\t\t\t\t}\ndiff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/GitHistoryPage.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/GitHistoryPage.java\nindex 0a3e3b8..604b438 100644\n--- a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/GitHistoryPage.java\n+++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/GitHistoryPage.java\n@@ -69,6 +69,7 @@ import org.spearce.jgit.lib.AnyObjectId;\n import org.spearce.jgit.lib.Repository;\n import org.spearce.jgit.revplot.PlotCommit;\n import org.spearce.jgit.revwalk.RevCommit;\n+import org.spearce.jgit.revwalk.RevFlag;\n import org.spearce.jgit.revwalk.RevSort;\n import org.spearce.jgit.revwalk.filter.RevFilter;\n import org.spearce.jgit.treewalk.TreeWalk;\n@@ -165,6 +166,14 @@ public class GitHistoryPage extends HistoryPage {\n \tprivate SWTWalk currentWalk;\n \n \t/**\n+\t * Highlight flag that can be applied to commits to make them stand out.\n+\t * <p>\n+\t * Allocated at the same time as {@link #currentWalk}. If the walk\n+\t * rebuilds, so must this flag.\n+\t */\n+\tprivate RevFlag highlightFlag;\n+\n+\t/**\n \t * List of paths we used to limit {@link #currentWalk}; null if no paths.\n \t * <p>\n \t * Note that a change in this list requires that {@link #currentWalk} and\n@@ -506,6 +515,7 @@ public class GitHistoryPage extends HistoryPage {\n \t\t\t\t|| pathChange(pathFilters, paths)) {\n \t\t\tcurrentWalk = new SWTWalk(db);\n \t\t\tcurrentWalk.sort(RevSort.COMMIT_TIME_DESC, true);\n+\t\t\thighlightFlag = currentWalk.newFlag(\"highlight\");\n \t\t} else {\n \t\t\tcurrentWalk.reset();\n \t\t}\n@@ -536,7 +546,7 @@ public class GitHistoryPage extends HistoryPage {\n \t\t}\n \t\tfileViewer.setTreeWalk(fileWalker);\n \t\tfindToolbar.clear();\n-\t\tgraph.setInput(findToolbar.findResults, null, null);\n+\t\tgraph.setInput(highlightFlag, null, null);\n \n \t\tfinal SWTCommitList list;\n \t\tlist = new SWTCommitList(graph.getControl().getDisplay());\n@@ -575,6 +585,7 @@ public class GitHistoryPage extends HistoryPage {\n \t\t\t//\n \t\t\tjob = null;\n \t\t\tcurrentWalk = null;\n+\t\t\thighlightFlag = null;\n \t\t\tpathFilters = null;\n \t\t}\n \t}\n@@ -607,8 +618,9 @@ public class GitHistoryPage extends HistoryPage {\n \t\tgraph.getControl().getDisplay().asyncExec(new Runnable() {\n \t\t\tpublic void run() {\n \t\t\t\tif (!graph.getControl().isDisposed() && job == j) {\n-\t\t\t\t\tgraph.setInput(findToolbar.findResults, list, asArray);\n-\t\t\t\t\tfindToolbar.setInput(graph.getTable(), asArray);\n+\t\t\t\t\tgraph.setInput(highlightFlag, list, asArray);\n+\t\t\t\t\tfindToolbar.setInput(highlightFlag, graph.getTable(),\n+\t\t\t\t\t\t\tasArray);\n \t\t\t\t}\n \t\t\t}\n \t\t});\n-- \n1.5.4.1\n"}]}