001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.gui.tagging.presets.items; 003 004import java.awt.GridLayout; 005import java.util.LinkedList; 006import java.util.List; 007import java.util.Map; 008 009import javax.swing.JLabel; 010import javax.swing.JPanel; 011 012import org.openstreetmap.josm.data.osm.Tag; 013import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetItem; 014import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetItemGuiSupport; 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 short columns = 1; // 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, TaggingPresetItemGuiSupport support) { 035 int rows = (int) Math.ceil(checks.size() / ((double) columns)); 036 JPanel panel = new JPanel(new GridLayout(rows, columns)); 037 038 int i = 0; 039 for (Check check : checks) { 040 check.addToPanel(panel, support); 041 i++; 042 } 043 for (; i < rows * columns; i++) { 044 // fill remaining cells, see #20792 045 panel.add(new JLabel()); 046 } 047 048 panel.applyComponentOrientation(support.getDefaultComponentOrientation()); 049 p.add(panel, GBC.eol()); 050 return false; 051 } 052 053 @Override 054 public void addCommands(List<Tag> changedTags) { 055 for (Check check : checks) { 056 check.addCommands(changedTags); 057 } 058 } 059 060 @Override 061 public Boolean matches(Map<String, String> tags) { 062 for (Check check : checks) { 063 if (Boolean.TRUE.equals(check.matches(tags))) { 064 return Boolean.TRUE; 065 } 066 } 067 return null; 068 } 069 070 @Override 071 public String toString() { 072 return "CheckGroup [columns=" + columns + ']'; 073 } 074}