KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > nightlabs > editor2d > viewer > preview > PreviewComposite


1 /* *****************************************************************************
2  * NightLabs Editor2D - Graphical editor framework *
3  * Copyright (C) 2004-2005 NightLabs - http://NightLabs.org *
4  * *
5  * This library is free software; you can redistribute it and/or *
6  * modify it under the terms of the GNU Lesser General Public *
7  * License as published by the Free Software Foundation; either *
8  * version 2.1 of the License, or (at your option) any later version. *
9  * *
10  * This library is distributed in the hope that it will be useful, *
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
13  * Lesser General Public License for more details. *
14  * *
15  * You should have received a copy of the GNU Lesser General Public *
16  * License along with this library; if not, write to the *
17  * Free Software Foundation, Inc., *
18  * 51 Franklin St, Fifth Floor, *
19  * Boston, MA 02110-1301 USA *
20  * *
21  * Or get it online : *
22  * http://www.gnu.org/copyleft/lesser.html *
23  * *
24  * *
25  ******************************************************************************/

26 package org.nightlabs.editor2d.viewer.preview;
27
28 import java.awt.Rectangle JavaDoc;
29 import java.beans.PropertyChangeEvent JavaDoc;
30 import java.beans.PropertyChangeListener JavaDoc;
31
32 import org.eclipse.swt.events.ControlAdapter;
33 import org.eclipse.swt.events.ControlEvent;
34 import org.eclipse.swt.events.ControlListener;
35 import org.eclipse.swt.events.DisposeEvent;
36 import org.eclipse.swt.events.DisposeListener;
37 import org.eclipse.swt.events.PaintEvent;
38 import org.eclipse.swt.events.PaintListener;
39 import org.eclipse.swt.graphics.GC;
40 import org.eclipse.swt.graphics.Transform;
41 import org.eclipse.swt.widgets.Composite;
42 import org.eclipse.swt.widgets.Control;
43 import org.nightlabs.base.composite.XComposite;
44 import org.nightlabs.editor2d.DrawComponent;
45 import org.nightlabs.editor2d.viewer.DrawComponentPaintable;
46 import org.nightlabs.editor2d.viewer.IBufferedViewport;
47 import org.nightlabs.editor2d.viewer.IViewport;
48 import org.nightlabs.editor2d.viewer.awt.DisplayPanel;
49 import org.nightlabs.editor2d.viewer.j2dswt.SWTGraphics2D;
50 import org.nightlabs.editor2d.viewer.util.AWTSWTUtil;
51
52 /**
53  * <p> Project: org.nightlabs.editor2d.viewer </p>
54  * <p> Creation Date: 04.01.2006 </p>
55  * <p> Author: Daniel.Mazurek[AT]NightLabs[DOT]de </p>
56  */

57 public class PreviewComposite
58 extends XComposite
59 {
60     /**
61      * @param parent
62      * @param style
63      */

64     public PreviewComposite(Composite parent, int style) {
65         super(parent, style);
66         init();
67     }
68
69     /**
70      * @param parent
71      * @param style
72      * @param layoutMode
73      */

74     public PreviewComposite(Composite parent, int style, int layoutMode) {
75         super(parent, style, layoutMode);
76         init();
77     }
78
79     /**
80      * @param parent
81      * @param style
82      * @param layoutMode
83      * @param layoutDataMode
84      */

85     public PreviewComposite(Composite parent, int style, int layoutMode,
86             int layoutDataMode) {
87         super(parent, style, layoutMode, layoutDataMode);
88         init();
89     }
90
91     protected void init()
92     {
93         addPaintListener(paintListener);
94         addControlListener(resizeListener);
95         addDisposeListener(disposeListener);
96     }
97     
98     protected DisposeListener disposeListener = new DisposeListener()
99     {
100         public void widgetDisposed(DisposeEvent e) {
101             removePaintListener(paintListener);
102             removeControlListener(resizeListener);
103         }
104     };
105     
106     protected DrawComponentPaintable dcPaintable = null;
107     protected DrawComponent dc = null;
108     public void setDrawComponent(DrawComponent dc) {
109         this.dc = dc;
110         dcPaintable = new DrawComponentPaintable(dc);
111     }
112     public DrawComponent getDrawComponent() {
113         return dc;
114     }
115     
116     protected IViewport viewport = null;
117     public IViewport getViewport() {
118         return viewport;
119     }
120     public void setViewport(IViewport viewport)
121     {
122         if (viewport != null) {
123             viewport.removePropertyChangeListener(viewChangeListener);
124             viewport.removePropertyChangeListener(realChangeListener);
125         }
126         this.viewport = viewport;
127         realBounds = viewport.getRealBounds();
128         viewBounds = viewport.getViewBounds();
129         viewport.addPropertyChangeListener(viewChangeListener);
130         viewport.addPropertyChangeListener(realChangeListener);
131     }
132
133     protected Rectangle JavaDoc viewBounds = null;
134     
135     /**
136      * gets notifyed when the viewBounds of the Viewport change
137      * @see IViewport.getViewBounds()
138      */

139     protected PropertyChangeListener JavaDoc viewChangeListener = new PropertyChangeListener JavaDoc()
140     {
141         public void propertyChange(PropertyChangeEvent JavaDoc evt)
142         {
143             if (evt.getPropertyName().equals(DisplayPanel.VIEW_CHANGE)) {
144                 viewBounds = (Rectangle JavaDoc) evt.getNewValue();
145             }
146         }
147     };
148
149     protected Rectangle JavaDoc realBounds = null;
150     
151     /**
152      * gets notifyed when the realBounds of the Viewport change
153      * @see IViewport.getRealBounds()
154      */

155     protected PropertyChangeListener JavaDoc realChangeListener = new PropertyChangeListener JavaDoc()
156     {
157         public void propertyChange(PropertyChangeEvent JavaDoc evt)
158         {
159             if (evt.getPropertyName().equals(DisplayPanel.REAL_CHANGE)) {
160                 realBounds = (Rectangle JavaDoc) evt.getNewValue();
161             }
162         }
163     };
164         
165     protected PaintListener paintListener = new PaintListener()
166     {
167         public void paintControl(PaintEvent e)
168         {
169             GC gc = e.gc;
170             Transform transform = new Transform(e.display);
171             transform.scale(scale, scale);
172             gc.setTransform(transform);
173             dcPaintable.redraw(null, gc);
174         }
175     };
176     
177     protected ControlListener resizeListener = new ControlAdapter()
178     {
179         public void controlResized(ControlEvent e)
180         {
181             Control c = (Control) e.getSource();
182             Rectangle JavaDoc bounds = AWTSWTUtil.toAWTRectangle(c.getBounds());
183             if (realBounds != null)
184                 PreviewComposite.this.scale = calcScale(bounds, realBounds);
185             
186             PreviewComposite.this.redraw();
187         }
188     };
189         
190     protected float scale = 1.0f;
191     protected float calcScale(Rectangle JavaDoc r1, Rectangle JavaDoc r2)
192     {
193         float scaleX = (float) (r1.getWidth()/ r2.getWidth());
194         float scaleY = (float) (r1.getHeight()/ r2.getHeight());
195         float scale = Math.max(scaleX, scaleY);
196         return scale;
197     }
198 }
199
Popular Tags