import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreePath;
import java.awt.*;
+import java.awt.event.KeyAdapter;
+import java.awt.event.KeyEvent;
import java.beans.PropertyChangeListener;
import java.util.*;
import java.util.List;
public static final Key<ResourceBundleEditor> RESOURCE_BUNDLE_EDITOR_KEY = Key.create("resourceBundleEditor");
private final StructureViewComponent myStructureViewComponent;
- private final Map<PropertiesFile, Editor> myEditors;
+ private final Map<PropertiesFile, EditorEx> myEditors;
private final ResourceBundle myResourceBundle;
private final ResourceBundlePropertiesUpdateManager myPropertiesInsertDeleteManager;
private final Map<PropertiesFile, JPanel> myTitledPanels;
!Comparing.equal(selectedPropertiesFile, getSelectedPropertiesFile())) {
if (selectedProperty != null && e.getOldLeadSelectionPath() != null) {
- for (Map.Entry<PropertiesFile, Editor> entry : myEditors.entrySet()) {
+ for (Map.Entry<PropertiesFile, EditorEx> entry : myEditors.entrySet()) {
if (entry.getValue() == mySelectedEditor) {
writeEditorPropertyValue(selectedProperty.getName(), mySelectedEditor, entry.getKey());
break;
});
installPropertiesChangeListeners();
- myEditors = new THashMap<PropertiesFile, Editor>();
+ myEditors = new THashMap<PropertiesFile, EditorEx>();
myTitledPanels = new THashMap<PropertiesFile, JPanel>();
recreateEditorsPanel();
Editor previousEditor = null;
Editor firstEditor = null;
for (final PropertiesFile propertiesFile : propertiesFiles) {
- final Editor editor = createEditor();
+ final EditorEx editor = createEditor();
final Editor oldEditor = myEditors.put(propertiesFile, editor);
if (firstEditor == null) {
firstEditor = editor;
if (oldEditor != null) {
EditorFactory.getInstance().releaseEditor(oldEditor);
}
- final Boolean[] isViewer = new Boolean[1];
- ((EditorEx) editor).addFocusListener(new FocusChangeListener() {
+
+ editor.setViewer(!propertiesFile.getVirtualFile().isWritable());
+ editor.getContentComponent().addKeyListener(new KeyAdapter() {
+ @Override
+ public void keyTyped(KeyEvent e) {
+ if (editor.isViewer()) {
+ editor.setViewer( ReadonlyStatusHandler.getInstance(myProject).ensureFilesWritable(propertiesFile.getVirtualFile()).hasReadonlyFiles());
+ }
+ }
+ });
+
+ editor.addFocusListener(new FocusChangeListener() {
@Override
public void focusGained(final Editor editor) {
mySelectedEditor = editor;
- final EditorEx editorEx = (EditorEx)editor;
- if (isViewer[0] == null) {
- final boolean readOnly = ReadonlyStatusHandler.getInstance(myProject).ensureFilesWritable(propertiesFile.getVirtualFile()).hasReadonlyFiles();
- editorEx.setViewer(readOnly);
- isViewer[0] = readOnly;
- }
}
@Override
- public void focusLost(final Editor eventEditor) {
- if (Boolean.FALSE.equals(isViewer[0]) && propertiesFile.getContainingFile().isValid()) {
+ public void focusLost(final Editor editor) {
+ if (!editor.isViewer() && propertiesFile.getContainingFile().isValid()) {
writeEditorPropertyValue(null, editor, propertiesFile);
}
}
final UndoManagerImpl undoManager = (UndoManagerImpl)UndoManager.getInstance(myProject);
for (final PropertiesFile propertiesFile : myResourceBundle.getPropertiesFiles()) {
- final EditorEx editor = (EditorEx)myEditors.get(propertiesFile);
+ final EditorEx editor = myEditors.get(propertiesFile);
if (editor == null) continue;
final IProperty property = propertiesFile.findPropertyByKey(propertyName);
final Document document = editor.getDocument();
@Override
public void propertyChanged(@NotNull VirtualFilePropertyEvent event) {
- if (PropertiesImplUtil.isPropertiesFile(event.getFile(), myProject)) {
- if (VirtualFile.PROP_NAME.equals(event.getPropertyName())) {
- recreateEditorsPanel();
+ final VirtualFile eventFile = event.getFile();
+ if (PropertiesImplUtil.isPropertiesFile(eventFile, myProject)) {
+ EditorEx correspondingEditor = null;
+ for (Map.Entry<PropertiesFile, EditorEx> e : myEditors.entrySet()) {
+ if (eventFile.equals(e.getKey().getContainingFile())) {
+ correspondingEditor = e.getValue();
+ break;
+ }
}
- else {
- updateEditorsFromProperties(true);
+ if (correspondingEditor != null) {
+ final String propertyName = event.getPropertyName();
+ if (VirtualFile.PROP_WRITABLE.equals(propertyName)) {
+ correspondingEditor.setViewer(Boolean.valueOf((String)event.getNewValue()));
+ return;
+ }
+ if (VirtualFile.PROP_NAME.equals(propertyName)) {
+ recreateEditorsPanel();
+ }
+ else {
+ updateEditorsFromProperties(true);
+ }
}
}
}
private PropertiesFile getSelectedPropertiesFile() {
if (mySelectedEditor == null) return null;
PropertiesFile selectedFile = null;
- for (Map.Entry<PropertiesFile, Editor> entry : myEditors.entrySet()) {
+ for (Map.Entry<PropertiesFile, EditorEx> entry : myEditors.entrySet()) {
Editor editor = entry.getValue();
if (editor == mySelectedEditor) {
selectedFile = entry.getKey();
@Override
public void dispose() {
if (mySelectedEditor != null) {
- for (final Map.Entry<PropertiesFile, Editor> entry : myEditors.entrySet()) {
+ for (final Map.Entry<PropertiesFile, EditorEx> entry : myEditors.entrySet()) {
if (mySelectedEditor.equals(entry.getValue())) {
writeEditorPropertyValue(null, mySelectedEditor, entry.getKey());
}
}
}
- private Editor createEditor() {
+ private EditorEx createEditor() {
EditorFactory editorFactory = EditorFactory.getInstance();
Document document = editorFactory.createDocument("");
EditorEx editor = (EditorEx)editorFactory.createEditor(document);
@Override
public void run() {
try {
- for (Map.Entry<PropertiesFile, Editor> entry : myEditors.entrySet()) {
+ for (Map.Entry<PropertiesFile, EditorEx> entry : myEditors.entrySet()) {
final Editor translationEditor = entry.getValue();
if (translationEditor != editor) {
final PropertiesFile propertiesFile = entry.getKey();