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

Last change on this file since 30223 was 30223, checked in by donvip, 11 years ago

jmapviewer: fix copyright / license

File size: 6.2 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 public JMapViewerTree(String name, boolean treeVisible){
41 super();
42 splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
43
44 tree = new CheckBoxTree(name);
45 treePanel = new JPanel();
46 treePanel.setLayout(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 public void mousePressed(MouseEvent e) {
63 maybeShowPopup(e);
64 }
65 public void mouseReleased(MouseEvent e) {
66 maybeShowPopup(e);
67 }
68 private void maybeShowPopup(MouseEvent e) {
69 if (e.isPopupTrigger()) {
70 e.getSource();
71 AbstractLayer layer = ((CheckBoxNodePanel)e.getComponent()).getData().getAbstractLayer();
72 if(layer!=null)
73 JMapViewerTree.this.createPopupMenu(layer).show(e.getComponent(), e.getX(), e.getY());
74 }
75 }
76 });
77 }
78 private JPopupMenu createPopupMenu(final AbstractLayer layer) {
79 JMenuItem menuItemShow = new JMenuItem("show texts");
80 JMenuItem menuItemHide = new JMenuItem("hide texts");
81
82 //Create the popup menu.
83 JPopupMenu popup = new JPopupMenu();
84
85 // Create items
86 if(layer.isVisibleTexts()==null){
87 popup.add(menuItemShow);
88 popup.add(menuItemHide);
89 }else if(layer.isVisibleTexts()) popup.add(menuItemHide);
90 else popup.add(menuItemShow);
91
92 menuItemShow.addActionListener(new ActionListener(){
93 @Override
94 public void actionPerformed(ActionEvent arg0) {
95 setVisibleTexts(layer, true);
96 if(layer.getParent()!=null) layer.getParent().calculateVisibleTexts();
97 map.repaint();
98 }
99 });
100 menuItemHide.addActionListener(new ActionListener(){
101 @Override
102 public void actionPerformed(ActionEvent arg0) {
103 setVisibleTexts(layer, false);
104 if(layer.getParent()!=null) layer.getParent().calculateVisibleTexts();
105 map.repaint();
106 }
107 });
108
109 return popup;
110 }
111 private void setVisibleTexts(AbstractLayer layer, boolean visible){
112 layer.setVisibleTexts(visible);
113 if(layer instanceof LayerGroup){
114 LayerGroup group = (LayerGroup)layer;
115 if(group.getLayers()!=null) for(AbstractLayer al: group.getLayers()) setVisibleTexts(al, visible);
116 }
117 }
118 public Layer addLayer(String name){
119 Layer layer = new Layer(name);
120 this.addLayer(layer);
121 return layer;
122 }
123 public JMapViewerTree addLayer(Layer layer){
124 tree.addLayer(layer);
125 return this;
126 }
127 public JMapViewerTree addLayer(MapObject element){
128 //element.getLayer().add(element);
129 return addLayer(element.getLayer());
130 }
131 public Layer removeFromLayer(MapObject element){
132 element.getLayer().getElements().remove(element);
133 return element.getLayer();
134 }
135 public static int size(List<?> list){
136 return list==null?0:list.size();
137 }
138 public JMapViewer getViewer(){
139 return map;
140 }
141 public CheckBoxTree getTree(){
142 return tree;
143 }
144 public void addMapObject(MapObject o){
145
146 }
147 public void setTreeVisible(boolean visible){
148 removeAll();
149 revalidate();
150 if(visible){
151 splitPane.setLeftComponent(treePanel);
152 splitPane.setRightComponent(map);
153 add(splitPane, BorderLayout.CENTER);
154 }else add(map, BorderLayout.CENTER);
155 repaint();
156 }
157 private void createRefresh(){
158 tree.getModel().addTreeModelListener(new TreeModelListener() {
159 @Override
160 public void treeNodesChanged(final TreeModelEvent e) {
161 repaint();
162 }
163 @Override
164 public void treeNodesInserted(TreeModelEvent arg0) {
165 // TODO Auto-generated method stub
166 }
167 @Override
168 public void treeNodesRemoved(TreeModelEvent arg0) {
169 // TODO Auto-generated method stub
170 }
171 @Override
172 public void treeStructureChanged(TreeModelEvent arg0) {
173 // TODO Auto-generated method stub
174 }
175 });
176 }
177}
Note: See TracBrowser for help on using the repository browser.