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