/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package org.pepsoft.worldpainter.layers.tunnel; import org.pepsoft.worldpainter.ColourScheme; import org.pepsoft.worldpainter.MixedMaterial; import org.pepsoft.worldpainter.MixedMaterialManager; import org.pepsoft.worldpainter.NoiseSettings; import org.pepsoft.worldpainter.layers.CustomLayerDialog; import org.pepsoft.worldpainter.layers.tunnel.TunnelLayer.Mode; import javax.swing.*; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import java.awt.*; import java.awt.image.BufferedImage; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import org.pepsoft.worldpainter.App; import org.pepsoft.worldpainter.exporting.IncidentalLayerExporter; import org.pepsoft.worldpainter.layers.Bo2Layer; import org.pepsoft.worldpainter.layers.CustomLayer; import org.pepsoft.worldpainter.layers.EditLayerDialog; import org.pepsoft.worldpainter.layers.Layer; import org.pepsoft.worldpainter.layers.LayerManager; import org.pepsoft.worldpainter.layers.LayerTableCellRenderer; import org.pepsoft.worldpainter.layers.groundcover.GroundCoverLayer; import org.pepsoft.worldpainter.layers.plants.PlantLayer; /** * * @author SchmitzP */ public class TunnelLayerDialog extends CustomLayerDialog<TunnelLayer> implements ChangeListener, ListSelectionListener { public TunnelLayerDialog(Window parent, TunnelLayer layer, boolean extendedBlockIds, ColourScheme colourScheme, int maxHeight, int baseHeight, int waterLevel) { super(parent); this.layer = layer; this.baseHeight = baseHeight; this.waterLevel = waterLevel; this.maxHeight = maxHeight; initComponents(); tableFloorLayers.getSelectionModel().addListSelectionListener(this); mixedMaterialSelectorFloor.setExtendedBlockIds(extendedBlockIds); mixedMaterialSelectorFloor.setColourScheme(colourScheme); mixedMaterialSelectorRoof.setExtendedBlockIds(extendedBlockIds); mixedMaterialSelectorRoof.setColourScheme(colourScheme); mixedMaterialSelectorWall.setExtendedBlockIds(extendedBlockIds); mixedMaterialSelectorWall.setColourScheme(colourScheme); labelPreview.setPreferredSize(new Dimension(128, 0)); ((SpinnerNumberModel) spinnerFloorLevel.getModel()).setMaximum(maxHeight - 1); ((SpinnerNumberModel) spinnerRoofLevel.getModel()).setMaximum(maxHeight - 1); ((SpinnerNumberModel) spinnerFloorMin.getModel()).setMaximum(maxHeight - 1); ((SpinnerNumberModel) spinnerFloorMax.getModel()).setMaximum(maxHeight - 1); ((SpinnerNumberModel) spinnerRoofMin.getModel()).setMaximum(maxHeight - 1); ((SpinnerNumberModel) spinnerRoofMax.getModel()).setMaximum(maxHeight - 1); ((SpinnerNumberModel) spinnerFloodLevel.getModel()).setMaximum(maxHeight - 1); loadSettings(); updatePreview(); getRootPane().setDefaultButton(buttonOK); noiseSettingsEditorFloor.addChangeListener(this); noiseSettingsEditorRoof.addChangeListener(this); setLocationRelativeTo(parent); } @Override public TunnelLayer getSelectedLayer() { return layer; } // ListSelectionListener @Override public void valueChanged(ListSelectionEvent e) { setControlStates(); } // ChangeListener @Override public void stateChanged(ChangeEvent e) { generatePreview(); } @Override protected void ok() { saveSettingsTo(layer, true); super.ok(); } private void updatePreview() { // if ((radioButtonFloorFixedLevel.isSelected() && radioButtonRoofFixedLevel.isSelected()) // || (radioButtonFloorInverse.isSelected() && radioButtonRoofInverse.isSelected())) { // labelTunnelHeight.setText("(tunnel height: " + Math.max(((Integer) spinnerRoofLevel.getValue() - (Integer) spinnerFloorLevel.getValue()), 0) + ")"); // } else if (radioButtonFloorFixedDepth.isSelected() && radioButtonRoofFixedDepth.isSelected()) { // labelTunnelHeight.setText("(tunnel height: " + Math.max(((Integer) spinnerFloorLevel.getValue() - (Integer) spinnerRoofLevel.getValue()), 0) + ")"); // } else { // labelTunnelHeight.setText("(tunnel height: variable)"); // } generatePreview(); } private void generatePreview() { TunnelLayer layer = new TunnelLayer("tmp", 0); saveSettingsTo(layer, false); TunnelLayerExporter exporter = new TunnelLayerExporter(layer); Insets insets = labelPreview.getInsets(); int width = labelPreview.getWidth() - insets.left - insets.right; int height = labelPreview.getHeight() - insets.top - insets.bottom; if ((width > 0) && (height > 0)) { BufferedImage preview = exporter.generatePreview(width, height, waterLevel, baseHeight, Math.min(maxHeight - baseHeight, height - baseHeight)); labelPreview.setIcon(new ImageIcon(preview)); } else { labelPreview.setIcon(null); } } private void loadSettings() { programmaticChange = true; try { spinnerFloorLevel.setValue(layer.getFloorLevel()); spinnerFloorMin.setValue(layer.getFloorMin()); spinnerFloorMax.setValue(Math.min(layer.getFloorMax(), maxHeight - 1)); mixedMaterialSelectorFloor.setMaterial(layer.getFloorMaterial()); switch (layer.getFloorMode()) { case CONSTANT_DEPTH: radioButtonFloorFixedDepth.setSelected(true); break; case FIXED_HEIGHT: radioButtonFloorFixedLevel.setSelected(true); break; case INVERTED_DEPTH: radioButtonFloorInverse.setSelected(true); break; } NoiseSettings floorNoise = layer.getFloorNoise(); if (floorNoise == null) { floorNoise = new NoiseSettings(); } noiseSettingsEditorFloor.setNoiseSettings(floorNoise); spinnerRoofLevel.setValue(layer.getRoofLevel()); spinnerRoofMin.setValue(layer.getRoofMin()); spinnerRoofMax.setValue(Math.min(layer.getRoofMax(), maxHeight - 1)); mixedMaterialSelectorRoof.setMaterial(layer.getRoofMaterial()); switch (layer.getRoofMode()) { case CONSTANT_DEPTH: radioButtonRoofFixedDepth.setSelected(true); break; case FIXED_HEIGHT: radioButtonRoofFixedLevel.setSelected(true); break; case INVERTED_DEPTH: radioButtonRoofInverse.setSelected(true); break; } NoiseSettings roofNoise = layer.getRoofNoise(); if (roofNoise == null) { roofNoise = new NoiseSettings(); } noiseSettingsEditorRoof.setNoiseSettings(roofNoise); spinnerWallFloorDepth.setValue(layer.getFloorWallDepth()); spinnerWallRoofDepth.setValue(layer.getRoofWallDepth()); mixedMaterialSelectorWall.setMaterial(layer.getWallMaterial()); textFieldName.setText(layer.getName()); colourEditor1.setColour(layer.getColour()); checkBoxRemoveWater.setSelected(layer.isRemoveWater()); checkBoxFlood.setSelected(layer.getFloodLevel() > 0); spinnerFloodLevel.setValue((layer.getFloodLevel() > 0) ? layer.getFloodLevel() : waterLevel); checkBoxFloodWithLava.setSelected(layer.isFloodWithLava()); Map<Layer, TunnelLayer.LayerSettings> floorLayers = layer.getFloorLayers(); floorLayersTableModel = new TunnelFloorLayersTableModel(floorLayers, maxHeight); tableFloorLayers.setModel(floorLayersTableModel); tableFloorLayers.getColumnModel().getColumn(TunnelFloorLayersTableModel.COLUMN_NAME).setCellRenderer(new LayerTableCellRenderer()); } finally { programmaticChange = false; } setControlStates(); } private void saveSettingsTo(TunnelLayer layer, boolean registerMaterials) { layer.setFloorLevel((Integer) spinnerFloorLevel.getValue()); layer.setFloorMin((Integer) spinnerFloorMin.getValue()); layer.setFloorMax((Integer) spinnerFloorMax.getValue()); MixedMaterial floorMaterial = mixedMaterialSelectorFloor.getMaterial(); if ((floorMaterial != null) && registerMaterials) { // Make sure the material is registered, in case it's new floorMaterial = MixedMaterialManager.getInstance().register(floorMaterial); } layer.setFloorMaterial(floorMaterial); if (radioButtonFloorFixedDepth.isSelected()) { layer.setFloorMode(Mode.CONSTANT_DEPTH); } else if (radioButtonFloorFixedLevel.isSelected()) { layer.setFloorMode(Mode.FIXED_HEIGHT); } else { layer.setFloorMode(Mode.INVERTED_DEPTH); } NoiseSettings floorNoiseSettings = noiseSettingsEditorFloor.getNoiseSettings(); if (floorNoiseSettings.getRange() == 0) { layer.setFloorNoise(null); } else { layer.setFloorNoise(floorNoiseSettings); } layer.setRoofLevel((Integer) spinnerRoofLevel.getValue()); layer.setRoofMin((Integer) spinnerRoofMin.getValue()); layer.setRoofMax((Integer) spinnerRoofMax.getValue()); MixedMaterial roofMaterial = mixedMaterialSelectorRoof.getMaterial(); if ((roofMaterial != null) && registerMaterials) { // Make sure the material is registered, in case it's new roofMaterial = MixedMaterialManager.getInstance().register(roofMaterial); } layer.setRoofMaterial(roofMaterial); if (radioButtonRoofFixedDepth.isSelected()) { layer.setRoofMode(Mode.CONSTANT_DEPTH); } else if (radioButtonRoofFixedLevel.isSelected()) { layer.setRoofMode(Mode.FIXED_HEIGHT); } else { layer.setRoofMode(Mode.INVERTED_DEPTH); } NoiseSettings roofNoiseSettings = noiseSettingsEditorRoof.getNoiseSettings(); if (roofNoiseSettings.getRange() == 0) { layer.setRoofNoise(null); } else { layer.setRoofNoise(roofNoiseSettings); } layer.setFloorWallDepth((Integer) spinnerWallFloorDepth.getValue()); layer.setRoofWallDepth((Integer) spinnerWallRoofDepth.getValue()); MixedMaterial wallMaterial = mixedMaterialSelectorWall.getMaterial(); if ((wallMaterial != null) && registerMaterials) { // Make sure the material is registered, in case it's new wallMaterial = MixedMaterialManager.getInstance().register(wallMaterial); } layer.setWallMaterial(wallMaterial); layer.setName(textFieldName.getText().trim()); layer.setColour(colourEditor1.getColour()); layer.setRemoveWater(checkBoxRemoveWater.isSelected()); layer.setFloodLevel(checkBoxFlood.isSelected() ? (Integer) spinnerFloodLevel.getValue() : 0); layer.setFloodWithLava(checkBoxFloodWithLava.isSelected()); Map<Layer, TunnelLayer.LayerSettings> floorLayers = floorLayersTableModel.getLayers(); layer.setFloorLayers(((floorLayers != null) && (! floorLayers.isEmpty())) ? floorLayers : null); } private void setControlStates() { spinnerFloorMin.setEnabled(! radioButtonFloorFixedLevel.isSelected()); spinnerFloorMax.setEnabled(! radioButtonFloorFixedLevel.isSelected()); spinnerRoofMin.setEnabled(! radioButtonRoofFixedLevel.isSelected()); spinnerRoofMax.setEnabled(! radioButtonRoofFixedLevel.isSelected()); spinnerFloodLevel.setEnabled(checkBoxFlood.isSelected()); checkBoxFloodWithLava.setEnabled(checkBoxFlood.isSelected()); int selectedFloorRow = tableFloorLayers.getSelectedRow(); if (selectedFloorRow != -1) { buttonRemoveFloorLayer.setEnabled(tableFloorLayers.getSelectedRowCount() > 0); Layer selectedLayer = floorLayersTableModel.getLayer(selectedFloorRow); buttonEditFloorLayer.setEnabled(selectedLayer instanceof CustomLayer); } else { buttonRemoveFloorLayer.setEnabled(false); buttonEditFloorLayer.setEnabled(false); } } private void removeFloorLayer() { int selectedRow = tableFloorLayers.getSelectedRow(); if (selectedRow != -1) { floorLayersTableModel.removeLayer(selectedRow); } } private void editFloorLayer() { int selectedRow = tableFloorLayers.getSelectedRow(); if (selectedRow != -1) { Layer layer = floorLayersTableModel.getLayer(selectedRow); if (layer instanceof CustomLayer) { EditLayerDialog<Layer> dialog = new EditLayerDialog<>(this, layer); dialog.setVisible(true); if (! dialog.isCancelled()) { floorLayersTableModel.layerChanged(selectedRow); } } } } private void addFloorLayer() { JPopupMenu popupMenu = new JPopupMenu(); LayerManager.getInstance().getLayers().stream() .filter(l -> l.getExporter() instanceof IncidentalLayerExporter) .forEach(l -> { JMenuItem menuItem = new JMenuItem(l.getName(), new ImageIcon(l.getIcon())); menuItem.addActionListener(e -> floorLayersTableModel.addLayer(l)); popupMenu.add(menuItem); }); App app = App.getInstance(); Set<CustomLayer> customLayers = app.getCustomLayers().stream() .filter(l -> l.getExporter() instanceof IncidentalLayerExporter) .collect(Collectors.toSet()); if (customLayers.size() > 15) { // If there are fifteen or more custom layers, split them by palette // and move them to separate submenus to try and conserve screen // space app.getCustomLayersByPalette().entrySet().stream() .map((entry) -> { String palette = entry.getKey(); JMenu paletteMenu = new JMenu(palette != null ? palette : "Hidden Layers"); entry.getValue().stream() .filter(l -> l.getExporter() instanceof IncidentalLayerExporter) .forEach(l -> { JMenuItem menuItem = new JMenuItem(l.getName(), new ImageIcon(l.getIcon())); menuItem.addActionListener(e -> floorLayersTableModel.addLayer(l)); paletteMenu.add(menuItem); }); return paletteMenu; }).filter((paletteMenu) -> (paletteMenu.getItemCount() > 0)) .forEach((paletteMenu) -> { popupMenu.add(paletteMenu); }); } else { customLayers.forEach(l -> { JMenuItem menuItem = new JMenuItem(l.getName(), new ImageIcon(l.getIcon())); menuItem.addActionListener(e -> floorLayersTableModel.addLayer(l)); popupMenu.add(menuItem); }); } popupMenu.show(buttonAddFloorLayer, buttonAddFloorLayer.getWidth(), 0); } private void newFloorLayer() { JPopupMenu popupMenu = new JPopupMenu(); JMenuItem item = new JMenuItem("Custom Objects Layer"); item.addActionListener(e -> { EditLayerDialog<Bo2Layer> dialog = new EditLayerDialog(TunnelLayerDialog.this, Bo2Layer.class); dialog.setVisible(true); if (! dialog.isCancelled()) { Bo2Layer newLayer = dialog.getLayer(); newLayer.setHide(true); floorLayersTableModel.addLayer(newLayer); } }); popupMenu.add(item); item = new JMenuItem("Custom Ground Cover Layer"); item.addActionListener(e -> { EditLayerDialog<GroundCoverLayer> dialog = new EditLayerDialog(TunnelLayerDialog.this, GroundCoverLayer.class); dialog.setVisible(true); if (! dialog.isCancelled()) { GroundCoverLayer newLayer = dialog.getLayer(); newLayer.setHide(true); floorLayersTableModel.addLayer(newLayer); } }); popupMenu.add(item); item = new JMenuItem("Custom Plants Layer"); item.addActionListener(e -> { EditLayerDialog<PlantLayer> dialog = new EditLayerDialog(TunnelLayerDialog.this, PlantLayer.class); dialog.setVisible(true); if (! dialog.isCancelled()) { PlantLayer newLayer = dialog.getLayer(); newLayer.setHide(true); floorLayersTableModel.addLayer(newLayer); } }); popupMenu.add(item); popupMenu.show(buttonNewFloorLayer, buttonNewFloorLayer.getWidth(), 0); } /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { buttonGroup1 = new javax.swing.ButtonGroup(); buttonGroup3 = new javax.swing.ButtonGroup(); buttonCancel = new javax.swing.JButton(); buttonOK = new javax.swing.JButton(); buttonReset = new javax.swing.JButton(); jLabel1 = new javax.swing.JLabel(); jLabel4 = new javax.swing.JLabel(); textFieldName = new javax.swing.JTextField(); jLabel11 = new javax.swing.JLabel(); colourEditor1 = new org.pepsoft.worldpainter.ColourEditor(); jTabbedPane1 = new javax.swing.JTabbedPane(); jPanel1 = new javax.swing.JPanel(); radioButtonFloorFixedLevel = new javax.swing.JRadioButton(); spinnerRoofLevel = new javax.swing.JSpinner(); mixedMaterialSelectorFloor = new org.pepsoft.worldpainter.MixedMaterialSelector(); jLabel12 = new javax.swing.JLabel(); jLabel5 = new javax.swing.JLabel(); jLabel9 = new javax.swing.JLabel(); spinnerFloorLevel = new javax.swing.JSpinner(); jLabel20 = new javax.swing.JLabel(); radioButtonRoofFixedDepth = new javax.swing.JRadioButton(); spinnerFloorMin = new javax.swing.JSpinner(); noiseSettingsEditorFloor = new org.pepsoft.worldpainter.NoiseSettingsEditor(); jLabel17 = new javax.swing.JLabel(); spinnerRoofMin = new javax.swing.JSpinner(); jLabel18 = new javax.swing.JLabel(); jLabel2 = new javax.swing.JLabel(); spinnerFloodLevel = new javax.swing.JSpinner(); radioButtonFloorFixedDepth = new javax.swing.JRadioButton(); jLabel14 = new javax.swing.JLabel(); checkBoxFloodWithLava = new javax.swing.JCheckBox(); spinnerRoofMax = new javax.swing.JSpinner(); mixedMaterialSelectorRoof = new org.pepsoft.worldpainter.MixedMaterialSelector(); jLabel13 = new javax.swing.JLabel(); noiseSettingsEditorRoof = new org.pepsoft.worldpainter.NoiseSettingsEditor(); jLabel8 = new javax.swing.JLabel(); jLabel16 = new javax.swing.JLabel(); spinnerWallRoofDepth = new javax.swing.JSpinner(); spinnerWallFloorDepth = new javax.swing.JSpinner(); checkBoxRemoveWater = new javax.swing.JCheckBox(); spinnerFloorMax = new javax.swing.JSpinner(); jLabel19 = new javax.swing.JLabel(); jLabel7 = new javax.swing.JLabel(); jLabel6 = new javax.swing.JLabel(); radioButtonFloorInverse = new javax.swing.JRadioButton(); checkBoxFlood = new javax.swing.JCheckBox(); radioButtonRoofFixedLevel = new javax.swing.JRadioButton(); jLabel3 = new javax.swing.JLabel(); mixedMaterialSelectorWall = new org.pepsoft.worldpainter.MixedMaterialSelector(); radioButtonRoofInverse = new javax.swing.JRadioButton(); jLabel15 = new javax.swing.JLabel(); jLabel10 = new javax.swing.JLabel(); labelPreview = new javax.swing.JLabel(); jLabel21 = new javax.swing.JLabel(); jPanel2 = new javax.swing.JPanel(); jLabel22 = new javax.swing.JLabel(); jScrollPane1 = new javax.swing.JScrollPane(); tableFloorLayers = new javax.swing.JTable(); buttonNewFloorLayer = new javax.swing.JButton(); buttonAddFloorLayer = new javax.swing.JButton(); buttonEditFloorLayer = new javax.swing.JButton(); buttonRemoveFloorLayer = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); setTitle("Configure Cave/Tunnel Layer"); buttonCancel.setText("Cancel"); buttonCancel.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonCancelActionPerformed(evt); } }); buttonOK.setText("OK"); buttonOK.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonOKActionPerformed(evt); } }); buttonReset.setText("Reset"); buttonReset.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonResetActionPerformed(evt); } }); jLabel1.setText("Create underground tunnels and caves with the following properties:"); jLabel4.setText("Name:"); textFieldName.setColumns(20); textFieldName.setText("jTextField1"); jLabel11.setText("Colour:"); buttonGroup1.add(radioButtonFloorFixedLevel); radioButtonFloorFixedLevel.setText("fixed level"); radioButtonFloorFixedLevel.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { radioButtonFloorFixedLevelActionPerformed(evt); } }); spinnerRoofLevel.setModel(new javax.swing.SpinnerNumberModel(0, 0, 255, 1)); spinnerRoofLevel.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent evt) { spinnerRoofLevelStateChanged(evt); } }); jLabel12.setText("Walls:"); jLabel5.setText("Variation:"); jLabel9.setText("Variation:"); spinnerFloorLevel.setModel(new javax.swing.SpinnerNumberModel(0, 0, 255, 1)); spinnerFloorLevel.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent evt) { spinnerFloorLevelStateChanged(evt); } }); jLabel20.setText("Options:"); buttonGroup3.add(radioButtonRoofFixedDepth); radioButtonRoofFixedDepth.setText("fixed depth"); radioButtonRoofFixedDepth.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { radioButtonRoofFixedDepthActionPerformed(evt); } }); spinnerFloorMin.setModel(new javax.swing.SpinnerNumberModel(0, 0, 255, 1)); spinnerFloorMin.setEnabled(false); spinnerFloorMin.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent evt) { spinnerFloorMinStateChanged(evt); } }); jLabel17.setText(", max:"); spinnerRoofMin.setModel(new javax.swing.SpinnerNumberModel(0, 0, 255, 1)); spinnerRoofMin.setEnabled(false); spinnerRoofMin.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent evt) { spinnerRoofMinStateChanged(evt); } }); jLabel18.setText("Absolute min:"); jLabel2.setText("Floor:"); spinnerFloodLevel.setModel(new javax.swing.SpinnerNumberModel(1, 1, 255, 1)); spinnerFloodLevel.setEnabled(false); spinnerFloodLevel.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent evt) { spinnerFloodLevelStateChanged(evt); } }); buttonGroup1.add(radioButtonFloorFixedDepth); radioButtonFloorFixedDepth.setText("fixed depth"); radioButtonFloorFixedDepth.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { radioButtonFloorFixedDepthActionPerformed(evt); } }); jLabel14.setText("Material:"); checkBoxFloodWithLava.setText("Flood with lava:"); checkBoxFloodWithLava.setEnabled(false); checkBoxFloodWithLava.setHorizontalTextPosition(javax.swing.SwingConstants.LEADING); checkBoxFloodWithLava.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { checkBoxFloodWithLavaActionPerformed(evt); } }); spinnerRoofMax.setModel(new javax.swing.SpinnerNumberModel(255, 0, 255, 1)); spinnerRoofMax.setEnabled(false); spinnerRoofMax.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent evt) { spinnerRoofMaxStateChanged(evt); } }); jLabel13.setText("Bottom width:"); jLabel8.setText("Level:"); jLabel16.setText("Absolute min:"); spinnerWallRoofDepth.setModel(new javax.swing.SpinnerNumberModel(0, 0, 255, 1)); spinnerWallRoofDepth.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent evt) { spinnerWallRoofDepthStateChanged(evt); } }); spinnerWallFloorDepth.setModel(new javax.swing.SpinnerNumberModel(0, 0, 255, 1)); spinnerWallFloorDepth.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent evt) { spinnerWallFloorDepthStateChanged(evt); } }); checkBoxRemoveWater.setText("Remove water or lava:"); checkBoxRemoveWater.setHorizontalTextPosition(javax.swing.SwingConstants.LEADING); checkBoxRemoveWater.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { checkBoxRemoveWaterActionPerformed(evt); } }); spinnerFloorMax.setModel(new javax.swing.SpinnerNumberModel(255, 0, 255, 1)); spinnerFloorMax.setEnabled(false); spinnerFloorMax.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent evt) { spinnerFloorMaxStateChanged(evt); } }); jLabel19.setText(", max:"); jLabel7.setText("Material:"); jLabel6.setText("Ceiling:"); buttonGroup1.add(radioButtonFloorInverse); radioButtonFloorInverse.setText("opposite of terrain"); radioButtonFloorInverse.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { radioButtonFloorInverseActionPerformed(evt); } }); checkBoxFlood.setText("Flood the caves/tunnels:"); checkBoxFlood.setHorizontalTextPosition(javax.swing.SwingConstants.LEADING); checkBoxFlood.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { checkBoxFloodActionPerformed(evt); } }); buttonGroup3.add(radioButtonRoofFixedLevel); radioButtonRoofFixedLevel.setSelected(true); radioButtonRoofFixedLevel.setText("fixed level"); radioButtonRoofFixedLevel.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { radioButtonRoofFixedLevelActionPerformed(evt); } }); jLabel3.setText("Level:"); buttonGroup3.add(radioButtonRoofInverse); radioButtonRoofInverse.setText("opposite of terrain"); radioButtonRoofInverse.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { radioButtonRoofInverseActionPerformed(evt); } }); jLabel15.setText("Top width:"); jLabel10.setText("Material:"); labelPreview.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED)); jLabel21.setLabelFor(spinnerFloodLevel); jLabel21.setText("Level:"); javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel12) .addComponent(jLabel6) .addComponent(jLabel2) .addComponent(jLabel20) .addGroup(jPanel1Layout.createSequentialGroup() .addGap(12, 12, 12) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(jLabel13) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(spinnerWallFloorDepth, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(18, 18, 18) .addComponent(jLabel15) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(spinnerWallRoofDepth, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(jLabel14) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(mixedMaterialSelectorWall, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(radioButtonRoofFixedLevel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(radioButtonRoofFixedDepth) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(radioButtonRoofInverse)) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(jLabel8) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(spinnerRoofLevel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(18, 18, 18) .addComponent(jLabel16) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(spinnerRoofMin, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(0, 0, 0) .addComponent(jLabel17) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(spinnerRoofMax, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(jLabel9) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(noiseSettingsEditorRoof, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(jLabel10) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(mixedMaterialSelectorRoof, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(jLabel7) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(mixedMaterialSelectorFloor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(jLabel3) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(spinnerFloorLevel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(18, 18, 18) .addComponent(jLabel18) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(spinnerFloorMin, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(0, 0, 0) .addComponent(jLabel19) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(spinnerFloorMax, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(radioButtonFloorFixedLevel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(radioButtonFloorFixedDepth) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(radioButtonFloorInverse)) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(jLabel5) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(noiseSettingsEditorFloor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(checkBoxFlood) .addGap(18, 18, 18) .addComponent(jLabel21) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(spinnerFloodLevel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(18, 18, 18) .addComponent(checkBoxFloodWithLava)) .addComponent(checkBoxRemoveWater)))) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(labelPreview, javax.swing.GroupLayout.DEFAULT_SIZE, 232, Short.MAX_VALUE) .addContainerGap()) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(jLabel6) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(radioButtonRoofFixedLevel) .addComponent(radioButtonRoofFixedDepth) .addComponent(radioButtonRoofInverse)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel8) .addComponent(spinnerRoofLevel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel16) .addComponent(spinnerRoofMin, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel17) .addComponent(spinnerRoofMax, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel9) .addComponent(noiseSettingsEditorRoof, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel10) .addComponent(mixedMaterialSelectorRoof, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(18, 18, 18) .addComponent(jLabel2) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(radioButtonFloorFixedLevel) .addComponent(radioButtonFloorFixedDepth) .addComponent(radioButtonFloorInverse)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel18) .addComponent(spinnerFloorMin, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel19) .addComponent(spinnerFloorMax, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel3) .addComponent(spinnerFloorLevel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel5) .addComponent(noiseSettingsEditorFloor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel7) .addComponent(mixedMaterialSelectorFloor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(18, 18, 18) .addComponent(jLabel12) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel13) .addComponent(spinnerWallFloorDepth, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel15) .addComponent(spinnerWallRoofDepth, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel14) .addComponent(mixedMaterialSelectorWall, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(18, 18, 18) .addComponent(jLabel20) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(checkBoxRemoveWater) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(checkBoxFlood) .addComponent(jLabel21) .addComponent(spinnerFloodLevel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(checkBoxFloodWithLava))) .addComponent(labelPreview, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap()) ); jTabbedPane1.addTab("Caves/Tunnels Settings", jPanel1); jLabel22.setText("You can add custom layers here which will be rendered on the cave/tunnel floors:"); tableFloorLayers.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); tableFloorLayers.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { tableFloorLayersMouseClicked(evt); } }); jScrollPane1.setViewportView(tableFloorLayers); buttonNewFloorLayer.setText("Create New"); buttonNewFloorLayer.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonNewFloorLayerActionPerformed(evt); } }); buttonAddFloorLayer.setText("Add Existing"); buttonAddFloorLayer.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonAddFloorLayerActionPerformed(evt); } }); buttonEditFloorLayer.setText("Edit"); buttonEditFloorLayer.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonEditFloorLayerActionPerformed(evt); } }); buttonRemoveFloorLayer.setText("Remove"); buttonRemoveFloorLayer.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonRemoveFloorLayerActionPerformed(evt); } }); javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); jPanel2.setLayout(jPanel2Layout); jPanel2Layout.setHorizontalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addComponent(jLabel22) .addGap(0, 0, Short.MAX_VALUE)) .addGroup(jPanel2Layout.createSequentialGroup() .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 518, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(buttonAddFloorLayer, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(buttonNewFloorLayer, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(buttonEditFloorLayer, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(buttonRemoveFloorLayer, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) .addContainerGap()) ); jPanel2Layout.setVerticalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel22) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 398, Short.MAX_VALUE) .addGroup(jPanel2Layout.createSequentialGroup() .addComponent(buttonNewFloorLayer) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(buttonAddFloorLayer) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(buttonEditFloorLayer) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(buttonRemoveFloorLayer))) .addContainerGap()) ); jTabbedPane1.addTab("Floor Layers", jPanel2); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(buttonReset) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(buttonOK) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(buttonCancel) .addGap(11, 11, 11)) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel1) .addGroup(layout.createSequentialGroup() .addComponent(jLabel4) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(textFieldName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jLabel11) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(colourEditor1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addComponent(jTabbedPane1)) .addContainerGap()))) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jTabbedPane1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel4) .addComponent(textFieldName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel11) .addComponent(colourEditor1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(18, 18, 18) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(buttonCancel) .addComponent(buttonOK) .addComponent(buttonReset)) .addContainerGap()) ); pack(); }// </editor-fold>//GEN-END:initComponents private void buttonOKActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonOKActionPerformed ok(); }//GEN-LAST:event_buttonOKActionPerformed private void buttonCancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonCancelActionPerformed cancel(); }//GEN-LAST:event_buttonCancelActionPerformed private void buttonResetActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonResetActionPerformed loadSettings(); }//GEN-LAST:event_buttonResetActionPerformed private void radioButtonRoofInverseActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_radioButtonRoofInverseActionPerformed updatePreview(); setControlStates(); }//GEN-LAST:event_radioButtonRoofInverseActionPerformed private void radioButtonRoofFixedLevelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_radioButtonRoofFixedLevelActionPerformed updatePreview(); setControlStates(); }//GEN-LAST:event_radioButtonRoofFixedLevelActionPerformed private void checkBoxFloodActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_checkBoxFloodActionPerformed setControlStates(); updatePreview(); }//GEN-LAST:event_checkBoxFloodActionPerformed private void radioButtonFloorInverseActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_radioButtonFloorInverseActionPerformed updatePreview(); setControlStates(); }//GEN-LAST:event_radioButtonFloorInverseActionPerformed private void spinnerFloorMaxStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spinnerFloorMaxStateChanged if (! programmaticChange) { if ((Integer) spinnerFloorMax.getValue() < (Integer) spinnerFloorMin.getValue()) { spinnerFloorMin.setValue(spinnerFloorMax.getValue()); } updatePreview(); } }//GEN-LAST:event_spinnerFloorMaxStateChanged private void checkBoxRemoveWaterActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_checkBoxRemoveWaterActionPerformed updatePreview(); }//GEN-LAST:event_checkBoxRemoveWaterActionPerformed private void spinnerWallFloorDepthStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spinnerWallFloorDepthStateChanged if (! programmaticChange) { updatePreview(); } }//GEN-LAST:event_spinnerWallFloorDepthStateChanged private void spinnerWallRoofDepthStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spinnerWallRoofDepthStateChanged if (! programmaticChange) { updatePreview(); } }//GEN-LAST:event_spinnerWallRoofDepthStateChanged private void spinnerRoofMaxStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spinnerRoofMaxStateChanged if (! programmaticChange) { if ((Integer) spinnerRoofMax.getValue() < (Integer) spinnerRoofMin.getValue()) { spinnerRoofMin.setValue(spinnerRoofMax.getValue()); } updatePreview(); } }//GEN-LAST:event_spinnerRoofMaxStateChanged private void checkBoxFloodWithLavaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_checkBoxFloodWithLavaActionPerformed updatePreview(); }//GEN-LAST:event_checkBoxFloodWithLavaActionPerformed private void radioButtonFloorFixedDepthActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_radioButtonFloorFixedDepthActionPerformed updatePreview(); setControlStates(); }//GEN-LAST:event_radioButtonFloorFixedDepthActionPerformed private void spinnerFloodLevelStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spinnerFloodLevelStateChanged if (! programmaticChange) { updatePreview(); } }//GEN-LAST:event_spinnerFloodLevelStateChanged private void spinnerRoofMinStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spinnerRoofMinStateChanged if (! programmaticChange) { if ((Integer) spinnerRoofMax.getValue() < (Integer) spinnerRoofMin.getValue()) { spinnerRoofMax.setValue(spinnerRoofMin.getValue()); } updatePreview(); } }//GEN-LAST:event_spinnerRoofMinStateChanged private void spinnerFloorMinStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spinnerFloorMinStateChanged if (! programmaticChange) { if ((Integer) spinnerFloorMax.getValue() < (Integer) spinnerFloorMin.getValue()) { spinnerFloorMax.setValue(spinnerFloorMin.getValue()); } updatePreview(); } }//GEN-LAST:event_spinnerFloorMinStateChanged private void radioButtonRoofFixedDepthActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_radioButtonRoofFixedDepthActionPerformed updatePreview(); setControlStates(); }//GEN-LAST:event_radioButtonRoofFixedDepthActionPerformed private void spinnerFloorLevelStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spinnerFloorLevelStateChanged if (! programmaticChange) { updatePreview(); } }//GEN-LAST:event_spinnerFloorLevelStateChanged private void spinnerRoofLevelStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spinnerRoofLevelStateChanged if (! programmaticChange) { updatePreview(); } }//GEN-LAST:event_spinnerRoofLevelStateChanged private void radioButtonFloorFixedLevelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_radioButtonFloorFixedLevelActionPerformed updatePreview(); setControlStates(); }//GEN-LAST:event_radioButtonFloorFixedLevelActionPerformed private void buttonNewFloorLayerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonNewFloorLayerActionPerformed newFloorLayer(); }//GEN-LAST:event_buttonNewFloorLayerActionPerformed private void buttonAddFloorLayerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonAddFloorLayerActionPerformed addFloorLayer(); }//GEN-LAST:event_buttonAddFloorLayerActionPerformed private void buttonEditFloorLayerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonEditFloorLayerActionPerformed editFloorLayer(); }//GEN-LAST:event_buttonEditFloorLayerActionPerformed private void buttonRemoveFloorLayerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonRemoveFloorLayerActionPerformed removeFloorLayer(); }//GEN-LAST:event_buttonRemoveFloorLayerActionPerformed private void tableFloorLayersMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tableFloorLayersMouseClicked if ((! evt.isPopupTrigger()) && (evt.getClickCount() == 2)) { int column = tableFloorLayers.columnAtPoint(evt.getPoint()); if (column == TunnelFloorLayersTableModel.COLUMN_NAME) { editFloorLayer(); } } }//GEN-LAST:event_tableFloorLayersMouseClicked // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton buttonAddFloorLayer; private javax.swing.JButton buttonCancel; private javax.swing.JButton buttonEditFloorLayer; private javax.swing.ButtonGroup buttonGroup1; private javax.swing.ButtonGroup buttonGroup3; private javax.swing.JButton buttonNewFloorLayer; private javax.swing.JButton buttonOK; private javax.swing.JButton buttonRemoveFloorLayer; private javax.swing.JButton buttonReset; private javax.swing.JCheckBox checkBoxFlood; private javax.swing.JCheckBox checkBoxFloodWithLava; private javax.swing.JCheckBox checkBoxRemoveWater; private org.pepsoft.worldpainter.ColourEditor colourEditor1; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel10; private javax.swing.JLabel jLabel11; private javax.swing.JLabel jLabel12; private javax.swing.JLabel jLabel13; private javax.swing.JLabel jLabel14; private javax.swing.JLabel jLabel15; private javax.swing.JLabel jLabel16; private javax.swing.JLabel jLabel17; private javax.swing.JLabel jLabel18; private javax.swing.JLabel jLabel19; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel20; private javax.swing.JLabel jLabel21; private javax.swing.JLabel jLabel22; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel5; private javax.swing.JLabel jLabel6; private javax.swing.JLabel jLabel7; private javax.swing.JLabel jLabel8; private javax.swing.JLabel jLabel9; private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel2; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JTabbedPane jTabbedPane1; private javax.swing.JLabel labelPreview; private org.pepsoft.worldpainter.MixedMaterialSelector mixedMaterialSelectorFloor; private org.pepsoft.worldpainter.MixedMaterialSelector mixedMaterialSelectorRoof; private org.pepsoft.worldpainter.MixedMaterialSelector mixedMaterialSelectorWall; private org.pepsoft.worldpainter.NoiseSettingsEditor noiseSettingsEditorFloor; private org.pepsoft.worldpainter.NoiseSettingsEditor noiseSettingsEditorRoof; private javax.swing.JRadioButton radioButtonFloorFixedDepth; private javax.swing.JRadioButton radioButtonFloorFixedLevel; private javax.swing.JRadioButton radioButtonFloorInverse; private javax.swing.JRadioButton radioButtonRoofFixedDepth; private javax.swing.JRadioButton radioButtonRoofFixedLevel; private javax.swing.JRadioButton radioButtonRoofInverse; private javax.swing.JSpinner spinnerFloodLevel; private javax.swing.JSpinner spinnerFloorLevel; private javax.swing.JSpinner spinnerFloorMax; private javax.swing.JSpinner spinnerFloorMin; private javax.swing.JSpinner spinnerRoofLevel; private javax.swing.JSpinner spinnerRoofMax; private javax.swing.JSpinner spinnerRoofMin; private javax.swing.JSpinner spinnerWallFloorDepth; private javax.swing.JSpinner spinnerWallRoofDepth; private javax.swing.JTable tableFloorLayers; private javax.swing.JTextField textFieldName; // End of variables declaration//GEN-END:variables private final TunnelLayer layer; private final int waterLevel, baseHeight, maxHeight; private TunnelFloorLayersTableModel floorLayersTableModel; private boolean programmaticChange; private static final long serialVersionUID = 1L; }