diff --git a/images/src/org/intellij/images/editor/ImageEditor.java b/images/src/org/intellij/images/editor/ImageEditor.java
index a888961b8af0..1aa422f3bba5 100644
--- a/images/src/org/intellij/images/editor/ImageEditor.java
+++ b/images/src/org/intellij/images/editor/ImageEditor.java
@@ -59,9 +59,4 @@ public interface ImageEditor extends Disposable, VirtualFileListener, ImageCompo
*/
boolean isDisposed();
- ImageZoomModel getZoomModel();
-
- void setGridVisible(boolean visible);
-
- boolean isGridVisible();
}
diff --git a/images/src/org/intellij/images/editor/ImageZoomModel.java b/images/src/org/intellij/images/editor/ImageZoomModel.java
index a8902fd9aa21..12216b5d0b04 100644
--- a/images/src/org/intellij/images/editor/ImageZoomModel.java
+++ b/images/src/org/intellij/images/editor/ImageZoomModel.java
@@ -38,4 +38,38 @@ public interface ImageZoomModel {
boolean canZoomIn();
boolean isZoomLevelChanged();
+
+ ImageZoomModel STUB = new ImageZoomModel() {
+ @Override
+ public double getZoomFactor() {
+ return 1;
+ }
+
+ @Override
+ public void setZoomFactor(double zoomFactor) {
+ }
+
+ @Override
+ public void zoomOut() {
+ }
+
+ @Override
+ public void zoomIn() {
+ }
+
+ @Override
+ public boolean canZoomOut() {
+ return false;
+ }
+
+ @Override
+ public boolean canZoomIn() {
+ return false;
+ }
+
+ @Override
+ public boolean isZoomLevelChanged() {
+ return false;
+ }
+ };
}
diff --git a/images/src/org/intellij/images/editor/actionSystem/ImageEditorActionUtil.java b/images/src/org/intellij/images/editor/actionSystem/ImageEditorActionUtil.java
index 1f6e6f8e2a40..4379abfad418 100644
--- a/images/src/org/intellij/images/editor/actionSystem/ImageEditorActionUtil.java
+++ b/images/src/org/intellij/images/editor/actionSystem/ImageEditorActionUtil.java
@@ -17,11 +17,9 @@ package org.intellij.images.editor.actionSystem;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.DataContext;
-import com.intellij.openapi.actionSystem.PlatformDataKeys;
import com.intellij.openapi.actionSystem.Presentation;
-import com.intellij.openapi.fileEditor.FileEditor;
import org.intellij.images.editor.ImageEditor;
-import org.intellij.images.editor.ImageFileEditor;
+import org.intellij.images.ui.ImageComponentDecorator;
/**
* Editor actions utility.
@@ -38,22 +36,17 @@ public final class ImageEditorActionUtil {
* @param e Action event
* @return Current {@link ImageEditor} or null
*/
- public static ImageEditor getValidEditor(AnActionEvent e) {
- ImageEditor editor = getEditor(e);
- if (editor != null && editor.isValid()) {
- return editor;
- }
- return null;
- }
+ //public static ImageEditor getValidEditor(AnActionEvent e) {
+ // ImageEditor editor = getEditor(e);
+ // if (editor != null && editor.isValid()) {
+ // return editor;
+ // }
+ // return null;
+ //}
- public static ImageEditor getEditor(AnActionEvent e) {
+ public static ImageComponentDecorator getImageComponentDecorator(AnActionEvent e) {
DataContext dataContext = e.getDataContext();
- FileEditor editor = PlatformDataKeys.FILE_EDITOR.getData(dataContext);
- if (editor instanceof ImageFileEditor) {
- ImageFileEditor fileEditor = (ImageFileEditor) editor;
- return fileEditor.getImageEditor();
- }
- return null;
+ return ImageComponentDecorator.DATA_KEY.getData(dataContext);
}
/**
@@ -63,9 +56,9 @@ public final class ImageEditorActionUtil {
* @return Enabled value
*/
public static boolean setEnabled(AnActionEvent e) {
- ImageEditor editor = getValidEditor(e);
+ ImageComponentDecorator decorator = getImageComponentDecorator(e);
Presentation presentation = e.getPresentation();
- presentation.setEnabled(editor != null);
+ presentation.setEnabled(decorator != null);
return presentation.isEnabled();
}
}
diff --git a/images/src/org/intellij/images/editor/actions/ActualSizeAction.java b/images/src/org/intellij/images/editor/actions/ActualSizeAction.java
index 60ae407f8374..9379e86e97b4 100644
--- a/images/src/org/intellij/images/editor/actions/ActualSizeAction.java
+++ b/images/src/org/intellij/images/editor/actions/ActualSizeAction.java
@@ -21,6 +21,7 @@ import com.intellij.openapi.project.DumbAware;
import org.intellij.images.editor.ImageEditor;
import org.intellij.images.editor.ImageZoomModel;
import org.intellij.images.editor.actionSystem.ImageEditorActionUtil;
+import org.intellij.images.ui.ImageComponentDecorator;
/**
* Resize image to actual size.
@@ -31,9 +32,9 @@ import org.intellij.images.editor.actionSystem.ImageEditorActionUtil;
*/
public final class ActualSizeAction extends AnAction implements DumbAware {
public void actionPerformed(AnActionEvent e) {
- ImageEditor editor = ImageEditorActionUtil.getValidEditor(e);
- if (editor != null) {
- ImageZoomModel zoomModel = editor.getZoomModel();
+ ImageComponentDecorator decorator = ImageEditorActionUtil.getImageComponentDecorator(e);
+ if (decorator != null) {
+ ImageZoomModel zoomModel = decorator.getZoomModel();
zoomModel.setZoomFactor(1.0d);
}
}
@@ -41,8 +42,8 @@ public final class ActualSizeAction extends AnAction implements DumbAware {
public void update(AnActionEvent e) {
super.update(e);
if (ImageEditorActionUtil.setEnabled(e)) {
- ImageEditor editor = ImageEditorActionUtil.getValidEditor(e);
- ImageZoomModel zoomModel = editor.getZoomModel();
+ ImageComponentDecorator decorator = ImageEditorActionUtil.getImageComponentDecorator(e);
+ ImageZoomModel zoomModel = decorator.getZoomModel();
e.getPresentation().setEnabled(zoomModel.getZoomFactor() != 1.0d);
}
}
diff --git a/images/src/org/intellij/images/editor/actions/ToggleGridAction.java b/images/src/org/intellij/images/editor/actions/ToggleGridAction.java
index 4cd74f8521c3..87d0d284c011 100644
--- a/images/src/org/intellij/images/editor/actions/ToggleGridAction.java
+++ b/images/src/org/intellij/images/editor/actions/ToggleGridAction.java
@@ -20,6 +20,7 @@ import com.intellij.openapi.actionSystem.ToggleAction;
import com.intellij.openapi.project.DumbAware;
import org.intellij.images.editor.ImageEditor;
import org.intellij.images.editor.actionSystem.ImageEditorActionUtil;
+import org.intellij.images.ui.ImageComponentDecorator;
/**
* Toggle grid lines over image.
@@ -29,14 +30,14 @@ import org.intellij.images.editor.actionSystem.ImageEditorActionUtil;
*/
public final class ToggleGridAction extends ToggleAction implements DumbAware {
public boolean isSelected(AnActionEvent e) {
- ImageEditor editor = ImageEditorActionUtil.getValidEditor(e);
- return editor != null && editor.isGridVisible();
+ ImageComponentDecorator decorator = ImageEditorActionUtil.getImageComponentDecorator(e);
+ return decorator != null && decorator.isGridVisible();
}
public void setSelected(AnActionEvent e, boolean state) {
- ImageEditor editor = ImageEditorActionUtil.getValidEditor(e);
- if (editor != null) {
- editor.setGridVisible(state);
+ ImageComponentDecorator decorator = ImageEditorActionUtil.getImageComponentDecorator(e);
+ if (decorator != null) {
+ decorator.setGridVisible(state);
}
}
diff --git a/images/src/org/intellij/images/editor/actions/ZoomInAction.java b/images/src/org/intellij/images/editor/actions/ZoomInAction.java
index 7461b39ec360..b48702119da3 100644
--- a/images/src/org/intellij/images/editor/actions/ZoomInAction.java
+++ b/images/src/org/intellij/images/editor/actions/ZoomInAction.java
@@ -21,6 +21,7 @@ import com.intellij.openapi.project.DumbAware;
import org.intellij.images.editor.ImageEditor;
import org.intellij.images.editor.ImageZoomModel;
import org.intellij.images.editor.actionSystem.ImageEditorActionUtil;
+import org.intellij.images.ui.ImageComponentDecorator;
/**
* Zoom in.
@@ -30,9 +31,9 @@ import org.intellij.images.editor.actionSystem.ImageEditorActionUtil;
*/
public final class ZoomInAction extends AnAction implements DumbAware {
public void actionPerformed(AnActionEvent e) {
- ImageEditor editor = ImageEditorActionUtil.getValidEditor(e);
- if (editor != null) {
- ImageZoomModel zoomModel = editor.getZoomModel();
+ ImageComponentDecorator decorator = ImageEditorActionUtil.getImageComponentDecorator(e);
+ if (decorator != null) {
+ ImageZoomModel zoomModel = decorator.getZoomModel();
zoomModel.zoomIn();
}
}
@@ -40,8 +41,8 @@ public final class ZoomInAction extends AnAction implements DumbAware {
public void update(AnActionEvent e) {
super.update(e);
if (ImageEditorActionUtil.setEnabled(e)) {
- ImageEditor editor = ImageEditorActionUtil.getValidEditor(e);
- ImageZoomModel zoomModel = editor.getZoomModel();
+ ImageComponentDecorator decorator = ImageEditorActionUtil.getImageComponentDecorator(e);
+ ImageZoomModel zoomModel = decorator.getZoomModel();
e.getPresentation().setEnabled(zoomModel.canZoomIn());
}
}
diff --git a/images/src/org/intellij/images/editor/actions/ZoomOutAction.java b/images/src/org/intellij/images/editor/actions/ZoomOutAction.java
index 3f7e709e7999..0873e397f584 100644
--- a/images/src/org/intellij/images/editor/actions/ZoomOutAction.java
+++ b/images/src/org/intellij/images/editor/actions/ZoomOutAction.java
@@ -21,6 +21,7 @@ import com.intellij.openapi.project.DumbAware;
import org.intellij.images.editor.ImageEditor;
import org.intellij.images.editor.ImageZoomModel;
import org.intellij.images.editor.actionSystem.ImageEditorActionUtil;
+import org.intellij.images.ui.ImageComponentDecorator;
/**
* Zoom out.
@@ -30,9 +31,9 @@ import org.intellij.images.editor.actionSystem.ImageEditorActionUtil;
*/
public final class ZoomOutAction extends AnAction implements DumbAware {
public void actionPerformed(AnActionEvent e) {
- ImageEditor editor = ImageEditorActionUtil.getValidEditor(e);
- if (editor != null) {
- ImageZoomModel zoomModel = editor.getZoomModel();
+ ImageComponentDecorator decorator = ImageEditorActionUtil.getImageComponentDecorator(e);
+ if (decorator != null) {
+ ImageZoomModel zoomModel = decorator.getZoomModel();
zoomModel.zoomOut();
}
}
@@ -40,8 +41,8 @@ public final class ZoomOutAction extends AnAction implements DumbAware {
public void update(AnActionEvent e) {
super.update(e);
if (ImageEditorActionUtil.setEnabled(e)) {
- ImageEditor editor = ImageEditorActionUtil.getValidEditor(e);
- ImageZoomModel zoomModel = editor.getZoomModel();
+ ImageComponentDecorator decorator = ImageEditorActionUtil.getImageComponentDecorator(e);
+ ImageZoomModel zoomModel = decorator.getZoomModel();
e.getPresentation().setEnabled(zoomModel.canZoomOut());
}
}
diff --git a/images/src/org/intellij/images/editor/impl/ImageEditorImpl.java b/images/src/org/intellij/images/editor/impl/ImageEditorImpl.java
index 581d7bb9b10e..8c23b10b0c6e 100644
--- a/images/src/org/intellij/images/editor/impl/ImageEditorImpl.java
+++ b/images/src/org/intellij/images/editor/impl/ImageEditorImpl.java
@@ -22,17 +22,11 @@ import org.intellij.images.editor.ImageDocument;
import org.intellij.images.editor.ImageEditor;
import org.intellij.images.editor.ImageZoomModel;
import org.intellij.images.fileTypes.ImageFileTypeManager;
-import org.intellij.images.options.*;
import org.intellij.images.thumbnail.actionSystem.ThumbnailViewActions;
-import org.intellij.images.ui.ImageComponent;
import org.intellij.images.vfs.IfsUtil;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
-import java.awt.*;
-import java.awt.image.BufferedImage;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
/**
* Image viewer implementation.
@@ -40,7 +34,6 @@ import java.beans.PropertyChangeListener;
* @author Alexey Efimov
*/
final class ImageEditorImpl extends VirtualFileAdapter implements ImageEditor {
- private final PropertyChangeListener optionsChangeListener = new OptionsChangeListener();
private final Project project;
private final VirtualFile file;
private final ImageEditorUI editorUI;
@@ -50,10 +43,7 @@ final class ImageEditorImpl extends VirtualFileAdapter implements ImageEditor {
this.project = project;
this.file = file;
- // Options
- Options options = OptionsManager.getInstance().getOptions();
- editorUI = new ImageEditorUI(this, options.getEditorOptions());
- options.addPropertyChangeListener(optionsChangeListener);
+ editorUI = new ImageEditorUI(this);
VirtualFileManager.getInstance().addVirtualFileListener(this);
@@ -61,34 +51,12 @@ final class ImageEditorImpl extends VirtualFileAdapter implements ImageEditor {
}
private void setValue(VirtualFile file) {
- ImageDocument document = editorUI.getImageComponent().getDocument();
try {
- BufferedImage previousImage = document.getValue();
- BufferedImage image = IfsUtil.getImage(file);
- document.setValue(image);
- document.setFormat(IfsUtil.getFormat(file));
- ImageZoomModel zoomModel = getZoomModel();
- if (image != null && (previousImage == null || !zoomModel.isZoomLevelChanged())) {
- // Set smart zooming behaviour on open
- Options options = OptionsManager.getInstance().getOptions();
- ZoomOptions zoomOptions = options.getEditorOptions().getZoomOptions();
- // Open as actual size
- zoomModel.setZoomFactor(1.0d);
-
- if (zoomOptions.isSmartZooming()) {
- Dimension prefferedSize = zoomOptions.getPrefferedSize();
- if (prefferedSize.width > image.getWidth() && prefferedSize.height > image.getHeight()) {
- // Resize to preffered size
- // Calculate zoom factor
-
- double factor = (prefferedSize.getWidth() / (double) image.getWidth() + prefferedSize.getHeight() / (double) image.getHeight()) / 2.0d;
- zoomModel.setZoomFactor(Math.ceil(factor));
- }
- }
- }
- } catch (Exception e) {
- // Error loading image file
- document.setValue(null);
+ editorUI.setImage(IfsUtil.getImage(file), IfsUtil.getFormat(file));
+ }
+ catch (Exception e) {
+ // Error loading image file
+ editorUI.setImage(null, null);
}
}
@@ -151,8 +119,6 @@ final class ImageEditorImpl extends VirtualFileAdapter implements ImageEditor {
}
public void dispose() {
- Options options = OptionsManager.getInstance().getOptions();
- options.removePropertyChangeListener(optionsChangeListener);
editorUI.dispose();
VirtualFileManager.getInstance().removeVirtualFileListener(this);
disposed = true;
@@ -188,21 +154,4 @@ final class ImageEditorImpl extends VirtualFileAdapter implements ImageEditor {
});
}
}
-
- private class OptionsChangeListener implements PropertyChangeListener {
- public void propertyChange(PropertyChangeEvent evt) {
- Options options = (Options) evt.getSource();
- EditorOptions editorOptions = options.getEditorOptions();
- TransparencyChessboardOptions chessboardOptions = editorOptions.getTransparencyChessboardOptions();
- GridOptions gridOptions = editorOptions.getGridOptions();
-
- ImageComponent imageComponent = editorUI.getImageComponent();
- imageComponent.setTransparencyChessboardCellSize(chessboardOptions.getCellSize());
- imageComponent.setTransparencyChessboardWhiteColor(chessboardOptions.getWhiteColor());
- imageComponent.setTransparencyChessboardBlankColor(chessboardOptions.getBlackColor());
- imageComponent.setGridLineZoomFactor(gridOptions.getLineZoomFactor());
- imageComponent.setGridLineSpan(gridOptions.getLineSpan());
- imageComponent.setGridLineColor(gridOptions.getLineColor());
- }
- }
}
diff --git a/images/src/org/intellij/images/editor/impl/ImageEditorManagerImpl.java b/images/src/org/intellij/images/editor/impl/ImageEditorManagerImpl.java
index fd7e3c92e932..08103b9c9e6d 100644
--- a/images/src/org/intellij/images/editor/impl/ImageEditorManagerImpl.java
+++ b/images/src/org/intellij/images/editor/impl/ImageEditorManagerImpl.java
@@ -18,8 +18,11 @@ 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;
+import java.awt.image.BufferedImage;
+
/**
* Image viewer manager implementation.
*
@@ -40,6 +43,20 @@ public final class ImageEditorManagerImpl {
return new ImageEditorImpl(project, file);
}
+ @NotNull
+ public static ImageEditorUI createImageEditorUI(BufferedImage image) {
+ ImageEditorUI ui = new ImageEditorUI(null);
+ Options options = OptionsManager.getInstance().getOptions();
+ EditorOptions editorOptions = options.getEditorOptions();
+ GridOptions gridOptions = editorOptions.getGridOptions();
+ TransparencyChessboardOptions transparencyChessboardOptions = editorOptions.getTransparencyChessboardOptions();
+ ui.getImageComponent().setGridVisible(gridOptions.isShowDefault());
+ ui.getImageComponent().setTransparencyChessboardVisible(transparencyChessboardOptions.isShowDefault());
+
+ ui.setImage(image, null);
+ return ui;
+ }
+
/**
* Release editor. Disposing caches and other resources allocated in creation.
*
diff --git a/images/src/org/intellij/images/editor/impl/ImageEditorUI.java b/images/src/org/intellij/images/editor/impl/ImageEditorUI.java
index b14296626eba..fedca0234308 100644
--- a/images/src/org/intellij/images/editor/impl/ImageEditorUI.java
+++ b/images/src/org/intellij/images/editor/impl/ImageEditorUI.java
@@ -38,6 +38,7 @@ import org.intellij.images.editor.ImageEditor;
import org.intellij.images.editor.ImageZoomModel;
import org.intellij.images.editor.actionSystem.ImageEditorActions;
import org.intellij.images.options.*;
+import org.intellij.images.thumbnail.actionSystem.ThumbnailViewActions;
import org.intellij.images.ui.ImageComponent;
import org.intellij.images.ui.ImageComponentDecorator;
import org.jetbrains.annotations.NonNls;
@@ -57,6 +58,8 @@ import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
import java.io.IOException;
import java.util.Locale;
@@ -65,13 +68,13 @@ import java.util.Locale;
*
* @author Alexey Efimov
*/
-final class ImageEditorUI extends JPanel implements DataProvider, CopyProvider {
+final class ImageEditorUI extends JPanel implements DataProvider, CopyProvider, ImageComponentDecorator {
@NonNls
private static final String IMAGE_PANEL = "image";
@NonNls
private static final String ERROR_PANEL = "error";
- private final ImageEditor editor;
+ private final @Nullable ImageEditor editor;
private final DeleteProvider deleteProvider;
private final CopyPasteSupport copyPasteSupport;
@@ -82,10 +85,17 @@ final class ImageEditorUI extends JPanel implements DataProvider, CopyProvider {
private final JPanel contentPanel;
private final JLabel infoLabel;
- ImageEditorUI(ImageEditor editor, EditorOptions editorOptions) {
+ private final PropertyChangeListener optionsChangeListener = new OptionsChangeListener();
+
+ ImageEditorUI(@Nullable ImageEditor editor) {
this.editor = editor;
+
+ Options options = OptionsManager.getInstance().getOptions();
+ EditorOptions editorOptions = options.getEditorOptions();
+ options.addPropertyChangeListener(optionsChangeListener);
+
final PsiActionSupportFactory factory = PsiActionSupportFactory.getInstance();
- if (factory != null) {
+ if (factory != null && editor != null) {
copyPasteSupport =
factory.createPsiBasedCopyPasteSupport(editor.getProject(), this, new PsiActionSupportFactory.PsiElementSelector() {
public PsiElement[] getSelectedElements() {
@@ -168,11 +178,11 @@ final class ImageEditorUI extends JPanel implements DataProvider, CopyProvider {
ColorModel colorModel = image.getColorModel();
String format = document.getFormat();
if (format == null) {
- format = ImagesBundle.message("unknown.format");
+ format = editor != null ? ImagesBundle.message("unknown.format") : "";
} else {
format = format.toUpperCase(Locale.ENGLISH);
}
- VirtualFile file = editor.getFile();
+ VirtualFile file = editor != null ? editor.getFile() : null;
infoLabel.setText(
ImagesBundle.message("image.info",
image.getWidth(), image.getHeight(), format,
@@ -192,16 +202,73 @@ final class ImageEditorUI extends JPanel implements DataProvider, CopyProvider {
}
void dispose() {
+ Options options = OptionsManager.getInstance().getOptions();
+ options.removePropertyChangeListener(optionsChangeListener);
+
imageComponent.removeMouseWheelListener(wheelAdapter);
imageComponent.getDocument().removeChangeListener(changeListener);
removeAll();
}
+ @Override
+ public void setTransparencyChessboardVisible(boolean visible) {
+ imageComponent.setTransparencyChessboardVisible(visible);
+ }
- ImageZoomModel getZoomModel() {
+ @Override
+ public boolean isTransparencyChessboardVisible() {
+ return imageComponent.isTransparencyChessboardVisible();
+ }
+
+ @Override
+ public boolean isEnabledForActionPlace(String place) {
+ // Disable for thumbnails action
+ return !ThumbnailViewActions.ACTION_PLACE.equals(place);
+ }
+
+
+ @Override
+ public void setGridVisible(boolean visible) {
+ imageComponent.setGridVisible(visible);
+ }
+
+ @Override
+ public boolean isGridVisible() {
+ return imageComponent.isGridVisible();
+ }
+
+ public ImageZoomModel getZoomModel() {
return zoomModel;
}
+ public void setImage(BufferedImage image, String format) {
+ ImageDocument document = imageComponent.getDocument();
+ BufferedImage previousImage = document.getValue();
+ document.setValue(image);
+ if (image == null) return;
+ document.setFormat(format);
+ ImageZoomModel zoomModel = getZoomModel();
+ if (previousImage == null || !zoomModel.isZoomLevelChanged()) {
+ // Set smart zooming behaviour on open
+ Options options = OptionsManager.getInstance().getOptions();
+ ZoomOptions zoomOptions = options.getEditorOptions().getZoomOptions();
+ // Open as actual size
+ zoomModel.setZoomFactor(1.0d);
+
+ if (zoomOptions.isSmartZooming()) {
+ Dimension prefferedSize = zoomOptions.getPrefferedSize();
+ if (prefferedSize.width > image.getWidth() && prefferedSize.height > image.getHeight()) {
+ // Resize to preffered size
+ // Calculate zoom factor
+
+ double factor =
+ (prefferedSize.getWidth() / (double)image.getWidth() + prefferedSize.getHeight() / (double)image.getHeight()) / 2.0d;
+ zoomModel.setZoomFactor(Math.ceil(factor));
+ }
+ }
+ }
+ }
+
private final class ImageContainerPane extends JBLayeredPane {
private final ImageComponent imageComponent;
@@ -213,7 +280,7 @@ final class ImageEditorUI extends JPanel implements DataProvider, CopyProvider {
@Override
public Point magnify(double scale, Point at) {
Point locationBefore = imageComponent.getLocation();
- ImageZoomModel model = editor.getZoomModel();
+ ImageZoomModel model = editor != null ? editor.getZoomModel() : getZoomModel();
double factor = model.getZoomFactor();
model.setZoomFactor(scale * factor);
return new Point(((int)((at.x - Math.max(scale > 1.0 ? locationBefore.x : 0, 0)) * scale)),
@@ -383,18 +450,18 @@ final class ImageEditorUI extends JPanel implements DataProvider, CopyProvider {
public Object getData(String dataId) {
if (CommonDataKeys.PROJECT.is(dataId)) {
- return editor.getProject();
+ return editor != null ? editor.getProject() : null;
} else if (CommonDataKeys.VIRTUAL_FILE.is(dataId)) {
- return editor.getFile();
+ return editor != null ? editor.getFile() : null;
} else if (CommonDataKeys.VIRTUAL_FILE_ARRAY.is(dataId)) {
- return new VirtualFile[]{editor.getFile()};
+ return editor != null ? new VirtualFile[]{editor.getFile()} : new VirtualFile[]{};
} else if (CommonDataKeys.PSI_FILE.is(dataId)) {
return getData(CommonDataKeys.PSI_ELEMENT.getName());
} else if (CommonDataKeys.PSI_ELEMENT.is(dataId)) {
- VirtualFile file = editor.getFile();
+ VirtualFile file = editor != null ? editor.getFile() : null;
return file != null && file.isValid() ? PsiManager.getInstance(editor.getProject()).findFile(file) : null;
} else if (LangDataKeys.PSI_ELEMENT_ARRAY.is(dataId)) {
- return new PsiElement[]{(PsiElement)getData(CommonDataKeys.PSI_ELEMENT.getName())};
+ return editor != null ? new PsiElement[]{(PsiElement)getData(CommonDataKeys.PSI_ELEMENT.getName())} : new PsiElement[]{} ;
} else if (PlatformDataKeys.COPY_PROVIDER.is(dataId) && copyPasteSupport != null) {
return this;
} else if (PlatformDataKeys.CUT_PROVIDER.is(dataId) && copyPasteSupport != null) {
@@ -402,7 +469,7 @@ final class ImageEditorUI extends JPanel implements DataProvider, CopyProvider {
} else if (PlatformDataKeys.DELETE_ELEMENT_PROVIDER.is(dataId)) {
return deleteProvider;
} else if (ImageComponentDecorator.DATA_KEY.is(dataId)) {
- return editor;
+ return editor != null ? editor : this;
}
return null;
@@ -450,4 +517,21 @@ final class ImageEditorUI extends JPanel implements DataProvider, CopyProvider {
return myImage;
}
}
+
+ private class OptionsChangeListener implements PropertyChangeListener {
+ public void propertyChange(PropertyChangeEvent evt) {
+ Options options = (Options) evt.getSource();
+ EditorOptions editorOptions = options.getEditorOptions();
+ TransparencyChessboardOptions chessboardOptions = editorOptions.getTransparencyChessboardOptions();
+ GridOptions gridOptions = editorOptions.getGridOptions();
+
+ imageComponent.setTransparencyChessboardCellSize(chessboardOptions.getCellSize());
+ imageComponent.setTransparencyChessboardWhiteColor(chessboardOptions.getWhiteColor());
+ imageComponent.setTransparencyChessboardBlankColor(chessboardOptions.getBlackColor());
+ imageComponent.setGridLineZoomFactor(gridOptions.getLineZoomFactor());
+ imageComponent.setGridLineSpan(gridOptions.getLineSpan());
+ imageComponent.setGridLineColor(gridOptions.getLineColor());
+ }
+ }
+
}
diff --git a/images/src/org/intellij/images/thumbnail/impl/ThumbnailViewImpl.java b/images/src/org/intellij/images/thumbnail/impl/ThumbnailViewImpl.java
index 445c245b12d9..2b04c8822c98 100644
--- a/images/src/org/intellij/images/thumbnail/impl/ThumbnailViewImpl.java
+++ b/images/src/org/intellij/images/thumbnail/impl/ThumbnailViewImpl.java
@@ -19,11 +19,13 @@
package org.intellij.images.thumbnail.impl;
import com.intellij.openapi.project.Project;
+import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.wm.ToolWindow;
import com.intellij.openapi.wm.ToolWindowAnchor;
import com.intellij.openapi.wm.ToolWindowManager;
import icons.ImagesIcons;
+import org.intellij.images.editor.ImageZoomModel;
import org.intellij.images.editor.actionSystem.ImageEditorActions;
import org.intellij.images.thumbnail.ThumbnailView;
import org.intellij.images.vfs.IfsUtil;
@@ -160,12 +162,26 @@ final class ThumbnailViewImpl implements ThumbnailView {
public void dispose() {
// Dispose UI
- getUI().dispose();
+ Disposer.dispose(getUI());
// Unregister ToolWindow
ToolWindowManager windowManager = ToolWindowManager.getInstance(project);
windowManager.unregisterToolWindow(TOOLWINDOW_ID);
}
+ @Override
+ public ImageZoomModel getZoomModel() {
+ return ImageZoomModel.STUB;
+ }
+
+ @Override
+ public void setGridVisible(boolean visible) {
+ }
+
+ @Override
+ public boolean isGridVisible() {
+ return false;
+ }
+
private final class LazyScroller implements Runnable {
public void run() {
SwingUtilities.invokeLater(new Runnable() {
diff --git a/images/src/org/intellij/images/ui/ImageComponentDecorator.java b/images/src/org/intellij/images/ui/ImageComponentDecorator.java
index da9ef9215b3a..075065cbbca9 100644
--- a/images/src/org/intellij/images/ui/ImageComponentDecorator.java
+++ b/images/src/org/intellij/images/ui/ImageComponentDecorator.java
@@ -16,6 +16,7 @@
package org.intellij.images.ui;
import com.intellij.openapi.actionSystem.DataKey;
+import org.intellij.images.editor.ImageZoomModel;
/**
* Image Component manager. It can toggle backround transparency, grid, etc.
@@ -36,4 +37,10 @@ public interface ImageComponentDecorator {
* @return true is decorator is enabled
*/
boolean isEnabledForActionPlace(String place);
+
+ ImageZoomModel getZoomModel();
+
+ void setGridVisible(boolean visible);
+
+ boolean isGridVisible();
}
diff --git a/java/debugger/impl/src/com/intellij/debugger/settings/ImageObjectRenderer.java b/java/debugger/impl/src/com/intellij/debugger/settings/ImageObjectRenderer.java
index 96f7fbe086a2..6372092dc2e9 100644
--- a/java/debugger/impl/src/com/intellij/debugger/settings/ImageObjectRenderer.java
+++ b/java/debugger/impl/src/com/intellij/debugger/settings/ImageObjectRenderer.java
@@ -25,13 +25,9 @@ import com.intellij.debugger.ui.tree.ValueDescriptor;
import com.intellij.debugger.ui.tree.render.CompoundReferenceRenderer;
import com.intellij.debugger.ui.tree.render.DescriptorLabelListener;
import com.intellij.rt.debugger.ImageSerializer;
-import com.intellij.ui.Gray;
-import com.intellij.ui.JBColor;
-import com.intellij.ui.components.JBLabel;
-import com.intellij.ui.components.JBScrollPane;
-import com.intellij.util.ui.UIUtil;
import com.intellij.xdebugger.frame.XFullValueEvaluator;
import com.sun.jdi.*;
+import org.intellij.images.editor.impl.ImageEditorManagerImpl;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -71,24 +67,15 @@ class ImageObjectRenderer extends CompoundReferenceRenderer implements FullValue
}
static JComponent createIconViewer(Icon icon) {
- return new JBScrollPane(new JBLabel(icon){
- private BufferedImage myBackgroundImage = UIUtil.createImage(16, 16, BufferedImage.TYPE_INT_ARGB);
- {
- Graphics2D g = myBackgroundImage.createGraphics();
- g.setColor(new JBColor(Gray._255, Gray._135));
- g.fillRect(0, 0, 17, 17);
- g.setColor(new JBColor(Gray._191, Gray._83));
- g.fillRect(0, 0, 8, 8);
- g.fillRect(8, 8, 8, 8);
- }
- @Override
- public void paint(Graphics g) {
- ((Graphics2D)g).setPaint(new TexturePaint(myBackgroundImage, new Rectangle(0, 0, 16, 16)));
- g.fillRect(0, 0, getWidth()+1, getHeight() + 1);
- super.paint(g);
- }
- });
+ final int w = icon.getIconWidth();
+ final int h = icon.getIconHeight();
+ final BufferedImage image = GraphicsEnvironment.getLocalGraphicsEnvironment()
+ .getDefaultScreenDevice().getDefaultConfiguration().createCompatibleImage(w, h, Transparency.TRANSLUCENT);
+ final Graphics2D g = image.createGraphics();
+ icon.paintIcon(null, g, 0, 0);
+ g.dispose();
+ return ImageEditorManagerImpl.createImageEditorUI(image);
}
@Nullable
diff --git a/platform/platform-impl/src/com/intellij/ui/ShowColorPickerAction.java b/platform/platform-impl/src/com/intellij/ui/ShowColorPickerAction.java
index 5327c84c3c8d..74af71c52d54 100644
--- a/platform/platform-impl/src/com/intellij/ui/ShowColorPickerAction.java
+++ b/platform/platform-impl/src/com/intellij/ui/ShowColorPickerAction.java
@@ -18,11 +18,13 @@ package com.intellij.ui;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.CommonDataKeys;
+import com.intellij.openapi.actionSystem.PlatformDataKeys;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.wm.IdeFrame;
import com.intellij.openapi.wm.WindowManager;
import javax.swing.*;
+import java.awt.*;
import java.util.List;
/**
@@ -41,6 +43,16 @@ public class ShowColorPickerAction extends AnAction {
}
}
+ @Override
+ public void update(AnActionEvent e) {
+ Component component = PlatformDataKeys.CONTEXT_COMPONENT.getData(e.getDataContext());
+ if (component == null || !(SwingUtilities.getWindowAncestor(component) instanceof Frame)) {
+ e.getPresentation().setEnabledAndVisible(false);
+ return;
+ }
+ e.getPresentation().setEnabledAndVisible(true);
+ }
+
private static JComponent rootComponent(Project project) {
if (project != null) {
IdeFrame frame = WindowManager.getInstance().getIdeFrame(project);
diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/DebuggerUIUtil.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/DebuggerUIUtil.java
index 9baa5a85bda4..6758d5e9b356 100644
--- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/DebuggerUIUtil.java
+++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/DebuggerUIUtil.java
@@ -127,7 +127,7 @@ public class DebuggerUIUtil {
JComponent component,
@Nullable final FullValueEvaluationCallbackImpl callback) {
ComponentPopupBuilder builder = JBPopupFactory.getInstance().createComponentPopupBuilder(component, null);
- builder.setResizable(true)
+ builder.setResizable(true).setAlpha(1)
.setMovable(true)
.setDimensionServiceKey(project, FULL_VALUE_POPUP_DIMENSION_KEY, false)
.setRequestFocus(false);