source: josm/trunk/src/org/openstreetmap/josm/data/osm/Filters.java@ 2145

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

see #3475 - patch by Petr Dlouhý - cleanups

File size: 5.8 KB
Line 
1package org.openstreetmap.josm.data.osm;
2
3import static org.openstreetmap.josm.tools.I18n.tr;
4
5import javax.swing.table.AbstractTableModel;
6
7import java.util.LinkedList;
8import java.util.List;
9import java.util.Collection;
10import java.util.Map;
11
12import org.openstreetmap.josm.data.osm.Filter;
13import org.openstreetmap.josm.Main;
14import org.openstreetmap.josm.actions.search.SearchAction.Function;
15import org.openstreetmap.josm.actions.search.SearchAction;
16
17/**
18 *
19 * @author Petr_Dlouhý
20 */
21public class Filters extends AbstractTableModel{
22
23 public int disabledCount, hiddenCount;
24
25 public Filters(){
26 loadPrefs();
27 }
28
29 private List<Filter> filters = new LinkedList<Filter>();
30 public void filter(){
31 Collection<OsmPrimitive> seld = new LinkedList<OsmPrimitive> ();
32 Collection<OsmPrimitive> self = new LinkedList<OsmPrimitive> ();
33 if(Main.main.getCurrentDataSet() == null)return;
34 Main.main.getCurrentDataSet().setFiltered();
35 Main.main.getCurrentDataSet().setDisabled();
36 for (Filter flt : filters){
37 if(flt.enable){
38 SearchAction.getSelection(flt, seld, new Function(){
39 public Boolean isSomething(OsmPrimitive o){
40 return o.isDisabled();
41 }
42 });
43 if(flt.hide) {
44 SearchAction.getSelection(flt, self, new Function(){
45 public Boolean isSomething(OsmPrimitive o){
46 return o.isFiltered();
47 }
48 });
49 }
50 }
51 }
52 disabledCount = seld.size() - self.size();
53 hiddenCount = self.size();
54 Main.main.getCurrentDataSet().setFiltered(self);
55 Main.main.getCurrentDataSet().setDisabled(seld);
56 Main.map.mapView.repaint();
57 }
58
59 private void loadPrefs(){
60 Map<String,String> prefs = Main.pref.getAllPrefix("filters.filter");
61 for (String value : prefs.values()) {
62 Filter filter = new Filter(value);
63 if(filter!=null)
64 filters.add(filter);
65 }
66 }
67
68 private void savePrefs(){
69 Map<String,String> prefs = Main.pref.getAllPrefix("filters.filter");
70 for (String key : prefs.keySet()) {
71 String[] sts = key.split("\\.");
72 if (sts.length != 3)throw new Error("Incompatible filter preferences");
73 Main.pref.put("filters.filter." + sts[2], null);
74 }
75
76 int i = 0;
77 for (Filter flt : filters){
78 Main.pref.put("filters.filter." + i++, flt.getPrefString());
79 }
80 }
81
82 private void savePref(int i){
83 if(i >= filters.size())
84 Main.pref.put("filters.filter." + i, null);
85 else
86 Main.pref.put("filters.filter." + i, filters.get(i).getPrefString());
87 }
88
89 public void addFilter(Filter f){
90 filters.add(f);
91 savePref(filters.size()-1);
92 filter();
93 fireTableRowsInserted(filters.size()-1, filters.size()-1);
94 }
95
96 public void moveDownFilter(int i){
97 if(i >= filters.size()-1) return;
98 filters.add(i+1, filters.remove(i));
99 savePref(i);
100 savePref(i+1);
101 filter();
102 fireTableRowsUpdated(i, i+1);
103 }
104
105 public void moveUpFilter(int i){
106 if(i == 0) return;
107 filters.add(i-1, filters.remove(i));
108 savePref(i);
109 savePref(i-1);
110 filter();
111 fireTableRowsUpdated(i-1, i);
112 }
113
114 public void removeFilter(int i){
115 filters.remove(i);
116 savePrefs();
117 filter();
118 fireTableRowsDeleted(i, i);
119 }
120
121 public void setFilter(int i, Filter f){
122 filters.set(i, f);
123 savePref(i);
124 filter();
125 fireTableRowsUpdated(i, i);
126 }
127
128 public Filter getFilter(int i){
129 return filters.get(i);
130 }
131
132 public int getRowCount(){
133 return filters.size();
134 }
135
136 public int getColumnCount(){
137 return 6;
138 }
139
140 public String getColumnName(int column){
141 String[] names = { tr("E"), tr("H"), tr("Text"), tr("C"), tr("I"), tr("M") };
142 return names[column];
143 }
144
145 public Class getColumnClass(int column){
146 Class[] classes = { Boolean.class, Boolean.class, String.class, Boolean.class, Boolean.class, String.class };
147 return classes[column];
148 }
149
150 public boolean isCellEnabled(int row, int column){
151 if(!filters.get(row).enable && column!=0) return false;
152 return true;
153 }
154
155 public boolean isCellEditable(int row, int column){
156 if(!filters.get(row).enable && column!=0) return false;
157 if(column < 5)return true;
158 return false;
159 }
160
161 public void setValueAt(Object aValue, int row, int column){
162 Filter f = filters.get(row);
163 switch(column){
164 case 0: f.enable = (Boolean)aValue;
165 savePref(row);
166 filter();
167 fireTableRowsUpdated(row, row);
168 break;
169 case 1: f.hide = (Boolean)aValue;
170 savePref(row);
171 filter();
172 break;
173 case 2: f.text = (String)aValue;
174 savePref(row);
175 break;
176 case 3: f.applyForChildren = (Boolean)aValue;
177 savePref(row);
178 filter();
179 break;
180 case 4: f.inverted = (Boolean)aValue;
181 savePref(row);
182 filter();
183 break;
184 }
185 if(column!=0)fireTableCellUpdated(row, column);
186 }
187
188 public Object getValueAt(int row, int column){
189 Filter f = filters.get(row);
190 switch(column){
191 case 0: return f.enable;
192 case 1: return f.hide;
193 case 2: return f.text;
194 case 3: return f.applyForChildren;
195 case 4: return f.inverted;
196 case 5:
197 switch(f.mode){
198 case replace: return tr("R");
199 case add: return tr("A");
200 case remove: return tr("D");
201 case in_selection: return tr("F");
202 }
203 }
204 return null;
205 }
206}
Note: See TracBrowser for help on using the repository browser.