exportshapeaction.java
来自「mywork是rcp开发的很好的例子」· Java 代码 · 共 143 行
JAVA
143 行
package net.sf.freenote.action;
import java.io.File;
import net.sf.freenote.FreeNoteConstants;
import net.sf.freenote.ShapesEditor;
import org.eclipse.draw2d.Graphics;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.SWTGraphics;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.gef.GraphicalViewer;
import org.eclipse.gef.LayerConstants;
import org.eclipse.gef.editparts.LayerManager;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Device;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.graphics.ImageLoader;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.IWorkbenchWindowActionDelegate;
/**
* 将模型导出为图片
* @author levin
* @since 2008-1-27 下午12:57:23
*/
public class ExportShapeAction extends Action implements IWorkbenchWindowActionDelegate {
private IWorkbenchWindow window;
public ExportShapeAction() {
super();
}
public ExportShapeAction(IWorkbenchWindow window) {
super();
this.window = window;
setId(FreeNoteConstants.EXPORT_ACTION);
}
@Override
public void dispose() {
}
@Override
public void init(IWorkbenchWindow window) {
this.window = window;
}
@Override
public void run() {
if (getGraphicalViewer() == null)
return;
try {
String fname = openFileDialog();
if (fname != null && (!new File(fname).exists() || MessageDialog.openConfirm(window.getShell(), "文件覆盖确认", "文件已经存在,是否覆盖?"))) {
exportImage(fname);
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void run(IAction action) {
this.run();
}
@Override
public void selectionChanged(IAction action, ISelection selection) {
}
public void exportImage(String fileName) {
Device device = getGraphicalViewer().getControl().getDisplay();
LayerManager lm = (LayerManager) getGraphicalViewer().getEditPartRegistry().get(LayerManager.ID);
IFigure figure = lm.getLayer(LayerConstants.PRINTABLE_LAYERS);
Rectangle r = figure.getClientArea();
Image image = null;
GC gc = null;
Graphics g = null;
try {
image = new Image(device, r.width, r.height);
gc = new GC(image);
g = new SWTGraphics(gc);
g.translate(r.x * -1, r.y * -1);
figure.paint(g);
ImageLoader imageLoader = new ImageLoader();
imageLoader.data = new ImageData[] { image.getImageData() };
imageLoader.save(fileName, getImageFormat(fileName));
} catch (Exception e) {
e.printStackTrace();
} finally {
if (g != null) {
g.dispose();
}
if (gc != null) {
gc.dispose();
}
if (image != null) {
image.dispose();
}
}
}
private int getImageFormat(String fileName) {
if(fileName.endsWith(".bmp"))
return SWT.IMAGE_BMP_RLE;
else if(fileName.endsWith(".gif"))
return SWT.IMAGE_GIF;
else if(fileName.endsWith(".jpg"))
return SWT.IMAGE_JPEG;
else if(fileName.endsWith(".png"))
return SWT.IMAGE_PNG;
return SWT.IMAGE_BMP;
}
private String openFileDialog() {
FileDialog fd=new FileDialog(window.getShell(),SWT.SAVE);
fd.setText("请输入一个文件名");
fd.setFilterExtensions(new String[]{"*.png","*.gif","*.jpg","*.bmp",});
return fd.open();
}
private GraphicalViewer getGraphicalViewer() {
try{
ShapesEditor se=(ShapesEditor) window.getActivePage().getActiveEditor();
return se.getGraphicalViewer();
}catch(NullPointerException npe){
return null;
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?