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}