Statistics
| Revision:

gvsig-3d / org.gvsig.animation3d / trunk / org.gvsig.animation3d / org.gvsig.animation3d.swing / org.gvsig.animation3d.swing.impl / src / main / java / org / gvsig / animation3d / swing / impl / DefaultAnimation3DPanelController.java @ 684

History | View | Annotate | Download (26.8 KB)

1
package org.gvsig.animation3d.swing.impl;
2

    
3
import java.awt.Dimension;
4
import java.awt.event.ActionEvent;
5
import java.awt.event.ActionListener;
6
import java.util.ArrayList;
7
import java.util.Collection;
8
import java.util.List;
9
import java.util.Locale;
10
import java.util.Map;
11
import java.util.Set;
12

    
13
import javax.swing.JComponent;
14
import javax.swing.JOptionPane;
15
import javax.swing.JTable;
16
import javax.swing.ListSelectionModel;
17
import javax.swing.event.ListSelectionEvent;
18
import javax.swing.event.ListSelectionListener;
19
import javax.swing.table.DefaultTableModel;
20

    
21
import org.apache.commons.lang3.StringUtils;
22
import org.gvsig.animation3d.swing.api.Animation3D;
23
import org.gvsig.animation3d.swing.api.Animation3DPanel;
24
import org.gvsig.animation3d.swing.api.Animation3DSwingLocator;
25
import org.gvsig.animation3d.swing.api.Animation3DSwingManager;
26
import org.gvsig.animation3d.swing.api.Animator;
27
import org.gvsig.animation3d.swing.api.Frame3D;
28
import org.gvsig.animation3d.swing.api.Frame3DCreationException;
29
import org.gvsig.fmap.mapcontext.layers.ExtendedPropertiesSupport;
30
import org.gvsig.tools.ToolsLocator;
31
import org.gvsig.tools.i18n.I18nManager;
32
import org.gvsig.tools.observer.Notification;
33
import org.gvsig.tools.observer.Observable;
34
import org.gvsig.tools.swing.api.ToolsSwingLocator;
35
import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager;
36
import org.gvsig.view3d.swing.api.MapControl3D;
37
import org.gvsig.view3d.swing.api.View3DSwingLocator;
38
import org.gvsig.view3d.swing.api.View3DSwingManager;
39
import org.gvsig.view3d.swing.api.View3DSwingManager.TYPE;
40
import org.slf4j.Logger;
41
import org.slf4j.LoggerFactory;
42

    
43
/**
44
 * 
45
 * @author <a href="mailto:lmarques@disid.com">Lluis Marques</a>
46
 *
47
 */
48
public class DefaultAnimation3DPanelController extends DefaultAnimation3DPanelView implements
49
    Animation3DPanel {
50

    
51
    private static final Logger LOG = LoggerFactory
52
        .getLogger(DefaultAnimation3DPanelController.class);
53

    
54
    private static final long serialVersionUID = -142252066138365417L;
55

    
56
    private Map<String, ExtendedPropertiesSupport> views;
57

    
58
    /**
59
     * Default constructor
60
     * 
61
     * @param views
62
     */
63
    public DefaultAnimation3DPanelController(Map<String, ExtendedPropertiesSupport> views) {
64
        super();
65

    
66
        this.views = views;
67

    
68
        View3DSwingLocator.getManager().addObserver(this);
69

    
70
        initComponents();
71
    }
72

    
73
    private void initComponents() {
74

    
75
        initViewsCombo(views.keySet());
76
        initAnimationControlButtons();
77
        initAnimationsTable();
78
        initMapControl3DOptions();
79
        initFrameControlButtons();
80
        initCloseButton();
81

    
82
        viewsCombo.setSelectedIndex(0);
83
        translate();
84
    }
85

    
86
    private void initCloseButton() {
87
        close.addActionListener(new ActionListener() {
88

    
89
            @Override
90
            public void actionPerformed(ActionEvent e) {
91
                doClose();
92

    
93
            }
94
        });
95
    }
96

    
97
    protected void doClose() {
98
        this.dispose();
99
        this.setVisible(false);
100
    }
101

    
102
    private void initMapControl3DOptions() {
103

    
104
        sphericalOption.addActionListener(new ActionListener() {
105

    
106
            @Override
107
            public void actionPerformed(ActionEvent e) {
108
                doOptionSelected();
109

    
110
            }
111
        });
112

    
113
        flatOption.addActionListener(new ActionListener() {
114

    
115
            @Override
116
            public void actionPerformed(ActionEvent e) {
117
                doOptionSelected();
118

    
119
            }
120
        });
121
    }
122

    
123
    protected void doOptionSelected() {
124

    
125
        if (!animations.getSelectionModel().isSelectionEmpty()) {
126
            // Add frames 3D to table
127
            int selectedRow = animations.getSelectedRow();
128
            DefaultAnimation3DTableModel model =
129
                (DefaultAnimation3DTableModel) animations.getModel();
130
            Animation3D animation = model.getAnimation(selectedRow);
131
            initFramesTable(animation);
132

    
133
            String viewName = (String) viewsCombo.getSelectedItem();
134
            ExtendedPropertiesSupport propertiesSupport = views.get(viewName);
135
            View3DSwingManager manager = View3DSwingLocator.getManager();
136
            if (sphericalOption.isSelected()) {
137
                MapControl3D mapControl3D = manager.getMapControl3D(propertiesSupport, TYPE.SPHERE);
138
                if (mapControl3D == null) {
139
                    addFrame.setEnabled(false);
140
                    playAnimation.setEnabled(false);
141
                } else {
142
                    addFrame.setEnabled(true);
143
                    if (animation.getSphericalFrames().isEmpty()) {
144
                        playAnimation.setEnabled(false);
145
                    } else {
146
                        playAnimation.setEnabled(true);
147
                    }
148
                }
149
            } else if (flatOption.isSelected()) {
150
                MapControl3D mapControl3D = manager.getMapControl3D(propertiesSupport, TYPE.FLAT);
151
                if (mapControl3D == null) {
152
                    addFrame.setEnabled(false);
153
                    playAnimation.setEnabled(false);
154
                } else {
155
                    addFrame.setEnabled(true);
156
                    if (animation.getFlatFrames().isEmpty()) {
157
                        playAnimation.setEnabled(false);
158
                    } else {
159
                        playAnimation.setEnabled(true);
160
                    }
161
                }
162
            }
163
        }
164
    }
165

    
166
    private void initFrameControlButtons() {
167

    
168
        frames.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
169

    
170
            @Override
171
            public void valueChanged(ListSelectionEvent arg0) {
172
                doFrameSelected();
173

    
174
            }
175
        });
176

    
177
        addFrame.addActionListener(new ActionListener() {
178

    
179
            @Override
180
            public void actionPerformed(ActionEvent e) {
181
                doAddFrameAction();
182
            }
183
        });
184

    
185
        removeFrame.addActionListener(new ActionListener() {
186

    
187
            @Override
188
            public void actionPerformed(ActionEvent e) {
189
                doRemoveFrameAction();
190

    
191
            }
192
        });
193

    
194
        upFrame.addActionListener(new ActionListener() {
195

    
196
            @Override
197
            public void actionPerformed(ActionEvent e) {
198
                doUpFrameAction();
199

    
200
            }
201
        });
202

    
203
        downFrame.addActionListener(new ActionListener() {
204

    
205
            @Override
206
            public void actionPerformed(ActionEvent e) {
207
                doDownFrameAction();
208

    
209
            }
210
        });
211

    
212
        zoomToFrame.addActionListener(new ActionListener() {
213

    
214
            @Override
215
            public void actionPerformed(ActionEvent e) {
216
                doZoomToFrameAction();
217

    
218
            }
219
        });
220
    }
221

    
222
    protected void doFrameSelected() {
223

    
224
        if (frames.getSelectionModel().isSelectionEmpty()) {
225
            removeFrame.setEnabled(false);
226
            upFrame.setEnabled(false);
227
            downFrame.setEnabled(false);
228
            zoomToFrame.setEnabled(false);
229
        } else {
230

    
231
            if (frames.getRowCount() > 1 && frames.getSelectedRows().length == 1) {
232
                downFrame.setEnabled(true);
233
                upFrame.setEnabled(true);
234
            } else {
235
                downFrame.setEnabled(false);
236
                upFrame.setEnabled(false);
237
            }
238

    
239
            removeFrame.setEnabled(true);
240

    
241
            if (!sphericalOption.isSelected() && !flatOption.isSelected()) {
242
                addFrame.setEnabled(false);
243
                zoomToFrame.setEnabled(false);
244
            } else if (frames.getSelectedRows().length != 1) {
245
                zoomToFrame.setEnabled(false);
246
            } else {
247

    
248
                String viewName = (String) viewsCombo.getSelectedItem();
249
                ExtendedPropertiesSupport propertiesSupport = views.get(viewName);
250
                View3DSwingManager manager = View3DSwingLocator.getManager();
251

    
252
                if (sphericalOption.isSelected()) {
253
                    MapControl3D mapControl3D =
254
                        manager.getMapControl3D(propertiesSupport, TYPE.SPHERE);
255
                    if (mapControl3D == null) {
256
                        zoomToFrame.setEnabled(false);
257
                    } else if (mapControl3D != null) {
258
                        zoomToFrame.setEnabled(true);
259
                    }
260
                } else if (flatOption.isSelected()) {
261
                    MapControl3D mapControl3D =
262
                        manager.getMapControl3D(propertiesSupport, TYPE.FLAT);
263
                    if (mapControl3D == null) {
264
                        zoomToFrame.setEnabled(false);
265
                    } else if (mapControl3D != null) {
266
                        zoomToFrame.setEnabled(true);
267
                    }
268
                }
269
            }
270
        }
271
    }
272

    
273
    protected void doAddFrameAction() {
274

    
275
        MapControl3D mapControl3D;
276
        View3DSwingManager swingManager = View3DSwingLocator.getManager();
277

    
278
        String viewName = (String) this.viewsCombo.getSelectedItem();
279
        if (sphericalOption.isSelected()) {
280
            mapControl3D = swingManager.getMapControl3D(this.views.get(viewName), TYPE.SPHERE);
281
        } else if (flatOption.isSelected()) {
282
            mapControl3D = swingManager.getMapControl3D(this.views.get(viewName), TYPE.FLAT);
283
        } else {
284
            throw new IllegalStateException(
285
                "Can not add frame if any mapcontrol type option is selected");
286
        }
287

    
288
        I18nManager i18nManager = ToolsLocator.getI18nManager();
289
        String name =
290
            i18nManager.getTranslation("frame_XxnumberxX",
291
                new String[] { String.valueOf(frames.getRowCount()) });
292
        Frame3D newFrame3d = null;
293
        try {
294
            Animation3DSwingManager manager = Animation3DSwingLocator.getManager();
295
            newFrame3d = manager.createFrame3D(name, mapControl3D);
296
        } catch (Frame3DCreationException e) {
297
            LOG.error("Error getting frame 3D", e);
298
            ThreadSafeDialogsManager dialogsManager =
299
                ToolsSwingLocator.getThreadSafeDialogsManager();
300
            dialogsManager.messageDialog(
301
                i18nManager.getTranslation("error_getting_frame_of_3D_view"),
302
                i18nManager.getTranslation("_error"), JOptionPane.ERROR_MESSAGE);
303
            return;
304
        }
305
        DefaultFrame3DTableModel model = (DefaultFrame3DTableModel) frames.getModel();
306
        model.addFrame(newFrame3d);
307
        this.playAnimation.setEnabled(true);
308

    
309
        if (model.getRowCount() > 1 && !this.frames.getSelectionModel().isSelectionEmpty()) {
310
            upFrame.setEnabled(true);
311
            downFrame.setEnabled(true);
312
        }
313
    }
314

    
315
    protected void doRemoveFrameAction() {
316

    
317
        if (this.frames.getSelectionModel().isSelectionEmpty()) {
318
            return;
319
        }
320

    
321
        List<Frame3D> frames = getSelectedFrames();
322
        DefaultFrame3DTableModel model = (DefaultFrame3DTableModel) this.frames.getModel();
323
        for (Frame3D frame : frames) {
324
            model.removeFrame(frame);
325
        }
326

    
327
        if (model.getRowCount() == 0) {
328
            playAnimation.setEnabled(false);
329
            removeFrame.setEnabled(false);
330
            upFrame.setEnabled(false);
331
            downFrame.setEnabled(false);
332
            zoomToFrame.setEnabled(false);
333
        }
334
    }
335

    
336
    private List<Frame3D> getSelectedFrames() {
337
        List<Frame3D> selectedFrames = new ArrayList<Frame3D>();
338
        int[] selectedRows = this.frames.getSelectedRows();
339
        DefaultFrame3DTableModel model = (DefaultFrame3DTableModel) this.frames.getModel();
340
        for (int selectedRow : selectedRows) {
341
            selectedFrames.add(model.getFrame(selectedRow));
342
        }
343
        return selectedFrames;
344
    }
345

    
346
    protected void doUpFrameAction() {
347
        if (this.frames.getSelectionModel().isSelectionEmpty()) {
348
            return;
349
        }
350

    
351
        int minSelectionIndex = this.frames.getSelectionModel().getMinSelectionIndex();
352
        int maxSelectionIndex = this.frames.getSelectionModel().getMaxSelectionIndex();
353

    
354
        List<Frame3D> selectedFrames = getSelectedFrames();
355
        DefaultFrame3DTableModel model = (DefaultFrame3DTableModel) this.frames.getModel();
356
        for (Frame3D frame3d : selectedFrames) {
357
            model.upFrame(frame3d);
358
        }
359

    
360
        if (minSelectionIndex - 1 > -1 && maxSelectionIndex - 1 > -1) {
361
            this.frames.getSelectionModel().setSelectionInterval(minSelectionIndex - 1,
362
                maxSelectionIndex - 1);
363
        }
364
    }
365

    
366
    protected void doDownFrameAction() {
367
        if (this.frames.getSelectionModel().isSelectionEmpty()) {
368
            return;
369
        }
370

    
371
        int minSelectionIndex = this.frames.getSelectionModel().getMinSelectionIndex();
372
        int maxSelectionIndex = this.frames.getSelectionModel().getMaxSelectionIndex();
373

    
374
        List<Frame3D> selectedFrames = getSelectedFrames();
375
        DefaultFrame3DTableModel model = (DefaultFrame3DTableModel) this.frames.getModel();
376
        for (Frame3D frame3d : selectedFrames) {
377
            model.downFrame(frame3d);
378
        }
379

    
380
        if (minSelectionIndex + 1 < this.frames.getRowCount()
381
            && maxSelectionIndex + 1 < this.frames.getRowCount()) {
382
            this.frames.getSelectionModel().setSelectionInterval(minSelectionIndex + 1,
383
                maxSelectionIndex + 1);
384
        }
385

    
386
    }
387

    
388
    protected void doZoomToFrameAction() {
389
        if (this.frames.getSelectionModel().isSelectionEmpty()) {
390
            return;
391
        }
392

    
393
        int selectedRow = this.frames.getSelectedRow();
394
        DefaultFrame3DTableModel model = (DefaultFrame3DTableModel) this.frames.getModel();
395
        Frame3D frame = model.getFrame(selectedRow);
396

    
397
        MapControl3D mapControl3D;
398
        View3DSwingManager swingManager = View3DSwingLocator.getManager();
399

    
400
        String viewName = (String) this.viewsCombo.getSelectedItem();
401
        if (sphericalOption.isSelected()) {
402
            mapControl3D = swingManager.getMapControl3D(this.views.get(viewName), TYPE.SPHERE);
403
        } else if (flatOption.isSelected()) {
404
            mapControl3D = swingManager.getMapControl3D(this.views.get(viewName), TYPE.FLAT);
405
        } else {
406
            return;
407
        }
408

    
409
        Animation3DSwingManager manager = Animation3DSwingLocator.getManager();
410
        Animator goToAnimator =
411
            manager.createGoToAnimator(mapControl3D, frame, 4000, 16000);
412
        manager.addAnimator(mapControl3D, goToAnimator);
413
    }
414

    
415
    private void initAnimationsTable() {
416

    
417
        animations.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
418
        animations.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
419

    
420
            @Override
421
            public void valueChanged(ListSelectionEvent e) {
422
                doAnimationSelectedAction();
423

    
424
            }
425
        });
426

    
427
    }
428

    
429
    protected void doAnimationSelectedAction() {
430

    
431
        String viewName = (String) viewsCombo.getSelectedItem();
432
        ExtendedPropertiesSupport viewProperties = views.get(viewName);
433
        if (StringUtils.isBlank(viewName) || viewProperties == null) {
434
            addAnimation.setEnabled(false);
435
            removeAnimation.setEnabled(false);
436
            sphericalOption.setEnabled(false);
437
            flatOption.setEnabled(false);
438
            playAnimation.setEnabled(false);
439
            frames.setModel(new DefaultTableModel());
440
            addFrame.setEnabled(false);
441
            removeFrame.setEnabled(false);
442
            upFrame.setEnabled(false);
443
            downFrame.setEnabled(false);
444
            zoomToFrame.setEnabled(false);
445
            return;
446
        }
447

    
448
        // Enable remove button
449
        if (!animations.getSelectionModel().isSelectionEmpty()) {
450
            removeAnimation.setEnabled(true);
451
        }
452

    
453
        sphericalOption.setEnabled(true);
454
        flatOption.setEnabled(true);
455

    
456
        if (animations.getSelectionModel().isSelectionEmpty()) {
457
            return;
458
        }
459

    
460
        int selectedRow = animations.getSelectedRow();
461
        DefaultAnimation3DTableModel model = (DefaultAnimation3DTableModel) animations.getModel();
462
        Animation3D animation = model.getAnimation(selectedRow);
463

    
464
        if (sphericalOption.isSelected()) {
465
            MapControl3D mapControl3D =
466
                View3DSwingLocator.getManager().getMapControl3D(viewProperties, TYPE.SPHERE);
467
            if (mapControl3D != null) {
468
                addFrame.setEnabled(true);
469
                if (animation.getSphericalFrames().isEmpty()) {
470
                    playAnimation.setEnabled(false);
471
                } else {
472
                    playAnimation.setEnabled(true);
473
                }
474
            } else {
475
                addFrame.setEnabled(false);
476
                playAnimation.setEnabled(false);
477
            }
478

    
479
        } else if (flatOption.isSelected()) {
480
            MapControl3D mapControl3D =
481
                View3DSwingLocator.getManager().getMapControl3D(viewProperties, TYPE.FLAT);
482
            if (mapControl3D != null) {
483
                addFrame.setEnabled(true);
484
                if (animation.getFlatFrames().isEmpty()) {
485
                    playAnimation.setEnabled(false);
486
                } else {
487
                    playAnimation.setEnabled(true);
488
                }
489
            } else {
490
                addFrame.setEnabled(false);
491
                playAnimation.setEnabled(false);
492
            }
493
        }
494

    
495
        initFramesTable(animation);
496
    }
497

    
498
    private void initFramesTable(Animation3D animation) {
499

    
500
        List<Frame3D> frameList = null;
501
        if (sphericalOption.isSelected()) {
502
            frameList = animation.getSphericalFrames();
503
        } else if (flatOption.isSelected()) {
504
            frameList = animation.getFlatFrames();
505
        } else {
506
            return;
507
        }
508

    
509
        this.frames.getSelectionModel().setSelectionMode(
510
            ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
511
        DefaultFrame3DTableModel frameTableModel = new DefaultFrame3DTableModel(frameList);
512
        this.frames.setModel(frameTableModel);
513
        this.frames.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
514
        this.frames.getColumnModel().getColumn(0).setMaxWidth(80);
515
        this.frames.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
516

    
517
            @Override
518
            public void valueChanged(ListSelectionEvent e) {
519
                removeFrame.setEnabled(true);
520
                upFrame.setEnabled(true);
521
                downFrame.setEnabled(true);
522
                zoomToFrame.setEnabled(true);
523
            }
524
        });
525
    }
526

    
527
    private void initAnimationControlButtons() {
528
        addAnimation.addActionListener(new ActionListener() {
529

    
530
            @Override
531
            public void actionPerformed(ActionEvent e) {
532
                doAddAnimation();
533
            }
534
        });
535
        removeAnimation.addActionListener(new ActionListener() {
536

    
537
            @Override
538
            public void actionPerformed(ActionEvent e) {
539
                doRemoveAnimation();
540
            }
541
        });
542

    
543
        playAnimation.addActionListener(new ActionListener() {
544

    
545
            @Override
546
            public void actionPerformed(ActionEvent e) {
547
                doPlay();
548

    
549
            }
550
        });
551
    }
552

    
553
    protected void doPlay() {
554

    
555
        MapControl3D mapControl3D = null;
556
        String viewName = (String) this.viewsCombo.getSelectedItem();
557
        ExtendedPropertiesSupport viewProperties = this.views.get(viewName);
558
        if (sphericalOption.isSelected()) {
559
            mapControl3D =
560
                View3DSwingLocator.getManager().getMapControl3D(viewProperties, TYPE.SPHERE);
561
        } else if (flatOption.isSelected()) {
562
            mapControl3D =
563
                View3DSwingLocator.getManager().getMapControl3D(viewProperties, TYPE.FLAT);
564
        }
565

    
566
        int selectedRow = this.animations.getSelectedRow();
567
        DefaultAnimation3DTableModel model =
568
            (DefaultAnimation3DTableModel) this.animations.getModel();
569
        Animation3D animation = model.getAnimation(selectedRow);
570
        List<Frame3D> frames = null;
571
        if (sphericalOption.isSelected()) {
572
            frames = animation.getSphericalFrames();
573
        } else {
574
            frames = animation.getFlatFrames();
575
        }
576

    
577
        Animation3DSwingManager manager = Animation3DSwingLocator.getManager();
578
        Animator goToAnimator =
579
            manager.createGoToAnimator(mapControl3D, frames, 4000, 16000);
580
        manager.addAnimator(mapControl3D, goToAnimator);
581
    }
582

    
583
    protected void doAddAnimation() {
584
        Animation3DSwingManager manager = Animation3DSwingLocator.getManager();
585
        I18nManager i18nManager = ToolsLocator.getI18nManager();
586
        String name =
587
            i18nManager.getTranslation("animation_XxnumberxX",
588
                new String[] { String.valueOf(animations.getRowCount()) });
589
        Animation3D newAnimation =
590
            manager.createAnimation3D(name, new ArrayList<Frame3D>(), new ArrayList<Frame3D>());
591
        DefaultAnimation3DTableModel tableModel =
592
            (DefaultAnimation3DTableModel) animations.getModel();
593
        tableModel.addAnimation(newAnimation);
594
    }
595

    
596
    protected void doRemoveAnimation() {
597
        if (animations.getSelectionModel().isSelectionEmpty()) {
598
            return;
599
        }
600
        int selectedRow = animations.getSelectedRow();
601
        DefaultAnimation3DTableModel tableModel =
602
            (DefaultAnimation3DTableModel) animations.getModel();
603
        tableModel.removeAnimation(selectedRow);
604

    
605
        frames.setModel(new DefaultTableModel(0, 0));
606
        addFrame.setEnabled(false);
607
        buttongroup1.clearSelection();
608
        removeAnimation.setEnabled(false);
609
        sphericalOption.setEnabled(false);
610
        flatOption.setEnabled(false);
611
        playAnimation.setEnabled(false);
612
    }
613

    
614
    @SuppressWarnings("unchecked")
615
    private void initViewsCombo(Set<String> set) {
616
        for (String name : set) {
617
            viewsCombo.addItem(name);
618
        }
619

    
620
        viewsCombo.addActionListener(new ActionListener() {
621

    
622
            @Override
623
            public void actionPerformed(ActionEvent e) {
624
                doViewSelectedAction();
625
            }
626
        });
627
    }
628

    
629
    protected void doViewSelectedAction() {
630
        String viewName = (String) viewsCombo.getSelectedItem();
631
        if (StringUtils.isNotBlank(viewName)) {
632
            ExtendedPropertiesSupport viewProperties = views.get(viewName);
633
            Animation3DSwingManager manager = Animation3DSwingLocator.getManager();
634
            List<Animation3D> animations = manager.getAnimations(viewProperties);
635
            DefaultAnimation3DTableModel animationTableModel =
636
                new DefaultAnimation3DTableModel(animations);
637
            this.animations.setModel(animationTableModel);
638
            this.addAnimation.setEnabled(true);
639
            removeAnimation.setEnabled(false);
640
            sphericalOption.setEnabled(false);
641
            flatOption.setEnabled(false);
642
            playAnimation.setEnabled(false);
643
            frames.setModel(new DefaultTableModel());
644
            addFrame.setEnabled(false);
645
            removeFrame.setEnabled(false);
646
            upFrame.setEnabled(false);
647
            downFrame.setEnabled(false);
648
            zoomToFrame.setEnabled(false);
649

    
650
            List<MapControl3D> mapControl3Ds =
651
                View3DSwingLocator.getManager().getMapControl3D(viewProperties);
652
            for (MapControl3D mapControl3D : mapControl3Ds) {
653
                mapControl3D.addObserver(this);
654
            }
655

    
656
            return;
657
        } else {
658
            removeAnimation.setEnabled(false);
659
            buttongroup1.clearSelection();
660
            sphericalOption.setEnabled(false);
661
            flatOption.setEnabled(false);
662
            animations.setModel(new DefaultTableModel());
663
        }
664
    }
665

    
666
    @Override
667
    public void setLocale(Locale l) {
668
        if (!getLocale().equals(l)) {
669
            translate();
670
        }
671
        super.setLocale(l);
672
    }
673

    
674
    private void translate() {
675
        I18nManager i18nManager = ToolsLocator.getI18nManager();
676
        viewText.setText(i18nManager.getTranslation(viewText.getText()));
677
        addAnimation.setText(i18nManager.getTranslation(addAnimation.getText()));
678
        removeAnimation.setText(i18nManager.getTranslation(removeAnimation.getText()));
679
        playAnimation.setText(i18nManager.getTranslation(playAnimation.getText()));
680
        sphericalOption.setText(i18nManager.getTranslation(sphericalOption.getText()));
681
        flatOption.setText(i18nManager.getTranslation(flatOption.getText()));
682
        addFrame.setText(i18nManager.getTranslation(addFrame.getText()));
683
        removeFrame.setText(i18nManager.getTranslation(removeFrame.getText()));
684
        upFrame.setText(i18nManager.getTranslation(upFrame.getText()));
685
        downFrame.setText(i18nManager.getTranslation(downFrame.getText()));
686
        zoomToFrame.setText(i18nManager.getTranslation(zoomToFrame.getText()));
687
        close.setText(i18nManager.getTranslation(close.getText()));
688
    }
689

    
690
    @Override
691
    public JComponent asJComponent() {
692
        return this;
693
    }
694

    
695
    @Override
696
    public Dimension getPreferredSize() {
697
        return new Dimension(510, 530);
698
    }
699

    
700
    @SuppressWarnings("unchecked")
701
    @Override
702
    public void addViewDocument(String name, ExtendedPropertiesSupport viewDocument) {
703
        this.views.put(name, viewDocument);
704
        this.viewsCombo.addItem(name);
705
    }
706

    
707
    @Override
708
    public void removeViewDocument(String name) {
709
        this.views.remove(name);
710
        this.viewsCombo.removeItem(name);
711
    }
712

    
713
    @SuppressWarnings("unchecked")
714
    @Override
715
    public void changeViewDocumentName(String oldValue, String newValue) {
716
        ExtendedPropertiesSupport viewDocument = this.views.remove(oldValue);
717
        this.views.put(newValue, viewDocument);
718
        this.viewsCombo.removeItem(oldValue);
719
        this.viewsCombo.addItem(newValue);
720
        this.viewsCombo.setSelectedItem(newValue);
721
    }
722

    
723
    @Override
724
    public void update(Observable observable, Object object) {
725
        if (object instanceof Notification) {
726
            Notification notification = (Notification) object;
727
            if (observable instanceof View3DSwingManager || observable instanceof MapControl3D) {
728

    
729
                if (MapControl3D.AFTER_DISPOSE_MAPCONTEX3D_NOTIFICATION.equals(notification
730
                    .getType())) {
731
                    doAnimationSelectedAction();
732
                    doOptionSelected();
733
                } else if (View3DSwingManager.AFTER_CREATE_MAPCONTROL3D.equals(notification
734
                    .getType())) {
735

    
736
                    MapControl3D mapControl3D = (MapControl3D) notification.getValue();
737
                    mapControl3D.addObserver(this);
738

    
739
                    if (sphericalOption.isSelected() || flatOption.isSelected()) {
740
                        doOptionSelected();
741
                    }
742
                }
743
            }
744
        }
745
    }
746

    
747
    @Override
748
    public void dispose() {
749
        View3DSwingManager manager = View3DSwingLocator.getManager();
750
        manager.deleteObserver(this);
751

    
752
        Collection<ExtendedPropertiesSupport> properties = views.values();
753
        for (ExtendedPropertiesSupport extendedProperties : properties) {
754

    
755
            List<MapControl3D> mapControl3Ds = manager.getMapControl3D(extendedProperties);
756
            for (MapControl3D mapControl3D : mapControl3Ds) {
757
                mapControl3D.deleteObserver(this);
758
            }
759
        }
760
    }
761
}