package com.intellij.lang.javascript.flex.projectStructure.ui; import com.intellij.flex.model.bc.CompilerOptionInfo; import com.intellij.lang.javascript.flex.FlexBundle; import com.intellij.openapi.project.Project; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.util.io.FileFilters; import com.intellij.ui.CheckBoxList; import com.intellij.ui.JBColor; import com.intellij.ui.ListSpeedSearch; import com.intellij.util.Function; import com.intellij.util.ui.UIUtil; import gnu.trove.THashSet; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.io.File; import java.util.*; public class LocalesDialog extends DialogWrapper { private JPanel myMainPanel; private JLabel myLabel; private CheckBoxList<String> myCheckBoxList; private final Collection<String> mySdkLocales; public LocalesDialog(final Project project, final @NotNull Sdk sdk, final Collection<String> selectedLocales) { super(project); mySdkLocales = getAvailableLocales(sdk); setTitle(CompilerOptionInfo.getOptionInfo("compiler.locale").DISPLAY_NAME); myLabel.setText(FlexBundle.message("locales.dialog.label", sdk.getName())); final Map<String, Boolean> map = new TreeMap<>(); for (String locale : mySdkLocales) { map.put(locale, false); } for (String locale : selectedLocales) { map.put(locale, true); } myCheckBoxList.setStringItems(map); init(); } private static Collection<String> getAvailableLocales(final Sdk sdk) { final Collection<String> result = new THashSet<>(); final File localeDir = new File(sdk.getHomePath() + "/frameworks/locale"); if (localeDir.isDirectory()) { //noinspection ConstantConditions for (File subdir : localeDir.listFiles()) { if (subdir.isDirectory() && containsSwc(subdir)) { result.add(subdir.getName()); } } } return result; } private static boolean containsSwc(final File dir) { return dir.listFiles(FileFilters.withExtension("swc")).length > 0; } @Override @Nullable public JComponent getPreferredFocusedComponent() { return myCheckBoxList; } private void createUIComponents() { myCheckBoxList = new CheckBoxList<String>() { @Override protected JComponent adjustRendering(JComponent rootComponent, final JCheckBox checkBox, int index, final boolean selected, final boolean hasFocus) { final String locale = checkBox.getText(); checkBox.setForeground(mySdkLocales.contains(locale) ? UIUtil.getListForeground(selected) : JBColor.RED); return rootComponent; } }; myCheckBoxList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); new ListSpeedSearch(myCheckBoxList, (Function<Object, String>)o -> ((JCheckBox)o).getText()); } @Override protected JComponent createCenterPanel() { return myMainPanel; } public List<String> getLocales() { final List<String> result = new ArrayList<>(); final ListModel model = myCheckBoxList.getModel(); for (int i = 0; i < model.getSize(); i++) { final JCheckBox checkBox = (JCheckBox)model.getElementAt(i); if (checkBox.isSelected()) { result.add(checkBox.getText()); } } return result; } }