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

Last change on this file since 29513 was 29513, checked in by galo, 12 years ago

Includes a tree of layers to the map

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