source: osm/applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/JMapViewerTree.java@ 31434

Last change on this file since 31434 was 31434, checked in by donvip, 10 years ago

[jmapviewer] fix a bunch of Sonar issues

  • Property svn:eol-style set to native
File size: 6.1 KB
Line 
1// License: GPL. For details, see Readme.txt file.
2package org.openstreetmap.gui.jmapviewer;
3
4import java.awt.BorderLayout;
5import java.awt.Dimension;
6import java.awt.event.ActionEvent;
7import java.awt.event.ActionListener;
8import java.awt.event.MouseAdapter;
9import java.awt.event.MouseEvent;
10import java.util.List;
11
12import javax.swing.JLabel;
13import javax.swing.JMenuItem;
14import javax.swing.JPanel;
15import javax.swing.JPopupMenu;
16import javax.swing.JSplitPane;
17import javax.swing.event.TreeModelEvent;
18import javax.swing.event.TreeModelListener;
19
20import org.openstreetmap.gui.jmapviewer.checkBoxTree.CheckBoxNodePanel;
21import org.openstreetmap.gui.jmapviewer.checkBoxTree.CheckBoxTree;
22import org.openstreetmap.gui.jmapviewer.interfaces.MapObject;
23
24/**
25 * Tree of layers for JMapViewer component
26 * @author galo
27 */
28public class JMapViewerTree extends JPanel{
29 /** Serial Version UID */
30 private static final long serialVersionUID = 3050203054402323972L;
31
32 private JMapViewer map;
33 private CheckBoxTree tree;
34 private JPanel treePanel;
35 private JSplitPane splitPane;
36
37 public JMapViewerTree(String name) {
38 this(name, false);
39 }
40
41 public JMapViewerTree(String name, boolean treeVisible) {
42 super();
43 splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
44
45 tree = new CheckBoxTree(name);
46 treePanel = new JPanel();
47 treePanel.setLayout(new BorderLayout());
48 treePanel.add(tree, BorderLayout.CENTER);
49 treePanel.add(new JLabel("<html><center>Use right mouse button to<br />show/hide texts</center></html>"), BorderLayout.SOUTH);
50 map = new JMapViewer();
51
52 splitPane.setOneTouchExpandable(true);
53 splitPane.setDividerLocation(150);
54
55 //Provide minimum sizes for the two components in the split pane
56 Dimension minimumSize = new Dimension(100, 50);
57 //tree.setMinimumSize(minimumSize);
58 map.setMinimumSize(minimumSize);
59 createRefresh();
60 setLayout(new BorderLayout());
61 setTreeVisible(treeVisible);
62 tree.addNodeListener(new MouseAdapter() {
63 @Override
64 public void mousePressed(MouseEvent e) {
65 maybeShowPopup(e);
66 }
67
68 @Override
69 public void mouseReleased(MouseEvent e) {
70 maybeShowPopup(e);
71 }
72
73 private void maybeShowPopup(MouseEvent e) {
74 if (e.isPopupTrigger()) {
75 AbstractLayer layer = ((CheckBoxNodePanel) e.getComponent()).getData().getAbstractLayer();
76 if (layer != null)
77 JMapViewerTree.this.createPopupMenu(layer).show(e.getComponent(), e.getX(), e.getY());
78 }
79 }
80 });
81 }
82
83 private JPopupMenu createPopupMenu(final AbstractLayer layer) {
84 JMenuItem menuItemShow = new JMenuItem("show texts");
85 JMenuItem menuItemHide = new JMenuItem("hide texts");
86
87 //Create the popup menu.
88 JPopupMenu popup = new JPopupMenu();
89
90 // Create items
91 if (layer.isVisibleTexts() == null) {
92 popup.add(menuItemShow);
93 popup.add(menuItemHide);
94 } else if (layer.isVisibleTexts()) popup.add(menuItemHide);
95 else popup.add(menuItemShow);
96
97 menuItemShow.addActionListener(new ActionListener(){
98 @Override
99 public void actionPerformed(ActionEvent arg0) {
100 setVisibleTexts(layer, true);
101 if (layer.getParent() != null) layer.getParent().calculateVisibleTexts();
102 map.repaint();
103 }
104 });
105 menuItemHide.addActionListener(new ActionListener(){
106 @Override
107 public void actionPerformed(ActionEvent arg0) {
108 setVisibleTexts(layer, false);
109 if (layer.getParent() != null) layer.getParent().calculateVisibleTexts();
110 map.repaint();
111 }
112 });
113
114 return popup;
115 }
116
117 private static void setVisibleTexts(AbstractLayer layer, boolean visible) {
118 layer.setVisibleTexts(visible);
119 if (layer instanceof LayerGroup) {
120 LayerGroup group = (LayerGroup) layer;
121 if (group.getLayers() != null)
122 for (AbstractLayer al: group.getLayers()) {
123 setVisibleTexts(al, visible);
124 }
125 }
126 }
127
128 public Layer addLayer(String name) {
129 Layer layer = new Layer(name);
130 this.addLayer(layer);
131 return layer;
132 }
133
134 public JMapViewerTree addLayer(Layer layer) {
135 tree.addLayer(layer);
136 return this;
137 }
138
139 public JMapViewerTree addLayer(MapObject element) {
140 //element.getLayer().add(element);
141 return addLayer(element.getLayer());
142 }
143
144 public Layer removeFromLayer(MapObject element) {
145 element.getLayer().getElements().remove(element);
146 return element.getLayer();
147 }
148
149 public static int size(List<?> list) {
150 return list == null ? 0 : list.size();
151 }
152
153 public JMapViewer getViewer() {
154 return map;
155 }
156
157 public CheckBoxTree getTree() {
158 return tree;
159 }
160
161 public void addMapObject(MapObject o){
162
163 }
164
165 public void setTreeVisible(boolean visible) {
166 removeAll();
167 revalidate();
168 if (visible) {
169 splitPane.setLeftComponent(treePanel);
170 splitPane.setRightComponent(map);
171 add(splitPane, BorderLayout.CENTER);
172 } else add(map, BorderLayout.CENTER);
173 repaint();
174 }
175
176 private void createRefresh() {
177 tree.getModel().addTreeModelListener(new TreeModelListener() {
178 @Override
179 public void treeNodesChanged(final TreeModelEvent e) {
180 repaint();
181 }
182
183 @Override
184 public void treeNodesInserted(TreeModelEvent arg0) {
185 // TODO Auto-generated method stub
186 }
187
188 @Override
189 public void treeNodesRemoved(TreeModelEvent arg0) {
190 // TODO Auto-generated method stub
191 }
192
193 @Override
194 public void treeStructureChanged(TreeModelEvent arg0) {
195 // TODO Auto-generated method stub
196 }
197 });
198 }
199}
Note: See TracBrowser for help on using the repository browser.