Ticket #3475: enable_hide.diff
File enable_hide.diff, 8.6 KB (added by , 16 years ago) |
---|
-
src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java
5 5 import static org.openstreetmap.josm.tools.I18n.tr; 6 6 import static org.openstreetmap.josm.tools.I18n.trn; 7 7 8 import javax.swing.JCheckBox; 8 9 import javax.swing.JPanel; 9 10 import javax.swing.JTable; 10 11 import javax.swing.table.JTableHeader; 12 import javax.swing.table.DefaultTableCellRenderer; 13 import javax.swing.event.TableModelListener; 14 import javax.swing.event.TableModelEvent; 15 import javax.swing.table.TableCellRenderer; 11 16 import javax.swing.ListSelectionModel; 12 17 import javax.swing.JPopupMenu; 13 import javax.swing.table.AbstractTableModel;14 18 import javax.swing.JScrollPane; 15 19 20 import java.awt.Component; 16 21 import java.awt.FlowLayout; 17 22 import java.awt.BorderLayout; 18 23 import java.awt.GridLayout; … … 37 42 * 38 43 * @author Petr_Dlouhý 39 44 */ 40 public class FilterDialog extends ToggleDialog implements DataChangeListener, LayerChangeListener {45 public class FilterDialog extends ToggleDialog implements DataChangeListener, LayerChangeListener, TableModelListener { 41 46 private JTable userTable; 42 47 private Filters filters = new Filters(); 43 48 private SideButton addButton; … … 120 125 } 121 126 122 127 protected String[] columnToolTips = { 123 tr(" Filter elements"),124 tr(" Disable elements"),128 tr("Enable filter"), 129 tr("Hide elements"), 125 130 tr("Apply also for children"), 126 131 tr("Inverse filter"), 127 132 null, … … 144 149 }; 145 150 } 146 151 }; 147 152 153 filters.addTableModelListener(this); 154 148 155 userTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 149 156 150 157 userTable.getColumnModel().getColumn(0).setMaxWidth(1); … … 159 166 userTable.getColumnModel().getColumn(4).setResizable(false); 160 167 userTable.getColumnModel().getColumn(5).setResizable(false); 161 168 169 userTable.setDefaultRenderer(Boolean.class, new BooleanRenderer()); 170 userTable.setDefaultRenderer(String.class, new StringRenderer()); 171 172 tableChanged(null); 173 162 174 pnl.add(new JScrollPane(userTable), BorderLayout.CENTER); 163 175 164 176 // -- the button row … … 186 198 public void dataChanged(OsmDataLayer l){ 187 199 filters.filter(); 188 200 } 201 202 class StringRenderer extends DefaultTableCellRenderer { 203 public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,int row,int column) { 204 Filters model = (Filters)table.getModel(); 205 Component cell = (Component)super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 206 cell.setEnabled(model.isCellEnabled(row, column)); 207 return cell; 208 } 209 } 210 211 class BooleanRenderer extends JCheckBox implements TableCellRenderer { 212 public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,int row,int column) { 213 Filters model = (Filters)table.getModel(); 214 setSelected((Boolean)value); 215 setEnabled(model.isCellEnabled(row, column)); 216 setHorizontalAlignment(javax.swing.SwingConstants.CENTER); 217 return this; 218 } 219 } 220 221 public void tableChanged(TableModelEvent e){ 222 setTitle("Filter Hidden:" + filters.hiddenCount + " Disabled:" + filters.disabledCount); 223 } 189 224 } -
src/org/openstreetmap/josm/data/osm/Filters.java
20 20 */ 21 21 public class Filters extends AbstractTableModel{ 22 22 23 public int disabledCount, hiddenCount; 24 23 25 public Filters(){ 24 26 loadPrefs(); 25 27 } … … 31 33 Main.main.getCurrentDataSet().setFiltered(); 32 34 Main.main.getCurrentDataSet().setDisabled(); 33 35 for (Filter flt : filters){ 34 if(flt.filtered){ 35 SearchAction.getSelection(flt, self, new Function(){ 36 public Boolean isSomething(OsmPrimitive o){ 37 return o.isFiltered(); 38 } 39 }); 40 } 41 if(flt.disabled) { 36 if(flt.enable){ 42 37 SearchAction.getSelection(flt, seld, new Function(){ 43 38 public Boolean isSomething(OsmPrimitive o){ 44 39 return o.isDisabled(); 45 40 } 46 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 } 47 49 } 48 50 } 51 disabledCount = seld.size() - self.size(); 52 hiddenCount = self.size(); 49 53 Main.main.getCurrentDataSet().setFiltered(self); 50 54 Main.main.getCurrentDataSet().setDisabled(seld); 51 55 Main.map.mapView.repaint(); … … 133 137 } 134 138 135 139 public String getColumnName(int column){ 136 String[] names = { tr(" F"), tr("D"), tr("Text"), tr("C"), tr("I"), tr("M") };140 String[] names = { tr("E"), tr("H"), tr("Text"), tr("C"), tr("I"), tr("M") }; 137 141 return names[column]; 138 142 } 139 143 … … 142 146 return classes[column]; 143 147 } 144 148 149 public boolean isCellEnabled(int row, int column){ 150 if(!filters.get(row).enable && column!=0) return false; 151 return true; 152 } 153 145 154 public boolean isCellEditable(int row, int column){ 155 if(!filters.get(row).enable && column!=0) return false; 146 156 if(column < 5)return true; 147 157 return false; 148 158 } … … 150 160 public void setValueAt(Object aValue, int row, int column){ 151 161 Filter f = filters.get(row); 152 162 switch(column){ 153 case 0: f. filtered= (Boolean)aValue;163 case 0: f.enable = (Boolean)aValue; 154 164 savePref(row); 155 165 filter(); 156 return; 157 case 1: f.disabled = (Boolean)aValue; 166 fireTableRowsUpdated(row, row); 167 break; 168 case 1: f.hide = (Boolean)aValue; 158 169 savePref(row); 159 170 filter(); 160 return;171 break; 161 172 case 2: f.text = (String)aValue; 162 173 savePref(row); 163 return;174 break; 164 175 case 3: f.applyForChildren = (Boolean)aValue; 165 176 savePref(row); 166 177 filter(); 167 return;178 break; 168 179 case 4: f.inverted = (Boolean)aValue; 169 180 savePref(row); 170 181 filter(); 171 return;182 break; 172 183 } 184 if(column!=0)fireTableCellUpdated(row, column); 173 185 } 174 186 175 187 public Object getValueAt(int row, int column){ 176 188 Filter f = filters.get(row); 177 189 switch(column){ 178 case 0: return f. filtered;179 case 1: return f. disabled;190 case 0: return f.enable; 191 case 1: return f.hide; 180 192 case 2: return f.text; 181 193 case 3: return f.applyForChildren; 182 194 case 4: return f.inverted; -
src/org/openstreetmap/josm/data/osm/Filter.java
10 10 */ 11 11 public class Filter extends SearchSetting { 12 12 private final String version = "1"; 13 public Boolean filtered = false;14 public Boolean disabled = true;13 public Boolean enable = true; 14 public Boolean hide = false; 15 15 public Boolean inverted = false; 16 16 public Boolean applyForChildren = true; 17 17 public Filter() { … … 33 33 if(prfs[2].equals("in_selection")) mode = SearchMode.in_selection; 34 34 caseSensitive = Boolean.parseBoolean(prfs[3]); 35 35 regexSearch = Boolean.parseBoolean(prfs[4]); 36 filtered= Boolean.parseBoolean(prfs[6]);37 disabled= Boolean.parseBoolean(prfs[7]);36 enable = Boolean.parseBoolean(prfs[6]); 37 hide = Boolean.parseBoolean(prfs[7]); 38 38 inverted = Boolean.parseBoolean(prfs[8]); 39 39 applyForChildren = Boolean.parseBoolean(prfs[9]); 40 40 … … 43 43 public String getPrefString(){ 44 44 return version + ";" + 45 45 text + ";" + mode + ";" + caseSensitive + ";" + regexSearch + ";" + 46 "legacy" + ";" + filtered + ";" + disabled+ ";" +46 "legacy" + ";" + enable + ";" + hide + ";" + 47 47 inverted + ";" + applyForChildren; 48 48 } 49 49 }