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 @ 674

History | View | Annotate | Download (6.49 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().createAnimationManager(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
            IView view = getActiveView();
80
            Document document = view.getDocument();
81
            List<MapControl3D> mapControl3D =
82
                View3DSwingLocator.getManager().getMapControl3D(
83
                    (ExtendedPropertiesSupport) document);
84
            return !mapControl3D.isEmpty();
85
        }
86
        return false;
87
    }
88

    
89
    @Override
90
    public boolean isVisible() {
91
        IView view = getActiveView();
92
        if (view != null) {
93
            return true;
94
        }
95
        return false;
96
    }
97

    
98
    private IView getActiveView() {
99
        ApplicationManager application = ApplicationLocator.getManager();
100
        IView view = (IView) application.getActiveComponent(ViewDocument.class);
101
        return view;
102
    }
103

    
104
    private ComponentListener getComponentListener() {
105
        return new ComponentListener() {
106

    
107
            @Override
108
            public void componentShown(ComponentEvent e) {
109
            }
110

    
111
            @Override
112
            public void componentResized(ComponentEvent e) {
113
            }
114

    
115
            @Override
116
            public void componentMoved(ComponentEvent e) {
117
            }
118

    
119
            @Override
120
            public void componentHidden(ComponentEvent e) {
121
                animationManager.dispose();
122
                animationManager = null;
123
            }
124
        };
125
    }
126

    
127
    private PropertyChangeListener getProjectPropertyChangeListener() {
128
        if (projectPropertyChangeListener == null) {
129
            projectPropertyChangeListener = new PropertyChangeListener() {
130

    
131
                @Override
132
                public void propertyChange(PropertyChangeEvent evt) {
133
                    if (animationManager != null) {
134
                        doProjectPropertyChangeListener(evt);
135
                    }
136
                }
137
            };
138
        }
139
        return projectPropertyChangeListener;
140
    }
141

    
142
    protected void doProjectPropertyChangeListener(PropertyChangeEvent event) {
143
        if ("addDocument".equals(event.getPropertyName())) {
144
            Document document = (Document) event.getNewValue();
145
            if (document instanceof ViewDocument) {
146
                ViewDocument viewDocument = (ViewDocument) document;
147
                viewDocument.addPropertyChangeListener(getDocumentPropertyChangeListener());
148
                animationManager.addViewDocument(viewDocument.getName(), viewDocument);
149
            }
150
        } else if ("delDocument".equals(event.getPropertyName())) {
151
            Document document = (Document) event.getOldValue();
152
            if (document instanceof ViewDocument) {
153
                ViewDocument viewDocument = (ViewDocument) document;
154
                animationManager.removeViewDocument(viewDocument.getName());
155
            }
156
        }
157
    }
158

    
159
    private PropertyChangeListener getDocumentPropertyChangeListener() {
160
        if (documentPropertyChangeListener == null) {
161
            documentPropertyChangeListener = new PropertyChangeListener() {
162

    
163
                @Override
164
                public void propertyChange(PropertyChangeEvent evt) {
165
                    if (animationManager != null) {
166
                        doDocumentPropertyChangeListener(evt);
167
                    }
168
                }
169
            };
170
        }
171
        return documentPropertyChangeListener;
172
    }
173

    
174
    protected void doDocumentPropertyChangeListener(PropertyChangeEvent event) {
175
        if ("name".equals(event.getPropertyName())) {
176
            animationManager.changeViewDocumentName((String) event.getOldValue(),
177
                (String) event.getNewValue());
178
        }
179
    }
180
}