001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.gui.tagging.presets.items; 003 004import java.awt.GridLayout; 005import java.util.Collection; 006import java.util.LinkedList; 007import java.util.List; 008import java.util.Map; 009 010import javax.swing.JPanel; 011 012import org.openstreetmap.josm.data.osm.OsmPrimitive; 013import org.openstreetmap.josm.data.osm.Tag; 014import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetItem; 015import org.openstreetmap.josm.tools.GBC; 016 017/** 018 * A group of {@link Check}s. 019 * @since 6114 020 */ 021public class CheckGroup extends TaggingPresetItem { 022 023 /** 024 * Number of columns (positive integer) 025 */ 026 public String columns; // NOSONAR 027 028 /** 029 * List of checkboxes 030 */ 031 public final List<Check> checks = new LinkedList<>(); 032 033 @Override 034 public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel, boolean presetInitiallyMatches) { 035 Integer cols = Integer.valueOf(columns); 036 int rows = (int) Math.ceil(checks.size()/cols.doubleValue()); 037 JPanel panel = new JPanel(new GridLayout(rows, cols)); 038 039 for (Check check : checks) { 040 check.addToPanel(panel, sel, presetInitiallyMatches); 041 } 042 043 p.add(panel, GBC.eol()); 044 return false; 045 } 046 047 @Override 048 public void addCommands(List<Tag> changedTags) { 049 for (Check check : checks) { 050 check.addCommands(changedTags); 051 } 052 } 053 054 @Override 055 public Boolean matches(Map<String, String> tags) { 056 for (Check check : checks) { 057 if (Boolean.TRUE.equals(check.matches(tags))) { 058 return Boolean.TRUE; 059 } 060 } 061 return null; 062 } 063 064 @Override 065 public String toString() { 066 return "CheckGroup [columns=" + columns + ']'; 067 } 068}