diff options
Diffstat (limited to 'org.eclipse.egit.ui')
10 files changed, 253 insertions, 315 deletions
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 46f8da4a8e..66275dcaa4 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 @@ -1084,9 +1084,6 @@ public class UIText extends NLS { public static String ConfigureUriPage_Remove_button; /** */ - public static String CommitDialog_ValueHelp_Message; - - /** */ public static String CommitMessageViewer_author; /** */ @@ -1936,6 +1933,12 @@ public class UIText extends NLS { public static String UIIcons_errorLoadingPluginImage; /** */ + public static String UIUtils_PressShortcutMessage; + + /** */ + public static String UIUtils_StartTypingForPreviousValuesMessage; + + /** */ public static String Untrack_untrack; /** */ diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIUtils.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIUtils.java index f811992493..408db433fe 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIUtils.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIUtils.java @@ -10,18 +10,84 @@ *******************************************************************************/ package org.eclipse.egit.ui; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Pattern; +import java.util.regex.PatternSyntaxException; + +import org.eclipse.jface.bindings.keys.KeyStroke; +import org.eclipse.jface.bindings.keys.ParseException; +import org.eclipse.jface.dialogs.IDialogSettings; +import org.eclipse.jface.fieldassist.ContentProposalAdapter; import org.eclipse.jface.fieldassist.ControlDecoration; import org.eclipse.jface.fieldassist.FieldDecorationRegistry; +import org.eclipse.jface.fieldassist.IContentProposal; +import org.eclipse.jface.fieldassist.IContentProposalProvider; +import org.eclipse.jface.fieldassist.TextContentAdapter; import org.eclipse.jface.resource.FontRegistry; +import org.eclipse.osgi.util.NLS; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Text; import org.eclipse.ui.PlatformUI; /** * Some utilities for UI code */ public class UIUtils { + /** + * these activate the content assist; alphanumeric, + * space plus some expected special chars + */ + private static final char[] VALUE_HELP_ACTIVATIONCHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123457890*@ <>".toCharArray(); //$NON-NLS-1$ + + /** + * Handles a "previously used values" content assist. + * <p> + * Adding this to a text field will enable "content assist" by keeping track + * of the previously used valued for this field. The previously used values + * will be shown in the order they were last used (most recently used ones + * coming first in the list) and the number of entries is limited. + * <p> + * A "bulb" decorator will indicate that content assist is available for the + * field, and a tool tip is provided giving more information. + * <p> + * Content assist is activated by either typing in the field or by using a + * dedicated key stroke which is indicated in the tool tip. The list will be + * filtered with the content already in the text field with '*' being usable + * as wild card. + * <p> + * Note that the application must issue a call to {@link #updateProposals()} + * in order to add a new value to the "previously used values" list. + * <p> + * The list will be persisted in the plug-in dialog settings. + * + * @noextend not to be extended by clients + * @noimplement not to be implemented by clients, use + * {@link UIUtils#addPreviousValuesContentProposalToText(Text, String)} + * to create instances of this + */ + public interface IPreviousValueProposalHandler { + /** + * Updates the proposal list from the value in the text field. + * <p> + * The value will be truncated to the first 2000 characters in order to + * limit data size. + * <p> + * Note that this must be called in the UI thread, since it accesses the + * text field. + * <p> + * If the value is already in the list, it will become the first entry, + * otherwise it will be added at the beginning. Note that empty Strings + * will not be stored. The length of the list is limited, and the + * "oldest" entries will be removed once the limit is exceeded. + * <p> + * This call should only be issued if the value in the text field is + * "valid" in terms of the application. + */ + public void updateProposals(); + } /** * @param id see {@link FontRegistry#get(String)} @@ -62,4 +128,153 @@ public class UIUtils { dec.setDescriptionText(tooltip); } + /** + * Adds a "previously used values" content proposal handler to a text field. + * <p> + * The keyboard shortcut will be "M1+SPACE" and the list will be limited to + * 10 values. + * + * @param textField + * the text field + * @param preferenceKey + * the key under which to store the "previously used values" in + * the dialog settings + * @return the handler the proposal handler + */ + public static IPreviousValueProposalHandler addPreviousValuesContentProposalToText( + final Text textField, final String preferenceKey) { + KeyStroke stroke; + try { + stroke = KeyStroke.getInstance("M1+SPACE"); //$NON-NLS-1$ + addBulbDecorator(textField, NLS.bind( + UIText.UIUtils_PressShortcutMessage, stroke.format())); + } catch (ParseException e1) { + Activator.handleError(e1.getMessage(), e1, false); + stroke = null; + addBulbDecorator(textField, + UIText.UIUtils_StartTypingForPreviousValuesMessage); + } + + IContentProposalProvider cp = new IContentProposalProvider() { + + public IContentProposal[] getProposals(String contents, int position) { + + List<IContentProposal> resultList = new ArrayList<IContentProposal>(); + + // make the simplest possible pattern check: allow "*" + // for multiple characters + String patternString = contents; + // ignore spaces in the beginning + while (patternString.length() > 0 + && patternString.charAt(0) == ' ') { + patternString = patternString.substring(1); + } + + // we quote the string as it may contain spaces + // and other stuff colliding with the Pattern + patternString = Pattern.quote(patternString); + + patternString = patternString.replaceAll("\\x2A", ".*"); //$NON-NLS-1$ //$NON-NLS-2$ + + // make sure we add a (logical) * at the end + if (!patternString.endsWith(".*")) { //$NON-NLS-1$ + patternString = patternString + ".*"; //$NON-NLS-1$ + } + + // let's compile a case-insensitive pattern (assumes ASCII only) + Pattern pattern; + try { + pattern = Pattern.compile(patternString, + Pattern.CASE_INSENSITIVE); + } catch (PatternSyntaxException e) { + pattern = null; + } + + String[] proposals = org.eclipse.egit.ui.Activator.getDefault() + .getDialogSettings().getArray(preferenceKey); + + if (proposals != null) + for (final String uriString : proposals) { + + if (pattern != null + && !pattern.matcher(uriString).matches()) + continue; + + IContentProposal propsal = new IContentProposal() { + + public String getLabel() { + return null; + } + + public String getDescription() { + return null; + } + + public int getCursorPosition() { + return 0; + } + + public String getContent() { + return uriString; + } + }; + resultList.add(propsal); + } + + return resultList.toArray(new IContentProposal[resultList + .size()]); + } + }; + + ContentProposalAdapter adapter = new ContentProposalAdapter(textField, + new TextContentAdapter(), cp, stroke, + VALUE_HELP_ACTIVATIONCHARS); + // set the acceptance style to always replace the complete content + adapter + .setProposalAcceptanceStyle(ContentProposalAdapter.PROPOSAL_REPLACE); + + return new IPreviousValueProposalHandler() { + public void updateProposals() { + String value = textField.getText(); + // don't store empty values + if (value.length() > 0) { + // we don't want to save too much in the preferences + if (value.length() > 2000) { + value = value.substring(0, 1999); + } + // now we need to mix the value into the list + IDialogSettings settings = org.eclipse.egit.ui.Activator + .getDefault().getDialogSettings(); + String[] existingValues = settings.getArray(preferenceKey); + if (existingValues == null) { + existingValues = new String[] { value }; + settings.put(preferenceKey, existingValues); + } else { + + List<String> values = new ArrayList<String>( + existingValues.length + 1); + + for (String existingValue : existingValues) + values.add(existingValue); + // if it is already the first value, we don't need to do + // anything + if (values.indexOf(value) == 0) + return; + + values.remove(value); + // we insert at the top + values.add(0, value); + // make sure to not store more than the maximum number + // of values + while (values.size() > 10) + values.remove(values.size() - 1); + + settings.put(preferenceKey, values + .toArray(new String[values.size()])); + } + } + } + }; + } + } diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitCloneWizard.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitCloneWizard.java index a222eed1b8..f8123114c8 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitCloneWizard.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitCloneWizard.java @@ -1,4 +1,4 @@ -/******************************************************************************* +/******************************************************************************* * Copyright (C) 2008, Roger C. Soares <rogersoares@intelinet.com.br> * Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> * Copyright (C) 2008, Marek Zawirski <marek.zawirski@gmail.com> @@ -154,7 +154,7 @@ public class GitCloneWizard extends Wizard { protected IStatus run(final IProgressMonitor monitor) { try { op.run(monitor); - RepositorySelectionPage.saveUriInPrefs(uri.toString()); + cloneSource.saveUriInPrefs(); config.addConfiguredRepository(op.getGitDir()); return Status.OK_STATUS; } catch (InterruptedException e) { @@ -184,7 +184,7 @@ public class GitCloneWizard extends Wizard { } }); - RepositorySelectionPage.saveUriInPrefs(uri.toString()); + cloneSource.saveUriInPrefs(); config.addConfiguredRepository(op.getGitDir()); return true; } catch (InterruptedException e) { diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/components/RepositorySelectionPage.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/components/RepositorySelectionPage.java index fd79ee4721..c63a850ded 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/components/RepositorySelectionPage.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/components/RepositorySelectionPage.java @@ -18,18 +18,14 @@ import java.util.ArrayList; import java.util.List; import java.util.StringTokenizer; import java.util.regex.Pattern; -import java.util.regex.PatternSyntaxException; import org.eclipse.core.runtime.preferences.IEclipsePreferences; import org.eclipse.core.runtime.preferences.InstanceScope; import org.eclipse.egit.ui.Activator; import org.eclipse.egit.ui.UIText; import org.eclipse.egit.ui.UIUtils; +import org.eclipse.egit.ui.UIUtils.IPreviousValueProposalHandler; import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.fieldassist.ContentProposalAdapter; -import org.eclipse.jface.fieldassist.IContentProposal; -import org.eclipse.jface.fieldassist.IContentProposalProvider; -import org.eclipse.jface.fieldassist.TextContentAdapter; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.transport.RemoteConfig; @@ -57,7 +53,6 @@ import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; -import org.osgi.service.prefs.BackingStoreException; /** * Wizard page that allows the user entering the location of a remote repository @@ -138,6 +133,8 @@ public class RepositorySelectionPage extends BaseWizardPage { private Button uriButton; + private IPreviousValueProposalHandler uriProposalHandler; + /** * Create repository selection page, allowing user specifying URI or * (optionally) choosing from preconfigured remotes list. @@ -328,7 +325,7 @@ public class RepositorySelectionPage extends BaseWizardPage { } }); - addContentProposalToUriText(uriText); + uriProposalHandler = UIUtils.addPreviousValuesContentProposalToText(uriText, USED_URIS_PREF); Button browseButton = new Button(g, SWT.NULL); browseButton.setText(UIText.RepositorySelectionPage_BrowseLocalFile); @@ -744,43 +741,12 @@ public class RepositorySelectionPage extends BaseWizardPage { uriText.setFocus(); } + /** - * Adds a URI string to the list of previously added ones - * - * TODO move this to some proper preferences handling class instead of - * making it static - * - * @param stringToAdd + * Updates the proposal list for the URI field */ - public static void saveUriInPrefs(String stringToAdd) { - - List<String> uriStrings = getUrisFromPrefs(); - - if (uriStrings.indexOf(stringToAdd) == 0) - return; - uriStrings.add(0, stringToAdd); - - IEclipsePreferences prefs = new InstanceScope().getNode(Activator - .getPluginId()); - - StringBuilder sb = new StringBuilder(); - StringBuilder lb = new StringBuilder(); - - // there is no "good" separator for URIish, so we - // keep track of the URI lengths separately - for (String uriString : uriStrings) { - sb.append(uriString); - lb.append(uriString.length()); - lb.append(" "); //$NON-NLS-1$ - } - prefs.put(USED_URIS_PREF, sb.toString()); - prefs.put(USED_URIS_LENGTH_PREF, lb.toString()); - - try { - prefs.flush(); - } catch (BackingStoreException e) { - // we simply ignore this here - } + public void saveUriInPrefs() { + uriProposalHandler.updateProposals(); } /** @@ -829,76 +795,6 @@ public class RepositorySelectionPage extends BaseWizardPage { setEnabledRecursively(child, enable); } - private void addContentProposalToUriText(Text uriTextField) { - - UIUtils.addBulbDecorator(uriTextField, UIText.RepositorySelectionPage_ShowPreviousURIs_HoverText); - - IContentProposalProvider cp = new IContentProposalProvider() { - - public IContentProposal[] getProposals(String contents, int position) { - - List<IContentProposal> resultList = new ArrayList<IContentProposal>(); - - String patternString = contents; - while (patternString.length() > 0 - && patternString.charAt(0) == ' ') - patternString = patternString.substring(1); - // make the simplest possible pattern check: allow "*" - // for multiple characters - patternString = patternString.replaceAll("\\x2A", ".*"); //$NON-NLS-1$ //$NON-NLS-2$ - // make sure we add a (logical) * at the end - if (!patternString.endsWith(".*")) { //$NON-NLS-1$ - patternString = patternString + ".*"; //$NON-NLS-1$ - } - // let's compile a case-insensitive pattern (assumes ASCII only) - Pattern pattern; - try { - pattern = Pattern.compile(patternString, - Pattern.CASE_INSENSITIVE); - } catch (PatternSyntaxException e) { - pattern = null; - } - - List<String> uriStrings = getUrisFromPrefs(); - for (final String uriString : uriStrings) { - - if (pattern != null - && !pattern.matcher(uriString).matches()) - continue; - - IContentProposal propsal = new IContentProposal() { - - public String getLabel() { - return null; - } - - public String getDescription() { - return null; - } - - public int getCursorPosition() { - return 0; - } - - public String getContent() { - return uriString; - } - }; - resultList.add(propsal); - } - - return resultList.toArray(new IContentProposal[resultList - .size()]); - } - }; - - // set the acceptance style to always replace the complete content - new ContentProposalAdapter(uriTextField, new TextContentAdapter(), cp, - null, null) - .setProposalAcceptanceStyle(ContentProposalAdapter.PROPOSAL_REPLACE); - - } - private void updateFields(final String text) { try { eventDepth++; 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 2b0806c519..3970643a39 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 @@ -19,36 +19,24 @@ import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; -import java.util.List; -import java.util.regex.Pattern; -import java.util.regex.PatternSyntaxException; import org.eclipse.compare.CompareUI; import org.eclipse.compare.ITypedElement; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.Assert; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; import org.eclipse.egit.core.Activator; import org.eclipse.egit.core.GitProvider; import org.eclipse.egit.core.internal.storage.GitFileHistoryProvider; - import org.eclipse.egit.core.project.RepositoryMapping; import org.eclipse.egit.ui.UIText; +import org.eclipse.egit.ui.UIUtils; +import org.eclipse.egit.ui.UIUtils.IPreviousValueProposalHandler; import org.eclipse.egit.ui.internal.GitCompareFileRevisionEditorInput; -import org.eclipse.jface.bindings.keys.KeyStroke; -import org.eclipse.jface.bindings.keys.ParseException; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.fieldassist.ContentProposalAdapter; -import org.eclipse.jface.fieldassist.ControlDecoration; -import org.eclipse.jface.fieldassist.FieldDecorationRegistry; -import org.eclipse.jface.fieldassist.IContentProposal; -import org.eclipse.jface.fieldassist.IContentProposalProvider; -import org.eclipse.jface.fieldassist.TextContentAdapter; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.viewers.CheckboxTableViewer; import org.eclipse.jface.viewers.IStructuredContentProvider; @@ -57,7 +45,14 @@ import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerComparator; import org.eclipse.jface.viewers.ViewerFilter; -import org.eclipse.osgi.util.NLS; +import org.eclipse.jgit.lib.Commit; +import org.eclipse.jgit.lib.Constants; +import org.eclipse.jgit.lib.GitIndex; +import org.eclipse.jgit.lib.PersonIdent; +import org.eclipse.jgit.lib.Repository; +import org.eclipse.jgit.lib.Tree; +import org.eclipse.jgit.lib.TreeEntry; +import org.eclipse.jgit.lib.GitIndex.Entry; import org.eclipse.swt.SWT; import org.eclipse.swt.events.KeyAdapter; import org.eclipse.swt.events.KeyEvent; @@ -86,14 +81,6 @@ import org.eclipse.team.core.history.IFileHistoryProvider; import org.eclipse.team.core.history.IFileRevision; import org.eclipse.team.internal.ui.history.FileRevisionTypedElement; import org.eclipse.ui.model.WorkbenchLabelProvider; -import org.eclipse.jgit.lib.Commit; -import org.eclipse.jgit.lib.Constants; -import org.eclipse.jgit.lib.GitIndex; -import org.eclipse.jgit.lib.PersonIdent; -import org.eclipse.jgit.lib.Repository; -import org.eclipse.jgit.lib.Tree; -import org.eclipse.jgit.lib.TreeEntry; -import org.eclipse.jgit.lib.GitIndex.Entry; /** * Dialog is shown to user when they request to commit files. Changes in the @@ -160,10 +147,6 @@ public class CommitDialog extends Dialog { ArrayList<CommitItem> items = new ArrayList<CommitItem>(); - // these activate the value help on author/committer fields; alphanumeric, - // space plus some expected special chars - private static final char[] VALUE_HELP_ACTIVATIONCHARS = "abcdefghijklmnopqrstuvwxyz0123457890*@ <>".toCharArray(); //$NON-NLS-1$ - private static final String COMMITTER_VALUES_PREF = "CommitDialog.committerValues"; //$NON-NLS-1$ private static final String AUTHOR_VALUES_PREF = "CommitDialog.authorValues"; //$NON-NLS-1$ @@ -238,7 +221,7 @@ public class CommitDialog extends Dialog { if (author != null) authorText.setText(author); - addContentProposalToText(authorText, AUTHOR_VALUES_PREF); + authorHandler = UIUtils.addPreviousValuesContentProposalToText(authorText, AUTHOR_VALUES_PREF); new Label(container, SWT.LEFT).setText(UIText.CommitDialog_Committer); committerText = new Text(container, SWT.BORDER); committerText.setLayoutData(GridDataFactory.fillDefaults().grab(true, false).create()); @@ -259,7 +242,7 @@ public class CommitDialog extends Dialog { } }); - addContentProposalToText(committerText, COMMITTER_VALUES_PREF); + committerHandler = UIUtils.addPreviousValuesContentProposalToText(committerText, COMMITTER_VALUES_PREF); amendingButton = new Button(container, SWT.CHECK); if (amending) { @@ -575,6 +558,9 @@ public class CommitDialog extends Dialog { private ArrayList<IFile> selectedFiles = new ArrayList<IFile>(); private String previousCommitMessage = ""; //$NON-NLS-1$ + private IPreviousValueProposalHandler authorHandler; + private IPreviousValueProposalHandler committerHandler; + /** * Pre-select suggested set of resources to commit @@ -738,8 +724,8 @@ public class CommitDialog extends Dialog { return; } - addValueToPrefs(author, AUTHOR_VALUES_PREF); - addValueToPrefs(committer, COMMITTER_VALUES_PREF); + authorHandler.updateProposals(); + committerHandler.updateProposals(); IDialogSettings settings = org.eclipse.egit.ui.Activator .getDefault().getDialogSettings(); @@ -747,41 +733,6 @@ public class CommitDialog extends Dialog { super.okPressed(); } - private void addValueToPrefs(String value, String prefsName) { - // don't store empty values - if (value.length() > 0) { - // we need to mix the value in - IDialogSettings settings = org.eclipse.egit.ui.Activator - .getDefault().getDialogSettings(); - String[] existingValues = settings.getArray(prefsName); - if (existingValues == null) { - existingValues = new String[] { value }; - settings.put(prefsName, existingValues); - } else { - - List<String> values = new ArrayList<String>( - existingValues.length + 1); - - for (String existingValue : existingValues) - values.add(existingValue); - // if it is already the first value, we don't need to do - // anything - if (values.indexOf(value) == 0) - return; - - values.remove(value); - // we insert at the top - values.add(0, value); - - while (values.size() > 10) - values.remove(values.size() - 1); - - settings.put(prefsName, values - .toArray(new String[values.size()])); - } - } - } - /** * Set the total list of changed resources, including additions and * removals @@ -905,112 +856,6 @@ public class CommitDialog extends Dialog { protected int getShellStyle() { return super.getShellStyle() | SWT.RESIZE; } - - private void addContentProposalToText(Text textField, - final String preferenceKey) { - - KeyStroke stroke; - try { - stroke = KeyStroke.getInstance("M1+SPACE"); //$NON-NLS-1$ - } catch (ParseException e1) { - org.eclipse.egit.ui.Activator.getDefault().getLog().log( - new Status(IStatus.ERROR, org.eclipse.egit.ui.Activator - .getPluginId(), e1.getMessage(), e1)); - return; - } - - ControlDecoration dec = new ControlDecoration(textField, SWT.TOP - | SWT.LEFT); - - dec.setImage(FieldDecorationRegistry.getDefault().getFieldDecoration( - FieldDecorationRegistry.DEC_CONTENT_PROPOSAL).getImage()); - - dec.setShowOnlyOnFocus(true); - dec.setShowHover(true); - - dec.setDescriptionText(NLS.bind(UIText.CommitDialog_ValueHelp_Message, - stroke.format())); - - IContentProposalProvider cp = new IContentProposalProvider() { - - public IContentProposal[] getProposals(String contents, int position) { - - List<IContentProposal> resultList = new ArrayList<IContentProposal>(); - - // make the simplest possible pattern check: allow "*" - // for multiple characters - String patternString = contents; - // ignore spaces in the beginning - while (patternString.length() > 0 - && patternString.charAt(0) == ' ') { - patternString = patternString.substring(1); - } - - // we quote the string as it may contain spaces - // and other stuff colliding with the Pattern - patternString = Pattern.quote(patternString); - - patternString = patternString.replaceAll("\\x2A", ".*"); //$NON-NLS-1$ //$NON-NLS-2$ - - // make sure we add a (logical) * at the end - if (!patternString.endsWith(".*")) { //$NON-NLS-1$ - patternString = patternString + ".*"; //$NON-NLS-1$ - } - - // let's compile a case-insensitive pattern (assumes ASCII only) - Pattern pattern; - try { - pattern = Pattern.compile(patternString, - Pattern.CASE_INSENSITIVE); - } catch (PatternSyntaxException e) { - pattern = null; - } - - String[] proposals = org.eclipse.egit.ui.Activator.getDefault() - .getDialogSettings().getArray(preferenceKey); - - if (proposals != null) - for (final String uriString : proposals) { - - if (pattern != null - && !pattern.matcher(uriString).matches()) - continue; - - IContentProposal propsal = new IContentProposal() { - - public String getLabel() { - return null; - } - - public String getDescription() { - return null; - } - - public int getCursorPosition() { - return 0; - } - - public String getContent() { - return uriString; - } - }; - resultList.add(propsal); - } - - return resultList.toArray(new IContentProposal[resultList - .size()]); - } - }; - - ContentProposalAdapter adapter = new ContentProposalAdapter(textField, - new TextContentAdapter(), cp, stroke, - VALUE_HELP_ACTIVATIONCHARS); - // set the acceptance style to always replace the complete content - adapter - .setProposalAcceptanceStyle(ContentProposalAdapter.PROPOSAL_REPLACE); - - } - } class CommitItem { diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/fetch/FetchWizard.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/fetch/FetchWizard.java index 33eb228e39..00d5fbdc01 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/fetch/FetchWizard.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/fetch/FetchWizard.java @@ -118,7 +118,7 @@ public class FetchWizard extends Wizard { fetchJob.setUser(true); fetchJob.schedule(); - RepositorySelectionPage.saveUriInPrefs(repoPage.getSelection().getURI().toString()); + repoPage.saveUriInPrefs(); return true; } diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/push/PushWizard.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/push/PushWizard.java index 89de38d3c7..37335b3625 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/push/PushWizard.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/push/PushWizard.java @@ -125,7 +125,7 @@ public class PushWizard extends Wizard { job.setUser(true); job.schedule(); - RepositorySelectionPage.saveUriInPrefs(repoPage.getSelection().getURI().toString()); + repoPage.saveUriInPrefs(); return true; } diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/ConfigureRemoteWizard.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/ConfigureRemoteWizard.java index 9cbb9c5f46..7d9ff908b5 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/ConfigureRemoteWizard.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/ConfigureRemoteWizard.java @@ -16,7 +16,6 @@ import java.net.URISyntaxException; import org.eclipse.egit.ui.UIText; import org.eclipse.egit.ui.internal.components.RefSpecPage; import org.eclipse.egit.ui.internal.components.RepositorySelection; -import org.eclipse.egit.ui.internal.components.RepositorySelectionPage; import org.eclipse.jface.wizard.IWizardPage; import org.eclipse.jface.wizard.Wizard; import org.eclipse.jgit.lib.Repository; @@ -160,16 +159,6 @@ public class ConfigureRemoteWizard extends Wizard { try { myConfiguration.save(); - - // Save the uris in the RepositorySelectionPage preferences - - for (URIish uri: myRemoteConfiguration.getURIs()) - RepositorySelectionPage.saveUriInPrefs(uri.toPrivateString()); - - for (URIish uri: myRemoteConfiguration.getPushURIs()) - RepositorySelectionPage.saveUriInPrefs(uri.toPrivateString()); - - return true; } catch (IOException e) { // TODO better Exception handling diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/NewRemoteWizard.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/NewRemoteWizard.java index b25077eb76..793324fa2a 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/NewRemoteWizard.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/NewRemoteWizard.java @@ -16,7 +16,6 @@ import java.net.URISyntaxException; import org.eclipse.egit.ui.UIText; import org.eclipse.egit.ui.internal.components.RefSpecPage; import org.eclipse.egit.ui.internal.components.RepositorySelection; -import org.eclipse.egit.ui.internal.components.RepositorySelectionPage; import org.eclipse.jface.wizard.IWizardPage; import org.eclipse.jface.wizard.Wizard; import org.eclipse.jgit.lib.Repository; @@ -145,15 +144,6 @@ public class NewRemoteWizard extends Wizard { try { myConfiguration.save(); - - // Save the uris in the RepositorySelectionPage preferences - - for (URIish uri : config.getURIs()) - RepositorySelectionPage.saveUriInPrefs(uri.toPrivateString()); - - for (URIish uri : config.getPushURIs()) - RepositorySelectionPage.saveUriInPrefs(uri.toPrivateString()); - return true; } catch (IOException e) { // TODO better Exception handling 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 9269fee2cc..fe688161be 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 @@ -369,8 +369,6 @@ CommitDialog_StatusRemoved=Removed CommitDialog_StatusRemovedNotStaged=Rem., not staged CommitDialog_StatusUnknown=Unknown CommitDialog_StatusUntracked=Untracked -CommitDialog_ValueHelp_Message=Press {0} to see previously used values (use "*" as wildcard) - ConfigureKeysDialog_AddStandardButton=Add standard keys ConfigureKeysDialog_AlreadyThere_Message=Key {0} is alredy in the list ConfigureKeysDialog_DeleteButton=Delete @@ -686,6 +684,8 @@ MixedResetToRevisionAction_mixedReset=Mixed Reset UIIcons_errorDeterminingIconBase=Can't determine icon base. UIIcons_errorLoadingPluginImage=Can't load plugin image. +UIUtils_PressShortcutMessage=Press {0} or begin typing to see a filtered list of previously used values (use "*" as wildcard) +UIUtils_StartTypingForPreviousValuesMessage=Start typing to see a filtered list of previously used values (use "*" as wildcard) Untrack_untrack=Untrack Update_update=Update |