blob: 5da2387c289946fe6c91e82ec37929b85b4b6661 [file] [log] [blame]
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;
}
}
}