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