Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(543)

Unified Diff: editor/tools/plugins/com.google.dart.tools.search/src/com/google/dart/tools/search/internal/ui/text/ReplaceConfigurationPage.java

Issue 10597004: Find/replace support across multiple files. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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()]));
+
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698