From 31c08fab05706fb76791e4e9b37304e53b91fd1e Mon Sep 17 00:00:00 2001 From: Evgeny Zakrevsky Date: Fri, 12 Oct 2012 07:12:57 +0400 Subject: [PATCH] IDEA-68253 Issue trackers integration. Completion in TextFields. --- .../ui/TextFieldWithAutoCompletion.java | 11 ++-- .../src/com/intellij/ui/EditorTextField.java | 2 +- .../AndroidCreateLayoutFileAction.java | 2 +- .../actions/CreateResourceFileDialog.java | 2 +- .../android/logcat/EditLogFilterDialog.java | 4 +- .../tasks/config/BaseRepositoryEditor.java | 18 ++++-- .../tasks/actions/OpenTaskDialog.java | 2 +- .../tasks/generic/GenericWebRepository.java | 12 ++-- .../generic/GenericWebRepositoryEditor.java | 60 ++++++++++++++----- .../javaee/HtmlLanguageLevelForm.java | 2 +- 10 files changed, 78 insertions(+), 37 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/ui/TextFieldWithAutoCompletion.java b/platform/lang-impl/src/com/intellij/ui/TextFieldWithAutoCompletion.java index 046b23c5253f..f17beff0cb43 100644 --- a/platform/lang-impl/src/com/intellij/ui/TextFieldWithAutoCompletion.java +++ b/platform/lang-impl/src/com/intellij/ui/TextFieldWithAutoCompletion.java @@ -52,13 +52,13 @@ public class TextFieldWithAutoCompletion extends LanguageTextField { public TextFieldWithAutoCompletion() { // For UI designer - this(null, null, false); + this(null, null, false, null); } public TextFieldWithAutoCompletion(final Project project, @Nullable final TextFieldWithAutoCompletionListProvider provider, - final boolean showAutocompletionIsAvailableHint) { - super(PlainTextLanguage.INSTANCE, project, ""); + final boolean showAutocompletionIsAvailableHint, @Nullable final String text) { + super(PlainTextLanguage.INSTANCE, project, text == null ? "" : text); myShowAutocompletionIsAvailableHint = showAutocompletionIsAvailableHint; @@ -70,8 +70,9 @@ public class TextFieldWithAutoCompletion extends LanguageTextField { public static TextFieldWithAutoCompletion create(final Project project, @NotNull final Collection items, @Nullable final Icon icon, - final boolean showAutocompletionIsAvailableHint) { - return new TextFieldWithAutoCompletion(project, new StringsCompletionProvider(items, icon), showAutocompletionIsAvailableHint); + final boolean showAutocompletionIsAvailableHint, @Nullable final String text) { + return new TextFieldWithAutoCompletion(project, new StringsCompletionProvider(items, icon), showAutocompletionIsAvailableHint, + text); } @Override diff --git a/platform/platform-impl/src/com/intellij/ui/EditorTextField.java b/platform/platform-impl/src/com/intellij/ui/EditorTextField.java index 1346c52c59e0..6bf4fb24d57e 100644 --- a/platform/platform-impl/src/com/intellij/ui/EditorTextField.java +++ b/platform/platform-impl/src/com/intellij/ui/EditorTextField.java @@ -246,7 +246,7 @@ public class EditorTextField extends NonOpaquePanel implements DocumentListener, } } - public void setText(final String text) { + public void setText(@NotNull final String text) { ApplicationManager.getApplication().runWriteAction(new Runnable() { @Override public void run() { diff --git a/plugins/android/src/org/jetbrains/android/actions/AndroidCreateLayoutFileAction.java b/plugins/android/src/org/jetbrains/android/actions/AndroidCreateLayoutFileAction.java index 4415949d71fc..7d7bc1bf4e52 100644 --- a/plugins/android/src/org/jetbrains/android/actions/AndroidCreateLayoutFileAction.java +++ b/plugins/android/src/org/jetbrains/android/actions/AndroidCreateLayoutFileAction.java @@ -150,7 +150,7 @@ public class AndroidCreateLayoutFileAction extends CreateTypedResourceFileAction setTitle(AndroidBundle.message("new.typed.resource.dialog.title", "Layout")); final List tagNames = getSortedAllowedTagNames(facet); myRootElementField = new TextFieldWithAutoCompletion( - facet.getModule().getProject(), new TextFieldWithAutoCompletion.StringsCompletionProvider(tagNames, null), true); + facet.getModule().getProject(), new TextFieldWithAutoCompletion.StringsCompletionProvider(tagNames, null), true, null); myRootElementField.setText(myDefaultRootTag); myRootElementFieldWrapper.add(myRootElementField, BorderLayout.CENTER); myRootElementLabel.setLabelFor(myRootElementField); diff --git a/plugins/android/src/org/jetbrains/android/actions/CreateResourceFileDialog.java b/plugins/android/src/org/jetbrains/android/actions/CreateResourceFileDialog.java index fd138795890c..60187f09ce26 100644 --- a/plugins/android/src/org/jetbrains/android/actions/CreateResourceFileDialog.java +++ b/plugins/android/src/org/jetbrains/android/actions/CreateResourceFileDialog.java @@ -213,7 +213,7 @@ public class CreateResourceFileDialog extends DialogWrapper { if (action != null) { final List allowedTagNames = action.getSortedAllowedTagNames(myFacet); myRootElementField = new TextFieldWithAutoCompletion( - myFacet.getModule().getProject(), new TextFieldWithAutoCompletion.StringsCompletionProvider(allowedTagNames, null), true); + myFacet.getModule().getProject(), new TextFieldWithAutoCompletion.StringsCompletionProvider(allowedTagNames, null), true, null); myRootElementField.setEnabled(allowedTagNames.size() > 1); myRootElementField.setText(!action.isChooseTagName() && myPredefinedResourceType != ResourceType.LAYOUT ? action.getDefaultRootTag() diff --git a/plugins/android/src/org/jetbrains/android/logcat/EditLogFilterDialog.java b/plugins/android/src/org/jetbrains/android/logcat/EditLogFilterDialog.java index 98df700dd881..438adb8adc62 100644 --- a/plugins/android/src/org/jetbrains/android/logcat/EditLogFilterDialog.java +++ b/plugins/android/src/org/jetbrains/android/logcat/EditLogFilterDialog.java @@ -77,7 +77,7 @@ class EditLogFilterDialog extends DialogWrapper { setItems(Arrays.asList(myUsedTags)); return super.getItems(prefix, cached, parameters); } - }, true); + }, true, null); myTagFieldWrapper.add(myTagField); myLogTagLabel.setLabelFor(myTagField); @@ -97,7 +97,7 @@ class EditLogFilterDialog extends DialogWrapper { final int pid2 = Integer.parseInt(item2); return Comparing.compare(pid1, pid2); } - }, true); + }, true, null); myPidFieldWrapper.add(myPidField); myLogLevelCombo.setModel(new EnumComboBoxModel(Log.LogLevel.class)); diff --git a/plugins/tasks/tasks-api/src/com/intellij/tasks/config/BaseRepositoryEditor.java b/plugins/tasks/tasks-api/src/com/intellij/tasks/config/BaseRepositoryEditor.java index e68deba29fb8..dafe9ddde42c 100644 --- a/plugins/tasks/tasks-api/src/com/intellij/tasks/config/BaseRepositoryEditor.java +++ b/plugins/tasks/tasks-api/src/com/intellij/tasks/config/BaseRepositoryEditor.java @@ -67,6 +67,7 @@ public class BaseRepositoryEditor extends TaskReposito protected JBCheckBox myLoginAnonymouslyJBCheckBox; private boolean myApplying; + protected Project myProject; protected final T myRepository; private final Consumer myChangeListener; private final Document myDocument; @@ -74,6 +75,7 @@ public class BaseRepositoryEditor extends TaskReposito private JComponent myAnchor; public BaseRepositoryEditor(final Project project, final T repository, Consumer changeListener) { + myProject = project; myRepository = repository; myChangeListener = changeListener; @@ -115,12 +117,7 @@ public class BaseRepositoryEditor extends TaskReposito myComment.setText("Available placeholders: " + repository.getComment()); installListener(myAddCommitMessage); - myDocument.addDocumentListener(new com.intellij.openapi.editor.event.DocumentAdapter() { - @Override - public void documentChanged(com.intellij.openapi.editor.event.DocumentEvent e) { - doApply(); - } - }); + installListener(myDocument); installListener(myURLText); installListener(myUserNameText); @@ -194,6 +191,15 @@ public class BaseRepositoryEditor extends TaskReposito }); } + protected void installListener(final Document document) { + document.addDocumentListener(new com.intellij.openapi.editor.event.DocumentAdapter() { + @Override + public void documentChanged(com.intellij.openapi.editor.event.DocumentEvent e) { + doApply(); + } + }); + } + protected void doApply() { if (!myApplying) { try { diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/OpenTaskDialog.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/OpenTaskDialog.java index 5897a393695e..82ea168abdc0 100644 --- a/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/OpenTaskDialog.java +++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/OpenTaskDialog.java @@ -88,7 +88,7 @@ public class OpenTaskDialog extends DialogWrapper { mySelectedTask = task; taskChanged(); } - }, false); + }, false, null); myEditorPanel.add(myTaskName); myTaskName.getDocument().addDocumentListener(new DocumentAdapter() { @Override diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/generic/GenericWebRepository.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/generic/GenericWebRepository.java index 644cc8b34cc7..0e028d5f42ab 100644 --- a/plugins/tasks/tasks-core/src/com/intellij/tasks/generic/GenericWebRepository.java +++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/generic/GenericWebRepository.java @@ -10,6 +10,7 @@ import com.intellij.util.containers.ContainerUtil; import com.intellij.util.xmlb.annotations.Tag; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.methods.GetMethod; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; @@ -21,7 +22,7 @@ import java.util.regex.Pattern; * User: Evgeny.Zakrevsky * Date: 10/4/12 */ -@Tag("Web") +@Tag("Generic") public class GenericWebRepository extends BaseRepositoryImpl { private String myTasksListURL; private String myTaskPattern; @@ -131,16 +132,18 @@ public class GenericWebRepository extends BaseRepositoryImpl { return new GenericWebRepository(this); } + @NotNull public String getTasksListURL() { - return myTasksListURL; + return myTasksListURL == null ? "" : myTasksListURL; } public void setTasksListURL(final String tasksListURL) { myTasksListURL = tasksListURL; } + @NotNull public String getTaskPattern() { - return myTaskPattern; + return myTaskPattern == null ? "" : myTaskPattern; } public void setTaskPattern(final String taskPattern) { @@ -175,8 +178,9 @@ public class GenericWebRepository extends BaseRepositoryImpl { }; } + @NotNull public String getLoginURL() { - return myLoginURL; + return myLoginURL == null ? "" : myLoginURL; } public void setLoginURL(final String loginURL) { diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/generic/GenericWebRepositoryEditor.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/generic/GenericWebRepositoryEditor.java index 1623b838a1e3..66fee8398167 100644 --- a/plugins/tasks/tasks-core/src/com/intellij/tasks/generic/GenericWebRepositoryEditor.java +++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/generic/GenericWebRepositoryEditor.java @@ -1,14 +1,22 @@ package com.intellij.tasks.generic; +import com.intellij.openapi.actionSystem.ActionManager; +import com.intellij.openapi.actionSystem.IdeActions; +import com.intellij.openapi.editor.EditorFactory; +import com.intellij.openapi.keymap.KeymapUtil; import com.intellij.openapi.project.Project; import com.intellij.tasks.config.BaseRepositoryEditor; +import com.intellij.ui.TextFieldWithAutoCompletion; import com.intellij.ui.components.JBLabel; import com.intellij.util.Consumer; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.FormBuilder; import org.jetbrains.annotations.Nullable; import javax.swing.*; +import static com.intellij.tasks.generic.GenericWebRepository.*; + /** * User: Evgeny.Zakrevsky * Date: 10/4/12 @@ -16,10 +24,10 @@ import javax.swing.*; public class GenericWebRepositoryEditor extends BaseRepositoryEditor { private JBLabel myTasksListURLLabel; private JBLabel myTaskPatternLabel; - private JTextField myTasksListURLText; - private JTextField myTaskPatternText; + private TextFieldWithAutoCompletion myTasksListURLText; + private TextFieldWithAutoCompletion myTaskPatternText; private JBLabel myLoginURLLabel; - private JTextField myLoginURLText; + private TextFieldWithAutoCompletion myLoginURLText; public GenericWebRepositoryEditor(final Project project, final GenericWebRepository repository, @@ -48,26 +56,48 @@ public class GenericWebRepositoryEditor extends BaseRepositoryEditor