From e9e5ba4bcbb8180098f0ff8f3258ed29e019ef84 Mon Sep 17 00:00:00 2001 From: Jens Baumgart Date: Fri, 23 Apr 2010 10:58:32 +0200 Subject: [PATCH] Implement compare mode toggle in history view The compare mode toggle defines the action to be executed on double click. With compare mode enabled the compare editor is launched. With compare mode disabled an editor is opened to view the selected revision. Executing Compare->With history... launches the history view with enabled compare mode (similar to CVS). Bug: 306779 Change-Id: Ie276191847b1e070dcd361606d6fc3f36468b318 Signed-off-by: Jens Baumgart --- org.eclipse.egit.ui/icons/elcl16/compare_view.gif | Bin 0 -> 224 bytes .../src/org/eclipse/egit/ui/UIIcons.java | 3 ++ .../src/org/eclipse/egit/ui/UIText.java | 3 ++ .../actions/CompareWithRevisionAction.java | 13 ++++- .../egit/ui/internal/history/GitHistoryPage.java | 58 +++++++++++++++++---- .../src/org/eclipse/egit/ui/uitext.properties | 1 + 6 files changed, 66 insertions(+), 12 deletions(-) create mode 100644 org.eclipse.egit.ui/icons/elcl16/compare_view.gif diff --git a/org.eclipse.egit.ui/icons/elcl16/compare_view.gif b/org.eclipse.egit.ui/icons/elcl16/compare_view.gif new file mode 100644 index 0000000000000000000000000000000000000000..dc549bce841c36d4e2edd0e3cd5a98f81061b995 GIT binary patch literal 224 zcwTe&bhEHb6krfwIKse?k(ey%zE098S<$*c(WXGvp-k1GRMVwe*P~9~yGhD4UDhH? z)T+WSxf-dVSKlpKpKsd;IPHk$3;MKYm}D=iOW8^#A{V22`N< zlZBCiL5e{K!~xmKz#6+it#9!HonwtEOHOngRCc|5G|TaU!Jafd)~mV(RhdT9QjC;~ zwwOqGr$!yjs5mBg!0BZW!@BfjpFErMOXL-|IvrOLn8o{7n&o!-lA_MOpygrd(Q&Z} N>8Yt1UH*y;)&K)7R6YOz literal 0 HcwPel00001 diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIIcons.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIIcons.java index 0a83187d..b3595b1c 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIIcons.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIIcons.java @@ -40,6 +40,8 @@ public class UIIcons { /** Find icon */ public static final ImageDescriptor ELCL16_FIND; + /** Compare / View icon */ + public static final ImageDescriptor ELCL16_COMPARE_VIEW; /** Next arrow icon */ public static final ImageDescriptor ELCL16_NEXT; /** Previous arrow icon */ @@ -118,6 +120,7 @@ public class UIIcons { OVR_CONFLICT = map("ovr/conflict.gif"); //$NON-NLS-1$ OVR_ASSUMEVALID = map("ovr/assume_valid.gif"); //$NON-NLS-1$ ELCL16_FIND = map("elcl16/find.gif"); //$NON-NLS-1$ + ELCL16_COMPARE_VIEW = map("elcl16/compare_view.gif"); //$NON-NLS-1$ ELCL16_NEXT = map("elcl16/next.gif"); //$NON-NLS-1$ ELCL16_PREVIOUS = map("elcl16/previous.gif"); //$NON-NLS-1$ WIZBAN_IMPORT_REPO = map("wizban/import_wiz.png"); //$NON-NLS-1$ diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIText.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIText.java index cac5ca9e..39354f1c 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIText.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIText.java @@ -184,6 +184,9 @@ public class UIText extends NLS { public static String GitDocument_errorResolveQuickdiff; /** */ + public static String GitHistoryPage_compareMode; + + /** */ public static String GitHistoryPage_CompareVersions; /** */ diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/CompareWithRevisionAction.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/CompareWithRevisionAction.java index a132a8eb..3e97ba46 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/CompareWithRevisionAction.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/CompareWithRevisionAction.java @@ -10,9 +10,13 @@ *******************************************************************************/ package org.eclipse.egit.ui.internal.actions; +import org.eclipse.egit.ui.internal.history.GitHistoryPage; import org.eclipse.jface.action.IAction; +import org.eclipse.team.internal.ui.TeamUIPlugin; import org.eclipse.team.internal.ui.actions.TeamAction; import org.eclipse.team.ui.TeamUI; +import org.eclipse.team.ui.history.IHistoryPage; +import org.eclipse.team.ui.history.IHistoryView; /** * Compare the resources filtered in the history view with the current @@ -22,7 +26,14 @@ public class CompareWithRevisionAction extends TeamAction { @Override public void execute(IAction action) { - TeamUI.getHistoryView().showHistoryFor(getSelectedResources()[0]); + IHistoryView view = TeamUI.showHistoryFor(TeamUIPlugin.getActivePage(), getSelectedResources()[0], null); + if (view == null) + return; + IHistoryPage page = view.getHistoryPage(); + if (page instanceof GitHistoryPage){ + GitHistoryPage gitHistoryPage = (GitHistoryPage) page; + gitHistoryPage.setCompareMode(true); + } } public boolean isEnabled() { diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/GitHistoryPage.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/GitHistoryPage.java index 93d77b9a..1b02dc83 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/GitHistoryPage.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/GitHistoryPage.java @@ -131,6 +131,10 @@ public class GitHistoryPage extends HistoryPage implements RepositoryListener { private IAction viewVersionsAction = new ViewVersionsAction(); + private IAction compareModeAction; + + private boolean compareMode = false; + /** * Determine if the input can be shown in this viewer. * @@ -324,6 +328,33 @@ public class GitHistoryPage extends HistoryPage implements RepositoryListener { showAllFolderVersionsAction); } + private void createCompareModeAction() { + final IToolBarManager barManager = getSite().getActionBars() + .getToolBarManager(); + compareModeAction = new Action(UIText.GitHistoryPage_compareMode, + IAction.AS_CHECK_BOX) { + public void run() { + compareMode = !compareMode; + setChecked(compareMode); + } + }; + compareModeAction.setImageDescriptor(UIIcons.ELCL16_COMPARE_VIEW); + compareModeAction.setChecked(compareMode); + compareModeAction.setToolTipText(UIText.GitHistoryPage_compareMode); + barManager.add(compareModeAction); + } + + /** + * @param compareMode + * switch compare mode button of the view on / off + */ + public void setCompareMode(boolean compareMode) { + if (compareModeAction!=null) { + this.compareMode = compareMode; + compareModeAction.setChecked(compareMode); + } + } + @Override public void createControl(final Composite parent) { GridData gd; @@ -353,17 +384,21 @@ public class GitHistoryPage extends HistoryPage implements RepositoryListener { if (!(input instanceof IFile)) { return; } - final IFile resource = (IFile) input; - final RepositoryMapping mapping = RepositoryMapping.getMapping(resource.getProject()); - final String gitPath = mapping.getRepoRelativePath(resource); - IStructuredSelection selection = (IStructuredSelection) event.getSelection(); - SWTCommit commit = (SWTCommit) selection.getFirstElement(); - ITypedElement right = getFileRevisionTypedElement(resource, gitPath, commit); - final GitCompareFileRevisionEditorInput in = new GitCompareFileRevisionEditorInput( - SaveableCompareEditorInput.createFileElement(resource), - right, - null); - openInCompare(in); + if (compareMode) { + final IFile resource = (IFile) input; + final RepositoryMapping mapping = RepositoryMapping.getMapping(resource.getProject()); + final String gitPath = mapping.getRepoRelativePath(resource); + IStructuredSelection selection = (IStructuredSelection) event.getSelection(); + SWTCommit commit = (SWTCommit) selection.getFirstElement(); + ITypedElement right = getFileRevisionTypedElement(resource, gitPath, commit); + final GitCompareFileRevisionEditorInput in = new GitCompareFileRevisionEditorInput( + SaveableCompareEditorInput.createFileElement(resource), + right, + null); + openInCompare(in); + } else { + new ViewVersionsAction().run(); + } } }); @@ -380,6 +415,7 @@ public class GitHistoryPage extends HistoryPage implements RepositoryListener { attachCommitSelectionChanged(); createLocalToolbarActions(); createResourceFilterActions(); + createCompareModeAction(); createStandardActions(); createViewMenu(); diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/uitext.properties b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/uitext.properties index 1f484415..8e2c1fdc 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/uitext.properties +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/uitext.properties @@ -66,6 +66,7 @@ GitDocument_errorLoadCommit=Could not load commit {0} for {1} corresponding to { GitDocument_errorLoadTree=Could not load tree {0} for {1} corresponding to {2} in {3} GitDocument_errorRefreshQuickdiff=Failed to refresh quickdiff GitDocument_errorResolveQuickdiff=Could not resolve quickdiff baseline {0} corresponding to {1} in {2} +GitHistoryPage_compareMode=Compare Mode GitHistoryPage_CompareVersions=Compare with each other GitHistoryPage_CompareWithWorking=Compare with working tree GitHistoryPage_errorLookingUpPath=IO error looking up path {0} in {1}. -- 2.11.4.GIT