diff options
author | Robin Stocker | 2013-11-14 23:46:12 +0000 |
---|---|---|
committer | Robin Stocker | 2013-11-14 23:46:12 +0000 |
commit | 84294240688eaff89bbf9515c2173dea0c5c8ec4 (patch) | |
tree | 7e6d4f7035e3abd0cc0a7f63b4f2f24ef5a3b85d /org.eclipse.egit.ui/src | |
parent | e958fbdab7b6ec122e75f137aa15c60e250119cf (diff) | |
download | egit-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')
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 |