Revision 530 2.1/trunk/org.gvsig.view3d/org.gvsig.view3d.swing/org.gvsig.view3d.swing.impl/src/main/java/org/gvsig/view3d/swing/impl/DefaultView3DPanel.java

View differences:

DefaultView3DPanel.java
25 25
package org.gvsig.view3d.swing.impl;
26 26

  
27 27
import java.awt.BorderLayout;
28
import java.awt.Component;
28 29
import java.awt.Dimension;
30
import java.awt.Toolkit;
31
import java.awt.Window;
32
import java.awt.event.ActionEvent;
29 33
import java.awt.event.ComponentEvent;
30 34
import java.awt.event.ComponentListener;
35
import java.awt.event.HierarchyEvent;
36
import java.awt.event.HierarchyListener;
37
import java.awt.event.KeyEvent;
38
import java.awt.event.WindowEvent;
39
import java.awt.event.WindowFocusListener;
31 40

  
41
import javax.swing.AbstractAction;
42
import javax.swing.Action;
32 43
import javax.swing.JComponent;
44
import javax.swing.JFrame;
33 45
import javax.swing.JPanel;
46
import javax.swing.KeyStroke;
47
import javax.swing.SwingUtilities;
34 48

  
35 49
import org.gvsig.fmap.mapcontext.MapContext;
36 50
import org.gvsig.fmap.mapcontext.layers.ExtendedPropertiesSupport;
......
57 71
    private static final long serialVersionUID = -87105248886531868L;
58 72

  
59 73
    private ObservableHelper observableHelper;
60
    
74

  
75
    private ComponentListener disposeComponentListener;
76

  
61 77
    private String title;
62 78

  
63 79
    private MapControl3D mapControl3D;
64 80

  
81
    private JFrame fullScreenFrame;
82

  
65 83
    /**
66 84
     * Default constructor of {@link DefaultView3DPanel}. Creates an
67 85
     * {@link MapControl3D}, initialize local fileds and register listeners.
......
71 89
     * @param type
72 90
     *            Type of this {@link DefaultMapControl3D}. See {@link TYPE}.
73 91
     * @param viewProperties
74
     *            View properties to register a <code>MapControl3D</code>           
92
     *            View properties to register a <code>MapControl3D</code>
75 93
     */
76
    public DefaultView3DPanel(MapContext theMapContext,String title, TYPE type,
77
        ExtendedPropertiesSupport viewProperties) {
78
        
79
        super(new BorderLayout());
80
        
94
    public DefaultView3DPanel(MapContext theMapContext, String title,
95
        TYPE type, ExtendedPropertiesSupport viewProperties) {
96

  
81 97
        View3DSwingManager swingManager = View3DSwingLocator.getManager();
82
        GeneralProperties3D general3dProperties = swingManager.getGeneral3DProperties();
83
        
84
        this.title = composeTitle(title);
85

  
86 98
        this.mapControl3D =
87
            swingManager.createMapControl3D(theMapContext, type, viewProperties);
88
        this.observableHelper = new ObservableHelper();
99
            swingManager
100
                .createMapControl3D(theMapContext, type, viewProperties);
89 101

  
90
        this.add(mapControl3D.asJComponent(), BorderLayout.CENTER);
102
        initialize(title);
103
    }
91 104

  
92
        this.addComponentListener(new ComponentListener() {
105
    /**
106
     * 
107
     * @param mapControl3D
108
     * @param title
109
     */
110
    public DefaultView3DPanel(MapControl3D mapControl3D, String title) {
93 111

  
94
            public void componentShown(ComponentEvent e) {
95
            }
112
        this.mapControl3D = mapControl3D;
96 113

  
97
            public void componentResized(ComponentEvent e) {
98
            }
114
        initialize(title);
115
    }
99 116

  
100
            public void componentMoved(ComponentEvent e) {
101
            }
117
    private void initialize(String title) {
102 118

  
103
            public void componentHidden(ComponentEvent e) {
104
                getMapControl3D().dispose();
105
            }
106
        });
107
        
108
        this.setPreferredSize(new Dimension(general3dProperties.getDefaultViewWidth(),
109
            general3dProperties.getDefaultViewHeight()));
119
        this.setLayout(new BorderLayout());
120

  
121
        View3DSwingManager swingManager = View3DSwingLocator.getManager();
122
        GeneralProperties3D general3dProperties =
123
            swingManager.getGeneral3DProperties();
124

  
125
        this.title = title;
126

  
127
        this.observableHelper = new ObservableHelper();
128

  
129
        this.add(mapControl3D.asJComponent(), BorderLayout.CENTER);
130

  
131
        addComponentListener(getDisposeComponentListener());
132

  
133
        this.setPreferredSize(new Dimension(general3dProperties
134
            .getDefaultViewWidth(), general3dProperties.getDefaultViewHeight()));
110 135
    }
111 136

  
112 137
    private String composeTitle(String title) {
......
130 155

  
131 156
    public void show() {
132 157
        WindowManager wm = ToolsSwingLocator.getWindowManager();
133
        wm.showWindow(this, title, WindowManager.MODE.WINDOW);
158
        wm.showWindow(this, composeTitle(title), WindowManager.MODE.WINDOW);
134 159
    }
135 160

  
136 161
    public void addObserver(Observer o) {
......
151 176
            observableHelper.deleteObservers();
152 177
        }
153 178
    }
179

  
180
    private JFrame getFullScreenFrame() {
181
        if (this.fullScreenFrame == null) {
182
            this.fullScreenFrame = new JFrame();
183
            this.fullScreenFrame.getContentPane().setPreferredSize(
184
                Toolkit.getDefaultToolkit().getScreenSize());
185
            this.fullScreenFrame.getContentPane().setLayout(new BorderLayout());
186
            this.fullScreenFrame.getContentPane().add(
187
                this.mapControl3D.asJComponent(), BorderLayout.CENTER);
188
            this.fullScreenFrame.setLocation(0, 0);
189
            this.fullScreenFrame.setUndecorated(true);
190
            this.fullScreenFrame.setAlwaysOnTop(true);
191
            this.fullScreenFrame.pack();
192
            addCloseListener();
193
            addHierarchyListener();
194
        }
195
        return this.fullScreenFrame;
196
    }
197

  
198
    private void addHierarchyListener() {
199

  
200
        this.mapControl3D.asJComponent().addHierarchyListener(
201
            new HierarchyListener() {
202

  
203
                public void hierarchyChanged(HierarchyEvent e) {
204
                    final Component component = e.getComponent();
205
                    if (component.isShowing()
206
                        && (e.getChangeFlags() & HierarchyEvent.SHOWING_CHANGED) != 0) {
207

  
208
                        final Window toplevel =
209
                            SwingUtilities.getWindowAncestor(component);
210
                        toplevel
211
                            .addWindowFocusListener(new WindowFocusListener() {
212

  
213
                                public void windowLostFocus(WindowEvent e) {
214
                                }
215

  
216
                                public void windowGainedFocus(WindowEvent e) {
217
                                    component.requestFocus();
218
                                    toplevel.removeWindowFocusListener(this);
219
                                }
220
                            });
221
                        component.removeHierarchyListener(this);
222
                    }
223
                };
224
            });
225
    }
226

  
227
    public void fullScreen() {
228
        
229
        // NOTE: We have to remove dispose component listener because the
230
        // component will be re-used at full screen frame.
231
        removeComponentListener(getDisposeComponentListener());
232
        this.setVisible(false);
233

  
234
        getFullScreenFrame().setVisible(true);
235
    }
236

  
237
    private void addCloseListener() {
238

  
239
        // Key bindings to close JFrame with ESC key
240
        getFullScreenFrame().getRootPane()
241
            .getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
242
            .put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "exit");
243
        getFullScreenFrame().getRootPane().getActionMap()
244
            .put("exit", getCloseAction());
245
    }
246

  
247
    private Action getCloseAction() {
248
        return new AbstractAction() {
249

  
250
            private static final long serialVersionUID = -8538252474573633943L;
251

  
252
            public void actionPerformed(ActionEvent e) {
253
                getFullScreenFrame().dispose();
254

  
255
                View3DSwingManager swingManager =
256
                    View3DSwingLocator.getManager();
257
                View3DPanel newPanel =
258
                    swingManager.createView3DPanel(mapControl3D, title);
259
                newPanel.show();
260
            }
261
        };
262
    }
263

  
264
    private ComponentListener getDisposeComponentListener() {
265
        if (disposeComponentListener == null) {
266
            disposeComponentListener = new ComponentListener() {
267

  
268
                public void componentShown(ComponentEvent e) {
269
                }
270

  
271
                public void componentResized(ComponentEvent e) {
272
                }
273

  
274
                public void componentMoved(ComponentEvent e) {
275
                }
276

  
277
                public void componentHidden(ComponentEvent e) {
278
                    getMapControl3D().dispose();
279
                }
280
            };
281
        }
282
        return disposeComponentListener;
283
    }
154 284
}

Also available in: Unified diff