*/
boolean isDisposed();
+ ImageZoomModel getZoomModel();
+
+ void setGridVisible(boolean visible);
+
+ boolean isGridVisible();
}
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;
- }
- };
}
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.ui.ImageComponentDecorator;
+import org.intellij.images.editor.ImageFileEditor;
/**
* Editor actions utility.
* @param e Action event
* @return Current {@link ImageEditor} or <code>null</code>
*/
- //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 ImageComponentDecorator getImageComponentDecorator(AnActionEvent e) {
+ public static ImageEditor getEditor(AnActionEvent e) {
DataContext dataContext = e.getDataContext();
- return ImageComponentDecorator.DATA_KEY.getData(dataContext);
+ FileEditor editor = PlatformDataKeys.FILE_EDITOR.getData(dataContext);
+ if (editor instanceof ImageFileEditor) {
+ ImageFileEditor fileEditor = (ImageFileEditor) editor;
+ return fileEditor.getImageEditor();
+ }
+ return null;
}
/**
* @return Enabled value
*/
public static boolean setEnabled(AnActionEvent e) {
- ImageComponentDecorator decorator = getImageComponentDecorator(e);
+ ImageEditor editor = getValidEditor(e);
Presentation presentation = e.getPresentation();
- presentation.setEnabled(decorator != null);
+ presentation.setEnabled(editor != null);
return presentation.isEnabled();
}
}
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.
*/
public final class ActualSizeAction extends AnAction implements DumbAware {
public void actionPerformed(AnActionEvent e) {
- ImageComponentDecorator decorator = ImageEditorActionUtil.getImageComponentDecorator(e);
- if (decorator != null) {
- ImageZoomModel zoomModel = decorator.getZoomModel();
+ ImageEditor editor = ImageEditorActionUtil.getValidEditor(e);
+ if (editor != null) {
+ ImageZoomModel zoomModel = editor.getZoomModel();
zoomModel.setZoomFactor(1.0d);
}
}
public void update(AnActionEvent e) {
super.update(e);
if (ImageEditorActionUtil.setEnabled(e)) {
- ImageComponentDecorator decorator = ImageEditorActionUtil.getImageComponentDecorator(e);
- ImageZoomModel zoomModel = decorator.getZoomModel();
+ ImageEditor editor = ImageEditorActionUtil.getValidEditor(e);
+ ImageZoomModel zoomModel = editor.getZoomModel();
e.getPresentation().setEnabled(zoomModel.getZoomFactor() != 1.0d);
}
}
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.
*/
public final class ToggleGridAction extends ToggleAction implements DumbAware {
public boolean isSelected(AnActionEvent e) {
- ImageComponentDecorator decorator = ImageEditorActionUtil.getImageComponentDecorator(e);
- return decorator != null && decorator.isGridVisible();
+ ImageEditor editor = ImageEditorActionUtil.getValidEditor(e);
+ return editor != null && editor.isGridVisible();
}
public void setSelected(AnActionEvent e, boolean state) {
- ImageComponentDecorator decorator = ImageEditorActionUtil.getImageComponentDecorator(e);
- if (decorator != null) {
- decorator.setGridVisible(state);
+ ImageEditor editor = ImageEditorActionUtil.getValidEditor(e);
+ if (editor != null) {
+ editor.setGridVisible(state);
}
}
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.
*/
public final class ZoomInAction extends AnAction implements DumbAware {
public void actionPerformed(AnActionEvent e) {
- ImageComponentDecorator decorator = ImageEditorActionUtil.getImageComponentDecorator(e);
- if (decorator != null) {
- ImageZoomModel zoomModel = decorator.getZoomModel();
+ ImageEditor editor = ImageEditorActionUtil.getValidEditor(e);
+ if (editor != null) {
+ ImageZoomModel zoomModel = editor.getZoomModel();
zoomModel.zoomIn();
}
}
public void update(AnActionEvent e) {
super.update(e);
if (ImageEditorActionUtil.setEnabled(e)) {
- ImageComponentDecorator decorator = ImageEditorActionUtil.getImageComponentDecorator(e);
- ImageZoomModel zoomModel = decorator.getZoomModel();
+ ImageEditor editor = ImageEditorActionUtil.getValidEditor(e);
+ ImageZoomModel zoomModel = editor.getZoomModel();
e.getPresentation().setEnabled(zoomModel.canZoomIn());
}
}
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.
*/
public final class ZoomOutAction extends AnAction implements DumbAware {
public void actionPerformed(AnActionEvent e) {
- ImageComponentDecorator decorator = ImageEditorActionUtil.getImageComponentDecorator(e);
- if (decorator != null) {
- ImageZoomModel zoomModel = decorator.getZoomModel();
+ ImageEditor editor = ImageEditorActionUtil.getValidEditor(e);
+ if (editor != null) {
+ ImageZoomModel zoomModel = editor.getZoomModel();
zoomModel.zoomOut();
}
}
public void update(AnActionEvent e) {
super.update(e);
if (ImageEditorActionUtil.setEnabled(e)) {
- ImageComponentDecorator decorator = ImageEditorActionUtil.getImageComponentDecorator(e);
- ImageZoomModel zoomModel = decorator.getZoomModel();
+ ImageEditor editor = ImageEditorActionUtil.getValidEditor(e);
+ ImageZoomModel zoomModel = editor.getZoomModel();
e.getPresentation().setEnabled(zoomModel.canZoomOut());
}
}
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.
* @author <a href="mailto:aefimov.box@gmail.com">Alexey Efimov</a>
*/
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;
this.project = project;
this.file = file;
- editorUI = new ImageEditorUI(this);
+ // Options
+ Options options = OptionsManager.getInstance().getOptions();
+ editorUI = new ImageEditorUI(this, options.getEditorOptions());
+ options.addPropertyChangeListener(optionsChangeListener);
VirtualFileManager.getInstance().addVirtualFileListener(this);
}
private void setValue(VirtualFile file) {
+ ImageDocument document = editorUI.getImageComponent().getDocument();
try {
- editorUI.setImage(IfsUtil.getImage(file), IfsUtil.getFormat(file));
- }
- catch (Exception e) {
- // Error loading image file
- editorUI.setImage(null, null);
+ 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);
}
}
}
public void dispose() {
+ Options options = OptionsManager.getInstance().getOptions();
+ options.removePropertyChangeListener(optionsChangeListener);
editorUI.dispose();
VirtualFileManager.getInstance().removeVirtualFileListener(this);
disposed = true;
});
}
}
+
+ 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());
+ }
+ }
}
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;
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;
*
* @author <a href="mailto:aefimov.box@gmail.com">Alexey Efimov</a>
*/
-final class ImageEditorUI extends JPanel implements DataProvider, CopyProvider, ImageComponentDecorator {
+final class ImageEditorUI extends JPanel implements DataProvider, CopyProvider {
@NonNls
private static final String IMAGE_PANEL = "image";
@NonNls
private static final String ERROR_PANEL = "error";
- private final @Nullable ImageEditor editor;
+ private final ImageEditor editor;
private final DeleteProvider deleteProvider;
private final CopyPasteSupport copyPasteSupport;
private final JPanel contentPanel;
private final JLabel infoLabel;
- private final PropertyChangeListener optionsChangeListener = new OptionsChangeListener();
-
- ImageEditorUI(@Nullable ImageEditor editor) {
+ ImageEditorUI(ImageEditor editor, EditorOptions editorOptions) {
this.editor = editor;
-
- Options options = OptionsManager.getInstance().getOptions();
- EditorOptions editorOptions = options.getEditorOptions();
- options.addPropertyChangeListener(optionsChangeListener);
-
final PsiActionSupportFactory factory = PsiActionSupportFactory.getInstance();
- if (factory != null && editor != null) {
+ if (factory != null) {
copyPasteSupport =
factory.createPsiBasedCopyPasteSupport(editor.getProject(), this, new PsiActionSupportFactory.PsiElementSelector() {
public PsiElement[] getSelectedElements() {
ColorModel colorModel = image.getColorModel();
String format = document.getFormat();
if (format == null) {
- format = editor != null ? ImagesBundle.message("unknown.format") : "";
+ format = ImagesBundle.message("unknown.format");
} else {
format = format.toUpperCase(Locale.ENGLISH);
}
- VirtualFile file = editor != null ? editor.getFile() : null;
+ VirtualFile file = editor.getFile();
infoLabel.setText(
ImagesBundle.message("image.info",
image.getWidth(), image.getHeight(), format,
}
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);
- }
-
- @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() {
+ 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;
@Override
public Point magnify(double scale, Point at) {
Point locationBefore = imageComponent.getLocation();
- ImageZoomModel model = editor != null ? editor.getZoomModel() : getZoomModel();
+ ImageZoomModel model = editor.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)),
public Object getData(String dataId) {
if (CommonDataKeys.PROJECT.is(dataId)) {
- return editor != null ? editor.getProject() : null;
+ return editor.getProject();
} else if (CommonDataKeys.VIRTUAL_FILE.is(dataId)) {
- return editor != null ? editor.getFile() : null;
+ return editor.getFile();
} else if (CommonDataKeys.VIRTUAL_FILE_ARRAY.is(dataId)) {
- return editor != null ? new VirtualFile[]{editor.getFile()} : new VirtualFile[]{};
+ return new VirtualFile[]{editor.getFile()};
} else if (CommonDataKeys.PSI_FILE.is(dataId)) {
return getData(CommonDataKeys.PSI_ELEMENT.getName());
} else if (CommonDataKeys.PSI_ELEMENT.is(dataId)) {
- VirtualFile file = editor != null ? editor.getFile() : null;
+ VirtualFile file = editor.getFile();
return file != null && file.isValid() ? PsiManager.getInstance(editor.getProject()).findFile(file) : null;
} else if (LangDataKeys.PSI_ELEMENT_ARRAY.is(dataId)) {
- return editor != null ? new PsiElement[]{(PsiElement)getData(CommonDataKeys.PSI_ELEMENT.getName())} : new PsiElement[]{} ;
+ return new PsiElement[]{(PsiElement)getData(CommonDataKeys.PSI_ELEMENT.getName())};
} else if (PlatformDataKeys.COPY_PROVIDER.is(dataId) && copyPasteSupport != null) {
return this;
} else if (PlatformDataKeys.CUT_PROVIDER.is(dataId) && copyPasteSupport != null) {
} else if (PlatformDataKeys.DELETE_ELEMENT_PROVIDER.is(dataId)) {
return deleteProvider;
} else if (ImageComponentDecorator.DATA_KEY.is(dataId)) {
- return editor != null ? editor : this;
+ return editor;
}
return null;
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());
- }
- }
-
}
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;
public void dispose() {
// Dispose UI
- Disposer.dispose(getUI());
+ getUI().dispose();
// 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() {
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.
* @return <code>true</code> is decorator is enabled
*/
boolean isEnabledForActionPlace(String place);
-
- ImageZoomModel getZoomModel();
-
- void setGridVisible(boolean visible);
-
- boolean isGridVisible();
}
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;
}
static JComponent createIconViewer(Icon icon) {
- 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 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);
+ }
+ });
- return ImageEditorManagerImpl.createImageEditorUI(image);
}
@Nullable
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;
/**
}
}
- @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);