git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[EGIT PATCH 1/6] Create a selection handler for the revision graph.

From
Robin Rosenberg <robin.rosenberg@dewire.com>
Date
Jul 10, 2008, 22:39 UTC
Message-ID
<1215729573-26536-2-git-send-email-robin.rosenberg@dewire.com>
In-Reply-To
<1215729573-26536-1-git-send-email-robin.rosenberg@dewire.com>

This make it possible to associate content menu contributions with selections in the history graph.

Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
---
 .../egit/ui/internal/history/GitHistoryPage.java   |   11 ++++-
 .../history/RevObjectSelectionProvider.java        |   48 ++++++++++++++++++++
 2 files changed, 57 insertions(+), 2 deletions(-)
 create mode 100644 org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/RevObjectSelectionProvider.java
diff --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
index 9bcae19..6eaa6e4 100644
--- 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
@@ -181,6 +181,11 @@ public class GitHistoryPage extends HistoryPage {
 	 */
 	private List<String> pathFilters;
 
+	/**
+	 * The selection provider tracks the selected revisions for the context menu
+	 */
+	private RevObjectSelectionProvider revObjectSelectionProvider;
+
 	@Override
 	public void createControl(final Composite parent) {
 		GridData gd;
@@ -211,6 +216,7 @@ public class GitHistoryPage extends HistoryPage {
 		layoutSashForm(graphDetailSplit, SPLIT_GRAPH);
 		layoutSashForm(revInfoSplit, SPLIT_INFO);
 
+		revObjectSelectionProvider = new RevObjectSelectionProvider();
 		popupMgr = new MenuManager(null, POPUP_ID);
 		attachCommitSelectionChanged();
 		createLocalToolbarActions();
@@ -221,7 +227,6 @@ public class GitHistoryPage extends HistoryPage {
 		attachContextMenu(graph.getControl());
 		attachContextMenu(commentViewer.getControl());
 		attachContextMenu(fileViewer.getControl());
-
 		layout();
 	}
 
@@ -229,7 +234,8 @@ public class GitHistoryPage extends HistoryPage {
 		popupMgr.add(new Separator());
 		popupMgr.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
 		getSite().registerContextMenu(POPUP_ID, popupMgr,
-				getSite().getSelectionProvider());
+				revObjectSelectionProvider);
+		getSite().setSelectionProvider(revObjectSelectionProvider);
 	}
 
 	private void attachContextMenu(final Control c) {
@@ -299,6 +305,7 @@ public class GitHistoryPage extends HistoryPage {
 				c = (PlotCommit<?>) sel.getFirstElement();
 				commentViewer.setInput(c);
 				fileViewer.setInput(c);
+				revObjectSelectionProvider.setSelection(s);
 			}
 		});
 		commentViewer
diff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/RevObjectSelectionProvider.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/RevObjectSelectionProvider.java
new file mode 100644
index 0000000..c44b229
--- /dev/null
+++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/RevObjectSelectionProvider.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (C) 2008, Robin Rosenberg <robin.rosenberg@dewire.com>
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * See LICENSE for the full license text, also available.
+ *******************************************************************************/
+package org.spearce.egit.ui.internal.history;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+
+/**
+ * A selection provider for Git revision objects
+ */
+public class RevObjectSelectionProvider implements ISelectionProvider {
+
+	private List<ISelectionChangedListener> listeners = new ArrayList<ISelectionChangedListener>();
+
+	private ISelection selection;
+
+	public void addSelectionChangedListener(ISelectionChangedListener listener) {
+		listeners.add(listener);
+	}
+
+	public ISelection getSelection() {
+		return selection;
+	}
+
+	public void removeSelectionChangedListener(
+			ISelectionChangedListener listener) {
+		listeners.remove(listener);
+	}
+
+	public void setSelection(ISelection selection) {
+		this.selection = selection;
+		SelectionChangedEvent event = new SelectionChangedEvent(this, selection);
+		for (ISelectionChangedListener l : listeners) {
+			l.selectionChanged(event);
+		}
+	}
+
+}
-- 
1.5.6.2.220.g44701
Previous: Robin RosenbergNext: Robin Rosenberg
Message 2 of 10 in “RevObject selection handler”
  1. 0/6 RevObject selection handlerRobin Rosenberg, Jul 10, 2008
  2. 1/6 Create a selection handler for the revision graph.Robin Rosenberg, Jul 10, 2008
  3. 2/6 Using the page site selection turned out to be cumbersome.Robin Rosenberg, Jul 10, 2008
  4. 3/6 Adapt Git team operations to non-resouce objectsRobin Rosenberg, Jul 10, 2008
  5. 4/6 Teach the revision selection handler about the active repositoryRobin Rosenberg, Jul 10, 2008
  6. 5/6 Create baseclasses for actions and operations on RevObjectsRobin Rosenberg, Jul 10, 2008
  7. 6/6 Add actions in history view to perform reset actionsRobin Rosenberg, Jul 10, 2008
  8. Shawn O. PearceJul 11, 2008
  9. Shawn O. PearceJul 11, 2008
  10. Johannes SchindelinJul 11, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.