diff --git a/platform/platform-impl/src/com/intellij/util/ui/ListItemsDialogWrapper.java b/platform/platform-impl/src/com/intellij/util/ui/ListItemsDialogWrapper.java index 8e84d4311466..1b989a5c58f5 100644 --- a/platform/platform-impl/src/com/intellij/util/ui/ListItemsDialogWrapper.java +++ b/platform/platform-impl/src/com/intellij/util/ui/ListItemsDialogWrapper.java @@ -16,19 +16,30 @@ package com.intellij.util.ui; import com.intellij.openapi.ui.DialogWrapper; +import com.intellij.openapi.ui.TextFieldWithBrowseButton; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.ui.AnActionButton; import com.intellij.ui.AnActionButtonRunnable; import com.intellij.ui.ToolbarDecorator; import com.intellij.ui.components.JBList; +import com.intellij.util.PlatformIcons; +import com.intellij.util.Producer; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import javax.swing.*; -import java.util.ArrayList; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.List; + +import static com.intellij.util.containers.ContainerUtil.emptyList; +import static com.intellij.util.containers.ContainerUtil.newArrayList; public abstract class ListItemsDialogWrapper extends DialogWrapper { protected final JPanel myPanel; - protected final JList myList = new JBList(new DefaultListModel()); - protected ArrayList myData; + protected final JList myList = new JBList<>(new DefaultListModel()); + protected List myData; public ListItemsDialogWrapper(String title) { super(true); @@ -68,8 +79,8 @@ public abstract class ListItemsDialogWrapper extends DialogWrapper { protected abstract String createAddItemDialog(); - public void setData(ArrayList data) { - myData = data; + public void setData(List data) { + myData = newArrayList(data); updateData(); if (!myData.isEmpty()) { myList.setSelectedIndex(0); @@ -77,14 +88,15 @@ public abstract class ListItemsDialogWrapper extends DialogWrapper { } protected void updateData() { - final DefaultListModel model = ((DefaultListModel)myList.getModel()); + final DefaultListModel model = ((DefaultListModel)myList.getModel()); model.clear(); for (String data : myData) { model.addElement(data); } } - public ArrayList getData() { + @Nullable + public List getData() { return myData; } @@ -97,4 +109,33 @@ public abstract class ListItemsDialogWrapper extends DialogWrapper { public JComponent getPreferredFocusedComponent() { return myList; } + + @NotNull + public static String createStringPresentation(@Nullable List data) { + return data == null ? "" : StringUtil.join(data, ","); + } + + @NotNull + public static List createListPresentation(@Nullable String data) { + if (data == null || data.trim().isEmpty()) { + return emptyList(); + } + return newArrayList(data.split(",")); + } + + public static void installListItemsDialogForTextField(@NotNull TextFieldWithBrowseButton uiField, + @NotNull Producer createDialog) { + uiField.getTextField().setEditable(false); + uiField.setButtonIcon(PlatformIcons.OPEN_EDIT_DIALOG_ICON); + uiField.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + final ListItemsDialogWrapper tagListDialog = createDialog.produce(); + tagListDialog.setData(createListPresentation(uiField.getText())); + if (tagListDialog.showAndGet()) { + uiField.setText(createStringPresentation(tagListDialog.getData())); + } + } + }); + } } diff --git a/xml/impl/src/com/intellij/application/options/CodeStyleHtmlPanel.java b/xml/impl/src/com/intellij/application/options/CodeStyleHtmlPanel.java index babaef936580..f772564f396f 100644 --- a/xml/impl/src/com/intellij/application/options/CodeStyleHtmlPanel.java +++ b/xml/impl/src/com/intellij/application/options/CodeStyleHtmlPanel.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2017 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,23 +24,19 @@ import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.fileTypes.StdFileTypes; import com.intellij.openapi.ui.TextFieldWithBrowseButton; import com.intellij.openapi.util.Comparing; -import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiFile; import com.intellij.psi.codeStyle.CodeStyleSettings; import com.intellij.psi.codeStyle.CommonCodeStyleSettings; import com.intellij.ui.EnumComboBoxModel; import com.intellij.ui.components.JBCheckBox; import com.intellij.ui.components.JBScrollPane; -import com.intellij.util.ArrayUtil; -import com.intellij.util.PlatformIcons; +import com.intellij.util.ui.ListItemsDialogWrapper; import org.jetbrains.annotations.NotNull; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.util.ArrayList; -import java.util.Arrays; public class CodeStyleHtmlPanel extends CodeStyleAbstractPanel { @@ -122,30 +118,7 @@ public class CodeStyleHtmlPanel extends CodeStyleAbstractPanel { } private static void customizeField(final String title, final TextFieldWithBrowseButton uiField) { - uiField.getTextField().setEditable(false); - uiField.setButtonIcon(PlatformIcons.OPEN_EDIT_DIALOG_ICON); - uiField.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - final TagListDialog tagListDialog = new TagListDialog(title); - tagListDialog.setData(createCollectionOn(uiField.getText())); - if (tagListDialog.showAndGet()) { - uiField.setText(createStringOn(tagListDialog.getData())); - } - } - - private String createStringOn(final ArrayList data) { - return StringUtil.join(ArrayUtil.toStringArray(data), ","); - } - - private ArrayList createCollectionOn(final String data) { - if (data == null || data.trim().isEmpty()) { - return new ArrayList<>(); - } - return new ArrayList<>(Arrays.asList(data.split(","))); - } - - }); + ListItemsDialogWrapper.installListItemsDialogForTextField(uiField, () -> new TagListDialog(title)); } @Override @@ -179,11 +152,6 @@ public class CodeStyleHtmlPanel extends CodeStyleAbstractPanel { myRightMarginForm.apply(settings); } - @NotNull - protected String getQuotes() { - return ApplicationBundle.message("single.quotes").equals(myQuotesCombo.getSelectedItem()) ? "'" : "\""; - } - private static int getIntValue(JTextField keepBlankLines) { try { return Integer.parseInt(keepBlankLines.getText());