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

Last change on this file since 3163 was 3083, checked in by bastiK, 14 years ago

added svn:eol-style=native to source files

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