Ticket #3475: enable_hide.diff

File enable_hide.diff, 8.6 KB (added by PetrDlouhy, 16 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}