Index: editor/tools/plugins/com.google.dart.tools.search/src/com/google/dart/tools/search/internal/ui/text/ReplaceConfigurationPage.java |
=================================================================== |
--- editor/tools/plugins/com.google.dart.tools.search/src/com/google/dart/tools/search/internal/ui/text/ReplaceConfigurationPage.java (revision 0) |
+++ editor/tools/plugins/com.google.dart.tools.search/src/com/google/dart/tools/search/internal/ui/text/ReplaceConfigurationPage.java (revision 0) |
@@ -0,0 +1,226 @@ |
+/* |
+ * Copyright (c) 2012, the Dart project authors. |
+ * |
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except |
+ * in compliance with the License. You may obtain a copy of the License at |
+ * |
+ * http://www.eclipse.org/legal/epl-v10.html |
+ * |
+ * Unless required by applicable law or agreed to in writing, software distributed under the License |
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express |
+ * or implied. See the License for the specific language governing permissions and limitations under |
+ * the License. |
+ */ |
+package com.google.dart.tools.search.internal.ui.text; |
+ |
+import com.google.dart.tools.search.internal.core.text.PatternConstructor; |
+import com.google.dart.tools.search.internal.ui.ISearchHelpContextIds; |
+import com.google.dart.tools.search.internal.ui.Messages; |
+import com.google.dart.tools.search.internal.ui.SearchMessages; |
+import com.google.dart.tools.search.internal.ui.SearchPlugin; |
+ |
+import org.eclipse.jface.dialogs.Dialog; |
+import org.eclipse.jface.dialogs.IDialogSettings; |
+import org.eclipse.jface.fieldassist.ComboContentAdapter; |
+import org.eclipse.jface.text.FindReplaceDocumentAdapterContentProposalProvider; |
+import org.eclipse.jface.wizard.IWizardPage; |
+import org.eclipse.ltk.core.refactoring.RefactoringStatus; |
+import org.eclipse.ltk.ui.refactoring.UserInputWizardPage; |
+import org.eclipse.swt.SWT; |
+import org.eclipse.swt.events.ModifyEvent; |
+import org.eclipse.swt.events.ModifyListener; |
+import org.eclipse.swt.events.SelectionAdapter; |
+import org.eclipse.swt.events.SelectionEvent; |
+import org.eclipse.swt.layout.GridData; |
+import org.eclipse.swt.layout.GridLayout; |
+import org.eclipse.swt.widgets.Button; |
+import org.eclipse.swt.widgets.Combo; |
+import org.eclipse.swt.widgets.Composite; |
+import org.eclipse.swt.widgets.Label; |
+import org.eclipse.swt.widgets.Text; |
+import org.eclipse.ui.PlatformUI; |
+import org.eclipse.ui.fieldassist.ContentAssistCommandAdapter; |
+import org.eclipse.ui.texteditor.ITextEditorActionDefinitionIds; |
+ |
+import java.util.ArrayList; |
+import java.util.regex.PatternSyntaxException; |
+ |
+public class ReplaceConfigurationPage extends UserInputWizardPage { |
+ |
+ private static final String SETTINGS_GROUP = "ReplaceDialog2"; //$NON-NLS-1$ |
+ private static final String SETTINGS_REPLACE_WITH = "replace_with"; //$NON-NLS-1$ |
+ |
+ private final ReplaceRefactoring fReplaceRefactoring; |
+ |
+ private Combo fTextField; |
+ private Button fReplaceWithRegex; |
+ private Label fStatusLabel; |
+ private ContentAssistCommandAdapter fTextFieldContentAssist; |
+ |
+ public ReplaceConfigurationPage(ReplaceRefactoring refactoring) { |
+ super("ReplaceConfigurationPage"); //$NON-NLS-1$ |
+ fReplaceRefactoring = refactoring; |
+ } |
+ |
+ @Override |
+ public void createControl(Composite parent) { |
+ Composite result = new Composite(parent, SWT.NONE); |
+ GridLayout layout = new GridLayout(2, false); |
+ result.setLayout(layout); |
+ |
+ Label description = new Label(result, SWT.NONE); |
+ int numberOfMatches = fReplaceRefactoring.getNumberOfMatches(); |
+ int numberOfFiles = fReplaceRefactoring.getNumberOfFiles(); |
+ String[] arguments = {String.valueOf(numberOfMatches), String.valueOf(numberOfFiles)}; |
+ if (numberOfMatches > 1 && numberOfFiles > 1) { |
+ description.setText(Messages.format( |
+ SearchMessages.ReplaceConfigurationPage_description_many_in_many, |
+ arguments)); |
+ } else if (numberOfMatches == 1) { |
+ description.setText(SearchMessages.ReplaceConfigurationPage_description_one_in_one); |
+ } else { |
+ description.setText(Messages.format( |
+ SearchMessages.ReplaceConfigurationPage_description_many_in_one, |
+ arguments)); |
+ } |
+ description.setLayoutData(new GridData(GridData.BEGINNING, GridData.CENTER, false, false, 2, 1)); |
+ |
+ FileSearchQuery query = fReplaceRefactoring.getQuery(); |
+ |
+ Label label1 = new Label(result, SWT.NONE); |
+ label1.setText(SearchMessages.ReplaceConfigurationPage_replace_label); |
+ |
+ Text clabel = new Text(result, SWT.BORDER | SWT.READ_ONLY); |
+ clabel.setText(query.getSearchString()); |
+ GridData gd = new GridData(GridData.FILL_HORIZONTAL); |
+ gd.widthHint = convertWidthInCharsToPixels(50); |
+ clabel.setLayoutData(gd); |
+ |
+ Label label2 = new Label(result, SWT.NONE); |
+ label2.setText(SearchMessages.ReplaceConfigurationPage_with_label); |
+ |
+ fTextField = new Combo(result, SWT.DROP_DOWN); |
+ gd = new GridData(GridData.FILL_HORIZONTAL); |
+ gd.widthHint = convertWidthInCharsToPixels(50); |
+ fTextField.setLayoutData(gd); |
+ fTextField.setFocus(); |
+ fTextField.addModifyListener(new ModifyListener() { |
+ @Override |
+ public void modifyText(ModifyEvent e) { |
+ updateOKStatus(); |
+ } |
+ }); |
+ |
+ IDialogSettings settings = SearchPlugin.getDefault().getDialogSettings().getSection( |
+ SETTINGS_GROUP); |
+ if (settings != null) { |
+ String[] previousReplaceWith = settings.getArray(SETTINGS_REPLACE_WITH); |
+ if (previousReplaceWith != null) { |
+ fTextField.setItems(previousReplaceWith); |
+ fTextField.select(0); |
+ } |
+ } |
+ |
+ ComboContentAdapter contentAdapter = new ComboContentAdapter(); |
+ FindReplaceDocumentAdapterContentProposalProvider replaceProposer = new FindReplaceDocumentAdapterContentProposalProvider( |
+ false); |
+ fTextFieldContentAssist = new ContentAssistCommandAdapter( |
+ fTextField, |
+ contentAdapter, |
+ replaceProposer, |
+ ITextEditorActionDefinitionIds.CONTENT_ASSIST_PROPOSALS, |
+ new char[0], |
+ true); |
+ |
+ new Label(result, SWT.NONE); |
+ fReplaceWithRegex = new Button(result, SWT.CHECK); |
+ fReplaceWithRegex.setText(SearchMessages.ReplaceConfigurationPage_isRegex_label); |
+ fReplaceWithRegex.addSelectionListener(new SelectionAdapter() { |
+ @Override |
+ public void widgetSelected(SelectionEvent e) { |
+ setContentAssistsEnablement(fReplaceWithRegex.getSelection()); |
+ } |
+ }); |
+ if (query.isRegexSearch()) { |
+ fReplaceWithRegex.setSelection(true); |
+ } else { |
+ fReplaceWithRegex.setSelection(false); |
+ fReplaceWithRegex.setEnabled(false); |
+ } |
+ |
+ fStatusLabel = new Label(result, SWT.NULL); |
+ gd = new GridData(GridData.FILL_HORIZONTAL); |
+ gd.verticalAlignment = SWT.BOTTOM; |
+ gd.horizontalSpan = 2; |
+ fStatusLabel.setLayoutData(gd); |
+ |
+ setContentAssistsEnablement(fReplaceWithRegex.getSelection()); |
+ |
+ setControl(result); |
+ |
+ Dialog.applyDialogFont(result); |
+ |
+ PlatformUI.getWorkbench().getHelpSystem().setHelp( |
+ getControl(), |
+ ISearchHelpContextIds.REPLACE_DIALOG); |
+ } |
+ |
+ @Override |
+ public IWizardPage getNextPage() { |
+ initializeRefactoring(); |
+ storeSettings(); |
+ return super.getNextPage(); |
+ } |
+ |
+ @Override |
+ protected boolean performFinish() { |
+ initializeRefactoring(); |
+ storeSettings(); |
+ return super.performFinish(); |
+ } |
+ |
+ final void updateOKStatus() { |
+ RefactoringStatus status = new RefactoringStatus(); |
+ if (fReplaceWithRegex != null && fReplaceWithRegex.getSelection()) { |
+ try { |
+ PatternConstructor.interpretReplaceEscapes( |
+ fReplaceWithRegex.getText(), |
+ fReplaceRefactoring.getQuery().getSearchString(), |
+ "\n"); //$NON-NLS-1$ |
+ } catch (PatternSyntaxException e) { |
+ String locMessage = e.getLocalizedMessage(); |
+ int i = 0; |
+ while (i < locMessage.length() && "\n\r".indexOf(locMessage.charAt(i)) == -1) { //$NON-NLS-1$ |
+ i++; |
+ } |
+ status.addError(locMessage.substring(0, i)); // only take first line |
+ } |
+ } |
+ setPageComplete(status); |
+ } |
+ |
+ private void initializeRefactoring() { |
+ fReplaceRefactoring.setReplaceString(fTextField.getText()); |
+ } |
+ |
+ private void setContentAssistsEnablement(boolean enable) { |
+ fTextFieldContentAssist.setEnabled(enable); |
+ } |
+ |
+ private void storeSettings() { |
+ String[] items = fTextField.getItems(); |
+ ArrayList<String> history = new ArrayList<String>(); |
+ history.add(fTextField.getText()); |
+ int historySize = Math.min(items.length, 6); |
+ for (int i = 0; i < historySize; i++) { |
+ String curr = items[i]; |
+ if (!history.contains(curr)) { |
+ history.add(curr); |
+ } |
+ } |
+ IDialogSettings settings = SearchPlugin.getDefault().getDialogSettings().addNewSection( |
+ SETTINGS_GROUP); |
+ settings.put(SETTINGS_REPLACE_WITH, history.toArray(new String[history.size()])); |
+ |
+ } |
+} |