diff --git a/images/src/org/intellij/images/editor/ImageEditor.java b/images/src/org/intellij/images/editor/ImageEditor.java
index 1aa422f3bba5..917a8fa1a3ed 100644
--- a/images/src/org/intellij/images/editor/ImageEditor.java
+++ b/images/src/org/intellij/images/editor/ImageEditor.java
@@ -18,7 +18,6 @@ package org.intellij.images.editor;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.openapi.vfs.VirtualFileListener;
import org.intellij.images.ui.ImageComponentDecorator;
import javax.swing.*;
@@ -28,7 +27,8 @@ import javax.swing.*;
*
* @author Alexey Efimov
*/
-public interface ImageEditor extends Disposable, VirtualFileListener, ImageComponentDecorator {
+public interface ImageEditor extends Disposable, ImageComponentDecorator {
+
VirtualFile getFile();
Project getProject();
diff --git a/images/src/org/intellij/images/editor/impl/ImageEditorImpl.java b/images/src/org/intellij/images/editor/impl/ImageEditorImpl.java
index 482352c02c73..6d05e7a8ae28 100644
--- a/images/src/org/intellij/images/editor/impl/ImageEditorImpl.java
+++ b/images/src/org/intellij/images/editor/impl/ImageEditorImpl.java
@@ -34,125 +34,133 @@ import javax.swing.*;
*
* @author Alexey Efimov
*/
-final class ImageEditorImpl extends VirtualFileAdapter implements ImageEditor {
- private final Project project;
- private final VirtualFile file;
- private final ImageEditorUI editorUI;
- private boolean disposed;
+final class ImageEditorImpl implements ImageEditor {
+ private final Project project;
+ private final VirtualFile file;
+ private final ImageEditorUI editorUI;
+ private boolean disposed;
- ImageEditorImpl(@NotNull Project project, @NotNull VirtualFile file) {
- this.project = project;
- this.file = file;
+ ImageEditorImpl(@NotNull Project project, @NotNull VirtualFile file) {
+ this.project = project;
+ this.file = file;
- editorUI = new ImageEditorUI(this);
+ editorUI = new ImageEditorUI(this);
+ Disposer.register(this, editorUI);
- VirtualFileManager.getInstance().addVirtualFileListener(this);
+ VirtualFileManager.getInstance().addVirtualFileListener(new VirtualFileAdapter() {
+ @Override
+ public void propertyChanged(@NotNull VirtualFilePropertyEvent event) {
+ ImageEditorImpl.this.propertyChanged(event);
+ }
- setValue(file);
+ @Override
+ public void contentsChanged(@NotNull VirtualFileEvent event) {
+ ImageEditorImpl.this.contentsChanged(event);
+ }
+ }, this);
+
+ setValue(file);
+ }
+
+ private void setValue(VirtualFile file) {
+ try {
+ editorUI.setImage(IfsUtil.getImage(file), IfsUtil.getFormat(file));
}
+ catch (Exception e) {
+ // Error loading image file
+ editorUI.setImage(null, null);
+ }
+ }
- private void setValue(VirtualFile file) {
- try {
- editorUI.setImage(IfsUtil.getImage(file), IfsUtil.getFormat(file));
+ public boolean isValid() {
+ ImageDocument document = editorUI.getImageComponent().getDocument();
+ return document.getValue() != null;
+ }
+
+ public JComponent getComponent() {
+ return editorUI;
+ }
+
+ public JComponent getContentComponent() {
+ return editorUI.getImageComponent();
+ }
+
+ @NotNull
+ public VirtualFile getFile() {
+ return file;
+ }
+
+ @NotNull
+ public Project getProject() {
+ return project;
+ }
+
+ public ImageDocument getDocument() {
+ return editorUI.getImageComponent().getDocument();
+ }
+
+ public void setTransparencyChessboardVisible(boolean visible) {
+ editorUI.getImageComponent().setTransparencyChessboardVisible(visible);
+ editorUI.repaint();
+ }
+
+ public boolean isTransparencyChessboardVisible() {
+ return editorUI.getImageComponent().isTransparencyChessboardVisible();
+ }
+
+ public boolean isEnabledForActionPlace(String place) {
+ // Disable for thumbnails action
+ return !ThumbnailViewActions.ACTION_PLACE.equals(place);
+ }
+
+ public void setGridVisible(boolean visible) {
+ editorUI.getImageComponent().setGridVisible(visible);
+ editorUI.repaint();
+ }
+
+ public boolean isGridVisible() {
+ return editorUI.getImageComponent().isGridVisible();
+ }
+
+ public boolean isDisposed() {
+ return disposed;
+ }
+
+ public ImageZoomModel getZoomModel() {
+ return editorUI.getZoomModel();
+ }
+
+ public void dispose() {
+ disposed = true;
+ }
+
+ void propertyChanged(@NotNull VirtualFilePropertyEvent event) {
+ if (file.equals(event.getFile())) {
+ // Change document
+ file.refresh(true, false, new Runnable() {
+ public void run() {
+ if (ImageFileTypeManager.getInstance().isImage(file)) {
+ setValue(file);
+ }
+ else {
+ setValue(null);
+ // Close editor
+ FileEditorManager editorManager = FileEditorManager.getInstance(project);
+ editorManager.closeFile(file);
+ }
}
- catch (Exception e) {
- // Error loading image file
- editorUI.setImage(null, null);
- }
+ });
}
+ }
- public boolean isValid() {
- ImageDocument document = editorUI.getImageComponent().getDocument();
- return document.getValue() != null;
- }
-
- public JComponent getComponent() {
- return editorUI;
- }
-
- public JComponent getContentComponent() {
- return editorUI.getImageComponent();
- }
-
- @NotNull
- public VirtualFile getFile() {
- return file;
- }
-
- @NotNull
- public Project getProject() {
- return project;
- }
-
- public ImageDocument getDocument() {
- return editorUI.getImageComponent().getDocument();
- }
-
- public void setTransparencyChessboardVisible(boolean visible) {
- editorUI.getImageComponent().setTransparencyChessboardVisible(visible);
- editorUI.repaint();
- }
-
- public boolean isTransparencyChessboardVisible() {
- return editorUI.getImageComponent().isTransparencyChessboardVisible();
- }
-
- public boolean isEnabledForActionPlace(String place) {
- // Disable for thumbnails action
- return !ThumbnailViewActions.ACTION_PLACE.equals(place);
- }
-
- public void setGridVisible(boolean visible) {
- editorUI.getImageComponent().setGridVisible(visible);
- editorUI.repaint();
- }
-
- public boolean isGridVisible() {
- return editorUI.getImageComponent().isGridVisible();
- }
-
- public boolean isDisposed() {
- return disposed;
- }
-
- public ImageZoomModel getZoomModel() {
- return editorUI.getZoomModel();
- }
-
- public void dispose() {
- Disposer.dispose(editorUI);
- VirtualFileManager.getInstance().removeVirtualFileListener(this);
- disposed = true;
- }
-
- public void propertyChanged(@NotNull VirtualFilePropertyEvent event) {
- super.propertyChanged(event);
- if (file.equals(event.getFile())) {
- // Change document
- file.refresh(true, false, new Runnable() {
- public void run() {
- if (ImageFileTypeManager.getInstance().isImage(file)) {
- setValue(file);
- } else {
- setValue(null);
- // Close editor
- FileEditorManager editorManager = FileEditorManager.getInstance(project);
- editorManager.closeFile(file);
- }
- }
- });
- }
- }
-
- public void contentsChanged(@NotNull VirtualFileEvent event) {
- super.contentsChanged(event);
- if (file.equals(event.getFile())) {
- // Change document
- file.refresh(true, false, new Runnable() {
- public void run() {
- setValue(file);
- }
- });
+ void contentsChanged(@NotNull VirtualFileEvent event) {
+ if (file.equals(event.getFile())) {
+ // Change document
+ file.refresh(true, false, new Runnable() {
+ public void run() {
+ setValue(file);
}
+ });
}
+ }
}
diff --git a/images/src/org/intellij/images/editor/impl/ImageEditorManagerImpl.java b/images/src/org/intellij/images/editor/impl/ImageEditorManagerImpl.java
index 08103b9c9e6d..9dc3acd717f8 100644
--- a/images/src/org/intellij/images/editor/impl/ImageEditorManagerImpl.java
+++ b/images/src/org/intellij/images/editor/impl/ImageEditorManagerImpl.java
@@ -15,9 +15,6 @@
*/
package org.intellij.images.editor.impl;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.vfs.VirtualFile;
-import org.intellij.images.editor.ImageEditor;
import org.intellij.images.options.*;
import org.jetbrains.annotations.NotNull;
@@ -29,18 +26,7 @@ import java.awt.image.BufferedImage;
* @author Alexey Efimov
*/
public final class ImageEditorManagerImpl {
- private ImageEditorManagerImpl() {}
-
- /**
- * Create image viewer editor. Don't forget release editor by {@link #releaseImageEditor(ImageEditor)} method.
- *
- * @param project Project
- * @param file File
- * @return Image editor for file
- */
- @NotNull
- public static ImageEditor createImageEditor(@NotNull Project project, @NotNull VirtualFile file) {
- return new ImageEditorImpl(project, file);
+ private ImageEditorManagerImpl() {
}
@NotNull
@@ -56,15 +42,4 @@ public final class ImageEditorManagerImpl {
ui.setImage(image, null);
return ui;
}
-
- /**
- * Release editor. Disposing caches and other resources allocated in creation.
- *
- * @param editor Editor to release.
- */
- public static void releaseImageEditor(@NotNull ImageEditor editor) {
- if (!editor.isDisposed()) {
- editor.dispose();
- }
- }
}
diff --git a/images/src/org/intellij/images/editor/impl/ImageFileEditorImpl.java b/images/src/org/intellij/images/editor/impl/ImageFileEditorImpl.java
index 1c2b6c45ffbd..0b16d07aadfb 100644
--- a/images/src/org/intellij/images/editor/impl/ImageFileEditorImpl.java
+++ b/images/src/org/intellij/images/editor/impl/ImageFileEditorImpl.java
@@ -21,14 +21,13 @@ import com.intellij.openapi.fileEditor.FileEditorLocation;
import com.intellij.openapi.fileEditor.FileEditorState;
import com.intellij.openapi.fileEditor.FileEditorStateLevel;
import com.intellij.openapi.project.Project;
+import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.UserDataHolderBase;
import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.openapi.vfs.VirtualFileManager;
import org.intellij.images.editor.ImageEditor;
import org.intellij.images.editor.ImageFileEditor;
import org.intellij.images.editor.ImageZoomModel;
import org.intellij.images.options.*;
-import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
@@ -40,97 +39,93 @@ import java.beans.PropertyChangeListener;
* @author Alexey Efimov
*/
final class ImageFileEditorImpl extends UserDataHolderBase implements ImageFileEditor {
- @NonNls
- private static final String NAME = "ImageFileEditor";
- private final ImageEditor imageEditor;
+ private static final String NAME = "ImageFileEditor";
- ImageFileEditorImpl(@NotNull Project project, @NotNull VirtualFile file) {
- imageEditor = ImageEditorManagerImpl.createImageEditor(project, file);
+ private final ImageEditor imageEditor;
- // Append file listener
- VirtualFileManager.getInstance().addVirtualFileListener(imageEditor);
+ ImageFileEditorImpl(@NotNull Project project, @NotNull VirtualFile file) {
+ imageEditor = new ImageEditorImpl(project, file);
+ Disposer.register(this, imageEditor);
- // Set background and grid default options
- Options options = OptionsManager.getInstance().getOptions();
- EditorOptions editorOptions = options.getEditorOptions();
- GridOptions gridOptions = editorOptions.getGridOptions();
- TransparencyChessboardOptions transparencyChessboardOptions = editorOptions.getTransparencyChessboardOptions();
- imageEditor.setGridVisible(gridOptions.isShowDefault());
- imageEditor.setTransparencyChessboardVisible(transparencyChessboardOptions.isShowDefault());
+ // Set background and grid default options
+ Options options = OptionsManager.getInstance().getOptions();
+ EditorOptions editorOptions = options.getEditorOptions();
+ GridOptions gridOptions = editorOptions.getGridOptions();
+ TransparencyChessboardOptions transparencyChessboardOptions = editorOptions.getTransparencyChessboardOptions();
+ imageEditor.setGridVisible(gridOptions.isShowDefault());
+ imageEditor.setTransparencyChessboardVisible(transparencyChessboardOptions.isShowDefault());
+ }
+
+ @NotNull
+ public JComponent getComponent() {
+ return imageEditor.getComponent();
+ }
+
+ public JComponent getPreferredFocusedComponent() {
+ return imageEditor.getContentComponent();
+ }
+
+ @NotNull
+ public String getName() {
+ return NAME;
+ }
+
+ @NotNull
+ public FileEditorState getState(@NotNull FileEditorStateLevel level) {
+ ImageZoomModel zoomModel = imageEditor.getZoomModel();
+ return new ImageFileEditorState(
+ imageEditor.isTransparencyChessboardVisible(),
+ imageEditor.isGridVisible(),
+ zoomModel.getZoomFactor());
+ }
+
+ public void setState(@NotNull FileEditorState state) {
+ if (state instanceof ImageFileEditorState) {
+ ImageFileEditorState editorState = (ImageFileEditorState)state;
+ ImageZoomModel zoomModel = imageEditor.getZoomModel();
+ imageEditor.setTransparencyChessboardVisible(editorState.isBackgroundVisible());
+ imageEditor.setGridVisible(editorState.isGridVisible());
+ zoomModel.setZoomFactor(editorState.getZoomFactor());
}
+ }
- @NotNull
- public JComponent getComponent() {
- return imageEditor.getComponent();
- }
+ public boolean isModified() {
+ return false;
+ }
- public JComponent getPreferredFocusedComponent() {
- return imageEditor.getContentComponent();
- }
+ public boolean isValid() {
+ return true;
+ }
- @NotNull
- public String getName() {
- return NAME;
- }
+ public void selectNotify() {
+ }
- @NotNull
- public FileEditorState getState(@NotNull FileEditorStateLevel level) {
- ImageZoomModel zoomModel = imageEditor.getZoomModel();
- return new ImageFileEditorState(
- imageEditor.isTransparencyChessboardVisible(),
- imageEditor.isGridVisible(),
- zoomModel.getZoomFactor());
- }
+ public void deselectNotify() {
+ }
- public void setState(@NotNull FileEditorState state) {
- if (state instanceof ImageFileEditorState) {
- ImageFileEditorState editorState = (ImageFileEditorState) state;
- ImageZoomModel zoomModel = imageEditor.getZoomModel();
- imageEditor.setTransparencyChessboardVisible(editorState.isBackgroundVisible());
- imageEditor.setGridVisible(editorState.isGridVisible());
- zoomModel.setZoomFactor(editorState.getZoomFactor());
- }
- }
+ public void addPropertyChangeListener(@NotNull PropertyChangeListener listener) {
+ }
- public boolean isModified() {
- return false;
- }
+ public void removePropertyChangeListener(@NotNull PropertyChangeListener listener) {
+ }
- public boolean isValid() {
- return true;
- }
+ public BackgroundEditorHighlighter getBackgroundHighlighter() {
+ return null;
+ }
- public void selectNotify() {
- }
+ public FileEditorLocation getCurrentLocation() {
+ return null;
+ }
- public void deselectNotify() {
- }
+ public StructureViewBuilder getStructureViewBuilder() {
+ return null;
+ }
- public void addPropertyChangeListener(@NotNull PropertyChangeListener listener) {
- }
+ public void dispose() {
+ }
- public void removePropertyChangeListener(@NotNull PropertyChangeListener listener) {
- }
-
- public BackgroundEditorHighlighter getBackgroundHighlighter() {
- return null;
- }
-
- public FileEditorLocation getCurrentLocation() {
- return null;
- }
-
- public StructureViewBuilder getStructureViewBuilder() {
- return null;
- }
-
- public void dispose() {
- VirtualFileManager.getInstance().removeVirtualFileListener(imageEditor);
- ImageEditorManagerImpl.releaseImageEditor(imageEditor);
- }
-
- @NotNull
- public ImageEditor getImageEditor() {
- return imageEditor;
- }
+ @NotNull
+ public ImageEditor getImageEditor() {
+ return imageEditor;
+ }
}