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

Last change on this file since 3189 was 3189, checked in by stoecker, 14 years ago

activated filter dialog finally, hopefully we wont get to much problems - closes #4875

  • Property svn:eol-style set to native
File size: 8.7 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;
6
7import java.awt.BorderLayout;
8import java.awt.Component;
9import java.awt.Graphics2D;
10import java.awt.event.ActionEvent;
11import java.awt.event.ActionListener;
12import java.awt.event.KeyEvent;
13import java.awt.event.MouseEvent;
14
15import javax.swing.JCheckBox;
16import javax.swing.JPanel;
17import javax.swing.JScrollPane;
18import javax.swing.JTable;
19import javax.swing.ListSelectionModel;
20import javax.swing.event.TableModelEvent;
21import javax.swing.event.TableModelListener;
22import javax.swing.table.DefaultTableCellRenderer;
23import javax.swing.table.JTableHeader;
24import javax.swing.table.TableCellRenderer;
25
26import org.openstreetmap.josm.actions.search.SearchAction;
27import org.openstreetmap.josm.data.osm.Filter;
28import org.openstreetmap.josm.data.osm.Filters;
29import org.openstreetmap.josm.data.osm.event.AbstractDatasetChangedEvent;
30import org.openstreetmap.josm.data.osm.event.DataSetListener;
31import org.openstreetmap.josm.data.osm.event.DataSetListenerAdapter;
32import org.openstreetmap.josm.data.osm.event.DatasetEventManager;
33import org.openstreetmap.josm.data.osm.event.DataSetListenerAdapter.Listener;
34import org.openstreetmap.josm.data.osm.event.DatasetEventManager.FireMode;
35import org.openstreetmap.josm.gui.SideButton;
36import org.openstreetmap.josm.tools.Shortcut;
37
38/**
39 *
40 * @author Petr_Dlouhý
41 */
42public class FilterDialog extends ToggleDialog implements Listener , TableModelListener {
43
44 private JTable userTable;
45 private Filters filters = new Filters();
46 private SideButton addButton;
47 private SideButton editButton;
48 private SideButton deleteButton;
49 private SideButton upButton;
50 private SideButton downButton;
51
52 private final DataSetListener listenerAdapter = new DataSetListenerAdapter(this);
53
54 public FilterDialog(){
55 super(tr("Filter"), "filter", tr("Filter objects and hide/disable them."),
56 Shortcut.registerShortcut("subwindow:filter", tr("Toggle: {0}", tr("Filter")), KeyEvent.VK_F, Shortcut.GROUP_LAYER, Shortcut.SHIFT_DEFAULT), 162);
57 build();
58 }
59
60 @Override
61 public void showNotify() {
62 DatasetEventManager.getInstance().addDatasetListener(listenerAdapter, FireMode.IN_EDT_CONSOLIDATED);
63 filters.executeFilters();
64 }
65
66 @Override
67 public void hideNotify() {
68 DatasetEventManager.getInstance().removeDatasetListener(listenerAdapter);
69 filters.clearFilterFlags();
70 }
71
72 protected JPanel buildButtonRow() {
73 JPanel pnl = getButtonPanel(5);
74
75 addButton = new SideButton(marktr("Add"), "add", "SelectionList", tr("Add filter."),
76 new ActionListener(){
77 public void actionPerformed(ActionEvent evt){
78 Filter filter = (Filter)SearchAction.showSearchDialog(new Filter());
79 if(filter != null){
80 filters.addFilter(filter);
81 filters.executeFilters();
82 }
83 }
84 });
85 pnl.add(addButton);
86
87 editButton = new SideButton(marktr("Edit"), "edit", "SelectionList", tr("Edit filter."),
88 new ActionListener(){
89 public void actionPerformed(ActionEvent evt){
90 int index = userTable.getSelectionModel().getMinSelectionIndex();
91 if(index < 0) return;
92 Filter f = filters.getFilter(index);
93 Filter filter = (Filter)SearchAction.showSearchDialog(f);
94 if(filter != null){
95 filters.setFilter(index, filter);
96 filters.executeFilters();
97 }
98 }
99 });
100 pnl.add(editButton);
101
102 deleteButton = new SideButton(marktr("Delete"), "delete", "SelectionList", tr("Delete filter."),
103 new ActionListener(){
104 public void actionPerformed(ActionEvent evt){
105 int index = userTable.getSelectionModel().getMinSelectionIndex();
106 if(index < 0) return;
107 filters.removeFilter(index);
108 }
109 });
110 pnl.add(deleteButton);
111
112 upButton = new SideButton(marktr("Up"), "up", "SelectionList", tr("Move filter up."),
113 new ActionListener(){
114 public void actionPerformed(ActionEvent evt){
115 int index = userTable.getSelectionModel().getMinSelectionIndex();
116 if(index < 0) return;
117 filters.moveUpFilter(index);
118 userTable.getSelectionModel().setSelectionInterval(index-1, index-1);
119 }
120 });
121 pnl.add(upButton);
122
123 downButton = new SideButton(marktr("Down"), "down", "SelectionList", tr("Move filter down."),
124 new ActionListener(){
125 public void actionPerformed(ActionEvent evt){
126 int index = userTable.getSelectionModel().getMinSelectionIndex();
127 if(index < 0) return;
128 filters.moveDownFilter(index);
129 userTable.getSelectionModel().setSelectionInterval(index+1, index+1);
130 }
131 });
132 pnl.add(downButton);
133 return pnl;
134 }
135
136 protected String[] columnToolTips = {
137 tr("Enable filter"),
138 tr("Hide elements"),
139 null,
140 tr("Apply also for children"),
141 tr("Inverse filter"),
142 tr("Filter mode")
143 };
144
145 protected void build() {
146 JPanel pnl = new JPanel();
147 pnl.setLayout(new BorderLayout());
148 userTable = new JTable(filters){
149 @Override
150 protected JTableHeader createDefaultTableHeader() {
151 return new JTableHeader(columnModel) {
152 @Override
153 public String getToolTipText(MouseEvent e) {
154 java.awt.Point p = e.getPoint();
155 int index = columnModel.getColumnIndexAtX(p.x);
156 int realIndex = columnModel.getColumn(index).getModelIndex();
157 return columnToolTips[realIndex];
158 }
159 };
160 }
161 };
162
163 filters.addTableModelListener(this);
164
165 userTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
166
167 userTable.getColumnModel().getColumn(0).setMaxWidth(1);
168 userTable.getColumnModel().getColumn(1).setMaxWidth(1);
169 userTable.getColumnModel().getColumn(3).setMaxWidth(1);
170 userTable.getColumnModel().getColumn(4).setMaxWidth(1);
171 userTable.getColumnModel().getColumn(5).setMaxWidth(1);
172
173 userTable.getColumnModel().getColumn(0).setResizable(false);
174 userTable.getColumnModel().getColumn(1).setResizable(false);
175 userTable.getColumnModel().getColumn(3).setResizable(false);
176 userTable.getColumnModel().getColumn(4).setResizable(false);
177 userTable.getColumnModel().getColumn(5).setResizable(false);
178
179 userTable.setDefaultRenderer(Boolean.class, new BooleanRenderer());
180 userTable.setDefaultRenderer(String.class, new StringRenderer());
181
182 tableChanged(null);
183
184 pnl.add(new JScrollPane(userTable), BorderLayout.CENTER);
185
186 // -- the button row
187 pnl.add(buildButtonRow(), BorderLayout.SOUTH);
188 /*userTable.addMouseListener(new DoubleClickAdapter());*/
189 add(pnl, BorderLayout.CENTER);
190 }
191
192 public void processDatasetEvent(AbstractDatasetChangedEvent event) {
193 System.err.print("FilterDialog/processDatasetEvent");
194 filters.executeFilters();
195 }
196
197 static class StringRenderer extends DefaultTableCellRenderer {
198 @Override
199 public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,int row,int column) {
200 Filters model = (Filters)table.getModel();
201 Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
202 cell.setEnabled(model.isCellEnabled(row, column));
203 return cell;
204 }
205 }
206
207 static class BooleanRenderer extends JCheckBox implements TableCellRenderer {
208 public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,int row,int column) {
209 Filters model = (Filters)table.getModel();
210 setSelected((Boolean)value);
211 setEnabled(model.isCellEnabled(row, column));
212 setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
213 return this;
214 }
215 }
216
217 public void tableChanged(TableModelEvent e){
218 setTitle(tr("Filter Hidden: {0} Disabled: {0}", filters.hiddenCount, filters.disabledCount));
219 }
220
221 public void drawOSDText(Graphics2D g) {
222 filters.drawOSDText(g);
223 }
224}
Note: See TracBrowser for help on using the repository browser.