root / trunk / applications / appgvSIG / src / com / iver / cit / gvsig / gui / dialogs / InfoToolViewer.java @ 6797
History | View | Annotate | Download (8.34 KB)
1 |
package com.iver.cit.gvsig.gui.dialogs; |
---|---|
2 |
|
3 |
import java.awt.Dimension; |
4 |
import java.awt.event.ComponentEvent; |
5 |
import java.awt.event.ComponentListener; |
6 |
import java.util.Vector; |
7 |
import javax.swing.JList; |
8 |
import javax.swing.JPanel; |
9 |
import javax.swing.event.ListSelectionListener; |
10 |
import javax.swing.tree.DefaultMutableTreeNode; |
11 |
import javax.swing.tree.DefaultTreeModel; |
12 |
import javax.swing.tree.TreePath; |
13 |
import org.xml.sax.ContentHandler; |
14 |
import org.xml.sax.SAXException; |
15 |
|
16 |
import com.iver.cit.gvsig.fmap.layers.FLayer; |
17 |
import com.iver.cit.gvsig.fmap.layers.FLyrDefault; |
18 |
import com.iver.cit.gvsig.fmap.layers.layerOperations.InfoByPoint; |
19 |
import com.iver.cit.gvsig.fmap.layers.layerOperations.XMLItem; |
20 |
import com.iver.cit.gvsig.gui.dialogs.FInfoDialogXML; |
21 |
import com.iver.cit.gvsig.gui.wizards.FormatListModel; |
22 |
import com.iver.utiles.xmlViewer.XMLContent; |
23 |
|
24 |
/**
|
25 |
* This is the generic Feature Info Viewer
|
26 |
*
|
27 |
* If the feature Info comes from a special layer which has registered
|
28 |
* the way to visualize itself, adds a panel that the layer should provide
|
29 |
* otherwise this viewer will add a panel to visualize HTML or a special
|
30 |
* viewer to show XML.
|
31 |
*
|
32 |
* @author laura
|
33 |
*
|
34 |
*/
|
35 |
public class InfoToolViewer extends JPanel { |
36 |
|
37 |
private javax.swing.JScrollPane jScrollPane = null; |
38 |
private JList layerList = null; |
39 |
private javax.swing.JSplitPane jSplitPane1 = null; |
40 |
private javax.swing.JPanel layerListPanel = null; |
41 |
private JPanel infoViewerPanel; |
42 |
private XMLItem[] m_layers; |
43 |
IInfoToolPanel infoPanel = null;
|
44 |
|
45 |
/**
|
46 |
* This is the default constructor
|
47 |
*/
|
48 |
public InfoToolViewer() {
|
49 |
super();
|
50 |
initialize(); |
51 |
this.addComponentListener(new componentListener()); |
52 |
} |
53 |
|
54 |
public InfoToolViewer(XMLItem[] layers) { |
55 |
super();
|
56 |
initialize(); |
57 |
setLayers(layers); |
58 |
} |
59 |
|
60 |
public void setLayers(XMLItem[] layers){ |
61 |
m_layers = layers; |
62 |
initilizeLayerListModel(); |
63 |
updateViewer(0);
|
64 |
layerList.setSelectedIndex(0);
|
65 |
} |
66 |
|
67 |
|
68 |
/**
|
69 |
* This method initializes this
|
70 |
*/
|
71 |
private void initialize() { |
72 |
this.setLayout(new java.awt.BorderLayout()); |
73 |
this.add(getJSplitPane1(), java.awt.BorderLayout.CENTER);
|
74 |
this.setSize(600, 600); |
75 |
this.setPreferredSize(new Dimension(600, 600)); |
76 |
} |
77 |
|
78 |
/**
|
79 |
* This method initializes jScrollPane
|
80 |
*
|
81 |
* @return javax.swing.JScrollPane
|
82 |
*/
|
83 |
private javax.swing.JScrollPane getJScrollPane() {
|
84 |
if (jScrollPane == null) { |
85 |
jScrollPane = new javax.swing.JScrollPane();
|
86 |
jScrollPane.setSize(new Dimension(600,600)); |
87 |
jScrollPane.setPreferredSize( new Dimension(600,600)); |
88 |
jScrollPane.setViewportView(getLayerListPanel()); |
89 |
} |
90 |
|
91 |
return jScrollPane;
|
92 |
} |
93 |
|
94 |
private void initilizeLayerListModel() { |
95 |
Vector layerNames = new Vector(); |
96 |
if (m_layers != null) |
97 |
{ |
98 |
for (int i = 0; i < m_layers.length; i++) |
99 |
{ |
100 |
layerNames.add(m_layers[i].getLayer().getName()); |
101 |
} |
102 |
} |
103 |
|
104 |
FormatListModel model = new FormatListModel((String[])layerNames.toArray(new String[0])); |
105 |
getJList().setModel(model); |
106 |
} |
107 |
|
108 |
public JList getJList(){ |
109 |
|
110 |
if (layerList == null) { |
111 |
layerList = new JList(); |
112 |
initilizeLayerListModel(); |
113 |
layerList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); |
114 |
} |
115 |
|
116 |
layerList.addListSelectionListener(new ListSelectionListener() { |
117 |
public void valueChanged(javax.swing.event.ListSelectionEvent e) { |
118 |
int changedIdx = layerList.getSelectedIndex();//e.getFirstIndex(); |
119 |
|
120 |
if (changedIdx == -1) return; |
121 |
updateViewer(changedIdx); |
122 |
} |
123 |
}); |
124 |
return layerList;
|
125 |
} |
126 |
/**
|
127 |
* This method initializes jSplitPane1
|
128 |
*
|
129 |
* @return javax.swing.JSplitPane
|
130 |
*/
|
131 |
private javax.swing.JSplitPane getJSplitPane1() {
|
132 |
if (jSplitPane1 == null) { |
133 |
jSplitPane1 = new javax.swing.JSplitPane();
|
134 |
jSplitPane1.setLeftComponent(getJScrollPane()); |
135 |
jSplitPane1.setRightComponent(getInfoViewerPanel()); |
136 |
jSplitPane1.setDividerSize(4);
|
137 |
jSplitPane1.setDividerLocation(100);
|
138 |
jSplitPane1.setSize( new Dimension(600,600)); |
139 |
jSplitPane1.setPreferredSize( new Dimension(600,600)); |
140 |
} |
141 |
return jSplitPane1;
|
142 |
} |
143 |
|
144 |
/**
|
145 |
* This method initializes jPanel
|
146 |
*
|
147 |
* @return javax.swing.JPanel
|
148 |
*/
|
149 |
private javax.swing.JPanel getLayerListPanel() {
|
150 |
if (layerListPanel == null) { |
151 |
layerListPanel = new javax.swing.JPanel();
|
152 |
layerListPanel.setLayout(new java.awt.BorderLayout());
|
153 |
layerListPanel.add(getJList(), java.awt.BorderLayout.CENTER); |
154 |
} |
155 |
|
156 |
return layerListPanel;
|
157 |
} |
158 |
|
159 |
/**
|
160 |
* This method initializes jPanel1
|
161 |
*
|
162 |
* @return javax.swing.JPanel
|
163 |
*/
|
164 |
private javax.swing.JPanel getInfoViewerPanel() {
|
165 |
if (infoViewerPanel == null) { |
166 |
infoViewerPanel = new javax.swing.JPanel();
|
167 |
infoViewerPanel.setLayout(new java.awt.BorderLayout());
|
168 |
} |
169 |
validate(); |
170 |
return infoViewerPanel;
|
171 |
} |
172 |
|
173 |
/**
|
174 |
* updates the layer to display
|
175 |
*
|
176 |
*/
|
177 |
private void updateViewer(int changedIdx) |
178 |
{ |
179 |
if((m_layers == null) || (m_layers.length == 0)) return; |
180 |
final XMLItem item = m_layers[changedIdx];
|
181 |
FLayer layer = item.getLayer(); |
182 |
|
183 |
if (layer instanceof InfoByPoint){ |
184 |
FLyrDefault defaultLayer = (FLyrDefault)layer; |
185 |
if (defaultLayer.getProperty("customPanel") != null){ |
186 |
|
187 |
Class c = (Class)defaultLayer.getProperty("customPanel"); |
188 |
|
189 |
try {
|
190 |
infoPanel = (IInfoToolPanel)c.newInstance(); |
191 |
} catch (InstantiationException e1) { |
192 |
e1.printStackTrace(); |
193 |
} catch (IllegalAccessException e1) { |
194 |
e1.printStackTrace(); |
195 |
} |
196 |
|
197 |
infoViewerPanel.removeAll(); |
198 |
infoViewerPanel.add((JPanel)infoPanel);
|
199 |
infoPanel.show(item.toString()); |
200 |
|
201 |
infoViewerPanel.setVisible( true );
|
202 |
revalidate(); |
203 |
|
204 |
} |
205 |
else {
|
206 |
|
207 |
if (item.toString().toLowerCase().endsWith( "</html>"))//if (item.toString().toLowerCase().startsWith( "<html>")) |
208 |
{ |
209 |
//skip the header info
|
210 |
IInfoToolPanel htmlPanel = new HTMLInfoToolPanel();
|
211 |
|
212 |
int idx = item.toString().toLowerCase().indexOf("<html"); |
213 |
if (idx != -1){ |
214 |
htmlPanel.show(item.toString().substring(idx)); |
215 |
}else{
|
216 |
htmlPanel.show(item.toString()); |
217 |
} |
218 |
infoViewerPanel.removeAll(); |
219 |
infoViewerPanel.add((JPanel)htmlPanel);
|
220 |
infoViewerPanel.setVisible( true );
|
221 |
revalidate(); |
222 |
} |
223 |
else
|
224 |
{ |
225 |
FInfoDialogXML dlgXML = new FInfoDialogXML();
|
226 |
try {
|
227 |
dlgXML.setModel(new XMLContent() {
|
228 |
private ContentHandler handler; |
229 |
|
230 |
public void setContentHandler(ContentHandler arg0) { |
231 |
handler = arg0; |
232 |
} |
233 |
|
234 |
public void parse() throws SAXException { |
235 |
handler.startDocument(); |
236 |
item.parse( handler); |
237 |
handler.endDocument(); |
238 |
} |
239 |
}); |
240 |
} catch (SAXException e1) {
|
241 |
// TODO Auto-generated catch block
|
242 |
e1.printStackTrace(); |
243 |
} |
244 |
dlgXML.getXmlTree().setRootVisible(false);
|
245 |
DefaultTreeModel treeModel = (DefaultTreeModel) dlgXML |
246 |
.getXmlTree().getModel(); |
247 |
DefaultMutableTreeNode n;
|
248 |
DefaultMutableTreeNode root = (DefaultMutableTreeNode) dlgXML |
249 |
.getXmlTree().getModel().getRoot(); |
250 |
n = root.getFirstLeaf(); |
251 |
TreePath path = new TreePath(treeModel.getPathToRoot(n)); |
252 |
dlgXML.getXmlTree().expandPath(path); |
253 |
dlgXML.getXmlTree().setSelectionPath(path); |
254 |
//dlgXML.
|
255 |
|
256 |
infoViewerPanel.removeAll(); |
257 |
infoViewerPanel.add(dlgXML); |
258 |
infoViewerPanel.setVisible( true );
|
259 |
this.validate();
|
260 |
this.doLayout();
|
261 |
} |
262 |
} |
263 |
} |
264 |
} |
265 |
|
266 |
class componentListener implements ComponentListener{ |
267 |
|
268 |
public void componentHidden(ComponentEvent e) { |
269 |
// TODO Auto-generated method stub
|
270 |
|
271 |
} |
272 |
|
273 |
public void componentMoved(ComponentEvent e) { |
274 |
// TODO Auto-generated method stub
|
275 |
|
276 |
} |
277 |
|
278 |
public void componentResized(ComponentEvent e) { |
279 |
|
280 |
//if (e.getComponent() == )
|
281 |
if (infoPanel != null){ |
282 |
infoPanel.refreshSize(); |
283 |
} |
284 |
|
285 |
|
286 |
} |
287 |
|
288 |
public void componentShown(ComponentEvent e) { |
289 |
// TODO Auto-generated method stub
|
290 |
|
291 |
} |
292 |
|
293 |
} |
294 |
} |