Statistics
| Revision:

gvsig-3d / 2.1 / trunk / org.gvsig.gvsig3d / org.gvsig.gvsig3d.app / org.gvsig.gvsig3d.app.commons / src / main / java / org / gvsig / gvsig3d / app / display / FullScreenPanel.java @ 385

History | View | Annotate | Download (22.9 KB)

1
/* gvSIG 3D extension for gvSIG
2
 *
3
 * Copyright (C) 2012 Prodevelop.
4
 *
5
 * This program is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License
7
 * as published by the Free Software Foundation; either version 2
8
 * of the License, or (at your option) any later version.
9
 *
10
 * This program 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
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
18
 *
19
 * For more information, contact:
20
 *
21
 *   Prodevelop, S.L.
22
 *   Pza. Don Juan de Villarrasa, 14 - 5
23
 *   46001 Valencia
24
 *   Spain
25
 *
26
 *   +34 963 510 612
27
 *   +34 963 510 968
28
 *   prode@prodevelop.es
29
 *   http://www.prodevelop.es
30
 */
31
/*
32
 * AUTHORS:
33
 * 2012 AI2 - Instituto Universitario de Automatica e Informatica Industrial.
34
 * Universitat Politecnica de Valencia (UPV)
35
 * http://www.ai2.upv.es
36
 */
37

    
38

    
39
package org.gvsig.gvsig3d.app.display;
40

    
41
import java.awt.BorderLayout;
42
import java.awt.Component;
43
import java.awt.Dimension;
44
import java.awt.GraphicsDevice;
45
import java.awt.GraphicsEnvironment;
46
import java.awt.HeadlessException;
47
import java.awt.Toolkit;
48
import java.awt.event.ActionEvent;
49
import java.awt.event.ItemEvent;
50
import java.awt.event.ItemListener;
51
import java.awt.event.KeyEvent;
52
import java.awt.event.KeyListener;
53
import java.awt.event.WindowAdapter;
54
import java.awt.event.WindowEvent;
55

    
56
import javax.swing.JButton;
57
import javax.swing.JCheckBox;
58
import javax.swing.JDialog;
59
import javax.swing.JFileChooser;
60
import javax.swing.JFormattedTextField;
61
import javax.swing.JLabel;
62
import javax.swing.JOptionPane;
63
import javax.swing.JPanel;
64
import javax.swing.JSpinner;
65
import javax.swing.JTextField;
66
import javax.swing.SpinnerNumberModel;
67
import javax.swing.event.ChangeEvent;
68
import javax.swing.event.ChangeListener;
69

    
70
import org.gvsig.andami.PluginServices;
71
import org.gvsig.andami.ui.mdiManager.IWindow;
72
import org.gvsig.andami.ui.mdiManager.IWindowListener;
73
import org.gvsig.andami.ui.mdiManager.WindowInfo;
74
import org.gvsig.gui.beans.swing.GridBagLayoutPanel;
75
import org.gvsig.gvsig3d.app.extension.DefaultView3DPanel;
76
import org.gvsig.gvsig3d.map3d.MapContext3D;
77
import org.gvsig.osgvp.core.osg.Matrix;
78
import org.gvsig.osgvp.core.osg.Vec4;
79
import org.gvsig.osgvp.exceptions.node.ChildIndexOutOfBoundsExceptions;
80
import org.gvsig.osgvp.exceptions.node.NodeException;
81
import org.gvsig.osgvp.terrain.Terrain;
82
import org.gvsig.osgvp.terrain.TerrainViewer;
83
import org.gvsig.osgvp.viewer.Camera;
84
import org.gvsig.osgvp.viewer.DisplaySettings;
85
import org.gvsig.osgvp.viewer.ISlaveComponent;
86
import org.gvsig.osgvp.viewer.IViewerContainer;
87
import org.gvsig.osgvp.viewer.ViewerFactory;
88
import org.gvsig.osgvp.viewer.ViewerStateListener;
89
import org.slf4j.Logger;
90
import org.slf4j.LoggerFactory;
91

    
92
/**
93
 * @author Jesus Zarzoso- jzarzoso@ai2.upv.es
94
 * @version $Id$
95
 * 
96
 */
97
public class FullScreenPanel extends GridBagLayoutPanel implements IWindow,
98
                ChangeListener, IWindowListener {
99

    
100
        /**
101
* 
102
*/
103
        private static final long serialVersionUID = 7918162328474597496L;
104
        private static Logger _logger = LoggerFactory
105
                        .getLogger(FullScreenPanel.class.getName());
106

    
107
        private WindowInfo _viewinfo;
108
        private int _width = 650;
109
        private int _height = 270;
110
        private DefaultView3DPanel _view3D;
111
        private TerrainViewer _fullScreenViewer;
112
        private DisplaySettings _ds;
113
        private IViewerContainer _canvas3d;
114

    
115
        private JPanel jPanel1;
116
        private JButton jButton2;
117
        private JButton jButton1;
118
        private JTextField jTextField1;
119
        private JCheckBox jCheckBox1;
120
        private JCheckBox jCheckBox2;
121
        private JCheckBox jCheckBox3;
122
        private JCheckBox wowjCheckBox;
123
        private JCheckBox xyzjCheckBox;
124

    
125
        private javax.swing.JSpinner jSpinner1;
126
        private javax.swing.JSpinner jSpinner2;
127
        private javax.swing.JSpinner jSpinner3;
128
        private javax.swing.JSpinner jSpinner4;
129
        private javax.swing.JSpinner jSpinner5;
130

    
131
        private JLabel jLabel4;
132
        private JLabel jLabel3;
133

    
134
        public FullScreenPanel() {
135

    
136
                if (PluginServices.getMDIManager().getActiveWindow() instanceof DefaultView3DPanel) {
137
                        _view3D = (DefaultView3DPanel) PluginServices.getMDIManager()
138
                                        .getActiveWindow();
139
                        initialize();
140
                }
141

    
142
                else
143
                        PluginServices.getMDIManager().closeWindow(this);
144

    
145
        }
146

    
147
        public Object getWindowModel() {
148
                return _view3D;
149
        }
150

    
151
        public void initialize() {
152

    
153
                java.awt.GridBagConstraints gridBagConstraints;
154

    
155
                jPanel1 = new javax.swing.JPanel();
156
                jButton2 = new javax.swing.JButton();
157
                jButton1 = new javax.swing.JButton();
158
                jLabel3 = new javax.swing.JLabel();
159
                jLabel4 = new javax.swing.JLabel();
160
                jCheckBox1 = new javax.swing.JCheckBox();
161
                jCheckBox2 = new javax.swing.JCheckBox();
162
                jCheckBox3 = new javax.swing.JCheckBox();
163
                jSpinner1 = new javax.swing.JSpinner();
164
                jSpinner2 = new javax.swing.JSpinner();
165
                jSpinner3 = new javax.swing.JSpinner();
166
                jSpinner4 = new javax.swing.JSpinner();
167
                jSpinner5 = new javax.swing.JSpinner();
168
                wowjCheckBox = new JCheckBox();
169
                // xyzjCheckBox = new JCheckBox();
170

    
171
                setLayout(new java.awt.GridBagLayout());
172

    
173
                jPanel1.setLayout(new java.awt.GridBagLayout());
174

    
175
                jButton2.setText(PluginServices.getText(this, "Cancel"));
176
                gridBagConstraints = new java.awt.GridBagConstraints();
177
                gridBagConstraints.gridx = 1;
178
                gridBagConstraints.gridy = 9;
179
                gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
180
                gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
181
                gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 5);
182
                jButton2.addActionListener(new java.awt.event.ActionListener() {
183

    
184
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
185
                                jButton2ActionPerformed(evt);
186
                        }
187
                });
188
                jPanel1.add(jButton2, gridBagConstraints);
189

    
190
                jButton1.setText(PluginServices.getText(this, "Accept"));
191
                jButton1.addActionListener(new java.awt.event.ActionListener() {
192

    
193
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
194
                                jButton1ActionPerformed(evt);
195
                        }
196
                });
197

    
198
                gridBagConstraints = new java.awt.GridBagConstraints();
199
                gridBagConstraints.gridx = 2;
200
                gridBagConstraints.gridy = 9;
201
                gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
202
                gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 12);
203
                jPanel1.add(jButton1, gridBagConstraints);
204

    
205
                jCheckBox1.setText(PluginServices.getText(this, "Sincronizar_camaras"));
206
                gridBagConstraints = new java.awt.GridBagConstraints();
207
                gridBagConstraints.gridx = 0;
208
                gridBagConstraints.gridy = 2;
209
                gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
210
                gridBagConstraints.insets = new java.awt.Insets(0, 0, 11, 0);
211
                jPanel1.add(jCheckBox1, gridBagConstraints);
212
                jCheckBox1.setSelected(false);
213

    
214
                jCheckBox2.setText(PluginServices.getText(this, "Elegir_pantalla"));
215
                gridBagConstraints = new java.awt.GridBagConstraints();
216
                gridBagConstraints.gridx = 0;
217
                gridBagConstraints.gridy = 3;
218
                gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
219
                gridBagConstraints.insets = new java.awt.Insets(0, 0, 11, 0);
220
                jPanel1.add(jCheckBox2, gridBagConstraints);
221

    
222
                jCheckBox2.addItemListener(new ItemListener() {
223

    
224
                        public void itemStateChanged(ItemEvent e) {
225
                                jCheckBox1ItemSelected(e);
226
                        }
227

    
228
                });
229

    
230
                wowjCheckBox.setText(PluginServices.getText(this, "Activar_WOW"));
231
                gridBagConstraints = new java.awt.GridBagConstraints();
232
                gridBagConstraints.gridx = 0;
233
                gridBagConstraints.gridy = 7;
234
                gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
235
                gridBagConstraints.insets = new java.awt.Insets(0, 0, 11, 0);
236
                jPanel1.add(wowjCheckBox, gridBagConstraints);
237
                wowjCheckBox.setSelected(false);
238

    
239
                // xyzjCheckBox.setText(PluginServices.getText(this, "Activar_XYZ"));
240
                // xyzjCheckBox.setToolTipText(PluginServices.getText(this,
241
                // "Activar_XYZ_tooltip"));
242
                gridBagConstraints = new java.awt.GridBagConstraints();
243
                gridBagConstraints.gridx = 0;
244
                gridBagConstraints.gridy = 8;
245
                gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
246
                gridBagConstraints.insets = new java.awt.Insets(0, 0, 11, 0);
247
                // jPanel1.add(xyzjCheckBox, gridBagConstraints);
248
                // xyzjCheckBox.setSelected(false);
249

    
250
                jCheckBox3.setText(PluginServices.getText(this, "Modo_ventana"));
251
                gridBagConstraints = new java.awt.GridBagConstraints();
252
                gridBagConstraints.gridx = 0;
253
                gridBagConstraints.gridy = 4;
254
                gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
255
                gridBagConstraints.insets = new java.awt.Insets(0, 0, 11, 0);
256
                jPanel1.add(jCheckBox3, gridBagConstraints);
257

    
258
                jCheckBox3.addItemListener(new ItemListener() {
259

    
260
                        public void itemStateChanged(ItemEvent e) {
261
                                jCheckBox3ItemSelected(e);
262
                        }
263

    
264
                });
265

    
266
                int min = 0;
267
                int max = 2;
268
                int step = 1;
269
                int initValue = 0;
270
                SpinnerNumberModel model = new SpinnerNumberModel(initValue, min, max,
271
                                step);
272

    
273
                jSpinner1 = new JSpinner(model);
274
                JFormattedTextField tf = ((JSpinner.DefaultEditor) jSpinner1
275
                                .getEditor()).getTextField();
276
                tf.setEditable(false);
277

    
278
                gridBagConstraints = new java.awt.GridBagConstraints();
279
                gridBagConstraints.gridx = 1;
280
                gridBagConstraints.gridy = 3;
281
                gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
282
                gridBagConstraints.insets = new java.awt.Insets(0, 0, 5, 0);
283
                jSpinner1.setEnabled(false);
284
                jPanel1.add(jSpinner1, gridBagConstraints);
285

    
286
                min = 0;
287
                max = 10000;
288
                step = 1;
289
                initValue = 0;
290
                SpinnerNumberModel model2 = new SpinnerNumberModel(initValue, min, max,
291
                                step);
292

    
293
                jLabel3.setText(PluginServices.getText(this, "Posicion_origen"));
294
                gridBagConstraints = new java.awt.GridBagConstraints();
295
                gridBagConstraints.gridx = 0;
296
                gridBagConstraints.gridy = 5;
297
                gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
298
                jPanel1.add(jLabel3, gridBagConstraints);
299

    
300
                jSpinner2 = new JSpinner(model2);
301
                gridBagConstraints = new java.awt.GridBagConstraints();
302
                gridBagConstraints.gridx = 1;
303
                gridBagConstraints.gridy = 5;
304
                gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
305
                gridBagConstraints.insets = new java.awt.Insets(0, 0, 5, 0);
306
                jSpinner2.setEnabled(false);
307
                jPanel1.add(jSpinner2, gridBagConstraints);
308

    
309
                min = 0;
310
                max = 10000;
311
                step = 1;
312
                initValue = 0;
313
                SpinnerNumberModel model3 = new SpinnerNumberModel(initValue, min, max,
314
                                step);
315

    
316
                jSpinner3 = new JSpinner(model3);
317
                gridBagConstraints = new java.awt.GridBagConstraints();
318
                gridBagConstraints.gridx = 2;
319
                gridBagConstraints.gridy = 5;
320
                gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
321
                gridBagConstraints.insets = new java.awt.Insets(0, 0, 5, 0);
322
                jSpinner3.setEnabled(false);
323
                jPanel1.add(jSpinner3, gridBagConstraints);
324

    
325
                jLabel4.setText(PluginServices.getText(this, "Resolucion"));
326
                gridBagConstraints = new java.awt.GridBagConstraints();
327
                gridBagConstraints.gridx = 0;
328
                gridBagConstraints.gridy = 6;
329
                gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
330
                jPanel1.add(jLabel4, gridBagConstraints);
331

    
332
                min = 0;
333
                max = 10000;
334
                step = 1;
335
                initValue = 0;
336
                SpinnerNumberModel model4 = new SpinnerNumberModel(initValue, min, max,
337
                                step);
338

    
339
                jSpinner4 = new JSpinner(model4);
340
                gridBagConstraints = new java.awt.GridBagConstraints();
341
                gridBagConstraints.gridx = 1;
342
                gridBagConstraints.gridy = 6;
343
                gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
344
                gridBagConstraints.insets = new java.awt.Insets(0, 0, 5, 0);
345
                jSpinner4.setEnabled(false);
346
                jSpinner4.setValue((int) 800);
347
                jPanel1.add(jSpinner4, gridBagConstraints);
348

    
349
                min = 0;
350
                max = 10000;
351
                step = 1;
352
                initValue = 0;
353
                SpinnerNumberModel model5 = new SpinnerNumberModel(initValue, min, max,
354
                                step);
355

    
356
                jSpinner5 = new JSpinner(model5);
357
                gridBagConstraints = new java.awt.GridBagConstraints();
358
                gridBagConstraints.gridx = 2;
359
                gridBagConstraints.gridy = 6;
360
                gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
361
                gridBagConstraints.insets = new java.awt.Insets(0, 0, 5, 0);
362
                jSpinner5.setEnabled(false);
363
                jSpinner5.setValue((int) 600);
364
                jPanel1.add(jSpinner5, gridBagConstraints);
365

    
366
                add(jPanel1, new java.awt.GridBagConstraints());
367

    
368
        }
369

    
370
        protected void jCheckBox3ItemSelected(ItemEvent e) {
371

    
372
                if (e.getStateChange() == ItemEvent.SELECTED) {
373
                        jSpinner2.setEnabled(true);
374
                        jSpinner3.setEnabled(true);
375
                        jSpinner4.setEnabled(true);
376
                        jSpinner5.setEnabled(true);
377
                } else {
378
                        jSpinner2.setEnabled(false);
379
                        jSpinner3.setEnabled(false);
380
                        jSpinner4.setEnabled(false);
381
                        jSpinner5.setEnabled(false);
382
                }
383

    
384
        }
385

    
386
        protected void jCheckBox1ItemSelected(ItemEvent e) {
387

    
388
                if (e.getStateChange() == ItemEvent.SELECTED)
389
                        jSpinner1.setEnabled(true);
390
                else
391
                        jSpinner1.setEnabled(false);
392

    
393
        }
394

    
395
        protected void jButton3ActionPerformed(ActionEvent evt) {
396
                JFileChooser jFileChooser1 = new JFileChooser();
397
                int returnVal = jFileChooser1.showOpenDialog(this);
398

    
399
                if (returnVal == JFileChooser.APPROVE_OPTION)
400
                        jTextField1.setText(jFileChooser1.getSelectedFile()
401
                                        .getAbsolutePath());
402

    
403
        }
404

    
405
        private JDialog frame;
406
        private boolean changedManipulator;
407
        private Camera viewCam;
408
        private int _numScreens;
409
        private int _screenWidth;
410
        private int _screenHeight;
411

    
412
        // private Compass compass;
413

    
414
        protected void jButton1ActionPerformed(ActionEvent evt) {
415

    
416
                _view3D = (DefaultView3DPanel) PluginServices.getMDIManager()
417
                                .getActiveWindow();
418
                PluginServices.getMDIManager().closeWindow(this);
419

    
420
                _ds = _view3D.getDisplaySettings();
421

    
422
                final boolean synchronize = jCheckBox1.isSelected();
423
                changedManipulator = false;
424

    
425
                GraphicsEnvironment ge = GraphicsEnvironment
426
                                .getLocalGraphicsEnvironment();
427
                try {
428
                        GraphicsDevice[] gs = ge.getScreenDevices();
429
                        int screenNum = ((SpinnerNumberModel) jSpinner1.getModel())
430
                                        .getNumber().intValue();
431
                        _numScreens = gs.length;
432
                        if (_numScreens <= screenNum)
433
                                screenNum = 0;
434
                        _screenWidth = gs[screenNum].getDisplayMode().getWidth();
435
                        _screenHeight = gs[screenNum].getDisplayMode().getHeight();
436
                        _logger.debug("Num Screens:" + _numScreens);
437
                        _logger.debug("Selected Screen:" + screenNum);
438
                        _logger.debug("Selected Screen Resolution:(" + _screenWidth + ","
439
                                        + _screenHeight + ")");
440
                } catch (HeadlessException e) {
441
                        // Is thrown if there are no screen devices
442
                }
443

    
444
                try {
445
                        Terrain planetView3D = ((TerrainViewer) _view3D.getCanvas3d()
446
                                        .getOSGViewer()).getTerrain(0);
447
                        final Terrain terrain = new Terrain();
448
                        terrain.setRasterTerrainTechnique(Terrain.TerrainTechnique.SHADER);
449
                        terrain.setCoordinateSystemType(planetView3D
450
                                        .getCoordinateSystemType());
451
                        terrain.setCoordinateSystemName(planetView3D
452
                                        .getCoordinateSystemName());
453
                        terrain.setCoordinateSystemFormat(planetView3D
454
                                        .getCoordinateSystemFormat());
455
                        terrain.setExtent(planetView3D.xMin(), planetView3D.yMin(),
456
                                        planetView3D.xMax(), planetView3D.yMax());
457
                        terrain.setTerrainName(planetView3D.getTerrainName());
458

    
459
                        MapContext3D mc = (MapContext3D) _view3D.getMapControl()
460
                                        .getMapContext();
461
                        terrain.init();
462
                        terrain.setLayerManager(mc.getTerrain().getLayerManager());
463
                        viewCam = new Camera();
464
                        _fullScreenViewer = new TerrainViewer() {
465

    
466
                                public void frame() {
467
                                        if (synchronize) {
468
                                                _fullScreenViewer.setFusionDistance((float) terrain
469
                                                                .getZoom());
470
                                                Matrix refView = _view3D.getCanvas3d().getOSGViewer()
471
                                                                .getViewMatrix();
472
                                                viewCam.setViewMatrix(refView);
473
                                                _fullScreenViewer.setCamera(viewCam);
474
                                        }
475

    
476
                                        super.frame();
477
                                };
478
                        };
479
                        _fullScreenViewer.addTerrain(terrain);
480
                        _fullScreenViewer.addFeature((((TerrainViewer) _view3D
481
                                        .getCanvas3d().getOSGViewer()).getFeatures()));
482
                        Terrain pl = (((TerrainViewer) _view3D.getCanvas3d().getOSGViewer())
483
                                        .getTerrain(0));
484
                        // compass = new Compass(pl);
485
                        //
486
                        // if (pl.getCoordinateSystemType() ==
487
                        // Terrain.CoordinateSystemType.GEOCENTRIC) {
488
                        // compass.setPanetType(Compass.Mode.SPHERIC);
489
                        // } else
490
                        // compass.setPanetType(Compass.Mode.FLAT);
491
                        //
492
                        // compass.setUpdateListener(new UpdateNodeListener() {
493
                        //
494
                        // public void update(Node arg0) {
495
                        // compass.update(_fullScreenViewer.getCamera());
496
                        //
497
                        // }
498
                        // });
499

    
500
                        // _fullScreenViewer.addNodeToCameraHUD(compass);
501

    
502
                        Vec4 color = ((TerrainViewer) _view3D.getCanvas3d().getOSGViewer())
503
                                        .getClearColor();
504
                        _fullScreenViewer.setClearColor(color.x(), color.y(), color.z(),
505
                                        color.w());
506
                        _fullScreenViewer.setDisplaySettings(_ds);
507
                        Matrix refView = _view3D.getCanvas3d().getOSGViewer()
508
                                        .getViewMatrix();
509
                        viewCam.setViewMatrix(refView);
510
                        _fullScreenViewer.setCamera(viewCam);
511

    
512
                        _canvas3d = ViewerFactory.getInstance().createViewer(
513
                                        ViewerFactory.VIEWER_TYPE.CANVAS_VIEWER, _fullScreenViewer);
514
                        _canvas3d
515
                                        .addKeyListener(new ViewerStateListener(_fullScreenViewer));
516
                        frame = new JDialog();
517
                        JPanel jContentPane = new JPanel();
518
                        jContentPane.setLayout(new BorderLayout());
519
                        frame.setContentPane(jContentPane);
520
                        jContentPane.add((Component) _canvas3d, BorderLayout.CENTER);
521
                        ViewerFactory.getInstance().startAnimator();
522
                        frame.addWindowListener(new WindowAdapter() {
523

    
524
                                public void windowClosing(WindowEvent e) {
525
                                        /*
526
                                         * if (changedManipulator) { ((TerrainViewer)
527
                                         * (_view3D.getCanvas3d().getOSGViewer()))
528
                                         * .setCameraManipulator(null); }
529
                                         */
530

    
531
                                        _canvas3d.dispose();
532
                                }
533
                        });
534

    
535
                        // frame.addComponentListener(new ComponentListener() {
536
                        //
537
                        // public void componentResized(ComponentEvent arg0) {
538
                        // compass.setPosition(new Vec3(frame.getWidth() - 70, frame
539
                        // .getHeight() - 70, 0));
540
                        //
541
                        // }
542
                        //
543
                        // public void componentMoved(ComponentEvent arg0) {
544
                        // // TODO Auto-generated method stub
545
                        //
546
                        // }
547
                        //
548
                        // public void componentShown(ComponentEvent arg0) {
549
                        // // TODO Auto-generated method stub
550
                        //
551
                        // }
552
                        //
553
                        // public void componentHidden(ComponentEvent e) {
554
                        // // TODO Auto-generated method stub
555
                        //
556
                        // }
557
                        // });
558
                        _canvas3d.addKeyListener(new KeyListener() {
559

    
560
                                public void keyPressed(KeyEvent arg0) {
561
                                        // TODO Auto-generated method stub
562

    
563
                                }
564

    
565
                                public void keyReleased(KeyEvent arg0) {
566

    
567
                                        if (arg0.getKeyCode() == KeyEvent.VK_ESCAPE) {
568

    
569
                                                frame.dispose();
570

    
571
                                        }
572

    
573
                                }
574

    
575
                                public void keyTyped(KeyEvent arg0) {
576
                                        // TODO Auto-generated method stub
577

    
578
                                }
579
                        });
580

    
581
                } catch (ChildIndexOutOfBoundsExceptions e1) {
582

    
583
                        e1.printStackTrace();
584
                } catch (NodeException e1) {
585

    
586
                        e1.printStackTrace();
587
                }
588

    
589
                /*
590
                 * if (_view3D.getCanvas3d().getOSGViewer().getCameraManipulator() ==
591
                 * null) { ((TerrainViewer) (_view3D.getCanvas3d().getOSGViewer()))
592
                 * .restoreCustomTerrainManipulator(); changedManipulator = true; }
593
                 */
594

    
595
                if (synchronize)
596
                        _fullScreenViewer.setCameraManipulator(null);
597

    
598
                if (!jCheckBox3.isSelected()) { // the viewer is created in
599
                        // fullscreen
600
                        if (wowjCheckBox.isSelected()) {
601
                                enableWOWDisplay();
602
                                runViewer();
603
                        } else if (_ds.getStereoMode() == DisplaySettings.StereoMode.QUAD_BUFFER) {
604
                                enableQUADBUFFERDisplay();
605
                                runViewer();
606
                        } else {
607
                                if (!jCheckBox2.isSelected()) {
608
                                        // if (xyzjCheckBox.isSelected()) {
609
                                        // enableXYZDisplay();
610
                                        // }
611
                                        frame.setUndecorated(true);
612
                                        frame.requestFocus();
613
                                        // Dimension dim =
614
                                        // Toolkit.getDefaultToolkit().getScreenSize();
615
                                        // frame.setSize(dim.width, dim.height);
616
                                        frame.setSize(_screenWidth, _screenHeight);
617
                                        frame.setVisible(true);
618
                                }
619

    
620
                                else {
621
                                        // if (xyzjCheckBox.isSelected()) {
622
                                        // enableXYZDisplay();
623
                                        // }
624
                                        frame.setUndecorated(true);
625
                                        frame.requestFocus();
626
                                        // Dimension dim =
627
                                        // Toolkit.getDefaultToolkit().getScreenSize();
628
                                        // frame.setSize(dim.width / _numScreens, dim.height);
629
                                        frame.setSize(_screenWidth, _screenHeight);
630
                                        frame.setLocation(
631
                                                        ((SpinnerNumberModel) jSpinner1.getModel())
632
                                                                        .getNumber().intValue() * _screenWidth, 0);
633
                                        frame.setVisible(true);
634
                                }
635
                        }
636
                }
637

    
638
                else { // here is created a windowed viewer
639

    
640
                        if (jCheckBox2.isSelected()) {
641

    
642
                                Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
643
                                frame.setSize(((SpinnerNumberModel) jSpinner4.getModel())
644
                                                .getNumber().intValue(),
645
                                                ((SpinnerNumberModel) jSpinner5.getModel()).getNumber()
646
                                                                .intValue());
647
                                frame.setLocation((((SpinnerNumberModel) jSpinner1.getModel())
648
                                                .getNumber().intValue() * dim.width)
649
                                                + ((SpinnerNumberModel) jSpinner2.getModel())
650
                                                                .getNumber().intValue(),
651
                                                ((SpinnerNumberModel) jSpinner3.getModel()).getNumber()
652
                                                                .intValue());
653
                                frame.setVisible(true);
654
                        } else {
655

    
656
                                frame.setSize(((SpinnerNumberModel) jSpinner4.getModel())
657
                                                .getNumber().intValue(),
658
                                                ((SpinnerNumberModel) jSpinner5.getModel()).getNumber()
659
                                                                .intValue());
660
                                frame.setLocation(((SpinnerNumberModel) jSpinner2.getModel())
661
                                                .getNumber().intValue(),
662
                                                ((SpinnerNumberModel) jSpinner3.getModel()).getNumber()
663
                                                                .intValue());
664
                                frame.setVisible(true);
665
                        }
666

    
667
                }
668

    
669
                // compass.setScale(new Vec3(75, 75, 75));
670
                System.gc();
671

    
672
        }
673

    
674
        protected void jButton2ActionPerformed(ActionEvent evt) {
675
                PluginServices.getMDIManager().closeWindow(this);
676

    
677
        }
678

    
679
        public WindowInfo getWindowInfo() {
680
                _viewinfo = new WindowInfo(WindowInfo.MODALDIALOG);
681
                _viewinfo.setTitle(PluginServices.getText(this, "FullScreen"));
682
                _viewinfo.setHeight(_height);
683
                _viewinfo.setWidth(_width);
684
                return _viewinfo;
685
        }
686

    
687
        public void stateChanged(ChangeEvent e) {
688

    
689
        }
690

    
691
        public void windowActivated() {
692
                _view3D = (DefaultView3DPanel) PluginServices.getMDIManager()
693
                                .getActiveWindow();
694
        }
695

    
696
        public void windowClosed() {
697

    
698
        }
699

    
700
        public Object getWindowProfile() {
701
                // TODO Auto-generated method stub
702
                return WindowInfo.DIALOG_PROFILE;
703
        }
704

    
705
        protected void enableWOWDisplay() {
706
                char wow_content = 0x02, wow_factor = 0x40, wow_offset = 0x80;
707
                float wow_Zd = 0.459813f;
708
                float wow_vz = 6.180772f;
709
                float wow_M = -1586.34f;
710
                float wow_C = 127.5f;
711
                int screenNum = ((SpinnerNumberModel) jSpinner1.getModel()).getNumber()
712
                                .intValue();
713

    
714
                _fullScreenViewer.setUpViewForWoWVxDisplay(screenNum, wow_content,
715
                                wow_factor, wow_offset, wow_Zd, wow_vz, wow_M, wow_C);
716
        }
717

    
718
        // protected void enableXYZDisplay() {
719
        // // int screenNum = ((SpinnerNumberModel) jSpinner1
720
        // // .getModel()).getNumber().intValue();
721
        // // _fullScreenViewer.setUpViewOnSingleScreen(screenNum);
722
        // Node n = _fullScreenViewer.getSceneData();
723
        // Node multiview = osgDB.readNodeFileNoException(String.valueOf(n
724
        // .getCPtr())
725
        // + ".multiview");
726
        // _fullScreenViewer.setSceneData(multiview);
727
        // }
728

    
729
        protected void enableQUADBUFFERDisplay() {
730
                if (!_fullScreenViewer.setUpViewerWithQuadBuffer(0, 0, _screenWidth,
731
                                _screenHeight))
732
                        JOptionPane.showMessageDialog(
733
                                        (Component) PluginServices.getMainFrame(),
734
                                        PluginServices.getText(this, "Quadbuffer_error"));
735
                // compass.setPosition(new Vec3(_screenWidth - 70, _screenHeight - 70,
736
                // 0));
737
        }
738

    
739
        protected void runViewer() {
740
                final ISlaveComponent slavePainter = new ISlaveComponent() {
741

    
742
                        public void repaint() {
743
                                if (_fullScreenViewer != null) {
744
                                        if (_fullScreenViewer.done()) {
745
                                                _view3D.getCanvas3d().removeRenderSlaveComponent(this);
746
                                                _fullScreenViewer.dispose();
747
                                                _fullScreenViewer = null;
748
                                        } else
749
                                                _fullScreenViewer.frame();
750
                                }
751
                        }
752
                };
753
                _view3D.getCanvas3d().addRenderSlaveComponent(slavePainter);
754
        }
755
}