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