Ticket #3475: enable_hide1.diff

File enable_hide1.diff, 11.8 KB (added by PetrDlouhy, 15 years ago)

Same as previous patch + some minor fixes of significant bugs

  • src/org/openstreetmap/josm/actions/search/SearchAction.java

     
    140140        SearchMode mode = replace.isSelected() ? SearchAction.SearchMode.replace
    141141                : (add.isSelected() ? SearchAction.SearchMode.add
    142142                : (remove.isSelected() ? SearchAction.SearchMode.remove : SearchAction.SearchMode.in_selection));
    143         if(initialValues instanceof Filter){
    144            return new Filter(input.getText(), mode, caseSensitive.isSelected(), regexSearch.isSelected());
    145         } else {
    146            return new SearchSetting(input.getText(), mode, caseSensitive.isSelected(), regexSearch.isSelected());
    147         }
     143        initialValues.text = input.getText();
     144        initialValues.mode = mode;
     145        initialValues.caseSensitive = caseSensitive.isSelected();
     146        initialValues.regexSearch = regexSearch.isSelected();
     147        return initialValues;
    148148    }
    149149
    150150    /**
     
    178178        try {
    179179            String searchText = s.text;
    180180            if(s instanceof Filter){
    181                searchText = ((Filter)s).inverted ? "-" : "";
    182                searchText = searchText + "(" + ((Filter)s).text + ")" + (((Filter)s).applyForChildren ? ("| child (" + ((Filter)s).text + ")"): "");
     181               searchText = "(" + s.text + ")" + (((Filter)s).applyForChildren ? ("| child (" + s.text + ")"): "");
     182               searchText = (((Filter)s).inverted ? "-" : "") + "(" +  searchText + ")";
    183183            }
    184             /*System.out.println(searchText);  */
     184            System.out.println(searchText);
    185185            SearchCompiler.Match matcher = SearchCompiler.compile(searchText, s.caseSensitive, s.regexSearch);
    186186            foundMatches = 0;
    187187            for (OsmPrimitive osm : Main.main.getCurrentDataSet().allNonDeletedCompletePrimitives()) {
  • 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"),
     130        null,
    125131        tr("Apply also for children"),
    126132        tr("Inverse filter"),
    127         null,
    128133        tr("Filter mode")
    129134    };
    130135
     
    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/gui/dialogs/PropertiesDialog.java

     
    749749        Map<Relation, Collection<RelationMember>> roles = new HashMap<Relation, Collection<RelationMember>>();
    750750        if (Main.main.getCurrentDataSet() != null) {
    751751            for (Relation r : Main.main.getCurrentDataSet().relations) {
    752                 if (!r.isFiltered() && r.isUsable()) {
     752                if (!r.isFiltered() && !r.incomplete && !r.isDeleted()) {
    753753                    for (RelationMember m : r.getMembers()) {
    754754                        if (newSelection.contains(m.getMember())) {
    755755                            Collection<RelationMember> value = roles.get(r);
  • 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   }
     
    2830   public void filter(){
    2931      Collection<OsmPrimitive> seld = new LinkedList<OsmPrimitive> ();
    3032      Collection<OsmPrimitive> self = new LinkedList<OsmPrimitive> ();
     33      if(Main.main.getCurrentDataSet() == null)return;
    3134      Main.main.getCurrentDataSet().setFiltered();
    3235      Main.main.getCurrentDataSet().setDisabled();
    3336      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) {
     37            if(flt.enable){
    4238               SearchAction.getSelection(flt, seld, new Function(){
    4339                  public Boolean isSomething(OsmPrimitive o){
    4440                     return o.isDisabled();
    4541                  }
    4642               });
     43               if(flt.hide) {
     44                  SearchAction.getSelection(flt, self, new Function(){
     45                     public Boolean isSomething(OsmPrimitive o){
     46                        return o.isFiltered();
     47                     }
     48                  });
     49               }
    4750            }
    4851      }
     52      disabledCount = seld.size() - self.size();
     53      hiddenCount = self.size();
    4954      Main.main.getCurrentDataSet().setFiltered(self);
    5055      Main.main.getCurrentDataSet().setDisabled(seld);
    5156      Main.map.mapView.repaint();
     
    133138   }
    134139
    135140   public String getColumnName(int column){
    136       String[] names = { tr("F"), tr("D"), tr("Text"), tr("C"), tr("I"), tr("M") };
     141      String[] names = { tr("E"), tr("H"), tr("Text"), tr("C"), tr("I"), tr("M") };
    137142      return names[column];
    138143   }
    139144
     
    142147      return classes[column];
    143148   }
    144149
     150   public boolean isCellEnabled(int row, int column){
     151      if(!filters.get(row).enable && column!=0) return false;
     152      return true;
     153   }
     154
    145155   public boolean isCellEditable(int row, int column){
     156      if(!filters.get(row).enable && column!=0) return false;
    146157      if(column < 5)return true;
    147158      return false;
    148159   }
     
    150161   public void setValueAt(Object aValue, int row, int column){
    151162      Filter f = filters.get(row);
    152163      switch(column){
    153          case 0: f.filtered = (Boolean)aValue;
     164         case 0: f.enable = (Boolean)aValue;
    154165                 savePref(row);
    155166                 filter();
    156                  return;
    157          case 1: f.disabled = (Boolean)aValue;
     167                 fireTableRowsUpdated(row, row);
     168                 break;
     169         case 1: f.hide = (Boolean)aValue;
    158170                 savePref(row);
    159171                 filter();
    160                  return;
     172                 break;
    161173         case 2: f.text = (String)aValue;
    162174                 savePref(row);
    163                  return;
     175                 break;
    164176         case 3: f.applyForChildren = (Boolean)aValue;
    165177                 savePref(row);
    166178                 filter();
    167                  return;
     179                 break;
    168180         case 4: f.inverted = (Boolean)aValue;
    169181                 savePref(row);
    170182                 filter();
    171                  return;
     183                 break;
    172184      }
     185      if(column!=0)fireTableCellUpdated(row, column);
    173186   }
    174187
    175188   public Object getValueAt(int row, int column){
    176189      Filter f = filters.get(row);
    177190      switch(column){
    178          case 0: return f.filtered;
    179          case 1: return f.disabled;
     191         case 0: return f.enable;
     192         case 1: return f.hide;
    180193         case 2: return f.text;
    181194         case 3: return f.applyForChildren;
    182195         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}