/* -*- tab-width: 4 -*-
*
* Electric(tm) VLSI Design System
*
* File: ParasiticTab.java
*
* Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
*
* Electric(tm) is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* Electric(tm) is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Electric(tm); see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, Mass 02111-1307, USA.
*/
package com.sun.electric.tool.user.dialogs.options;
import com.sun.electric.technology.Layer;
import com.sun.electric.technology.Technology;
import com.sun.electric.tool.extract.ParasiticTool;
import com.sun.electric.tool.simulation.SimulationTool;
import com.sun.electric.tool.user.dialogs.EDialog;
import com.sun.electric.tool.user.dialogs.PreferencesFrame;
import com.sun.electric.util.TextUtils;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Iterator;
import javax.swing.DefaultListModel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.ListSelectionModel;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
/**
* Class to handle the "Parasitics" tab of the Preferences dialog.
*/
public class ParasiticTab extends PreferencePanel {
private JList layerList;
private DefaultListModel layerListModel;
private boolean changing;
/** Creates new form ParasiticTab */
public ParasiticTab(PreferencesFrame parent, boolean modal)
{
super(parent, modal);
initComponents();
// make all text fields select-all when entered
EDialog.makeTextFieldSelectAllOnTab(resistance);
EDialog.makeTextFieldSelectAllOnTab(capacitance);
EDialog.makeTextFieldSelectAllOnTab(edgeCapacitance);
EDialog.makeTextFieldSelectAllOnTab(minResistance);
EDialog.makeTextFieldSelectAllOnTab(minCapacitance);
EDialog.makeTextFieldSelectAllOnTab(maxSeriesResistance);
EDialog.makeTextFieldSelectAllOnTab(gateLengthSubtraction);
}
/** return the JPanel to use for the user preferences. */
public JPanel getUserPreferencesPanel() { return userPreferences; }
/** return the JPanel to use for the project preferences. */
public JPanel getProjectPreferencesPanel() { return projectPreferences; }
/** return the name of this preferences tab. */
public String getName() { return "Parasitic"; }
/**
* Method called at the start of the dialog.
* Caches current values and displays them in the Routing tab.
*/
public void init()
{
// user preferences
verboseNaming.setSelected(SimulationTool.isParasiticsUseVerboseNaming());
backannotateLayout.setSelected(SimulationTool.isParasiticsBackAnnotateLayout());
extractPowerGround.setSelected(SimulationTool.isParasiticsExtractPowerGround());
extractPowerGround.setEnabled(false);
useExemptedNetsFile.setSelected(SimulationTool.isParasiticsUseExemptedNetsFile());
ignoreExemptedNets.setEnabled(useExemptedNetsFile.isSelected());
extractExemptedNets.setEnabled(useExemptedNetsFile.isSelected());
ignoreExemptedNets.setSelected(SimulationTool.isParasiticsIgnoreExemptedNets());
extractExemptedNets.setSelected(!SimulationTool.isParasiticsIgnoreExemptedNets());
extractR.setSelected(SimulationTool.isParasiticsExtractsR());
extractC.setSelected(SimulationTool.isParasiticsExtractsC());
// the parasitics panel (not visible)
maxDistValue.setText(TextUtils.formatDistance(ParasiticTool.getMaxDistance()));
parasiticPanel.setVisible(false);
// project preferences
changing = false;
layerListModel = new DefaultListModel();
layerList = new JList(layerListModel);
layerList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
spiceLayer.setViewportView(layerList);
layerList.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent evt) { layerListClick(); }
});
for(Iterator<Technology> it = Technology.getTechnologies(); it.hasNext(); )
{
Technology tech = it.next();
techSelection.addItem(tech.getTechName());
}
techSelection.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt) { techChanged(); }
});
techSelection.setSelectedItem(Technology.getCurrent().getTechName());
ParasiticLayerDocumentListener updateLayerParasitics = new ParasiticLayerDocumentListener();
resistance.getDocument().addDocumentListener(updateLayerParasitics);
capacitance.getDocument().addDocumentListener(updateLayerParasitics);
edgeCapacitance.getDocument().addDocumentListener(updateLayerParasitics);
ParasiticTechDocumentListener updateTechnologyGlobals = new ParasiticTechDocumentListener();
minResistance.getDocument().addDocumentListener(updateTechnologyGlobals);
minCapacitance.getDocument().addDocumentListener(updateTechnologyGlobals);
maxSeriesResistance.getDocument().addDocumentListener(updateTechnologyGlobals);
gateLengthSubtraction.getDocument().addDocumentListener(updateTechnologyGlobals);
includeGate.addActionListener(updateTechnologyGlobals);
includeGround.addActionListener(updateTechnologyGlobals);
}
/**
* Method called when the "OK" panel is hit.
* Updates any changed fields in the Routing tab.
*/
public void term()
{
ParasiticTool.setMaxDistance(TextUtils.atofDistance(maxDistValue.getText()));
boolean b = verboseNaming.isSelected();
if (b != SimulationTool.isParasiticsUseVerboseNaming()) SimulationTool.setParasiticsUseVerboseNaming(b);
b = backannotateLayout.isSelected();
if (b != SimulationTool.isParasiticsBackAnnotateLayout()) SimulationTool.setParasiticsBackAnnotateLayout(b);
b = extractPowerGround.isSelected();
if (b != SimulationTool.isParasiticsExtractPowerGround()) SimulationTool.setParasiticsExtractPowerGround(b);
b = useExemptedNetsFile.isSelected();
if (b != SimulationTool.isParasiticsUseExemptedNetsFile()) SimulationTool.setParasiticsUseExemptedNetsFile(b);
b = ignoreExemptedNets.isSelected();
SimulationTool.setParasiticsIgnoreExemptedNets(b);
b = extractR.isSelected();
if (b != SimulationTool.isParasiticsExtractsR())
SimulationTool.setParasiticsExtractsR(b);
b = extractC.isSelected();
if (b != SimulationTool.isParasiticsExtractsC())
SimulationTool.setParasiticsExtractsC(b);
}
/**
* Method called when the factory reset is requested.
*/
public void reset()
{
// user preferences
if (SimulationTool.isFactoryParasiticsUseVerboseNaming() != SimulationTool.isParasiticsUseVerboseNaming())
SimulationTool.setParasiticsUseVerboseNaming(SimulationTool.isFactoryParasiticsUseVerboseNaming());
if (SimulationTool.isFactoryParasiticsBackAnnotateLayout() != SimulationTool.isParasiticsBackAnnotateLayout())
SimulationTool.setParasiticsBackAnnotateLayout(SimulationTool.isFactoryParasiticsBackAnnotateLayout());
if (SimulationTool.isFactoryParasiticsExtractPowerGround() != SimulationTool.isParasiticsExtractPowerGround())
SimulationTool.setParasiticsExtractPowerGround(SimulationTool.isFactoryParasiticsExtractPowerGround());
if (SimulationTool.isFactoryParasiticsUseExemptedNetsFile() != SimulationTool.isParasiticsUseExemptedNetsFile())
SimulationTool.setParasiticsUseExemptedNetsFile(SimulationTool.isFactoryParasiticsUseExemptedNetsFile());
if (SimulationTool.isFactoryParasiticsIgnoreExemptedNets() != SimulationTool.isParasiticsIgnoreExemptedNets())
SimulationTool.setParasiticsIgnoreExemptedNets(SimulationTool.isFactoryParasiticsIgnoreExemptedNets());
if (SimulationTool.isFactoryParasiticsExtractsR() != SimulationTool.isParasiticsExtractsR())
SimulationTool.setParasiticsExtractsR(SimulationTool.isFactoryParasiticsExtractsR());
if (SimulationTool.isFactoryParasiticsExtractsC() != SimulationTool.isParasiticsExtractsC())
SimulationTool.setParasiticsExtractsC(SimulationTool.isFactoryParasiticsExtractsC());
if (ParasiticTool.getFactoryMaxDistance() != ParasiticTool.getMaxDistance())
ParasiticTool.setMaxDistance(ParasiticTool.getFactoryMaxDistance());
}
private void techChanged()
{
String techName = (String)techSelection.getSelectedItem();
Technology tech = Technology.findTechnology(techName);
if (tech == null) return;
changing = true;
minResistance.setText(getFormattedDouble(tech.getMinResistanceSetting()));
minCapacitance.setText(getFormattedDouble(tech.getMinCapacitanceSetting()));
gateLengthSubtraction.setText(TextUtils.formatDistance(getDouble(tech.getGateLengthSubtractionSetting())));
maxSeriesResistance.setText(getFormattedDouble(tech.getMaxSeriesResistanceSetting()));
includeGate.setSelected(getBoolean(tech.getGateIncludedSetting()));
includeGround.setSelected(getBoolean(tech.getGroundNetIncludedSetting()));
layerListModel.clear();
for(Iterator<Layer> it = tech.getLayers(); it.hasNext(); )
{
Layer layer = it.next();
layerListModel.addElement(layer.getName());
}
layerList.setSelectedIndex(0);
layerListClick();
changing = false;
}
private void layerListClick()
{
String techName = (String)techSelection.getSelectedItem();
Technology tech = Technology.findTechnology(techName);
if (tech == null) return;
changing = true;
String layerName = (String)layerList.getSelectedValue();
Layer layer = tech.findLayer(layerName);
if (layer != null)
{
resistance.setText(getFormattedDouble(layer.getResistanceSetting()));
capacitance.setText(getFormattedDouble(layer.getCapacitanceSetting()));
edgeCapacitance.setText(getFormattedDouble(layer.getEdgeCapacitanceSetting()));
}
changing = false;
}
/**
* Class to handle special changes to per-layer parasitics.
*/
private class ParasiticLayerDocumentListener implements DocumentListener
{
private void change()
{
if (changing) return;
// get the currently selected layer
String techName = (String)techSelection.getSelectedItem();
Technology tech = Technology.findTechnology(techName);
if (tech == null) return;
String layerName = (String)layerList.getSelectedValue();
Layer layer = tech.findLayer(layerName);
if (layer == null) return;
setDouble(layer.getResistanceSetting(), TextUtils.atof(resistance.getText()));
setDouble(layer.getCapacitanceSetting(), TextUtils.atof(capacitance.getText()));
setDouble(layer.getEdgeCapacitanceSetting(), TextUtils.atof(edgeCapacitance.getText()));
}
public void changedUpdate(DocumentEvent e) { change(); }
public void insertUpdate(DocumentEvent e) { change(); }
public void removeUpdate(DocumentEvent e) { change(); }
}
/**
* Class to handle special changes to per-layer parasitics.
*/
private class ParasiticTechDocumentListener implements ActionListener, DocumentListener {
public void actionPerformed(ActionEvent evt) { updateTechnologyGlobals(); }
public void changedUpdate(DocumentEvent e) { updateTechnologyGlobals(); }
public void insertUpdate(DocumentEvent e) { updateTechnologyGlobals(); }
public void removeUpdate(DocumentEvent e) { updateTechnologyGlobals(); }
private void updateTechnologyGlobals() {
if (changing) return;
String techName = (String)techSelection.getSelectedItem();
Technology tech = Technology.findTechnology(techName);
if (tech == null) return;
setDouble(tech.getMinResistanceSetting(), TextUtils.atof(minResistance.getText()));
setDouble(tech.getMinCapacitanceSetting(),TextUtils.atof(minCapacitance.getText()));
setDouble(tech.getGateLengthSubtractionSetting(), TextUtils.atofDistance(gateLengthSubtraction.getText()));
setDouble(tech.getMaxSeriesResistanceSetting(), TextUtils.atof(maxSeriesResistance.getText()));
setBoolean(tech.getGateIncludedSetting(), includeGate.isSelected());
setBoolean(tech.getGroundNetIncludedSetting(), includeGround.isSelected());
}
}
/** 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.
*/
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
java.awt.GridBagConstraints gridBagConstraints;
exemptedNetsGroup = new javax.swing.ButtonGroup();
userPreferences = new javax.swing.JPanel();
parasiticPanel = new javax.swing.JPanel();
maxDist = new javax.swing.JLabel();
maxDistValue = new javax.swing.JTextField();
simpleParasiticOptions = new javax.swing.JPanel();
verboseNaming = new javax.swing.JCheckBox();
backannotateLayout = new javax.swing.JCheckBox();
extractPowerGround = new javax.swing.JCheckBox();
useExemptedNetsFile = new javax.swing.JCheckBox();
ignoreExemptedNets = new javax.swing.JRadioButton();
extractExemptedNets = new javax.swing.JRadioButton();
extractR = new javax.swing.JCheckBox();
extractC = new javax.swing.JCheckBox();
projectPreferences = new javax.swing.JPanel();
techValues = new javax.swing.JPanel();
spiceLayer = new javax.swing.JScrollPane();
jLabel7 = new javax.swing.JLabel();
jLabel11 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
resistance = new javax.swing.JTextField();
jLabel12 = new javax.swing.JLabel();
capacitance = new javax.swing.JTextField();
edgeCapacitance = new javax.swing.JTextField();
globalValues = new javax.swing.JPanel();
jLabel20 = new javax.swing.JLabel();
minResistance = new javax.swing.JTextField();
jLabel21 = new javax.swing.JLabel();
minCapacitance = new javax.swing.JTextField();
jLabel5 = new javax.swing.JLabel();
gateLengthSubtraction = new javax.swing.JTextField();
includeGate = new javax.swing.JCheckBox();
includeGround = new javax.swing.JCheckBox();
jLabel1 = new javax.swing.JLabel();
maxSeriesResistance = new javax.swing.JTextField();
jLabel3 = new javax.swing.JLabel();
techSelection = new javax.swing.JComboBox();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
getContentPane().setLayout(new java.awt.GridBagLayout());
userPreferences.setLayout(new java.awt.GridBagLayout());
parasiticPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Coupling Parasitics"));
parasiticPanel.setEnabled(false);
parasiticPanel.setLayout(new java.awt.GridBagLayout());
maxDist.setText("Maximum distance (lambda)");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4);
parasiticPanel.add(maxDist, gridBagConstraints);
maxDistValue.setColumns(6);
maxDistValue.setText("20");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 0;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4);
parasiticPanel.add(maxDistValue, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 1;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
userPreferences.add(parasiticPanel, gridBagConstraints);
simpleParasiticOptions.setBorder(javax.swing.BorderFactory.createTitledBorder("Simple Parasitics"));
simpleParasiticOptions.setLayout(new java.awt.GridBagLayout());
verboseNaming.setText("Use Verbose Naming");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
simpleParasiticOptions.add(verboseNaming, gridBagConstraints);
backannotateLayout.setText("Back-Annotate Layout");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
simpleParasiticOptions.add(backannotateLayout, gridBagConstraints);
extractPowerGround.setText("Extract Power/Ground");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
simpleParasiticOptions.add(extractPowerGround, gridBagConstraints);
useExemptedNetsFile.setText("Use exemptedNets.txt file");
useExemptedNetsFile.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
useExemptedNetsFileStateChanged(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 5;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
simpleParasiticOptions.add(useExemptedNetsFile, gridBagConstraints);
exemptedNetsGroup.add(ignoreExemptedNets);
ignoreExemptedNets.setText("Extract all but exempted nets");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 6;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(0, 10, 0, 0);
simpleParasiticOptions.add(ignoreExemptedNets, gridBagConstraints);
exemptedNetsGroup.add(extractExemptedNets);
extractExemptedNets.setText("Extract only exempted nets");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 7;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(0, 10, 0, 0);
simpleParasiticOptions.add(extractExemptedNets, gridBagConstraints);
extractR.setText("Extract R");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 3;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
simpleParasiticOptions.add(extractR, gridBagConstraints);
extractC.setText("Extract C");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 4;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
simpleParasiticOptions.add(extractC, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 0;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
userPreferences.add(simpleParasiticOptions, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
getContentPane().add(userPreferences, gridBagConstraints);
projectPreferences.setLayout(new java.awt.GridBagLayout());
techValues.setBorder(javax.swing.BorderFactory.createTitledBorder("Individual Layers"));
techValues.setLayout(new java.awt.GridBagLayout());
spiceLayer.setMinimumSize(new java.awt.Dimension(200, 50));
spiceLayer.setPreferredSize(new java.awt.Dimension(200, 50));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4);
techValues.add(spiceLayer, gridBagConstraints);
jLabel7.setText("Layer:");
jLabel7.setVerticalAlignment(javax.swing.SwingConstants.TOP);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
gridBagConstraints.insets = new java.awt.Insets(4, 4, 2, 4);
techValues.add(jLabel7, gridBagConstraints);
jLabel11.setText("Resistance:");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
gridBagConstraints.insets = new java.awt.Insets(2, 4, 2, 4);
techValues.add(jLabel11, gridBagConstraints);
jLabel2.setText("Perimeter Cap (fF/um):");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 4;
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
gridBagConstraints.insets = new java.awt.Insets(2, 4, 2, 4);
techValues.add(jLabel2, gridBagConstraints);
resistance.setColumns(8);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(2, 4, 2, 4);
techValues.add(resistance, gridBagConstraints);
jLabel12.setText("Area Cap (fF/um^2):");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 3;
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
gridBagConstraints.insets = new java.awt.Insets(2, 4, 2, 4);
techValues.add(jLabel12, gridBagConstraints);
capacitance.setColumns(8);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 3;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(2, 4, 2, 4);
techValues.add(capacitance, gridBagConstraints);
edgeCapacitance.setColumns(8);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 4;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(2, 4, 2, 4);
techValues.add(edgeCapacitance, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
projectPreferences.add(techValues, gridBagConstraints);
globalValues.setBorder(javax.swing.BorderFactory.createTitledBorder("For All Layers"));
globalValues.setLayout(new java.awt.GridBagLayout());
jLabel20.setText("Min. Resistance:");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
gridBagConstraints.insets = new java.awt.Insets(4, 4, 2, 4);
globalValues.add(jLabel20, gridBagConstraints);
minResistance.setColumns(8);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 0;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(4, 4, 2, 4);
globalValues.add(minResistance, gridBagConstraints);
jLabel21.setText("Min. Capacitance (fF):");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
gridBagConstraints.insets = new java.awt.Insets(4, 4, 2, 4);
globalValues.add(jLabel21, gridBagConstraints);
minCapacitance.setColumns(8);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 1;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
gridBagConstraints.insets = new java.awt.Insets(4, 4, 2, 4);
globalValues.add(minCapacitance, gridBagConstraints);
jLabel5.setText("Gate Length Shrink (Subtraction) um:");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 5;
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4);
globalValues.add(jLabel5, gridBagConstraints);
gateLengthSubtraction.setColumns(8);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 5;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4);
globalValues.add(gateLengthSubtraction, gridBagConstraints);
includeGate.setText("Include Gate In Resistance");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 3;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4);
globalValues.add(includeGate, gridBagConstraints);
includeGround.setText("Include Ground Network");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 4;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4);
globalValues.add(includeGround, gridBagConstraints);
jLabel1.setText("Max. Series Resistance: ");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
gridBagConstraints.insets = new java.awt.Insets(2, 4, 4, 4);
globalValues.add(jLabel1, gridBagConstraints);
maxSeriesResistance.setColumns(8);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(2, 4, 4, 4);
globalValues.add(maxSeriesResistance, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
projectPreferences.add(globalValues, gridBagConstraints);
jLabel3.setText("Technology:");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4);
projectPreferences.add(jLabel3, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 0;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4);
projectPreferences.add(techSelection, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
getContentPane().add(projectPreferences, gridBagConstraints);
pack();
}// </editor-fold>//GEN-END:initComponents
private void useExemptedNetsFileStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_useExemptedNetsFileStateChanged
ignoreExemptedNets.setEnabled(useExemptedNetsFile.isSelected());
extractExemptedNets.setEnabled(useExemptedNetsFile.isSelected());
}//GEN-LAST:event_useExemptedNetsFileStateChanged
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JCheckBox backannotateLayout;
private javax.swing.JTextField capacitance;
private javax.swing.JTextField edgeCapacitance;
private javax.swing.ButtonGroup exemptedNetsGroup;
private javax.swing.JCheckBox extractC;
private javax.swing.JRadioButton extractExemptedNets;
private javax.swing.JCheckBox extractPowerGround;
private javax.swing.JCheckBox extractR;
private javax.swing.JTextField gateLengthSubtraction;
private javax.swing.JPanel globalValues;
private javax.swing.JRadioButton ignoreExemptedNets;
private javax.swing.JCheckBox includeGate;
private javax.swing.JCheckBox includeGround;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel11;
private javax.swing.JLabel jLabel12;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel20;
private javax.swing.JLabel jLabel21;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel7;
private javax.swing.JLabel maxDist;
private javax.swing.JTextField maxDistValue;
private javax.swing.JTextField maxSeriesResistance;
private javax.swing.JTextField minCapacitance;
private javax.swing.JTextField minResistance;
private javax.swing.JPanel parasiticPanel;
private javax.swing.JPanel projectPreferences;
private javax.swing.JTextField resistance;
private javax.swing.JPanel simpleParasiticOptions;
private javax.swing.JScrollPane spiceLayer;
private javax.swing.JComboBox techSelection;
private javax.swing.JPanel techValues;
private javax.swing.JCheckBox useExemptedNetsFile;
private javax.swing.JPanel userPreferences;
private javax.swing.JCheckBox verboseNaming;
// End of variables declaration//GEN-END:variables
}