package org.geopublishing.atlasStyler.swing; import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JLabel; import net.miginfocom.swing.MigLayout; import org.geopublishing.atlasStyler.ASUtil; import org.geopublishing.atlasStyler.AtlasStyler; import org.geopublishing.atlasStyler.AtlasStylerVector; import org.geopublishing.atlasStyler.rulesLists.AbstractRulesList; import org.geopublishing.atlasStyler.rulesLists.AbstractRulesList.RulesListType; import de.schmitzm.geotools.feature.FeatureUtil; import de.schmitzm.geotools.feature.FeatureUtil.GeometryForm; import de.schmitzm.swing.AtlasDialog; import de.schmitzm.swing.Cancellable; import de.schmitzm.swing.JPanel; import de.schmitzm.swing.SwingUtil; public class AddRulesListDialog extends AtlasDialog implements Cancellable { private static final long serialVersionUID = -423737577157193930L; private final RulesListJComboBox jComboBoxRuleListType; private final AtlasStyler atlasStyler; private final Component owner; private JPanel imagelabel; public AddRulesListDialog(Component owner, AtlasStyler atlasStyler) { super(owner, ASUtil.R("AddRulesListDialog.title", atlasStyler.getTitle())); this.owner = owner; this.atlasStyler = atlasStyler; jComboBoxRuleListType = new RulesListJComboBox(atlasStyler); jComboBoxRuleListType.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { updateImage(); } }); initGui(); } private void updateImage() { final JPanel il = getImageLabel(); il.removeAll(); RulesListType rlt = (RulesListType) jComboBoxRuleListType .getSelectedItem(); il.add(new JLabel(rlt.getImage())); il.invalidate(); il.validate(); il.repaint(); } private JPanel getImageLabel() { if (imagelabel == null) { imagelabel = new JPanel(new MigLayout()); } return imagelabel; } private void initGui() { setLayout(new MigLayout("wrap 2", "[grow 200][grow]")); if (atlasStyler instanceof AtlasStylerVector) { AtlasStylerVector asv = (AtlasStylerVector) atlasStyler; int countNumAttr = FeatureUtil.getNumericalFieldNames( asv.getStyledFeatures().getSchema()).size(); int countTextAttr = FeatureUtil.getValueFieldNames( asv.getStyledFeatures().getSchema()).size() - countNumAttr; GeometryForm geomType = asv.getStyledFeatures().getGeometryForm(); add(new JLabel(ASUtil.R("AddRulesListDialog.Vector.explanation", geomType, countTextAttr, countNumAttr)), "top, grow, width ::500"); } else { add(new JLabel(ASUtil.R("AddRulesListDialog.Raster.explanation")), "top, grow, width ::500"); } add(getImageLabel(), "growx 10, width 100, height 80"); add(jComboBoxRuleListType, "span 2, growx"); add(getOkButton(), "gapy unrel, span 2, split 2, tag ok, bottom"); add(getCancelButton(), "tag cancel, bottom"); setModal(true); setModalExclusionType(ModalExclusionType.APPLICATION_EXCLUDE); SwingUtil.setRelativeFramePosition(this, owner, SwingUtil.BOUNDS_INNER, SwingUtil.NORTHWEST); updateImage(); pack(); } @Override public void cancel() { } @Override public boolean close() { if (super.close()) { if (jComboBoxRuleListType.getSelectedIndex() >= 0) { AbstractRulesList rulelist = atlasStyler .getRlf() .createRulesList( (RulesListType) jComboBoxRuleListType .getSelectedItem(), true); atlasStyler.addRulesList(rulelist); } return true; } else return false; } }