Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobin Stocker2013-11-14 23:46:12 +0000
committerRobin Stocker2013-11-14 23:46:12 +0000
commit84294240688eaff89bbf9515c2173dea0c5c8ec4 (patch)
tree7e6d4f7035e3abd0cc0a7f63b4f2f24ef5a3b85d /org.eclipse.egit.ui/src
parente958fbdab7b6ec122e75f137aa15c60e250119cf (diff)
downloadegit-84294240688eaff89bbf9515c2173dea0c5c8ec4.tar.gz
egit-84294240688eaff89bbf9515c2173dea0c5c8ec4.tar.xz
egit-84294240688eaff89bbf9515c2173dea0c5c8ec4.zip
Commit dialog: Add "Compare with HEAD revision" to file context menu
Double-click can be hard to discover. Bug: 421491 Change-Id: Iba8e9c7523b057e0b8329c905195978acdccca56 Signed-off-by: Robin Stocker <robin@nibor.org>
Diffstat (limited to 'org.eclipse.egit.ui/src')
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/UIText.java3
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitDialog.java87
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/uitext.properties1
3 files changed, 60 insertions, 31 deletions
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/UIText.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/UIText.java
index 54ddc59e40..f3fe4ce1b8 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/UIText.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/UIText.java
@@ -2061,6 +2061,9 @@ public class UIText extends NLS {
public static String CommitDialog_CommitMessage;
/** */
+ public static String CommitDialog_CompareWithHeadRevision;
+
+ /** */
public static String CommitDialog_DeselectAll;
/** */
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitDialog.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitDialog.java
index 9ea7f5d496..3cf767b823 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitDialog.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitDialog.java
@@ -52,6 +52,10 @@ import org.eclipse.egit.ui.internal.decorators.IProblemDecoratable;
import org.eclipse.egit.ui.internal.decorators.ProblemLabelDecorator;
import org.eclipse.egit.ui.internal.dialogs.CommitItem.Status;
import org.eclipse.egit.ui.internal.dialogs.CommitMessageComponent.CommitStatus;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.dialogs.IMessageProvider;
@@ -100,8 +104,6 @@ import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;
@@ -295,13 +297,7 @@ public class CommitDialog extends TitleAreaDialog {
if (commitItem == null) {
return;
}
- IFile file = findFile(commitItem.path);
- if (file == null
- || RepositoryProvider.getProvider(file.getProject()) == null)
- CompareUtils.compareHeadWithWorkingTree(repository,
- commitItem.path);
- else
- CompareUtils.compareHeadWithWorkspace(repository, file);
+ compare(commitItem);
}
}
@@ -760,7 +756,11 @@ public class CommitDialog extends TitleAreaDialog {
filesViewer.addFilter(new CommitItemFilter());
filesViewer.setInput(items.toArray());
- filesViewer.getTree().setMenu(getContextMenu());
+ MenuManager menuManager = new MenuManager();
+ menuManager.setRemoveAllWhenShown(true);
+ menuManager.addMenuListener(createContextMenuListener());
+ filesViewer.getTree().setMenu(
+ menuManager.createContextMenu(filesViewer.getTree()));
filesViewer.addCheckStateListener(new ICheckStateListener() {
public void checkStateChanged(CheckStateChangedEvent event) {
@@ -1082,27 +1082,43 @@ public class CommitDialog extends TitleAreaDialog {
Integer.valueOf(filesViewer.getTree().getItemCount())));
}
- private Menu getContextMenu() {
- if (!allowToChangeSelection)
- return null;
- final Menu menu = new Menu(filesViewer.getTree());
- filesViewer.getTree().addDisposeListener(new DisposeListener() {
+ private IMenuListener createContextMenuListener() {
+ return new IMenuListener() {
+ public void menuAboutToShow(IMenuManager manager) {
+ if (!allowToChangeSelection)
+ return;
- public void widgetDisposed(DisposeEvent e) {
- menu.dispose();
- }
- });
- MenuItem item = new MenuItem(menu, SWT.PUSH);
- item.setText(UIText.CommitDialog_AddFileOnDiskToIndex);
- item.addListener(SWT.Selection, new Listener() {
- public void handleEvent(Event arg0) {
- IStructuredSelection sel = (IStructuredSelection) filesViewer
+ final IStructuredSelection selection = (IStructuredSelection) filesViewer
.getSelection();
- if (sel.isEmpty()) {
+ if (selection.isEmpty())
return;
+
+ if (selection.size() == 1
+ && selection.getFirstElement() instanceof CommitItem) {
+ CommitItem commitItem = (CommitItem) selection
+ .getFirstElement();
+ manager.add(createCompareAction(commitItem));
}
+
+ manager.add(createAddAction(selection));
+ }
+ };
+ }
+
+ private Action createCompareAction(final CommitItem commitItem) {
+ return new Action(UIText.CommitDialog_CompareWithHeadRevision) {
+ @Override
+ public void run() {
+ compare(commitItem);
+ }
+ };
+ }
+
+ private Action createAddAction(final IStructuredSelection selection) {
+ return new Action(UIText.CommitDialog_AddFileOnDiskToIndex) {
+ public void run() {
AddCommand addCommand = new Git(repository).add();
- for (Iterator<?> it = sel.iterator(); it.hasNext();) {
+ for (Iterator<?> it = selection.iterator(); it.hasNext();) {
CommitItem commitItem = (CommitItem) it.next();
addCommand.addFilepattern(commitItem.path);
}
@@ -1111,19 +1127,18 @@ public class CommitDialog extends TitleAreaDialog {
} catch (Exception e) {
Activator.logError(UIText.CommitDialog_ErrorAddingFiles, e);
}
- for (Iterator<?> it = sel.iterator(); it.hasNext();) {
+ for (Iterator<?> it = selection.iterator(); it.hasNext();) {
CommitItem commitItem = (CommitItem) it.next();
try {
commitItem.status = getFileStatus(commitItem.path);
} catch (IOException e) {
- Activator.logError(UIText.CommitDialog_ErrorAddingFiles, e);
+ Activator.logError(
+ UIText.CommitDialog_ErrorAddingFiles, e);
}
}
filesViewer.refresh(true);
}
- });
-
- return menu;
+ };
}
/** Retrieve file status
@@ -1226,6 +1241,16 @@ public class CommitDialog extends TitleAreaDialog {
return super.getShellStyle() | SWT.RESIZE;
}
+ private void compare(CommitItem commitItem) {
+ IFile file = findFile(commitItem.path);
+ if (file == null
+ || RepositoryProvider.getProvider(file.getProject()) == null)
+ CompareUtils
+ .compareHeadWithWorkingTree(repository, commitItem.path);
+ else
+ CompareUtils.compareHeadWithWorkspace(repository, file);
+ }
+
private IFile findFile(String path) {
URI uri = new File(repository.getWorkTree(), path).toURI();
IFile[] workspaceFiles = ResourcesPlugin.getWorkspace().getRoot()
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/uitext.properties b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/uitext.properties
index a3aa914f78..4a6f992618 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/uitext.properties
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/uitext.properties
@@ -711,6 +711,7 @@ CommitDialog_CommitAndPush=Commit and &Push
CommitDialog_CommitChanges=Commit Changes
CommitDialog_Committer=Committer:
CommitDialog_CommitMessage=Commit message
+CommitDialog_CompareWithHeadRevision=&Compare with HEAD revision
CommitDialog_DeselectAll=&Deselect All
CommitDialog_ErrorAddingFiles=Error when adding files
CommitDialog_ErrorInvalidAuthor=Invalid author

Back to the top