Revision 530

View differences:

2.1/trunk/org.gvsig.view3d/org.gvsig.view3d.app/org.gvsig.view3d.app.common/src/main/java/org/gvsig/view3d/app/mainplugin/FullScreenView3DExtension.java
1
package org.gvsig.view3d.app.mainplugin;
2

  
3
import javax.swing.JComponent;
4

  
5
import org.gvsig.andami.IconThemeHelper;
6
import org.gvsig.andami.plugins.Extension;
7
import org.gvsig.andami.ui.ToolsWindowManager.Window;
8
import org.gvsig.andami.ui.mdiManager.IWindow;
9
import org.gvsig.app.ApplicationLocator;
10
import org.gvsig.app.ApplicationManager;
11
import org.gvsig.app.project.documents.view.ViewDocument;
12
import org.gvsig.app.project.documents.view.gui.IView;
13
import org.gvsig.view3d.swing.api.View3DPanel;
14

  
15

  
16
public class FullScreenView3DExtension extends Extension {
17

  
18
    public void execute(String actionCommand) {
19
        
20
        if ("full-screen-view-3d".equals(actionCommand)) {
21
            View3DPanel view3dPanel = getActiveView3DPanel();
22
            if(view3dPanel != null){
23
                view3dPanel.fullScreen();
24
            }
25
        }
26
    }
27

  
28
    private void registerIcons() {
29
        IconThemeHelper.registerIcon("view3d", "full-screen-view-3d", this);
30
    }
31

  
32
    public void initialize() {
33
        registerIcons();
34

  
35
    }
36

  
37
    public boolean isEnabled() {
38
        
39
        View3DPanel view3DPanel = getActiveView3DPanel();
40
        
41
        if(view3DPanel != null){
42
            return true;
43
        }
44
        
45
        return false;
46
    }
47

  
48
    private View3DPanel getActiveView3DPanel() {
49
        ApplicationManager appManager = ApplicationLocator.getManager();
50
        IWindow activeWindow = appManager.getActiveWindow();
51
        
52
        if(activeWindow instanceof Window){
53
            Window aWindow = (Window) activeWindow;
54
            JComponent contents = aWindow.getContents();
55
            if( contents instanceof View3DPanel){
56
                return (View3DPanel) contents;
57
            }
58
        }
59
        return null;
60
    }
61

  
62
    public boolean isVisible() {
63
        IView view = getActiveView();
64
        if (view != null) {
65
            return true;
66
        }
67
        return false;
68
    }
69
    
70
    private IView getActiveView() {
71
        ApplicationManager application = ApplicationLocator.getManager();
72
        IView view = (IView) application.getActiveComponent(ViewDocument.class);
73
        return view;
74
    }
75

  
76
}
2.1/trunk/org.gvsig.view3d/org.gvsig.view3d.app/org.gvsig.view3d.app.common/src/main/resources-plugin/config.xml
71 71
      </tool-bar>
72 72

  
73 73
    </extension>
74
    
75
    <extension
76
      class-name="org.gvsig.view3d.app.mainplugin.FullScreenView3DExtension"
77
      description="" active="true" priority="1">
78

  
79
      <action name="full-screen-view-3d" label="full_screen_mode_view_3d"
80
        tooltip="full_screen_mode_view_3d" position="650400500" action-command="full-screen-view-3d"
81
        icon="full-screen-view-3d" accelerator="" />
82
        
83
      <menu text="View/view_3d/full_screen_mode_view_3d" name="full-screen-view-3d" />
84
      
85
      <tool-bar name="view-3d" position="650400000">
86
        <action-tool name="full-screen-view-3d" />
87
      </tool-bar>
88

  
89
    </extension>
74 90
	</extensions>
75 91
</plugin-config>
2.1/trunk/org.gvsig.view3d/org.gvsig.view3d.app/org.gvsig.view3d.app.common/src/main/resources-plugin/i18n/text.properties
7 7
elevation_field= Campo elevaci\u00F3n
8 8
flat_vertical_exaggeration= Exageraci\u00F3n vertical visor plano
9 9
flat_view_3d= Visor 3D plano
10
full_screen_mode_view_3d= Modo pantalla completa
10 11
level_details= Niveles de detalle
11 12
load_mode= Modo de carga
12 13
raster_image= Imagen raster
2.1/trunk/org.gvsig.view3d/org.gvsig.view3d.app/org.gvsig.view3d.app.common/src/main/resources-plugin/i18n/text_en.properties
7 7
elevation_field= Elvation field
8 8
flat_vertical_exaggeration= Flat vertical exaggeration
9 9
flat_view_3d= Flat 3D viewer
10
full_screen_mode_view_3d= Full screen mode
10 11
level_details= Level of details
11 12
load_mode= Load mode
12 13
raster_image= Raster image
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
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
}
2.1/trunk/org.gvsig.view3d/org.gvsig.view3d.swing/org.gvsig.view3d.swing.impl/src/main/java/org/gvsig/view3d/swing/impl/DefaultView3DSwingManager.java
88 88
        
89 89
        return new DefaultView3DPanel(theMapContext,title, type, viewProperties);
90 90
    }
91
    
92
    public View3DPanel createView3DPanel(MapControl3D mapControl3D, String title) {
91 93

  
94
        if (mapControl3D == null) {
95
            LOG.error("Can't create View3DPanel because MapControl3D is null");
96
            throw new IllegalArgumentException();
97
        }
98

  
99
        return new DefaultView3DPanel(mapControl3D, title);
100
    }
101

  
92 102
    public LayerProperties3DPanel createLayerProperties3DPanel(FLayer layer) {
93 103
        return new DefaultLayerProperties3DPanel(layer);
94 104
    }
......
170 180
        }
171 181
        
172 182
    }
173

  
174 183
}
2.1/trunk/org.gvsig.view3d/org.gvsig.view3d.swing/org.gvsig.view3d.swing.api/src/main/java/org/gvsig/view3d/swing/api/View3DPanel.java
36 36
public interface View3DPanel extends Component {
37 37
    
38 38
    /**
39
     * 
40
     */
41
    public void fullScreen();
42
    
43
    /**
39 44
     * Gets <code>MapControl3D</code> of this <code>ViewPanel</code>
40 45
     */
41 46
    public MapControl3D getMapControl3D();
......
44 49
     * Shows panel like a window. 
45 50
     */
46 51
    public void show();
47
    
48 52
}
2.1/trunk/org.gvsig.view3d/org.gvsig.view3d.swing/org.gvsig.view3d.swing.api/src/main/java/org/gvsig/view3d/swing/api/View3DSwingManager.java
48 48
    public enum TYPE {
49 49
        SPHERE, FLAT
50 50
    }
51
    
52
    /**
53
     * 
54
     * @param mapControl3D
55
     * @param title
56
     * @return
57
     */
58
    public View3DPanel createView3DPanel(MapControl3D mapControl3D, String title);
51 59

  
52 60
    /**
53 61
     * Creates a <code>View3DPanel</code> with a {@link MapControl3D}.
......
145 153
    public GeneralProperties3D getGeneral3DProperties();
146 154
    
147 155
    public void setGeneral3DProperties(GeneralProperties3D properties);
148

  
149 156
}

Also available in: Unified diff