Statistics
| Revision:

gvsig-3d / org.gvsig.animation3d / trunk / org.gvsig.animation3d / org.gvsig.animation3d.app / org.gvsig.animation3d.app.mainplugin / src / main / java / org / gvsig / animation3d / app / mainplugin / Animation3DExtension.java @ 691

History | View | Annotate | Download (6.25 KB)

1
package org.gvsig.animation3d.app.mainplugin;
2

    
3
import java.awt.event.ComponentEvent;
4
import java.awt.event.ComponentListener;
5
import java.beans.PropertyChangeEvent;
6
import java.beans.PropertyChangeListener;
7
import java.util.LinkedHashMap;
8
import java.util.List;
9
import java.util.Map;
10

    
11
import org.gvsig.andami.IconThemeHelper;
12
import org.gvsig.andami.plugins.Extension;
13
import org.gvsig.animation3d.swing.api.Animation3DPanel;
14
import org.gvsig.animation3d.swing.api.Animation3DSwingLocator;
15
import org.gvsig.app.ApplicationLocator;
16
import org.gvsig.app.ApplicationManager;
17
import org.gvsig.app.project.Project;
18
import org.gvsig.app.project.documents.Document;
19
import org.gvsig.app.project.documents.view.ViewDocument;
20
import org.gvsig.app.project.documents.view.ViewManager;
21
import org.gvsig.app.project.documents.view.gui.IView;
22
import org.gvsig.fmap.mapcontext.layers.ExtendedPropertiesSupport;
23
import org.gvsig.tools.ToolsLocator;
24
import org.gvsig.tools.i18n.I18nManager;
25
import org.gvsig.tools.swing.api.ToolsSwingLocator;
26
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
27
import org.gvsig.tools.swing.api.windowmanager.WindowManager.MODE;
28
import org.gvsig.view3d.swing.api.MapControl3D;
29
import org.gvsig.view3d.swing.api.View3DSwingLocator;
30

    
31
/**
32
 * @author <a href="mailto:lmarques@disid.com">Lluis Marques</a>
33
 *
34
 */
35
public class Animation3DExtension extends Extension {
36

    
37
    private Animation3DPanel animationManager;
38
    private PropertyChangeListener projectPropertyChangeListener;
39
    private PropertyChangeListener documentPropertyChangeListener;
40

    
41
    @Override
42
    public void initialize() {
43
        IconThemeHelper.registerIcon("animation", "animation-3d", this);
44
    }
45

    
46
    @Override
47
    public void execute(String actionCommand) {
48

    
49
        ApplicationManager application = ApplicationLocator.getManager();
50

    
51
        Project currentProject = application.getCurrentProject();
52
        List<Document> documents = currentProject.getDocuments(ViewManager.TYPENAME);
53

    
54
        if (documents.isEmpty()) {
55
            return;
56
        }
57

    
58
        currentProject.addPropertyChangeListener(getProjectPropertyChangeListener());
59

    
60
        Map<String, ExtendedPropertiesSupport> properties =
61
            new LinkedHashMap<String, ExtendedPropertiesSupport>();
62
        for (Document document : documents) {
63
            document.addPropertyChangeListener(getDocumentPropertyChangeListener());
64
            properties.put(document.getName(), (ExtendedPropertiesSupport) document);
65
        }
66

    
67
        animationManager = Animation3DSwingLocator.getManager().createAnimationPanel(properties);
68
        animationManager.asJComponent().addComponentListener(getComponentListener());
69
        WindowManager windowManager = ToolsSwingLocator.getWindowManager();
70
        I18nManager i18nManager = ToolsLocator.getI18nManager();
71
        windowManager.showWindow(animationManager.asJComponent(),
72
            i18nManager.getTranslation("animation_manager"), MODE.WINDOW);
73

    
74
    }
75

    
76
    @Override
77
    public boolean isEnabled() {
78
        if (animationManager == null && getActiveView() != null) {
79
            return true;
80
        }
81
        return false;
82
    }
83

    
84
    @Override
85
    public boolean isVisible() {
86
        IView view = getActiveView();
87
        if (view != null) {
88
            return true;
89
        }
90
        return false;
91
    }
92

    
93
    private IView getActiveView() {
94
        ApplicationManager application = ApplicationLocator.getManager();
95
        IView view = (IView) application.getActiveComponent(ViewDocument.class);
96
        return view;
97
    }
98

    
99
    private ComponentListener getComponentListener() {
100
        return new ComponentListener() {
101

    
102
            @Override
103
            public void componentShown(ComponentEvent e) {
104
            }
105

    
106
            @Override
107
            public void componentResized(ComponentEvent e) {
108
            }
109

    
110
            @Override
111
            public void componentMoved(ComponentEvent e) {
112
            }
113

    
114
            @Override
115
            public void componentHidden(ComponentEvent e) {
116
                animationManager.dispose();
117
                animationManager = null;
118
            }
119
        };
120
    }
121

    
122
    private PropertyChangeListener getProjectPropertyChangeListener() {
123
        if (projectPropertyChangeListener == null) {
124
            projectPropertyChangeListener = new PropertyChangeListener() {
125

    
126
                @Override
127
                public void propertyChange(PropertyChangeEvent evt) {
128
                    if (animationManager != null) {
129
                        doProjectPropertyChangeListener(evt);
130
                    }
131
                }
132
            };
133
        }
134
        return projectPropertyChangeListener;
135
    }
136

    
137
    protected void doProjectPropertyChangeListener(PropertyChangeEvent event) {
138
        if ("addDocument".equals(event.getPropertyName())) {
139
            Document document = (Document) event.getNewValue();
140
            if (document instanceof ViewDocument) {
141
                ViewDocument viewDocument = (ViewDocument) document;
142
                viewDocument.addPropertyChangeListener(getDocumentPropertyChangeListener());
143
                animationManager.addExtendedPropertiesSupport(viewDocument.getName(), viewDocument);
144
            }
145
        } else if ("delDocument".equals(event.getPropertyName())) {
146
            Document document = (Document) event.getOldValue();
147
            if (document instanceof ViewDocument) {
148
                ViewDocument viewDocument = (ViewDocument) document;
149
                animationManager.removeExtendedPropertiesSupport(viewDocument.getName());
150
            }
151
        }
152
    }
153

    
154
    private PropertyChangeListener getDocumentPropertyChangeListener() {
155
        if (documentPropertyChangeListener == null) {
156
            documentPropertyChangeListener = new PropertyChangeListener() {
157

    
158
                @Override
159
                public void propertyChange(PropertyChangeEvent evt) {
160
                    if (animationManager != null) {
161
                        doDocumentPropertyChangeListener(evt);
162
                    }
163
                }
164
            };
165
        }
166
        return documentPropertyChangeListener;
167
    }
168

    
169
    protected void doDocumentPropertyChangeListener(PropertyChangeEvent event) {
170
        if ("name".equals(event.getPropertyName())) {
171
            animationManager.changeExtendedPropertiesSupportName((String) event.getOldValue(),
172
                (String) event.getNewValue());
173
        }
174
    }
175
}