1   /****************************************************************************
2    **
3    ** This file is part of the yFiles extension package yExport-1.3.
4    ** 
5    ** yWorks proprietary/confidential. Use is subject to license terms.
6    **
7    ** Redistribution of this file or of an unauthorized byte-code version
8    ** of this file is strictly forbidden.
9    **
10   ** Copyright (c) 2007-2012 by yWorks GmbH, Vor dem Kreuzberg 28, 
11   ** 72070 Tuebingen, Germany. All rights reserved.
12   **
13   ***************************************************************************/
14  
15  package demo.yext.export;
16  
17  
18  import y.option.ConstraintManager;
19  import y.option.OptionGroup;
20  import y.option.OptionHandler;
21  import y.view.Graph2D;
22  import y.view.Graph2DView;
23  import y.view.YRenderingHints;
24  import yext.export.io.EPSOutputHandler;
25  
26  import java.awt.event.ActionEvent;
27  import javax.swing.JButton;
28  import javax.swing.JToolBar;
29  
30  
31  /**
32   * Demonstrates how to export a graph to EPS format.
33   *
34   */
35  public class EPSExportDemo extends AbstractExportDemo
36  {
37    private static final String RENDER_TEXT_AS_SHAPES = "Render Text as Shapes";
38    private static final String EMBED_FONTS = "Embed Fonts";
39  
40  
41    /**
42     * Creates a toolbar for this demo.
43     */
44    protected JToolBar createToolBar() {
45      JToolBar jtb = super.createToolBar();
46      jtb.addSeparator();
47      EPSOutputHandler outputHandler = new EPSOutputHandler();
48      jtb.add(new JButton(new EPSExportAction("EPS Export", outputHandler)));
49      return jtb;
50    }
51  
52    /**
53     * Action that exports the given graph to EPS.
54     */
55    class EPSExportAction extends ExportAction
56    {
57      EPSExportAction( String name, EPSOutputHandler outputHandler ) {
58        super(name, outputHandler);
59  
60        final String[] sizes = {
61                "Use Original Size", USE_CUSTOM_WIDTH, USE_CUSTOM_HEIGHT
62        };
63        final String[] clipRegions = {
64                GRAPH, VIEW
65        };
66  
67        // set up an OptionHandler to allow for user customizations
68        options = new OptionHandler(name);
69        final OptionGroup group = new OptionGroup();
70        group.setAttribute(OptionGroup.ATTRIBUTE_TITLE, name + " Options");
71        group.addItem(options.addEnum(SIZE, sizes, 0));
72        group.addItem(options.addInt(CUSTOM_WIDTH,  500));
73        group.addItem(options.addInt(CUSTOM_HEIGHT, 500));
74        group.addItem(options.addInt(EMPTY_BORDER_WIDTH, 10));
75        group.addItem(options.addEnum(CLIP_REGION, clipRegions, 0));
76        group.addItem(options.addBool(SELECTION_PAINTING, false));
77        group.addItem(options.addBool(RENDER_TEXT_AS_SHAPES, false));
78        group.addItem(options.addBool(EMBED_FONTS, false));
79  
80        final ConstraintManager cm = new ConstraintManager(options);
81        cm.setEnabledOnValueEquals(SIZE, USE_CUSTOM_WIDTH, CUSTOM_WIDTH);
82        cm.setEnabledOnValueEquals(SIZE, USE_CUSTOM_HEIGHT, CUSTOM_HEIGHT);
83        cm.setEnabledOnValueEquals(CLIP_REGION, GRAPH, EMPTY_BORDER_WIDTH);
84        cm.setEnabledOnValueEquals(RENDER_TEXT_AS_SHAPES, Boolean.FALSE, EMBED_FONTS);
85      }
86  
87      public void actionPerformed( final ActionEvent e ) {
88        // show our OptionHandler to allow the user to set up the export view
89        // according to his or her wishes
90        if (!options.showEditor(view.getFrame())) {
91          return;
92        }
93  
94        if (options.getBool(SELECTION_PAINTING)) {
95          outputHandler.removeRenderingHint(YRenderingHints.KEY_SELECTION_PAINTING);
96        } else {
97          outputHandler.addRenderingHint(
98                  YRenderingHints.KEY_SELECTION_PAINTING,
99                  YRenderingHints.VALUE_SELECTION_PAINTING_OFF);
100       }
101 
102       final byte policy;
103       if (options.getBool(RENDER_TEXT_AS_SHAPES)) {
104         policy = EPSOutputHandler.VECTORIZED_TEXT;
105       } else if (options.getBool(EMBED_FONTS)) {
106         policy = EPSOutputHandler.PLAIN_TEXT_WITH_EMBEDDED_FONTS;
107       } else {
108         policy = EPSOutputHandler.PLAIN_TEXT;
109       }
110       ((EPSOutputHandler)outputHandler).setTextRenderingPolicy(policy);
111 
112       Graph2D graph = view.getGraph2D();
113       Graph2DView viewPort = outputHandler.createDefaultGraph2DView(graph);
114 
115       // configure the export view according to the options specified by the
116       // user
117       configureViewPort(viewPort);
118       graph.setCurrentView(viewPort);
119 
120       // ask for the destination file and finally write the graph to the chosen
121       // destination
122       export(outputHandler);
123 
124       graph.removeView(viewPort);
125     }
126   }
127 
128 
129   /**
130    * Launches this demo.
131    */
132   public static void main(String[] args) {
133     initLnF();
134     (new EPSExportDemo()).start();
135   }
136 }