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 | 672 | llmarques | 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 | 674 | llmarques | IconThemeHelper.registerIcon("animation", "animation-3d", this); |
44 | 672 | llmarques | } |
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 | 684 | llmarques | animationManager = Animation3DSwingLocator.getManager().createAnimationPanel(properties); |
68 | 672 | llmarques | 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 | 691 | llmarques | return true; |
80 | 672 | llmarques | } |
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 | 687 | llmarques | animationManager.addExtendedPropertiesSupport(viewDocument.getName(), viewDocument); |
144 | 672 | llmarques | } |
145 | } else if ("delDocument".equals(event.getPropertyName())) { |
||
146 | Document document = (Document) event.getOldValue(); |
||
147 | if (document instanceof ViewDocument) { |
||
148 | ViewDocument viewDocument = (ViewDocument) document; |
||
149 | 687 | llmarques | animationManager.removeExtendedPropertiesSupport(viewDocument.getName()); |
150 | 672 | llmarques | } |
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 | 687 | llmarques | animationManager.changeExtendedPropertiesSupportName((String) event.getOldValue(),
|
172 | 672 | llmarques | (String) event.getNewValue());
|
173 | } |
||
174 | } |
||
175 | } |