diff --git a/platform/lang-impl/src/com/intellij/codeInspection/LossyEncodingInspection.java b/platform/lang-impl/src/com/intellij/codeInspection/LossyEncodingInspection.java
index 38747fe3759f..c5c1349acbd7 100644
--- a/platform/lang-impl/src/com/intellij/codeInspection/LossyEncodingInspection.java
+++ b/platform/lang-impl/src/com/intellij/codeInspection/LossyEncodingInspection.java
@@ -199,7 +199,7 @@ public class LossyEncodingInspection extends LocalInspectionTool {
}
}
};
- DefaultActionGroup group = action.createGroup(false);
+ DefaultActionGroup group = action.createGroup(null);
DataContext dataContext = DataManager.getInstance().getDataContext();
JBPopupFactory.getInstance().createActionGroupPopup(null, group, dataContext, false, false, false, null, 30, null).showInBestPositionFor(dataContext);
}
diff --git a/platform/lang-impl/src/com/intellij/openapi/vfs/encoding/FileEncodingConfigurable.form b/platform/lang-impl/src/com/intellij/openapi/vfs/encoding/FileEncodingConfigurable.form
index c8a0b127205a..bc395378367e 100644
--- a/platform/lang-impl/src/com/intellij/openapi/vfs/encoding/FileEncodingConfigurable.form
+++ b/platform/lang-impl/src/com/intellij/openapi/vfs/encoding/FileEncodingConfigurable.form
@@ -1,9 +1,9 @@
diff --git a/platform/lang-impl/src/com/intellij/openapi/vfs/encoding/FileEncodingConfigurable.java b/platform/lang-impl/src/com/intellij/openapi/vfs/encoding/FileEncodingConfigurable.java
index 99a4cf77dd5a..ba84c1e14244 100644
--- a/platform/lang-impl/src/com/intellij/openapi/vfs/encoding/FileEncodingConfigurable.java
+++ b/platform/lang-impl/src/com/intellij/openapi/vfs/encoding/FileEncodingConfigurable.java
@@ -18,6 +18,7 @@ package com.intellij.openapi.vfs.encoding;
import com.intellij.ide.IdeBundle;
import com.intellij.openapi.actionSystem.AnActionEvent;
+import com.intellij.openapi.actionSystem.DefaultActionGroup;
import com.intellij.openapi.actionSystem.Presentation;
import com.intellij.openapi.application.ApplicationNamesInfo;
import com.intellij.openapi.options.Configurable;
@@ -26,8 +27,8 @@ import com.intellij.openapi.options.OptionalConfigurable;
import com.intellij.openapi.options.SearchableConfigurable;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Comparing;
+import com.intellij.openapi.util.Ref;
import com.intellij.openapi.util.text.StringUtil;
-import com.intellij.openapi.vfs.CharsetToolkit;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.ui.ScrollPaneFactory;
import com.intellij.ui.table.JBTable;
@@ -51,10 +52,12 @@ public class FileEncodingConfigurable implements SearchableConfigurable, Optiona
private JCheckBox myAutodetectUTFEncodedFilesCheckBox;
private JCheckBox myTransparentNativeToAsciiCheckBox;
private JPanel myPropertiesFilesEncodingCombo;
- private Charset mySelectedCharsetForPropertiesFiles;
- private JComboBox myIdeEncodingsCombo;
+ private final Ref mySelectedCharsetForPropertiesFiles = new Ref();
+ private final Ref mySelectedIdeCharset = new Ref();
private JLabel myTitleLabel;
- private ChooseFileEncodingAction myAction;
+ private JPanel myIdeEncodingsListCombo;
+ private ChooseFileEncodingAction myPropertiesEncodingAction;
+ private ChooseFileEncodingAction myIdeEncodingAction;
public FileEncodingConfigurable(Project project) {
myProject = project;
@@ -85,25 +88,38 @@ public class FileEncodingConfigurable implements SearchableConfigurable, Optiona
return null;
}
- @Override
- public JComponent createComponent() {
- myAction = new ChooseFileEncodingAction(null) {
+ private static ChooseFileEncodingAction installChooseEncodingCombo(@NotNull JPanel parentPanel, @NotNull final Ref selected) {
+ ChooseFileEncodingAction myAction = new ChooseFileEncodingAction(null) {
@Override
public void update(final AnActionEvent e) {
getTemplatePresentation().setEnabled(true);
- getTemplatePresentation().setText(mySelectedCharsetForPropertiesFiles == null ? SYSTEM_DEFAULT :
- mySelectedCharsetForPropertiesFiles.displayName());
+ Charset charset = selected.get();
+ getTemplatePresentation().setText(charset == null ? SYSTEM_DEFAULT : charset.displayName());
}
@Override
protected void chosen(final VirtualFile virtualFile, final Charset charset) {
- mySelectedCharsetForPropertiesFiles = charset == NO_ENCODING ? null : charset;
+ selected.set(charset == NO_ENCODING ? null : charset);
update((AnActionEvent)null);
}
+
+ @NotNull
+ @Override
+ protected DefaultActionGroup createPopupActionGroup(JComponent button) {
+ return createGroup("");
+ }
};
- myPropertiesFilesEncodingCombo.removeAll();
+ parentPanel.removeAll();
Presentation templatePresentation = myAction.getTemplatePresentation();
- myPropertiesFilesEncodingCombo.add(myAction.createCustomComponent(templatePresentation), BorderLayout.CENTER);
+ parentPanel.add(myAction.createCustomComponent(templatePresentation), BorderLayout.CENTER);
+ myAction.update((AnActionEvent)null);
+ return myAction;
+ }
+
+ @Override
+ public JComponent createComponent() {
+ myPropertiesEncodingAction = installChooseEncodingCombo(myPropertiesFilesEncodingCombo, mySelectedCharsetForPropertiesFiles);
+ myIdeEncodingAction = installChooseEncodingCombo(myIdeEncodingsListCombo, mySelectedIdeCharset);
myTreeView = new FileTreeTable(myProject);
myTreePanel.setViewportView(myTreeView);
myTreeView.getEmptyText().setText(IdeBundle.message("file.encodings.not.configured"));
@@ -118,7 +134,7 @@ public class FileEncodingConfigurable implements SearchableConfigurable, Optiona
Map editing = myTreeView.getValues();
Map mapping = EncodingProjectManager.getInstance(myProject).getAllMappings();
boolean same = editing.equals(mapping)
- && Comparing.equal(encodingManager.getDefaultCharsetForPropertiesFiles(null), mySelectedCharsetForPropertiesFiles)
+ && Comparing.equal(encodingManager.getDefaultCharsetForPropertiesFiles(null), mySelectedCharsetForPropertiesFiles.get())
&& encodingManager.isUseUTFGuessing(null) == myAutodetectUTFEncodedFilesCheckBox.isSelected()
&& encodingManager.isNative2AsciiForPropertiesFiles() == myTransparentNativeToAsciiCheckBox.isSelected()
;
@@ -126,12 +142,12 @@ public class FileEncodingConfigurable implements SearchableConfigurable, Optiona
}
public boolean isEncodingModified() {
- final Object item = myIdeEncodingsCombo.getSelectedItem();
- if (SYSTEM_DEFAULT.equals(item)) {
+ Charset charset = mySelectedIdeCharset.get();
+ if (null == charset) {
return !StringUtil.isEmpty(EncodingManager.getInstance().getDefaultCharsetName());
}
- return !Comparing.equal(item, EncodingManager.getInstance().getDefaultCharset());
+ return !Comparing.equal(charset, EncodingManager.getInstance().getDefaultCharset());
}
@Override
@@ -139,17 +155,12 @@ public class FileEncodingConfigurable implements SearchableConfigurable, Optiona
Map result = myTreeView.getValues();
EncodingProjectManager encodingManager = EncodingProjectManager.getInstance(myProject);
encodingManager.setMapping(result);
- encodingManager.setDefaultCharsetForPropertiesFiles(null, mySelectedCharsetForPropertiesFiles);
+ encodingManager.setDefaultCharsetForPropertiesFiles(null, mySelectedCharsetForPropertiesFiles.get());
encodingManager.setNative2AsciiForPropertiesFiles(null, myTransparentNativeToAsciiCheckBox.isSelected());
encodingManager.setUseUTFGuessing(null, myAutodetectUTFEncodedFilesCheckBox.isSelected());
- final Object item = myIdeEncodingsCombo.getSelectedItem();
- if (SYSTEM_DEFAULT.equals(item)) {
- EncodingManager.getInstance().setDefaultCharsetName("");
- }
- else if (item != null) {
- EncodingManager.getInstance().setDefaultCharsetName(((Charset)item).name());
- }
+ Charset charset = mySelectedIdeCharset.get();
+ EncodingManager.getInstance().setDefaultCharsetName(charset == null ? "" : charset.name());
}
@Override
@@ -158,25 +169,15 @@ public class FileEncodingConfigurable implements SearchableConfigurable, Optiona
myTreeView.reset(encodingManager.getAllMappings());
myAutodetectUTFEncodedFilesCheckBox.setSelected(encodingManager.isUseUTFGuessing(null));
myTransparentNativeToAsciiCheckBox.setSelected(encodingManager.isNative2AsciiForPropertiesFiles());
- mySelectedCharsetForPropertiesFiles = encodingManager.getDefaultCharsetForPropertiesFiles(null);
- myAction.update((AnActionEvent)null);
+ mySelectedCharsetForPropertiesFiles.set(encodingManager.getDefaultCharsetForPropertiesFiles(null));
- final DefaultComboBoxModel encodingsModel = new DefaultComboBoxModel(CharsetToolkit.getAvailableCharsets());
- encodingsModel.insertElementAt(SYSTEM_DEFAULT, 0);
- myIdeEncodingsCombo.setModel(encodingsModel);
-
- final String name = EncodingManager.getInstance().getDefaultCharsetName();
- if (StringUtil.isEmpty(name)) {
- myIdeEncodingsCombo.setSelectedItem(SYSTEM_DEFAULT);
- }
- else {
- myIdeEncodingsCombo.setSelectedItem(EncodingManager.getInstance().getDefaultCharset());
- }
+ mySelectedIdeCharset.set(EncodingManager.getInstance().getDefaultCharset());
+ myPropertiesEncodingAction.update((AnActionEvent)null);
+ myIdeEncodingAction.update((AnActionEvent)null);
}
@Override
public void disposeUIResources() {
- myAction = null;
}
public void selectFile(@NotNull VirtualFile virtualFile) {
diff --git a/platform/platform-impl/src/com/intellij/openapi/vfs/encoding/ChooseFileEncodingAction.java b/platform/platform-impl/src/com/intellij/openapi/vfs/encoding/ChooseFileEncodingAction.java
index 11209843fc1a..eced2dfd7500 100644
--- a/platform/platform-impl/src/com/intellij/openapi/vfs/encoding/ChooseFileEncodingAction.java
+++ b/platform/platform-impl/src/com/intellij/openapi/vfs/encoding/ChooseFileEncodingAction.java
@@ -112,7 +112,7 @@ public abstract class ChooseFileEncodingAction extends ComboBoxAction {
@Override
@NotNull
protected DefaultActionGroup createPopupActionGroup(final JComponent button) {
- return createGroup(true);
+ return createGroup("");
}
private void fillCharsetActions(DefaultActionGroup group, final VirtualFile virtualFile, List charsets) {
@@ -174,8 +174,8 @@ public abstract class ChooseFileEncodingAction extends ComboBoxAction {
private class ClearThisFileEncodingAction extends AnAction {
private final VirtualFile myFile;
- private ClearThisFileEncodingAction(@Nullable VirtualFile file) {
- super("", "Clear " +
+ private ClearThisFileEncodingAction(@Nullable VirtualFile file, @NotNull String clearItemText) {
+ super(clearItemText, "Clear " +
(file == null ? "default" : "file '"+file.getName()+"'") +
" encoding.", null);
myFile = file;
@@ -205,17 +205,18 @@ public abstract class ChooseFileEncodingAction extends ComboBoxAction {
};
protected abstract void chosen(VirtualFile virtualFile, Charset charset);
- public DefaultActionGroup createGroup(boolean showClear) {
+ @NotNull
+ public DefaultActionGroup createGroup(@Nullable String clearItemText) {
DefaultActionGroup group = new DefaultActionGroup();
List favorites = new ArrayList(EncodingManager.getInstance().getFavorites());
Collections.sort(favorites);
Charset current = myVirtualFile == null ? null : myVirtualFile.getCharset();
favorites.remove(current);
- if (showClear) {
- group.add(new ClearThisFileEncodingAction(myVirtualFile));
+ if (clearItemText != null) {
+ group.add(new ClearThisFileEncodingAction(myVirtualFile, clearItemText));
}
- if (favorites.isEmpty() && !showClear) {
+ if (favorites.isEmpty() && clearItemText == null) {
fillCharsetActions(group, myVirtualFile, Arrays.asList(CharsetToolkit.getAvailableCharsets()));
}
else {
diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/EncodingPanel.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/EncodingPanel.java
index c6fa0d095dc6..ac8997c4fd1b 100644
--- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/EncodingPanel.java
+++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/EncodingPanel.java
@@ -185,7 +185,7 @@ public class EncodingPanel extends EditorBasedWidget implements StatusBarWidget.
EncodingPanel.this.update();
}
}
- }.createGroup(false);
+ }.createGroup(null);
return JBPopupFactory.getInstance().createActionGroupPopup(null, group, dataContext, false, false, false, null, 30, null);
}