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

Last change on this file since 32008 was 32008, checked in by donvip, 9 years ago

refactoring - global simplification of use of setLayout method - simply pass layout to JPanel constructor

  • 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(new BorderLayout());
47 treePanel.add(tree, BorderLayout.CENTER);
48 treePanel.add(new JLabel("<html><center>Use right mouse button to<br />show/hide texts</center></html>"), BorderLayout.SOUTH);
49 map = new JMapViewer();
50
51 splitPane.setOneTouchExpandable(true);
52 splitPane.setDividerLocation(150);
53
54 //Provide minimum sizes for the two components in the split pane
55 Dimension minimumSize = new Dimension(100, 50);
56 //tree.setMinimumSize(minimumSize);
57 map.setMinimumSize(minimumSize);
58 createRefresh();
59 setLayout(new BorderLayout());
60 setTreeVisible(treeVisible);
61 tree.addNodeListener(new MouseAdapter() {
62 @Override
63 public void mousePressed(MouseEvent e) {
64 maybeShowPopup(e);
65 }
66
67 @Override
68 public void mouseReleased(MouseEvent e) {
69 maybeShowPopup(e);
70 }
71
72 private void maybeShowPopup(MouseEvent e) {
73 if (e.isPopupTrigger()) {
74 AbstractLayer layer = ((CheckBoxNodePanel) e.getComponent()).getData().getAbstractLayer();
75 if (layer != null)
76 JMapViewerTree.this.createPopupMenu(layer).show(e.getComponent(), e.getX(), e.getY());
77 }
78 }
79 });
80 }
81
82 private JPopupMenu createPopupMenu(final AbstractLayer layer) {
83 JMenuItem menuItemShow = new JMenuItem("show texts");
84 JMenuItem menuItemHide = new JMenuItem("hide texts");
85
86 //Create the popup menu.
87 JPopupMenu popup = new JPopupMenu();
88
89 // Create items
90 if (layer.isVisibleTexts() == null) {
91 popup.add(menuItemShow);
92 popup.add(menuItemHide);
93 } else if (layer.isVisibleTexts()) popup.add(menuItemHide);
94 else popup.add(menuItemShow);
95
96 menuItemShow.addActionListener(new ActionListener() {
97 @Override
98 public void actionPerformed(ActionEvent arg0) {
99 setVisibleTexts(layer, true);
100 if (layer.getParent() != null) layer.getParent().calculateVisibleTexts();
101 map.repaint();
102 }
103 });
104 menuItemHide.addActionListener(new ActionListener() {
105 @Override
106 public void actionPerformed(ActionEvent arg0) {
107 setVisibleTexts(layer, false);
108 if (layer.getParent() != null) layer.getParent().calculateVisibleTexts();
109 map.repaint();
110 }
111 });
112
113 return popup;
114 }
115
116 private static void setVisibleTexts(AbstractLayer layer, boolean visible) {
117 layer.setVisibleTexts(visible);
118 if (layer instanceof LayerGroup) {
119 LayerGroup group = (LayerGroup) layer;
120 if (group.getLayers() != null)
121 for (AbstractLayer al: group.getLayers()) {
122 setVisibleTexts(al, visible);
123 }
124 }
125 }
126
127 public Layer addLayer(String name) {
128 Layer layer = new Layer(name);
129 this.addLayer(layer);
130 return layer;
131 }
132
133 public JMapViewerTree addLayer(Layer layer) {
134 tree.addLayer(layer);
135 return this;
136 }
137
138 public JMapViewerTree addLayer(MapObject element) {
139 //element.getLayer().add(element);
140 return addLayer(element.getLayer());
141 }
142
143 public Layer removeFromLayer(MapObject element) {
144 element.getLayer().getElements().remove(element);
145 return element.getLayer();
146 }
147
148 public static int size(List<?> list) {
149 return list == null ? 0 : list.size();
150 }
151
152 public JMapViewer getViewer() {
153 return map;
154 }
155
156 public CheckBoxTree getTree() {
157 return tree;
158 }
159
160 public void addMapObject(MapObject o){
161
162 }
163
164 public void setTreeVisible(boolean visible) {
165 removeAll();
166 revalidate();
167 if (visible) {
168 splitPane.setLeftComponent(treePanel);
169 splitPane.setRightComponent(map);
170 add(splitPane, BorderLayout.CENTER);
171 } else add(map, BorderLayout.CENTER);
172 repaint();
173 }
174
175 private void createRefresh() {
176 tree.getModel().addTreeModelListener(new TreeModelListener() {
177 @Override
178 public void treeNodesChanged(final TreeModelEvent e) {
179 repaint();
180 }
181
182 @Override
183 public void treeNodesInserted(TreeModelEvent arg0) {
184 // TODO Auto-generated method stub
185 }
186
187 @Override
188 public void treeNodesRemoved(TreeModelEvent arg0) {
189 // TODO Auto-generated method stub
190 }
191
192 @Override
193 public void treeStructureChanged(TreeModelEvent arg0) {
194 // TODO Auto-generated method stub
195 }
196 });
197 }
198}
Note: See TracBrowser for help on using the repository browser.