Ticket #3475: enable_hide.diff

File enable_hide.diff, 8.6 KB (added by Petr Dlouhý <petr.dlouhy@…>, 3 years ago)

Patch adding enable/hide and counting of filtered elements.

  • src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java

     
    55import static org.openstreetmap.josm.tools.I18n.tr; 
    66import static org.openstreetmap.josm.tools.I18n.trn; 
    77 
     8import javax.swing.JCheckBox; 
    89import javax.swing.JPanel; 
    910import javax.swing.JTable; 
    1011import javax.swing.table.JTableHeader; 
     12import javax.swing.table.DefaultTableCellRenderer; 
     13import javax.swing.event.TableModelListener; 
     14import javax.swing.event.TableModelEvent; 
     15import javax.swing.table.TableCellRenderer; 
    1116import javax.swing.ListSelectionModel; 
    1217import javax.swing.JPopupMenu; 
    13 import javax.swing.table.AbstractTableModel; 
    1418import javax.swing.JScrollPane; 
    1519 
     20import java.awt.Component; 
    1621import java.awt.FlowLayout; 
    1722import java.awt.BorderLayout; 
    1823import java.awt.GridLayout; 
     
    3742 * 
    3843 * @author Petr_DlouhÜ 
    3944 */ 
    40 public class FilterDialog extends ToggleDialog implements DataChangeListener, LayerChangeListener { 
     45public class FilterDialog extends ToggleDialog implements DataChangeListener, LayerChangeListener, TableModelListener { 
    4146    private JTable userTable; 
    4247    private Filters filters = new Filters(); 
    4348    private SideButton addButton; 
     
    120125    } 
    121126 
    122127    protected String[] columnToolTips = { 
    123         tr("Filter elements"), 
    124         tr("Disable elements"), 
     128        tr("Enable filter"), 
     129        tr("Hide elements"), 
    125130        tr("Apply also for children"), 
    126131        tr("Inverse filter"), 
    127132        null, 
     
    144149               }; 
    145150           } 
    146151        };    
    147    
     152 
     153        filters.addTableModelListener(this); 
     154 
    148155        userTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
    149156 
    150157        userTable.getColumnModel().getColumn(0).setMaxWidth(1); 
     
    159166        userTable.getColumnModel().getColumn(4).setResizable(false); 
    160167        userTable.getColumnModel().getColumn(5).setResizable(false); 
    161168 
     169        userTable.setDefaultRenderer(Boolean.class, new BooleanRenderer()); 
     170        userTable.setDefaultRenderer(String.class, new StringRenderer()); 
     171 
     172        tableChanged(null); 
     173 
    162174        pnl.add(new JScrollPane(userTable), BorderLayout.CENTER); 
    163175 
    164176        // -- the button row 
     
    186198   public void dataChanged(OsmDataLayer l){ 
    187199      filters.filter(); 
    188200   } 
     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   } 
    189224} 
  • src/org/openstreetmap/josm/data/osm/Filters.java

     
    2020 */ 
    2121public class Filters extends AbstractTableModel{ 
    2222 
     23   public int disabledCount, hiddenCount; 
     24 
    2325   public Filters(){ 
    2426      loadPrefs(); 
    2527   } 
     
    3133      Main.main.getCurrentDataSet().setFiltered(); 
    3234      Main.main.getCurrentDataSet().setDisabled(); 
    3335      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){ 
    4237               SearchAction.getSelection(flt, seld, new Function(){ 
    4338                  public Boolean isSomething(OsmPrimitive o){ 
    4439                     return o.isDisabled(); 
    4540                  } 
    4641               }); 
     42               if(flt.hide) { 
     43                  SearchAction.getSelection(flt, self, new Function(){ 
     44                     public Boolean isSomething(OsmPrimitive o){ 
     45                        return o.isFiltered(); 
     46                     } 
     47                  }); 
     48               } 
    4749            } 
    4850      } 
     51      disabledCount = seld.size() - self.size(); 
     52      hiddenCount = self.size(); 
    4953      Main.main.getCurrentDataSet().setFiltered(self); 
    5054      Main.main.getCurrentDataSet().setDisabled(seld); 
    5155      Main.map.mapView.repaint(); 
     
    133137   } 
    134138 
    135139   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") }; 
    137141      return names[column]; 
    138142   } 
    139143 
     
    142146      return classes[column]; 
    143147   } 
    144148 
     149   public boolean isCellEnabled(int row, int column){ 
     150      if(!filters.get(row).enable && column!=0) return false; 
     151      return true; 
     152   } 
     153 
    145154   public boolean isCellEditable(int row, int column){ 
     155      if(!filters.get(row).enable && column!=0) return false; 
    146156      if(column < 5)return true; 
    147157      return false; 
    148158   } 
     
    150160   public void setValueAt(Object aValue, int row, int column){ 
    151161      Filter f = filters.get(row); 
    152162      switch(column){ 
    153          case 0: f.filtered = (Boolean)aValue; 
     163         case 0: f.enable = (Boolean)aValue; 
    154164                 savePref(row); 
    155165                 filter(); 
    156                  return; 
    157          case 1: f.disabled = (Boolean)aValue; 
     166                 fireTableRowsUpdated(row, row); 
     167                 break; 
     168         case 1: f.hide = (Boolean)aValue; 
    158169                 savePref(row); 
    159170                 filter(); 
    160                  return; 
     171                 break; 
    161172         case 2: f.text = (String)aValue; 
    162173                 savePref(row); 
    163                  return; 
     174                 break; 
    164175         case 3: f.applyForChildren = (Boolean)aValue; 
    165176                 savePref(row); 
    166177                 filter(); 
    167                  return; 
     178                 break; 
    168179         case 4: f.inverted = (Boolean)aValue; 
    169180                 savePref(row); 
    170181                 filter(); 
    171                  return; 
     182                 break; 
    172183      } 
     184      if(column!=0)fireTableCellUpdated(row, column); 
    173185   } 
    174186 
    175187   public Object getValueAt(int row, int column){ 
    176188      Filter f = filters.get(row); 
    177189      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; 
    180192         case 2: return f.text; 
    181193         case 3: return f.applyForChildren; 
    182194         case 4: return f.inverted; 
  • src/org/openstreetmap/josm/data/osm/Filter.java

     
    1010 */ 
    1111public class Filter extends SearchSetting { 
    1212   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; 
    1515   public Boolean inverted = false; 
    1616   public Boolean applyForChildren = true; 
    1717   public Filter() { 
     
    3333      if(prfs[2].equals("in_selection")) mode = SearchMode.in_selection; 
    3434      caseSensitive = Boolean.parseBoolean(prfs[3]); 
    3535      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]); 
    3838      inverted = Boolean.parseBoolean(prfs[8]); 
    3939      applyForChildren = Boolean.parseBoolean(prfs[9]); 
    4040 
     
    4343   public String getPrefString(){ 
    4444      return version + ";" +  
    4545          text + ";" + mode + ";" + caseSensitive + ";" + regexSearch + ";" + 
    46           "legacy" + ";" + filtered + ";" + disabled + ";" +  
     46          "legacy" + ";" + enable + ";" + hide + ";" +  
    4747          inverted + ";" + applyForChildren; 
    4848   } 
    4949}