/* * JBoss, Home of Professional Open Source * Copyright 2005, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jbpm.gd.common.editor; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.SWTGraphics; import org.eclipse.draw2d.geometry.Dimension; import org.eclipse.draw2d.geometry.Rectangle; import org.eclipse.gef.LayerConstants; import org.eclipse.gef.editparts.LayerManager; import org.eclipse.gef.ui.palette.PaletteViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.SashForm; 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.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorSite; import org.eclipse.ui.PartInitException; import org.eclipse.ui.part.EditorPart; import org.eclipse.ui.part.FileEditorInput; public class GraphPage extends EditorPart { private Editor editor; private GraphicalViewer graphicalViewer; private OutlineViewer outlineViewer; public GraphPage(Editor editor) { this.editor = editor; } public void createPartControl(Composite parent) { SashForm sashForm = new SashForm(parent, SWT.HORIZONTAL); addPalette(sashForm); addModelViewer(sashForm); addOutlineViewer(); sashForm.setWeights(new int[] {15, 85}); } private void addOutlineViewer() { outlineViewer = editor.createOutlineViewer(); } private void addModelViewer(Composite composite) { graphicalViewer = editor.createGraphicalViewer(); graphicalViewer.initControl(composite); getSite().setSelectionProvider(graphicalViewer); } private void addPalette(Composite composite) { PaletteViewer paletteViewer = new PaletteViewer(); paletteViewer.createControl(composite); editor.getEditDomain().setPaletteViewer(paletteViewer); editor.getEditDomain().setPaletteRoot(new PaletteRoot(editor)); } public void setFocus() { } public void doSave(IProgressMonitor monitor) { // TODO repair doSave method SWTGraphics g = null; GC gc = null; Image image = null; LayerManager lm = (LayerManager)graphicalViewer.getEditPartRegistry().get(LayerManager.ID); IFigure figure = lm.getLayer(LayerConstants.PRINTABLE_LAYERS); try { Rectangle r = figure.getBounds(); editor.getRootContainer().setDimension(new Dimension(r.width, r.height)); image = new Image(Display.getDefault(), 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(getImageSavePath(), SWT.IMAGE_JPEG); refreshProcessFolder(); } finally { if (g != null) { g.dispose(); } if (gc != null) { gc.dispose(); } if (image != null) { image.dispose(); } } } private void refreshProcessFolder() { try { IFile file = ((FileEditorInput)getEditorInput()).getFile(); file.getParent().refreshLocal(1, null); } catch (CoreException e) { e.printStackTrace(); } } public String getImageSavePath() { IFile file = ((FileEditorInput)getEditorInput()).getFile(); String name = editor.getContentProvider().getDiagramImageFileName(file.getName()); IPath path = file.getRawLocation().removeLastSegments(1).append(name); return path.toOSString(); } public void doSaveAs() { } public boolean isDirty() { return false; } public boolean isSaveAsAllowed() { return false; } public void init(IEditorSite site, IEditorInput input) throws PartInitException { setSite(site); setInput(input); } public GraphicalViewer getDesignerModelViewer() { return graphicalViewer; } public OutlineViewer getOutlineViewer() { return outlineViewer; } public Editor getEditor() { return editor; } }