diff options
author | Michael Keppler | 2018-08-14 10:47:18 +0000 |
---|---|---|
committer | Matthias Sohn | 2018-09-01 23:43:05 +0000 |
commit | 154d5ce9fad497724b5c5f5213ceed7382a031bd (patch) | |
tree | 4ba03a0b8bc19df448f00a1eb3863bfac2c14022 | |
parent | 1d62358947c3fb2298851712d60fc48a54d2581e (diff) | |
download | egit-154d5ce9fad497724b5c5f5213ceed7382a031bd.tar.gz egit-154d5ce9fad497724b5c5f5213ceed7382a031bd.tar.xz egit-154d5ce9fad497724b5c5f5213ceed7382a031bd.zip |
Commit editor: Abbreviate parent SHA-1 with 7 characters
Abbreviate the parent SHA-1 with the same 7 characters used in history
and other places. Add a tooltip to show the complete value on hovering.
Add a context menu for copying the SHA-1.
Bug:537931
Change-Id: Ia0154d3904481869fb05611c746c2d6180ecb43a
Signed-off-by: Michael Keppler <Michael.Keppler@gmx.de>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
3 files changed, 80 insertions, 24 deletions
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/ClipboardUtils.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/ClipboardUtils.java new file mode 100644 index 0000000000..be74f9bcd5 --- /dev/null +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/ClipboardUtils.java @@ -0,0 +1,53 @@ +/******************************************************************************* + * Copyright (C) 2018, Michael Keppler <michael.keppler@gmx.de> + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package org.eclipse.egit.ui.internal; + +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.swt.SWTError; +import org.eclipse.swt.dnd.Clipboard; +import org.eclipse.swt.dnd.DND; +import org.eclipse.swt.dnd.TextTransfer; +import org.eclipse.swt.dnd.Transfer; +import org.eclipse.swt.widgets.Shell; + +/** + * Utility for copying to the system clipboard. + */ +public class ClipboardUtils { + private ClipboardUtils() { + // utility class + } + + /** + * Copy given SHA1 to the clipboard. Ask for retry on error. + * + * @param sha1 + * @param shell + */ + public static void copySha1ToClipboard(String sha1, Shell shell) { + Clipboard clipboard = new Clipboard(shell.getDisplay()); + try { + clipboard.setContents(new String[] { sha1 }, + new Transfer[] { TextTransfer.getInstance() }); + } catch (SWTError ex) { + if (ex.code != DND.ERROR_CANNOT_SET_CLIPBOARD) { + throw ex; + } + String title = UIText.Header_copy_SHA1_error_title; + String message = UIText.Header_copy_SHA1_error_message; + if (MessageDialog.openQuestion(shell, title, message)) { + copySha1ToClipboard(sha1, shell); + } + } finally { + clipboard.dispose(); + } + } +} diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/commit/CommitEditorPage.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/commit/CommitEditorPage.java index 89461a462d..43dc062aa2 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/commit/CommitEditorPage.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/commit/CommitEditorPage.java @@ -32,6 +32,7 @@ import org.eclipse.egit.core.AdapterUtils; import org.eclipse.egit.ui.Activator; import org.eclipse.egit.ui.UIPreferences; import org.eclipse.egit.ui.UIUtils; +import org.eclipse.egit.ui.internal.ClipboardUtils; import org.eclipse.egit.ui.internal.GitLabelProvider; import org.eclipse.egit.ui.internal.PreferenceBasedDateFormatter; import org.eclipse.egit.ui.internal.UIIcons; @@ -63,6 +64,8 @@ import org.eclipse.swt.custom.CLabel; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.FillLayout; @@ -70,6 +73,9 @@ import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Menu; +import org.eclipse.swt.widgets.MenuItem; +import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; @@ -108,7 +114,7 @@ public class CommitEditorPage extends FormPage /** * Abbreviated length of parent id links displayed */ - public static final int PARENT_LENGTH = 20; + public static final int PARENT_LENGTH = 7; private LocalResourceManager resources = new LocalResourceManager( JFaceResources.getResources()); @@ -340,10 +346,28 @@ public class CommitEditorPage extends FormPage } } }); + String sha1 = parentCommit.getName(); + link.setToolTipText(sha1); + createParentContextMenu(link, sha1); addToFocusTracking(link); } } + private void createParentContextMenu(Hyperlink link, String sha1) { + Menu contextMenu = new Menu(link); + + final MenuItem copySHA1MenuItem = new MenuItem(contextMenu, SWT.PUSH); + copySHA1MenuItem.setText(UIText.Header_contextMenu_copy_SHA1); + final Shell shell = link.getShell(); + copySHA1MenuItem.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent event) { + ClipboardUtils.copySha1ToClipboard(sha1, shell); + } + }); + link.setMenu(contextMenu); + } + @SuppressWarnings("unused") String getParentCommitLabel(int i) { return UIText.CommitEditorPage_LabelParent; diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/commit/HeaderText.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/commit/HeaderText.java index 34e6f42303..737264f5d4 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/commit/HeaderText.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/commit/HeaderText.java @@ -16,17 +16,12 @@ package org.eclipse.egit.ui.internal.commit; import java.lang.reflect.Field; import org.eclipse.egit.ui.UIUtils; +import org.eclipse.egit.ui.internal.ClipboardUtils; import org.eclipse.egit.ui.internal.UIText; -import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.text.Document; import org.eclipse.jface.text.TextViewer; import org.eclipse.swt.SWT; -import org.eclipse.swt.SWTError; import org.eclipse.swt.custom.StyledText; -import org.eclipse.swt.dnd.Clipboard; -import org.eclipse.swt.dnd.DND; -import org.eclipse.swt.dnd.TextTransfer; -import org.eclipse.swt.dnd.Transfer; import org.eclipse.swt.events.ControlAdapter; import org.eclipse.swt.events.ControlEvent; import org.eclipse.swt.events.FocusAdapter; @@ -149,7 +144,7 @@ public class HeaderText { copySHA1MenuItem.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent event) { - copyToClipboard(sha1String, shell); + ClipboardUtils.copySha1ToClipboard(sha1String, shell); } }); @@ -172,22 +167,6 @@ public class HeaderText { styledText.setMenu(menu); } - private static void copyToClipboard(String str, Shell shell) { - Clipboard clipboard= new Clipboard(shell.getDisplay()); - try { - clipboard.setContents(new String[] { str }, new Transfer[] { TextTransfer.getInstance() }); - } catch (SWTError ex) { - if (ex.code != DND.ERROR_CANNOT_SET_CLIPBOARD) - throw ex; - String title= UIText.Header_copy_SHA1_error_title; - String message= UIText.Header_copy_SHA1_error_message; - if (MessageDialog.openQuestion(shell, title, message)) - copyToClipboard(str, shell); - } finally { - clipboard.dispose(); - } - } - /** * Retrieves the {@link Control} used for the title. * |