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 |
} |