Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 346172 | Differences between
and this patch

Collapse All | Expand All

(-)META-INF/sapphire-extension.xml (+38 lines)
Lines 12-17 Link Here
12
 *    Konstantin Komissarchik - initial implementation and ongoing maintenance
12
 *    Konstantin Komissarchik - initial implementation and ongoing maintenance
13
 *    Gregory Amerson - [358295] Need access to selection in list property editor
13
 *    Gregory Amerson - [358295] Need access to selection in list property editor
14
 *    Gregory Amerson - [377136] Add Sapphire.Diagram.Node to possible contexts for Sapphire.Add  
14
 *    Gregory Amerson - [377136] Add Sapphire.Diagram.Node to possible contexts for Sapphire.Add  
15
 *    Gregory Amerson - [346172] [diagram] Add print, zoom, save as image actions  
15
 ******************************************************************************
16
 ******************************************************************************
16
-->
17
-->
17
18
Lines 216-221 Link Here
216
        <group>Sapphire.Diagram.Appearance</group>       
217
        <group>Sapphire.Diagram.Appearance</group>       
217
    </action>
218
    </action>
218
    <action>
219
    <action>
220
        <id>Sapphire.Diagram.Zoom.In</id>
221
        <label>zoom in</label>
222
        <image>org/eclipse/sapphire/ui/actions/ZoomIn.gif</image>
223
        <description>Zoom in the diagram.</description>
224
        <location>after:Sapphire.Diagram.Layout</location>
225
        <group>Sapphire.Diagram.Appearance</group>
226
        <context>Sapphire.Diagram.Editor</context>
227
        <context>Sapphire.Diagram.Header</context>
228
    </action>
229
    <action>
230
        <id>Sapphire.Diagram.Zoom.Out</id>
231
        <label>zoom in</label>
232
        <image>org/eclipse/sapphire/ui/actions/ZoomOut.gif</image>
233
        <description>Zoom out the diagram.</description>
234
        <location>after:Sapphire.Diagram.Zoom.In</location>
235
        <group>Sapphire.Diagram.Appearance</group>
236
        <context>Sapphire.Diagram.Editor</context>
237
        <context>Sapphire.Diagram.Header</context>
238
    </action>
239
    <action>
219
        <id>Sapphire.Diagram.Node.Default</id>
240
        <id>Sapphire.Diagram.Node.Default</id>
220
        <context>Sapphire.Diagram.Node</context>
241
        <context>Sapphire.Diagram.Node</context>
221
        <label>default action</label>
242
        <label>default action</label>
Lines 247-252 Link Here
247
        <location>after:Sapphire.Diagram.SelectAll</location>
268
        <location>after:Sapphire.Diagram.SelectAll</location>
248
        <group>Sapphire.Diagram.SelectAll</group>
269
        <group>Sapphire.Diagram.SelectAll</group>
249
    </action>
270
    </action>
271
    <action>
272
        <id>Sapphire.Diagram.Save.As.Image</id>
273
        <label>save as image</label>
274
        <image>org/eclipse/sapphire/ui/actions/SaveAsImage.gif</image>
275
        <description>Save the diagram as an image.</description>
276
        <context>Sapphire.Diagram.Editor</context>
277
        <context>Sapphire.Diagram.Header</context>
278
    </action>
279
    <action>
280
        <id>Sapphire.Diagram.Print</id>
281
        <label>Print</label>
282
        <image>org/eclipse/sapphire/ui/actions/Print.gif</image>
283
        <description>Print the diagram.</description>
284
        <location>after:Sapphire.Diagram.Save.As.Image</location>
285
        <context>Sapphire.Diagram.Editor</context>
286
        <context>Sapphire.Diagram.Header</context>
287
    </action>
250
   
288
   
251
    <action-handler>
289
    <action-handler>
252
        <action>Sapphire.Browse</action>
290
        <action>Sapphire.Browse</action>
(-)src/org/eclipse/sapphire/ui/def/ActionContextRef.java (+2 lines)
Lines 7-12 Link Here
7
 *
7
 *
8
 * Contributors:
8
 * Contributors:
9
 *    Konstantin Komissarchik - initial implementation and ongoing maintenance
9
 *    Konstantin Komissarchik - initial implementation and ongoing maintenance
10
 *    Gregory Amerson - [346172] [diagram] Add print, zoom, save as image actions
10
 ******************************************************************************/
11
 ******************************************************************************/
11
12
12
package org.eclipse.sapphire.ui.def;
13
package org.eclipse.sapphire.ui.def;
Lines 55-60 Link Here
55
            SapphireActionSystem.CONTEXT_SECTION,
56
            SapphireActionSystem.CONTEXT_SECTION,
56
            SapphireActionSystem.CONTEXT_VALUE_PROPERTY_EDITOR,
57
            SapphireActionSystem.CONTEXT_VALUE_PROPERTY_EDITOR,
57
            SapphireActionSystem.CONTEXT_DIAGRAM_EDITOR,
58
            SapphireActionSystem.CONTEXT_DIAGRAM_EDITOR,
59
            SapphireActionSystem.CONTEXT_DIAGRAM_HEADER,
58
            SapphireActionSystem.CONTEXT_DIAGRAM,
60
            SapphireActionSystem.CONTEXT_DIAGRAM,
59
            SapphireActionSystem.CONTEXT_DIAGRAM_NODE,
61
            SapphireActionSystem.CONTEXT_DIAGRAM_NODE,
60
            SapphireActionSystem.CONTEXT_DIAGRAM_NODE_HIDDEN,
62
            SapphireActionSystem.CONTEXT_DIAGRAM_NODE_HIDDEN,
(-)META-INF/sapphire-extension.xml (+33 lines)
Lines 10-15 Link Here
10
 *
10
 *
11
 * Contributors:
11
 * Contributors:
12
 *    Ling Hao - initial implementation and ongoing maintenance 
12
 *    Ling Hao - initial implementation and ongoing maintenance 
13
 *    Gregory Amerson - [346172] [diagram] Add print, zoom, save as image actions
13
 ******************************************************************************
14
 ******************************************************************************
14
-->
15
-->
15
16
Lines 40-43 Link Here
40
        <context>Sapphire.Diagram.Node.Hidden</context>
41
        <context>Sapphire.Diagram.Node.Hidden</context>
41
        <context>Sapphire.Diagram.Connection.Hidden</context>
42
        <context>Sapphire.Diagram.Connection.Hidden</context>
42
    </action-handler>
43
    </action-handler>
44
    <action-handler>
45
        <action>Sapphire.Diagram.Print</action>
46
        <context>Sapphire.Diagram.Editor</context>
47
        <context>Sapphire.Diagram.Header</context>
48
        <impl>org.eclipse.sapphire.ui.swt.gef.actions.PrintDiagramActionHandler</impl>
49
    </action-handler>
50
    <action-handler>
51
        <action>Sapphire.Diagram.Save.As.Image</action>
52
        <context>Sapphire.Diagram.Editor</context>
53
        <context>Sapphire.Diagram.Header</context>
54
        <impl>org.eclipse.sapphire.ui.swt.gef.actions.SaveAsImageDiagramActionHandler</impl>
55
    </action-handler>
56
    <action-handler>
57
        <action>Sapphire.Diagram.Zoom.In</action>
58
        <context>Sapphire.Diagram.Editor</context>
59
        <context>Sapphire.Diagram.Header</context>
60
        <impl>org.eclipse.sapphire.ui.swt.gef.actions.ZoomDiagramActionHandler</impl>
61
        <param>
62
            <name>zoom</name>
63
            <value>in</value>
64
        </param>
65
    </action-handler>
66
    <action-handler>
67
        <action>Sapphire.Diagram.Zoom.Out</action>
68
        <context>Sapphire.Diagram.Editor</context>
69
        <context>Sapphire.Diagram.Header</context>
70
        <impl>org.eclipse.sapphire.ui.swt.gef.actions.ZoomDiagramActionHandler</impl>
71
        <param>
72
            <name>zoom</name>
73
            <value>out</value>
74
        </param>
75
    </action-handler>
43
</extension>
76
</extension>
(-)src/org/eclipse/sapphire/ui/swt/gef/actions/PrintDiagramActionHandler.java (+46 lines)
Added Link Here
1
/******************************************************************************
2
 * Copyright (c) 2012 Liferay
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *    Gregory Amerson - initial implementation
10
 ******************************************************************************/
11
12
package org.eclipse.sapphire.ui.swt.gef.actions;
13
14
import org.eclipse.gef.ui.actions.PrintAction;
15
import org.eclipse.sapphire.ui.SapphireRenderingContext;
16
import org.eclipse.sapphire.ui.diagram.SapphireDiagramActionHandler;
17
import org.eclipse.sapphire.ui.swt.gef.DiagramRenderingContext;
18
import org.eclipse.sapphire.ui.swt.gef.SapphireDiagramEditor;
19
20
/**
21
 * @author <a href="mailto:gregory.amerson@liferay.com">Gregory Amerson</a>
22
 */
23
public class PrintDiagramActionHandler extends SapphireDiagramActionHandler
24
{
25
26
    @Override
27
    public boolean canExecute( Object obj )
28
    {
29
        return true;
30
    }
31
32
    @Override
33
    protected Object run( SapphireRenderingContext context )
34
    {
35
        DiagramRenderingContext diagramContext = (DiagramRenderingContext) context;
36
        SapphireDiagramEditor diagramEditor = diagramContext.getDiagramEditor();
37
38
        if( diagramEditor != null )
39
        {
40
            new PrintAction( diagramEditor ).run();
41
        }
42
43
        return null;
44
    }
45
46
}
(-)src/org/eclipse/sapphire/ui/swt/gef/actions/SaveAsImageDiagramActionHandler.java (+112 lines)
Added Link Here
1
/******************************************************************************
2
 * Copyright (c) 2012 Liferay
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *    Gregory Amerson - initial implementation
10
 ******************************************************************************/
11
12
package org.eclipse.sapphire.ui.swt.gef.actions;
13
14
import java.io.FileNotFoundException;
15
import java.io.FileOutputStream;
16
17
import org.eclipse.draw2d.IFigure;
18
import org.eclipse.draw2d.SWTGraphics;
19
import org.eclipse.draw2d.geometry.Rectangle;
20
import org.eclipse.gef.GraphicalViewer;
21
import org.eclipse.gef.LayerConstants;
22
import org.eclipse.gef.editparts.ScalableFreeformRootEditPart;
23
import org.eclipse.sapphire.ui.SapphireRenderingContext;
24
import org.eclipse.sapphire.ui.diagram.SapphireDiagramActionHandler;
25
import org.eclipse.sapphire.ui.swt.gef.DiagramRenderingContext;
26
import org.eclipse.sapphire.ui.swt.gef.SapphireDiagramEditor;
27
import org.eclipse.swt.SWT;
28
import org.eclipse.swt.graphics.GC;
29
import org.eclipse.swt.graphics.Image;
30
import org.eclipse.swt.graphics.ImageData;
31
import org.eclipse.swt.graphics.ImageLoader;
32
import org.eclipse.swt.widgets.Display;
33
import org.eclipse.swt.widgets.FileDialog;
34
import org.eclipse.ui.IEditorInput;
35
import org.eclipse.ui.IFileEditorInput;
36
37
/**
38
 * @author <a href="mailto:gregory.amerson@liferay.com">Gregory Amerson</a>
39
 */
40
public class SaveAsImageDiagramActionHandler extends SapphireDiagramActionHandler
41
{
42
43
    @Override
44
    public boolean canExecute( Object obj )
45
    {
46
        return true;
47
    }
48
49
    @Override
50
    protected Object run( SapphireRenderingContext context )
51
    {
52
        DiagramRenderingContext diagramContext = (DiagramRenderingContext) context;
53
        SapphireDiagramEditor diagramEditor = diagramContext.getDiagramEditor();
54
55
        if( diagramEditor != null )
56
        {
57
            FileDialog dialog = new FileDialog( context.getShell(), SWT.SAVE );
58
59
            IEditorInput editorInput = diagramEditor.getPart().adapt( IEditorInput.class );
60
61
            if( editorInput instanceof IFileEditorInput )
62
            {
63
                dialog.setFilterPath( ( (IFileEditorInput) editorInput ).getFile().getParent().getRawLocation().toOSString() );
64
            }
65
66
            dialog.setFileName( editorInput.getName().replaceAll( ".xml", ".png" ) );
67
68
            dialog.setFilterExtensions( new String[] { "*.png" } );
69
70
            dialog.setText( "Save as image" );
71
72
            dialog.setOverwrite( true );
73
74
            String filePath = dialog.open();
75
76
            if( filePath == null )
77
            {
78
                return null;
79
            }
80
81
            GraphicalViewer graphicalViewer = (GraphicalViewer) diagramEditor.getAdapter( GraphicalViewer.class );
82
83
            ScalableFreeformRootEditPart rootEditPart =
84
                (ScalableFreeformRootEditPart) graphicalViewer.getRootEditPart();
85
86
            IFigure figure = rootEditPart.getLayer( LayerConstants.PRINTABLE_LAYERS );
87
88
            Rectangle rectangle = figure.getBounds();
89
90
            Image image = new Image( Display.getDefault(), rectangle.width, rectangle.height );
91
92
            GC gc = new GC( image );
93
            SWTGraphics graphics = new SWTGraphics( gc );
94
            graphics.translate( rectangle.x * -1, rectangle.y * -1 );
95
            figure.paint( graphics );
96
97
            ImageLoader loader = new ImageLoader();
98
            loader.data = new ImageData[] { image.getImageData() };
99
100
            try
101
            {
102
                loader.save( new FileOutputStream( filePath ), SWT.IMAGE_PNG );
103
            }
104
            catch( FileNotFoundException e )
105
            {
106
            }
107
        }
108
109
        return null;
110
    }
111
112
}
(-)src/org/eclipse/sapphire/ui/swt/gef/actions/ZoomDiagramActionHandler.java (+77 lines)
Added Link Here
1
/******************************************************************************
2
 * Copyright (c) 2012 Liferay
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *    Gregory Amerson - initial implementation
10
 ******************************************************************************/
11
12
package org.eclipse.sapphire.ui.swt.gef.actions;
13
14
import org.eclipse.gef.GraphicalViewer;
15
import org.eclipse.gef.editparts.ZoomManager;
16
import org.eclipse.gef.ui.actions.ZoomInAction;
17
import org.eclipse.gef.ui.actions.ZoomOutAction;
18
import org.eclipse.sapphire.ui.SapphireAction;
19
import org.eclipse.sapphire.ui.SapphireRenderingContext;
20
import org.eclipse.sapphire.ui.def.ActionHandlerDef;
21
import org.eclipse.sapphire.ui.diagram.SapphireDiagramActionHandler;
22
import org.eclipse.sapphire.ui.swt.gef.DiagramRenderingContext;
23
import org.eclipse.sapphire.ui.swt.gef.SapphireDiagramEditor;
24
25
/**
26
 * @author <a href="mailto:gregory.amerson@liferay.com">Gregory Amerson</a>
27
 */
28
public class ZoomDiagramActionHandler extends SapphireDiagramActionHandler
29
{
30
31
    private boolean zoomOut = true;
32
33
    @Override
34
    public boolean canExecute( Object obj )
35
    {
36
        return true;
37
    }
38
39
    @Override
40
    public void init( SapphireAction action, ActionHandlerDef def )
41
    {
42
        super.init( action, def );
43
44
        String zoom = def.getParam( "zoom" );
45
46
        if( "in".equals( zoom ) )
47
        {
48
            this.zoomOut = false;
49
        }
50
    }
51
52
    @Override
53
    protected Object run( SapphireRenderingContext context )
54
    {
55
        DiagramRenderingContext diagramContext = (DiagramRenderingContext) context;
56
        SapphireDiagramEditor diagramEditor = diagramContext.getDiagramEditor();
57
58
        if( diagramEditor != null )
59
        {
60
            GraphicalViewer graphicalViewer = (GraphicalViewer) diagramEditor.getAdapter( GraphicalViewer.class );
61
62
            ZoomManager zoomManager = (ZoomManager) graphicalViewer.getProperty( ZoomManager.class.toString() );
63
64
            if( this.zoomOut )
65
            {
66
                new ZoomOutAction( zoomManager ).run();
67
            }
68
            else
69
            {
70
                new ZoomInAction( zoomManager ).run();
71
            }
72
        }
73
74
        return null;
75
    }
76
77
}

Return to bug 346172