| package com.intellij.openapi.vfs.encoding; |
| |
| import com.intellij.ide.IdeBundle; |
| import com.intellij.openapi.options.ConfigurationException; |
| import com.intellij.openapi.options.SearchableConfigurable; |
| import com.intellij.openapi.util.Comparing; |
| import com.intellij.openapi.util.text.StringUtil; |
| import com.intellij.openapi.vfs.CharsetToolkit; |
| import org.jetbrains.annotations.Nls; |
| import org.jetbrains.annotations.NotNull; |
| |
| import javax.swing.*; |
| import java.nio.charset.Charset; |
| |
| /** |
| * Component that adds "IDE Encoding" option to General settings tab. Register it as generalOptionsProvider extension |
| * if you want to use it in your product. |
| * |
| * @author yole |
| */ |
| public class PlatformFileEncodingConfigurable implements SearchableConfigurable { |
| private static final String SYSTEM_DEFAULT = IdeBundle.message("encoding.name.system.default"); |
| private PlatformEncodingOptionsPanel myPanel; |
| |
| @Override |
| @NotNull |
| public String getId() { |
| return "GeneralEncodingOptions"; |
| } |
| |
| @Override |
| public Runnable enableSearch(String option) { |
| return null; |
| } |
| |
| @Override |
| @Nls |
| public String getDisplayName() { |
| return ""; |
| } |
| |
| @Override |
| public String getHelpTopic() { |
| return null; |
| } |
| |
| @Override |
| public JComponent createComponent() { |
| if (myPanel == null) { |
| myPanel = new PlatformEncodingOptionsPanel(); |
| } |
| return myPanel.getMainPanel(); |
| } |
| |
| @Override |
| public boolean isModified() { |
| final Object item = myPanel.myIDEEncodingComboBox.getSelectedItem(); |
| if (SYSTEM_DEFAULT.equals(item)) { |
| return !StringUtil.isEmpty(EncodingManager.getInstance().getDefaultCharsetName()); |
| } |
| |
| return !Comparing.equal(item, EncodingManager.getInstance().getDefaultCharset()); |
| } |
| |
| @Override |
| public void apply() throws ConfigurationException { |
| final Object item = myPanel.myIDEEncodingComboBox.getSelectedItem(); |
| if (SYSTEM_DEFAULT.equals(item)) { |
| EncodingManager.getInstance().setDefaultCharsetName(""); |
| } |
| else if (item != null) { |
| EncodingManager.getInstance().setDefaultCharsetName(((Charset)item).name()); |
| } |
| } |
| |
| @Override |
| public void reset() { |
| final DefaultComboBoxModel encodingsModel = new DefaultComboBoxModel(CharsetToolkit.getAvailableCharsets()); |
| encodingsModel.insertElementAt(SYSTEM_DEFAULT, 0); |
| myPanel.myIDEEncodingComboBox.setModel(encodingsModel); |
| |
| final String name = EncodingManager.getInstance().getDefaultCharsetName(); |
| if (StringUtil.isEmpty(name)) { |
| myPanel.myIDEEncodingComboBox.setSelectedItem(SYSTEM_DEFAULT); |
| } |
| else { |
| myPanel.myIDEEncodingComboBox.setSelectedItem(EncodingManager.getInstance().getDefaultCharset()); |
| } |
| } |
| |
| @Override |
| public void disposeUIResources() { |
| myPanel = null; |
| } |
| |
| public static class PlatformEncodingOptionsPanel { |
| JComboBox myIDEEncodingComboBox; |
| private JPanel myMainPanel; |
| |
| public JPanel getMainPanel() { |
| return myMainPanel; |
| } |
| } |
| } |