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

Last change on this file since 2667 was 2620, checked in by jttt, 14 years ago

Remove OsmPrimitive.setIncomplete()

File size: 6.5 KB
Line 
1package org.openstreetmap.josm.data.osm;
2
3import static org.openstreetmap.josm.tools.I18n.tr;
4import static org.openstreetmap.josm.tools.I18n.trc;
5
6import java.util.Collection;
7import java.util.LinkedList;
8import java.util.List;
9import java.util.Map;
10
11import javax.swing.table.AbstractTableModel;
12
13import org.openstreetmap.josm.Main;
14import org.openstreetmap.josm.actions.search.SearchAction;
15import org.openstreetmap.josm.actions.search.SearchAction.Function;
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 filters.add(new Filter(value));
63 }
64 }
65
66 private void savePrefs(){
67 Map<String,String> prefs = Main.pref.getAllPrefix("filters.filter");
68 for (String key : prefs.keySet()) {
69 String[] sts = key.split("\\.");
70 if (sts.length != 3)throw new Error("Incompatible filter preferences");
71 Main.pref.put("filters.filter." + sts[2], null);
72 }
73
74 int i = 0;
75 for (Filter flt : filters){
76 Main.pref.put("filters.filter." + i++, flt.getPrefString());
77 }
78 }
79
80 private void savePref(int i){
81 if(i >= filters.size()) {
82 Main.pref.put("filters.filter." + i, null);
83 } else {
84 Main.pref.put("filters.filter." + i, filters.get(i).getPrefString());
85 }
86 }
87
88 public void addFilter(Filter f){
89 filters.add(f);
90 savePref(filters.size()-1);
91 filter();
92 fireTableRowsInserted(filters.size()-1, filters.size()-1);
93 }
94
95 public void moveDownFilter(int i){
96 if(i >= filters.size()-1) return;
97 filters.add(i+1, filters.remove(i));
98 savePref(i);
99 savePref(i+1);
100 filter();
101 fireTableRowsUpdated(i, i+1);
102 }
103
104 public void moveUpFilter(int i){
105 if(i == 0) return;
106 filters.add(i-1, filters.remove(i));
107 savePref(i);
108 savePref(i-1);
109 filter();
110 fireTableRowsUpdated(i-1, i);
111 }
112
113 public void removeFilter(int i){
114 filters.remove(i);
115 savePrefs();
116 filter();
117 fireTableRowsDeleted(i, i);
118 }
119
120 public void setFilter(int i, Filter f){
121 filters.set(i, f);
122 savePref(i);
123 filter();
124 fireTableRowsUpdated(i, i);
125 }
126
127 public Filter getFilter(int i){
128 return filters.get(i);
129 }
130
131 public int getRowCount(){
132 return filters.size();
133 }
134
135 public int getColumnCount(){
136 return 6;
137 }
138
139 @Override
140 public String getColumnName(int column){
141 String[] names = { /* translators notes must be in front */
142 /* column header: enable filter */ trc("filter","E"),
143 /* column header: hide filter */ tr("H"),
144 /* column header: filter text */ tr("Text"),
145 /* column header: apply filter for children */ tr("C"),
146 /* column header: inverted filter */ tr("I"),
147 /* column header: filter mode */ tr("M")
148 };
149 return names[column];
150 }
151
152 @Override
153 public Class<?> getColumnClass(int column){
154 Class<?>[] classes = { Boolean.class, Boolean.class, String.class, Boolean.class, Boolean.class, String.class };
155 return classes[column];
156 }
157
158 public boolean isCellEnabled(int row, int column){
159 if(!filters.get(row).enable && column!=0) return false;
160 return true;
161 }
162
163 @Override
164 public boolean isCellEditable(int row, int column){
165 if(!filters.get(row).enable && column!=0) return false;
166 if(column < 5)return true;
167 return false;
168 }
169
170 @Override
171 public void setValueAt(Object aValue, int row, int column){
172 Filter f = filters.get(row);
173 switch(column){
174 case 0: f.enable = (Boolean)aValue;
175 savePref(row);
176 filter();
177 fireTableRowsUpdated(row, row);
178 break;
179 case 1: f.hide = (Boolean)aValue;
180 savePref(row);
181 filter();
182 break;
183 case 2: f.text = (String)aValue;
184 savePref(row);
185 break;
186 case 3: f.applyForChildren = (Boolean)aValue;
187 savePref(row);
188 filter();
189 break;
190 case 4: f.inverted = (Boolean)aValue;
191 savePref(row);
192 filter();
193 break;
194 }
195 if(column!=0) {
196 fireTableCellUpdated(row, column);
197 }
198 }
199
200 public Object getValueAt(int row, int column){
201 Filter f = filters.get(row);
202 switch(column){
203 case 0: return f.enable;
204 case 1: return f.hide;
205 case 2: return f.text;
206 case 3: return f.applyForChildren;
207 case 4: return f.inverted;
208 case 5:
209 switch(f.mode){ /* translators notes must be in front */
210 case replace: /* filter mode: replace */ return tr("R");
211 case add: /* filter mode: add */ return tr("A");
212 case remove: /* filter mode: remove */ return tr("D");
213 case in_selection: /* filter mode: in selection */ return tr("F");
214 }
215 }
216 return null;
217 }
218}
Note: See TracBrowser for help on using the repository browser.