1   /****************************************************************************
2    **
3    ** This file is part of yFiles-2.9. 
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) 2000-2011 by yWorks GmbH, Vor dem Kreuzberg 28, 
11   ** 72070 Tuebingen, Germany. All rights reserved.
12   **
13   ***************************************************************************/
14  package demo.view.application;
15  
16  import demo.view.DemoBase;
17  import y.option.OptionHandler;
18  import y.view.Graph2DPrinter;
19  import y.view.PrintPreviewPanel;
20  import y.view.GenericNodeRealizer;
21  import y.view.BevelNodePainter;
22  
23  import javax.swing.AbstractAction;
24  import javax.swing.Action;
25  import javax.swing.JButton;
26  import javax.swing.JDialog;
27  import javax.swing.JFrame;
28  import javax.swing.JToolBar;
29  import java.awt.Color;
30  import java.awt.Font;
31  import java.awt.EventQueue;
32  import java.awt.event.ActionEvent;
33  import java.awt.print.PageFormat;
34  import java.awt.print.PrinterJob;
35  import java.util.Locale;
36  import java.util.Map;
37  
38  /**
39   * Demo that centers around the printing facilities of yFiles.
40   * This class shows how to use the yFiles print preview and how to 
41   * add a title and footer to the printed page or poster.
42   *
43   * @see <a href="http://docs.yworks.com/yfiles/doc/developers-guide/printing.html">Section Printing a Graph's Visual Representation</a> in the yFiles for Java Developer's Guide
44   */
45  public class PrintPreviewDemo extends DemoBase {
46  
47    public PrintPreviewDemo() {
48      loadGraph("resource/PrintPreviewDemo.graphml");
49    }
50  
51    protected void configureDefaultRealizers() {
52      super.configureDefaultRealizers();
53      //register bevel node configuration that is used in initial graph
54      GenericNodeRealizer.Factory factory = GenericNodeRealizer.getFactory();
55      final Map map = factory.createDefaultConfigurationMap();
56      GenericNodeRealizer.Painter painter = new BevelNodePainter();
57      map.put(GenericNodeRealizer.Painter.class, painter);
58      map.put(GenericNodeRealizer.ContainsTest.class, painter);
59      factory.addConfiguration("BevelNodeConfig", map);
60    }
61  
62    protected JToolBar createToolBar() {
63      JToolBar bar = super.createToolBar();
64      bar.add(new PrintPreviewAction());
65      return bar;
66    }
67  
68    /**
69     * Action that brings up a customized print preview panel.
70     */
71    class PrintPreviewAction extends AbstractAction {
72      Graph2DPrintPreviewPanel ppp;
73  
74      PrintPreviewAction() {
75        super("Print Preview");
76  
77        PrinterJob printJob = PrinterJob.getPrinterJob();
78        ppp = new Graph2DPrintPreviewPanel(
79            printJob,
80            new Graph2DPrinter(view),
81            printJob.defaultPage());
82      }
83  
84      public void actionPerformed(ActionEvent e) {
85        final JDialog dialog = new JDialog((JFrame) view.getTopLevelAncestor(), contentPane.getName(), true);
86        dialog.setContentPane(ppp);
87        dialog.setResizable(true);
88        dialog.pack();
89        dialog.setVisible(true);
90      }
91  
92    }
93  
94    /**
95     * Extended print preview panel that incorporates the standard printing options
96     * provided by class {@link y.view.Graph2DView}.
97     */
98    public class Graph2DPrintPreviewPanel extends PrintPreviewPanel {
99      OptionHandler printOptions;
100     Graph2DPrinter gp;
101 
102 
103     public Graph2DPrintPreviewPanel(
104         PrinterJob printJob,
105         final Graph2DPrinter gp,
106         PageFormat pf) {
107       super(printJob,
108           gp,
109           gp.getPosterColumns(),
110           gp.getPosterColumns() * gp.getPosterRows(),
111           pf);
112       this.gp = gp;
113 
114       //setup option handler
115       printOptions = new OptionHandler("Print Options");
116       printOptions.useSection("General");
117 
118       printOptions.addInt("Poster Rows", gp.getPosterRows());
119       printOptions.addInt("Poster Columns", gp.getPosterColumns());
120       printOptions.addBool("Add Poster Coords", gp.getPrintPosterCoords());
121       final String[] area = {"View", "Graph"};
122       if (gp.getClipType() == Graph2DPrinter.CLIP_GRAPH) {
123         printOptions.addEnum("Clip Area", area, 1);
124       } else {
125         printOptions.addEnum("Clip Area", area, 0);
126       }
127 
128       Graph2DPrinter.DefaultTitleDrawable td = new Graph2DPrinter.DefaultTitleDrawable();
129       printOptions.useSection("Title");
130       printOptions.addString("Text", td.getText());
131       printOptions.addColor("Titlebar Color", td.getTitleBarColor(), true);
132       printOptions.addColor("Text Color", td.getTextColor(), true);
133       printOptions.addInt("Font Size", contentPane.getFont().getSize());
134 
135       Graph2DPrinter.DefaultFooterDrawable fd = new Graph2DPrinter.DefaultFooterDrawable();
136       printOptions.useSection("Footer");
137       printOptions.addString("Text", fd.getText());
138       printOptions.addColor("Footer Color", fd.getFooterColor(), true);
139       printOptions.addColor("Text Color", fd.getTextColor(), true);
140       printOptions.addInt("Font Size", contentPane.getFont().getSize());
141 
142       //show custom print dialog and adopt values
143       Action optionAction = new AbstractAction("Options...") {
144         public void actionPerformed(ActionEvent ev) {
145           if (!printOptions.showEditor()) {
146             return;
147           }
148           gp.setPosterRows(printOptions.getInt("Poster Rows"));
149           gp.setPosterColumns(printOptions.getInt("Poster Columns"));
150           gp.setPrintPosterCoords(
151               printOptions.getBool("Add Poster Coords"));
152           if ("Graph".equals(printOptions.get("Clip Area"))) {
153             gp.setClipType(Graph2DPrinter.CLIP_GRAPH);
154           } else {
155             gp.setClipType(Graph2DPrinter.CLIP_VIEW);
156           }
157 
158           Graph2DPrinter.DefaultTitleDrawable title =
159               new Graph2DPrinter.DefaultTitleDrawable();
160           title.setText(printOptions.getString("Title", "Text"));
161           title.setTitleBarColor((Color) printOptions.get("Title", "Titlebar Color"));
162           title.setTextColor((Color) printOptions.get("Title", "Text Color"));
163           title.setFont(new Font("Dialog", Font.PLAIN, printOptions.getInt("Title", "Font Size")));
164           gp.setTitleDrawable(title);
165 
166           Graph2DPrinter.DefaultFooterDrawable footer =
167               new Graph2DPrinter.DefaultFooterDrawable();
168           footer.setText(printOptions.getString("Footer", "Text"));
169           footer.setFooterColor((Color) printOptions.get("Footer", "Footer Color"));
170           footer.setTextColor((Color) printOptions.get("Footer", "Text Color"));
171           footer.setFont(new Font("Dialog", Font.PLAIN, printOptions.getInt("Footer", "Font Size")));
172           gp.setFooterDrawable(footer);
173 
174           setPages(0,
175               gp.getPosterColumns(),
176               gp.getPosterColumns() * gp.getPosterRows());
177 
178           zoomToFit();
179         }
180       };
181       addControlComponent(new JButton(optionAction));
182 
183     }
184 
185   }
186 
187   public static void main(String[] args) {
188     EventQueue.invokeLater(new Runnable() {
189       public void run() {
190         Locale.setDefault(Locale.ENGLISH);
191         initLnF();
192         (new PrintPreviewDemo()).start();
193       }
194     });
195   }
196 
197 }
198 
199     
200 
201       
202