Bug 567062 - [Quicksearch] Configurable max results limit and label

Addendum to previous commit 34b30bce9608a8fab1e06c12fe14e609c0ccb660
Adds explanation of the semantic of the new "max Results" field.
Refactoring of the preference fields tooltips to more obvious info
decorators.

Change-Id: I99aa5568bd8e254055c8c1736ac46e07017f13de
Signed-off-by: Julian Ruppel <julian.ruppel@sap.com>
Reviewed-on: https://git.eclipse.org/r/c/platform/eclipse.platform.text/+/179834
Tested-by: Platform Bot <platform-bot@eclipse.org>
Reviewed-by: Mickael Istria <mistria@redhat.com>
diff --git a/org.eclipse.text.quicksearch/src/org/eclipse/text/quicksearch/internal/ui/Messages.java b/org.eclipse.text.quicksearch/src/org/eclipse/text/quicksearch/internal/ui/Messages.java
index 67f236d..b1dc47b 100644
--- a/org.eclipse.text.quicksearch/src/org/eclipse/text/quicksearch/internal/ui/Messages.java
+++ b/org.eclipse.text.quicksearch/src/org/eclipse/text/quicksearch/internal/ui/Messages.java
@@ -21,6 +21,7 @@
 	public static String QuickSearchPreferencesPage_Tooltip_Names;
 	public static String QuickSearchPreferencesPage_MaxLineLength;
 	public static String QuickSearchPreferencesPage_Tooltip_MaxLineLength;
+	public static String QuickSearchPreferencesPage_Tooltip_MaxResults;
 	public static String QuickSearchPreferencesPage_MaxResults;
 	public static String QuickSearchPreferencesPage_Ignored_Extensions;
 	public static String QuickSearchPreferencesPage_Ignored_Prefixes;
diff --git a/org.eclipse.text.quicksearch/src/org/eclipse/text/quicksearch/internal/ui/QuickSearchPreferencesPage.java b/org.eclipse.text.quicksearch/src/org/eclipse/text/quicksearch/internal/ui/QuickSearchPreferencesPage.java
index 04f51ae..3b4ca05 100644
--- a/org.eclipse.text.quicksearch/src/org/eclipse/text/quicksearch/internal/ui/QuickSearchPreferencesPage.java
+++ b/org.eclipse.text.quicksearch/src/org/eclipse/text/quicksearch/internal/ui/QuickSearchPreferencesPage.java
@@ -12,9 +12,12 @@
  *******************************************************************************/
 package org.eclipse.text.quicksearch.internal.ui;
 
+import org.eclipse.jface.fieldassist.ControlDecoration;
+import org.eclipse.jface.fieldassist.FieldDecorationRegistry;
 import org.eclipse.jface.preference.FieldEditorPreferencePage;
 import org.eclipse.jface.preference.IntegerFieldEditor;
 import org.eclipse.jface.preference.StringFieldEditor;
+import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Text;
@@ -34,41 +37,44 @@
 	public void init(IWorkbench workbench) {
 	}
 
-	private static final String[] prefsKeys = {
-			QuickSearchPreferences.IGNORED_EXTENSIONS,
-			QuickSearchPreferences.IGNORED_PREFIXES,
-			QuickSearchPreferences.IGNORED_NAMES
-	};
+	private static final String[] prefsKeys = { QuickSearchPreferences.IGNORED_EXTENSIONS,
+			QuickSearchPreferences.IGNORED_PREFIXES, QuickSearchPreferences.IGNORED_NAMES };
 
-	private static final String[] fieldLabels = {
-			Messages.QuickSearchPreferencesPage_Ignored_Extensions, Messages.QuickSearchPreferencesPage_Ignored_Prefixes, Messages.QuickSearchPreferencesPage_Ignored_Names
-	};
+	private static final String[] fieldLabels = { Messages.QuickSearchPreferencesPage_Ignored_Extensions,
+			Messages.QuickSearchPreferencesPage_Ignored_Prefixes, Messages.QuickSearchPreferencesPage_Ignored_Names };
 
-	private static final String[] toolTips = {
-			Messages.QuickSearchPreferencesPage_Tooltip_Extensions
-		,
-			Messages.QuickSearchPreferencesPage_Tooltip_Prefixes
-		,
-			Messages.QuickSearchPreferencesPage_Tooltip_Names
-	};
+	private static final String[] toolTips = { Messages.QuickSearchPreferencesPage_Tooltip_Extensions,
+			Messages.QuickSearchPreferencesPage_Tooltip_Prefixes, Messages.QuickSearchPreferencesPage_Tooltip_Names };
 
 	@Override
 	protected void createFieldEditors() {
-		IntegerFieldEditor fieldMaxLineLen = new IntegerFieldEditor(QuickSearchPreferences.MAX_LINE_LEN, Messages.QuickSearchPreferencesPage_MaxLineLength, getFieldEditorParent());
-		fieldMaxLineLen.getTextControl(getFieldEditorParent()).setToolTipText(
-				Messages.QuickSearchPreferencesPage_Tooltip_MaxLineLength);
+		IntegerFieldEditor fieldMaxLineLen = new IntegerFieldEditor(QuickSearchPreferences.MAX_LINE_LEN,
+				Messages.QuickSearchPreferencesPage_MaxLineLength, getFieldEditorParent());
 		addField(fieldMaxLineLen);
+		ControlDecoration maxLengthFieldDecoration = new ControlDecoration(fieldMaxLineLen.getTextControl(getFieldEditorParent()), SWT.LEFT | SWT.TOP);
+		maxLengthFieldDecoration.setDescriptionText(Messages.QuickSearchPreferencesPage_Tooltip_MaxLineLength);
+		maxLengthFieldDecoration.setImage(FieldDecorationRegistry.getDefault().getFieldDecoration(FieldDecorationRegistry.DEC_INFORMATION)
+				.getImage());
 
-		IntegerFieldEditor fieldMaxResults = new IntegerFieldEditor(QuickSearchPreferences.MAX_RESULTS, Messages.QuickSearchPreferencesPage_MaxResults, getFieldEditorParent());
+		IntegerFieldEditor fieldMaxResults = new IntegerFieldEditor(QuickSearchPreferences.MAX_RESULTS,
+				Messages.QuickSearchPreferencesPage_MaxResults, getFieldEditorParent());
 		addField(fieldMaxResults);
+		ControlDecoration maxResultsFieldDecoration = new ControlDecoration(fieldMaxResults.getTextControl(getFieldEditorParent()), SWT.LEFT | SWT.TOP);
+		maxResultsFieldDecoration.setDescriptionText(Messages.QuickSearchPreferencesPage_Tooltip_MaxResults);
+		maxResultsFieldDecoration.setImage(FieldDecorationRegistry.getDefault().getFieldDecoration(FieldDecorationRegistry.DEC_INFORMATION)
+				.getImage());
 
 		for (int i = 0; i < fieldLabels.length; i++) {
 			final String tooltip = toolTips[i];
-			StringFieldEditor field = new StringFieldEditor(prefsKeys[i], fieldLabels[i], StringFieldEditor.UNLIMITED, 5, StringFieldEditor.VALIDATE_ON_FOCUS_LOST, getFieldEditorParent()) {
+			StringFieldEditor field = new StringFieldEditor(prefsKeys[i], fieldLabels[i], StringFieldEditor.UNLIMITED,
+					5, StringFieldEditor.VALIDATE_ON_FOCUS_LOST, getFieldEditorParent()) {
 				@Override
 				protected Text createTextWidget(Composite parent) {
 					Text w = super.createTextWidget(parent);
-					w.setToolTipText(tooltip);
+					ControlDecoration fieldDecoration = new ControlDecoration(w, SWT.LEFT | SWT.TOP);
+					fieldDecoration.setDescriptionText(tooltip);
+					fieldDecoration.setImage(FieldDecorationRegistry.getDefault().getFieldDecoration(FieldDecorationRegistry.DEC_INFORMATION)
+							.getImage());
 					return w;
 				}
 
diff --git a/org.eclipse.text.quicksearch/src/org/eclipse/text/quicksearch/internal/ui/messages.properties b/org.eclipse.text.quicksearch/src/org/eclipse/text/quicksearch/internal/ui/messages.properties
index 8719f33..796a357 100644
--- a/org.eclipse.text.quicksearch/src/org/eclipse/text/quicksearch/internal/ui/messages.properties
+++ b/org.eclipse.text.quicksearch/src/org/eclipse/text/quicksearch/internal/ui/messages.properties
@@ -1,8 +1,9 @@
-QuickSearchPreferencesPage_Tooltip_Extensions=Enter a list of file extensions. Elements in the list can be separated by commas or newlines. Any file or folder ending with one of the extensions will be ignored.
-QuickSearchPreferencesPage_Tooltip_Prefixes=Enter a list of file prefixes. Elements in the list can be separated by commas or newlines. Any file or folder who's name begins with one of the prefixes will be ignored.
-QuickSearchPreferencesPage_Tooltip_Names=Enter a list of file names. Elements in the list can be separated by commas or newlines. Any file or folder who's name equals one of the listed names will be ignored.
+QuickSearchPreferencesPage_Tooltip_Extensions=Enter a list of file extensions.\nElements in the list can be separated by commas or newlines. Any file or folder ending with one of the extensions will be ignored.
+QuickSearchPreferencesPage_Tooltip_Prefixes=Enter a list of file prefixes.\nElements in the list can be separated by commas or newlines. Any file or folder who's name begins with one of the prefixes will be ignored.
+QuickSearchPreferencesPage_Tooltip_Names=Enter a list of file names.\nElements in the list can be separated by commas or newlines. Any file or folder who's name equals one of the listed names will be ignored.
 QuickSearchPreferencesPage_MaxLineLength=Max Line Length
-QuickSearchPreferencesPage_Tooltip_MaxLineLength=When QuickSearch encounters a line of text longer than 'Max Line Length' it stops searching the current file. This is meant to avoid searching in machine generated text files, such as minified JavaScript.
+QuickSearchPreferencesPage_Tooltip_MaxLineLength=When QuickSearch encounters a line of text longer than 'Max Line Length' it stops searching the current file.\nThis is meant to avoid searching in machine generated text files, such as minified JavaScript.
+QuickSearchPreferencesPage_Tooltip_MaxResults=If number of accumulated results reaches this limit the search will be suspended.\nNote that more results may still arrive beyond the limit since the searcher does suspend a search in the middle of a file.
 QuickSearchPreferencesPage_MaxResults=Max Results
 QuickSearchPreferencesPage_Ignored_Extensions=Ignored Extensions
 QuickSearchPreferencesPage_Ignored_Prefixes=Ignored Prefixes