Added
Link Here
|
1 |
/* |
2 |
* The contents of this file are subject to the terms of the Common Development |
3 |
* and Distribution License (the License). You may not use this file except in |
4 |
* compliance with the License. |
5 |
* |
6 |
* You can obtain a copy of the License at http://www.netbeans.org/cddl.html |
7 |
* or http://www.netbeans.org/cddl.txt. |
8 |
* |
9 |
* When distributing Covered Code, include this CDDL Header Notice in each file |
10 |
* and include the License file at http://www.netbeans.org/cddl.txt. |
11 |
* If applicable, add the following below the CDDL Header, with the fields |
12 |
* enclosed by brackets [] replaced by your own identifying information: |
13 |
* "Portions Copyrighted [year] [name of copyright owner]" |
14 |
* |
15 |
* The Original Software is NetBeans. The Initial Developer of the Original |
16 |
* Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun |
17 |
* Microsystems, Inc. All Rights Reserved. |
18 |
*/ |
19 |
|
20 |
package org.netbeans.modules.visual.widget; |
21 |
|
22 |
import org.netbeans.api.visual.action.WidgetAction; |
23 |
import org.netbeans.api.visual.widget.Scene; |
24 |
import org.netbeans.api.visual.widget.Widget; |
25 |
|
26 |
import javax.swing.*; |
27 |
import javax.swing.border.BevelBorder; |
28 |
import javax.swing.border.CompoundBorder; |
29 |
import javax.swing.border.EmptyBorder; |
30 |
import javax.swing.border.LineBorder; |
31 |
import javax.swing.event.AncestorEvent; |
32 |
import javax.swing.event.AncestorListener; |
33 |
import java.awt.*; |
34 |
import java.awt.event.MouseEvent; |
35 |
import java.awt.event.MouseMotionListener; |
36 |
import java.awt.geom.AffineTransform; |
37 |
|
38 |
/** |
39 |
* @author David Kaspar |
40 |
*/ |
41 |
public class BirdViewWindow extends JWindow implements MouseMotionListener { |
42 |
|
43 |
private Scene scene; |
44 |
private BirdViewComponent birdView; |
45 |
|
46 |
private boolean shown = false; |
47 |
private double zoomFactor = 3.0; |
48 |
private Point scenePoint; |
49 |
|
50 |
private WidgetAction action = new SceneTrackAction (); |
51 |
private ViewAncestorListener ancestorListener = new ViewAncestorListener (); |
52 |
|
53 |
public BirdViewWindow (final Scene scene) { |
54 |
this.scene = scene; |
55 |
setSize (new Dimension (256, 256)); |
56 |
setLayout (new BorderLayout ()); |
57 |
setAlwaysOnTop (true); |
58 |
|
59 |
JPanel pane = new JPanel (); |
60 |
pane.setBorder (new CompoundBorder (new LineBorder (Color.BLACK, 1), new EmptyBorder (1, 1, 1, 1))); |
61 |
pane.setLayout (new BorderLayout ()); |
62 |
add (pane, BorderLayout.CENTER); |
63 |
|
64 |
birdView = new BirdViewComponent (); |
65 |
birdView.setDoubleBuffered (true); |
66 |
birdView.setBorder (new BevelBorder (BevelBorder.RAISED)); |
67 |
pane.add (birdView, BorderLayout.CENTER); |
68 |
} |
69 |
|
70 |
public void invokeShow () { |
71 |
if (scene.getView () == null) |
72 |
return; |
73 |
if (shown) |
74 |
return; |
75 |
shown = true; |
76 |
birdView.addMouseMotionListener (this); |
77 |
scene.getPriorActions ().addAction (action); |
78 |
scene.getView ().addAncestorListener (ancestorListener); |
79 |
updateForViewPoint (null); |
80 |
} |
81 |
|
82 |
public void invokeHide () { |
83 |
if (! shown) |
84 |
return; |
85 |
shown = false; |
86 |
birdView.removeMouseMotionListener (this); |
87 |
scene.getPriorActions ().removeAction (action); |
88 |
scene.getView ().removeAncestorListener (ancestorListener); |
89 |
updateForViewPoint (null); |
90 |
} |
91 |
|
92 |
public void invokeRepaint () { |
93 |
birdView.repaint (); |
94 |
} |
95 |
|
96 |
public void setZoomFactor (double zoomFactor) { |
97 |
this.zoomFactor = zoomFactor; |
98 |
invokeRepaint (); |
99 |
} |
100 |
|
101 |
public void setWindowSize (Dimension size) { |
102 |
Dimension previousSize = getSize (); |
103 |
setSize (size); |
104 |
if (isShowing ()) { |
105 |
Point location = getLocation (); |
106 |
setLocation (location.x + (previousSize.width - size.width) / 2, location.y + (previousSize.height - size.height) / 2); |
107 |
validate (); |
108 |
} |
109 |
} |
110 |
|
111 |
private void updateForViewPoint (Point viewPoint) { |
112 |
JComponent view = scene.getView (); |
113 |
if (! shown || viewPoint == null || ! view.getVisibleRect ().contains (viewPoint)) { |
114 |
scenePoint = null; |
115 |
setVisible (false); |
116 |
dispose (); |
117 |
return; |
118 |
} |
119 |
scenePoint = scene.convertViewToScene (viewPoint); |
120 |
Point viewOrigin = view.getLocationOnScreen (); |
121 |
Dimension size = getSize (); |
122 |
setBounds (viewOrigin.x + viewPoint.x - size.width / 2, viewOrigin.y + viewPoint.y - size.height / 2, size.width, size.height); |
123 |
setVisible (true); |
124 |
birdView.repaint(); |
125 |
} |
126 |
|
127 |
private void updateForBirdViewPoint (Point birdViewPoint) { |
128 |
JComponent view = scene.getView (); |
129 |
if (view.isShowing () && isShowing ()) { |
130 |
Point viewOrigin = view.getLocationOnScreen (); |
131 |
Point birdViewOrigin = getLocationOnScreen (); |
132 |
Dimension size = getSize (); |
133 |
updateForViewPoint (new Point (birdViewPoint.x + birdViewOrigin.x - viewOrigin.x, birdViewPoint.y + birdViewOrigin.y - viewOrigin.y)); |
134 |
} else |
135 |
updateForViewPoint (null); |
136 |
} |
137 |
|
138 |
public void mouseDragged (MouseEvent e) { |
139 |
updateForBirdViewPoint (e.getPoint ()); |
140 |
} |
141 |
|
142 |
public void mouseMoved (MouseEvent e) { |
143 |
updateForBirdViewPoint (e.getPoint ()); |
144 |
} |
145 |
|
146 |
private class SceneTrackAction implements WidgetAction { |
147 |
|
148 |
public State mouseClicked (Widget widget, WidgetMouseEvent event) { |
149 |
return State.CONSUMED; |
150 |
} |
151 |
|
152 |
public State mousePressed (Widget widget, WidgetMouseEvent event) { |
153 |
return State.CONSUMED; |
154 |
} |
155 |
|
156 |
public State mouseReleased (Widget widget, WidgetMouseEvent event) { |
157 |
return State.CONSUMED; |
158 |
} |
159 |
|
160 |
public State mouseEntered (Widget widget, WidgetMouseEvent event) { |
161 |
return State.CONSUMED; |
162 |
} |
163 |
|
164 |
public State mouseExited (Widget widget, WidgetMouseEvent event) { |
165 |
return State.CONSUMED; |
166 |
} |
167 |
|
168 |
public State mouseDragged (Widget widget, WidgetMouseEvent event) { |
169 |
updateForViewPoint (widget.getScene ().convertSceneToView (widget.convertLocalToScene (event.getPoint ()))); |
170 |
return State.CONSUMED; |
171 |
} |
172 |
|
173 |
public State mouseMoved (Widget widget, WidgetMouseEvent event) { |
174 |
updateForViewPoint (widget.getScene ().convertSceneToView (widget.convertLocalToScene (event.getPoint ()))); |
175 |
return State.CONSUMED; |
176 |
} |
177 |
|
178 |
public State mouseWheelMoved (Widget widget, WidgetMouseWheelEvent event) { |
179 |
return State.CONSUMED; |
180 |
} |
181 |
|
182 |
public State keyTyped (Widget widget, WidgetKeyEvent event) { |
183 |
return State.CONSUMED; |
184 |
} |
185 |
|
186 |
public State keyPressed (Widget widget, WidgetKeyEvent event) { |
187 |
return State.CONSUMED; |
188 |
} |
189 |
|
190 |
public State keyReleased (Widget widget, WidgetKeyEvent event) { |
191 |
return State.CONSUMED; |
192 |
} |
193 |
|
194 |
public State focusGained (Widget widget, WidgetFocusEvent event) { |
195 |
return State.CONSUMED; |
196 |
} |
197 |
|
198 |
public State focusLost (Widget widget, WidgetFocusEvent event) { |
199 |
return State.CONSUMED; |
200 |
} |
201 |
|
202 |
public State dragEnter (Widget widget, WidgetDropTargetDragEvent event) { |
203 |
return State.CONSUMED; |
204 |
} |
205 |
|
206 |
public State dragOver (Widget widget, WidgetDropTargetDragEvent event) { |
207 |
return State.CONSUMED; |
208 |
} |
209 |
|
210 |
public State dropActionChanged (Widget widget, WidgetDropTargetDragEvent event) { |
211 |
return State.CONSUMED; |
212 |
} |
213 |
|
214 |
public State dragExit (Widget widget, WidgetDropTargetEvent event) { |
215 |
return State.CONSUMED; |
216 |
} |
217 |
|
218 |
public State drop (Widget widget, WidgetDropTargetDropEvent event) { |
219 |
return State.CONSUMED; |
220 |
} |
221 |
|
222 |
} |
223 |
|
224 |
private class BirdViewComponent extends JComponent { |
225 |
|
226 |
public void paint (Graphics g) { |
227 |
Graphics2D gr = (Graphics2D) g; |
228 |
super.paint (g); |
229 |
if (scenePoint == null) { |
230 |
gr.setColor (Color.BLACK); |
231 |
gr.fill (getBounds ()); |
232 |
return; |
233 |
} |
234 |
Dimension size = getSize (); |
235 |
AffineTransform previousTransform = gr.getTransform (); |
236 |
gr.translate (size.width / 2, size.height / 2); |
237 |
gr.scale (zoomFactor, zoomFactor); |
238 |
gr.translate (- scenePoint.x, - scenePoint.y); |
239 |
scene.paint (gr); |
240 |
gr.setTransform (previousTransform); |
241 |
} |
242 |
|
243 |
} |
244 |
|
245 |
private class ViewAncestorListener implements AncestorListener { |
246 |
|
247 |
public void ancestorAdded (AncestorEvent event) { |
248 |
} |
249 |
|
250 |
public void ancestorRemoved (AncestorEvent event) { |
251 |
invokeHide (); |
252 |
} |
253 |
|
254 |
public void ancestorMoved (AncestorEvent event) { |
255 |
} |
256 |
|
257 |
} |
258 |
|
259 |
} |