source: josm/trunk/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java@ 2125

Last change on this file since 2125 was 2125, checked in by stoecker, 15 years ago

added files

File size: 7.1 KB
Line 
1// License: GPL. Copyright 2007 by Immanuel Scholz and others
2package org.openstreetmap.josm.gui.dialogs;
3
4import static org.openstreetmap.josm.tools.I18n.marktr;
5import static org.openstreetmap.josm.tools.I18n.tr;
6import static org.openstreetmap.josm.tools.I18n.trn;
7
8import javax.swing.JPanel;
9import javax.swing.JTable;
10import javax.swing.table.JTableHeader;
11import javax.swing.ListSelectionModel;
12import javax.swing.JPopupMenu;
13import javax.swing.table.AbstractTableModel;
14import javax.swing.JScrollPane;
15
16import java.awt.FlowLayout;
17import java.awt.BorderLayout;
18import java.awt.GridLayout;
19import java.awt.event.KeyEvent;
20import java.awt.event.ActionListener;
21import java.awt.event.ActionEvent;
22import java.awt.event.MouseEvent;
23
24import org.openstreetmap.josm.Main;
25import org.openstreetmap.josm.gui.SideButton;
26import org.openstreetmap.josm.gui.layer.Layer.LayerChangeListener;
27import org.openstreetmap.josm.gui.layer.DataChangeListener;
28import org.openstreetmap.josm.gui.layer.OsmDataLayer;
29import org.openstreetmap.josm.gui.layer.Layer;
30import org.openstreetmap.josm.data.osm.Filters;
31import org.openstreetmap.josm.data.osm.Filter;
32import org.openstreetmap.josm.tools.Shortcut;
33import org.openstreetmap.josm.data.osm.DataSet;
34import org.openstreetmap.josm.actions.search.SearchAction;
35
36/**
37 *
38 * @author Petr_Dlouhý
39 */
40public class FilterDialog extends ToggleDialog implements DataChangeListener, LayerChangeListener {
41 private JTable userTable;
42 private Filters filters = new Filters();
43 private SideButton addButton;
44 private SideButton editButton;
45 private SideButton deleteButton;
46 private SideButton upButton;
47 private SideButton downButton;
48 private JPopupMenu popupMenu;
49
50 public FilterDialog(){
51 super(tr("Filter"), "filter", tr("Filter objects and hide/disable them."),
52 Shortcut.registerShortcut("subwindow:filter", tr("Toggle: {0}", tr("Filter")), KeyEvent.VK_F, Shortcut.GROUP_LAYER, Shortcut.SHIFT_DEFAULT), 162);
53
54 Layer.listeners.add(this);
55 build();
56 }
57
58 protected JPanel buildButtonRow() {
59 JPanel pnl = new JPanel(new GridLayout(1, 4));
60
61 addButton = new SideButton(marktr("Add"), "add", "SelectionList", tr("Add filter."),
62 new ActionListener(){
63 public void actionPerformed(ActionEvent evt){
64 Filter filter = (Filter)SearchAction.showSearchDialog(new Filter());
65 if(filter != null){
66 filters.addFilter(filter);
67 filters.filter();
68 }
69 }
70 });
71 pnl.add(addButton);
72
73 editButton = new SideButton(marktr("Edit"), "edit", "SelectionList", tr("Edit filter."),
74 new ActionListener(){
75 public void actionPerformed(ActionEvent evt){
76 int index = userTable.getSelectionModel().getMinSelectionIndex();
77 if(index < 0) return;
78 Filter f = filters.getFilter(index);
79 Filter filter = (Filter)SearchAction.showSearchDialog(f);
80 if(filter != null){
81 filters.setFilter(index, filter);
82 filters.filter();
83 }
84 }
85 });
86 pnl.add(editButton);
87
88 deleteButton = new SideButton(marktr("Delete"), "delete", "SelectionList", tr("Delete filter."),
89 new ActionListener(){
90 public void actionPerformed(ActionEvent evt){
91 int index = userTable.getSelectionModel().getMinSelectionIndex();
92 if(index < 0) return;
93 filters.removeFilter(index);
94 }
95 });
96 pnl.add(deleteButton);
97
98 upButton = new SideButton(marktr("Up"), "up", "SelectionList", tr("Move filter up."),
99 new ActionListener(){
100 public void actionPerformed(ActionEvent evt){
101 int index = userTable.getSelectionModel().getMinSelectionIndex();
102 if(index < 0) return;
103 filters.moveUpFilter(index);
104 userTable.getSelectionModel().setSelectionInterval(index-1, index-1);
105 }
106 });
107 pnl.add(upButton);
108
109 downButton = new SideButton(marktr("Down"), "down", "SelectionList", tr("Move filter down."),
110 new ActionListener(){
111 public void actionPerformed(ActionEvent evt){
112 int index = userTable.getSelectionModel().getMinSelectionIndex();
113 if(index < 0) return;
114 filters.moveDownFilter(index);
115 userTable.getSelectionModel().setSelectionInterval(index+1, index+1);
116 }
117 });
118 pnl.add(downButton);
119 return pnl;
120 }
121
122 protected String[] columnToolTips = {
123 tr("Filter elements"),
124 tr("Disable elements"),
125 tr("Apply also for children"),
126 tr("Inverse filter"),
127 null,
128 tr("Filter mode")
129 };
130
131 protected void build() {
132 JPanel pnl = new JPanel();
133 pnl.setLayout(new BorderLayout());
134 userTable = new JTable(filters){
135 protected JTableHeader createDefaultTableHeader() {
136 return new JTableHeader(columnModel) {
137 public String getToolTipText(MouseEvent e) {
138 String tip = null;
139 java.awt.Point p = e.getPoint();
140 int index = columnModel.getColumnIndexAtX(p.x);
141 int realIndex = columnModel.getColumn(index).getModelIndex();
142 return columnToolTips[realIndex];
143 }
144 };
145 }
146 };
147
148 userTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
149
150 userTable.getColumnModel().getColumn(0).setMaxWidth(1);
151 userTable.getColumnModel().getColumn(1).setMaxWidth(1);
152 userTable.getColumnModel().getColumn(3).setMaxWidth(1);
153 userTable.getColumnModel().getColumn(4).setMaxWidth(1);
154 userTable.getColumnModel().getColumn(5).setMaxWidth(1);
155
156 userTable.getColumnModel().getColumn(0).setResizable(false);
157 userTable.getColumnModel().getColumn(1).setResizable(false);
158 userTable.getColumnModel().getColumn(3).setResizable(false);
159 userTable.getColumnModel().getColumn(4).setResizable(false);
160 userTable.getColumnModel().getColumn(5).setResizable(false);
161
162 pnl.add(new JScrollPane(userTable), BorderLayout.CENTER);
163
164 // -- the button row
165 pnl.add(buildButtonRow(), BorderLayout.SOUTH);
166 /*userTable.addMouseListener(new DoubleClickAdapter());*/
167 add(pnl, BorderLayout.CENTER);
168 }
169
170 public void layerRemoved(Layer a) {
171 if (a instanceof OsmDataLayer) {
172 ((OsmDataLayer)a).listenerDataChanged.remove(this);
173 }
174 }
175
176 public void layerAdded(Layer a) {
177 if (a instanceof OsmDataLayer) {
178 ((OsmDataLayer)a).listenerDataChanged.add(this);
179 }
180 }
181
182 public void activeLayerChange(Layer oldLayer, Layer newLayer) {
183 filters.filter();
184 }
185
186 public void dataChanged(OsmDataLayer l){
187 filters.filter();
188 }
189}
Note: See TracBrowser for help on using the repository browser.