/* -*- tab-width: 4 -*-
*
* Electric(tm) VLSI Design System
*
* File: DRCTab.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.tool.drc.DRC;
import com.sun.electric.tool.user.dialogs.PreferencesFrame;
import com.sun.electric.tool.user.ui.ClickZoomWireListener;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JPanel;
/**
* Class to handle the "DRC" tab of the Preferences dialog.
*/
public class DRCTab extends PreferencePanel
{
/** Creates new form DRCTab */
public DRCTab(PreferencesFrame parent, boolean modal)
{
super(parent, modal);
initComponents();
}
/** return the panel to use for the user preferences. */
@Override
public JPanel getUserPreferencesPanel() { return drc; }
/** return the name of this preferences tab. */
@Override
public String getName() { return "DRC"; }
private boolean requestedDRCClearDates;
/**
* Method called at the start of the dialog.
* Caches current values and displays them in the DRC tab.
*/
@Override
public void init()
{
DRC.DRCPreferences dp = new DRC.DRCPreferences(false);
drcIncrementalOn.setSelected(dp.incrementalDRC);
drcInteractiveDrag.setSelected(dp.interactiveDRCDrag);
switch (dp.errorType)
{
case ERROR_CHECK_DEFAULT: drcErrorDefault.setSelected(true); break;
case ERROR_CHECK_CELL: drcErrorCell.setSelected(true); break;
case ERROR_CHECK_EXHAUSTIVE: drcErrorExaustive.setSelected(true); break;
}
// Setting looging type
loggingCombo.removeAllItems();
for (DRC.DRCCheckLogging type : DRC.DRCCheckLogging.values())
loggingCombo.addItem(type);
loggingCombo.setSelectedItem(dp.errorLoggingType);
// Setting minArea algorithm
areaAlgoCombo.removeAllItems();
for (DRC.DRCCheckMinArea type : DRC.DRCCheckMinArea.values())
areaAlgoCombo.addItem(type);
areaAlgoCombo.setSelectedItem(dp.minAreaAlgoOption);
drcIgnoreCenterCuts.setSelected(dp.ignoreCenterCuts);
// MinArea rules
drcIgnoreArea.setSelected(dp.ignoreAreaCheck);
// PolySelec rule
drcIgnoreExtensionRules.setSelected(dp.ignoreExtensionRuleChecking);
// DRC dates in memory stored
drcDateOnCells.setSelected(!dp.storeDatesInMemory);
// Interactive logging
drcInteractive.setSelected(dp.interactiveLog);
requestedDRCClearDates = false;
drcClearValidDates.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
drcClearValidDates.setEnabled(false);
requestedDRCClearDates = true;
}
});
// Setting the multi-threaded option
drcMultiDRC.setSelected(dp.isMultiThreaded);
}
/**
* Method called when the "OK" panel is hit.
* Updates any changed fields in the DRC tab.
*/
@Override
public void term()
{
DRC.DRCPreferences dp = new DRC.DRCPreferences(false);
dp.incrementalDRC = drcIncrementalOn.isSelected();
dp.interactiveDRCDrag = drcInteractiveDrag.isSelected();
if (drcErrorDefault.isSelected())
dp.errorType = DRC.DRCCheckMode.ERROR_CHECK_DEFAULT;
else if (drcErrorCell.isSelected())
dp.errorType = DRC.DRCCheckMode.ERROR_CHECK_CELL;
else if (drcErrorExaustive.isSelected())
dp.errorType = DRC.DRCCheckMode.ERROR_CHECK_EXHAUSTIVE;
// Checking the logging type
dp.errorLoggingType = (DRC.DRCCheckLogging)loggingCombo.getSelectedItem();
// Checking the logging type
dp.minAreaAlgoOption = (DRC.DRCCheckMinArea)areaAlgoCombo.getSelectedItem();
// Checking center cuts
dp.ignoreCenterCuts = drcIgnoreCenterCuts.isSelected();
// For min area rules
dp.ignoreAreaCheck = drcIgnoreArea.isSelected();
// Poly Select rule
dp.ignoreExtensionRuleChecking = drcIgnoreExtensionRules.isSelected();
// DRC dates in memory
dp.storeDatesInMemory = !drcDateOnCells.isSelected();
// Interactive logging
dp.interactiveLog = drcInteractive.isSelected();
if (requestedDRCClearDates) DRC.resetDRCDates(true);
// drcMultiDRC.setSelected(DRC.isMultiThreaded());
// Setting MTDRC option
dp.isMultiThreaded = drcMultiDRC.isSelected();
putPrefs(dp);
ClickZoomWireListener.theOne.readPrefs();
}
/**
* Method called when the factory reset is requested.
*/
@Override
public void reset()
{
DRC.DRCPreferences factoryDp = new DRC.DRCPreferences(true);
DRC.DRCPreferences dp = new DRC.DRCPreferences(false);
dp.incrementalDRC = factoryDp.incrementalDRC;
dp.interactiveDRCDrag = factoryDp.interactiveDRCDrag;
dp.errorType = factoryDp.errorType;
dp.errorLoggingType = factoryDp.errorLoggingType;
dp.isMultiThreaded = factoryDp.isMultiThreaded;
dp.storeDatesInMemory = factoryDp.storeDatesInMemory;
dp.ignoreCenterCuts = factoryDp.ignoreCenterCuts;
dp.ignoreAreaCheck = factoryDp.ignoreAreaCheck;
dp.ignoreExtensionRuleChecking = factoryDp.ignoreExtensionRuleChecking;
dp.interactiveLog = factoryDp.interactiveLog;
dp.minAreaAlgoOption = factoryDp.minAreaAlgoOption;
putPrefs(dp);
ClickZoomWireListener.theOne.readPrefs();
}
/** 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;
errorTypeGroup = new javax.swing.ButtonGroup();
drc = new javax.swing.JPanel();
IncrPanel = new javax.swing.JPanel();
drcIncrementalOn = new javax.swing.JCheckBox();
drcInteractiveDrag = new javax.swing.JCheckBox();
HierPanel = new javax.swing.JPanel();
jPanel1 = new javax.swing.JPanel();
drcErrorExaustive = new javax.swing.JRadioButton();
drcErrorDefault = new javax.swing.JRadioButton();
drcErrorCell = new javax.swing.JRadioButton();
loggingLabel = new javax.swing.JLabel();
loggingCombo = new javax.swing.JComboBox();
drcMultiDRC = new javax.swing.JCheckBox();
BothPanel = new javax.swing.JPanel();
drcIgnoreCenterCuts = new javax.swing.JCheckBox();
drcIgnoreExtensionRules = new javax.swing.JCheckBox();
drcIgnoreArea = new javax.swing.JCheckBox();
drcDateOnCells = new javax.swing.JCheckBox();
drcInteractive = new javax.swing.JCheckBox();
drcClearValidDates = new javax.swing.JButton();
areaAlgoLabel = new javax.swing.JLabel();
areaAlgoCombo = new javax.swing.JComboBox();
setTitle("Tool Options");
setName(""); // NOI18N
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
closeDialog(evt);
}
});
getContentPane().setLayout(new java.awt.GridBagLayout());
drc.setLayout(new java.awt.GridBagLayout());
IncrPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Incremental DRC"));
IncrPanel.setLayout(new java.awt.GridBagLayout());
drcIncrementalOn.setText("On");
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, 2, 4);
IncrPanel.add(drcIncrementalOn, gridBagConstraints);
drcInteractiveDrag.setText("Show worst violation while moving nodes and arcs");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(2, 4, 4, 4);
IncrPanel.add(drcInteractiveDrag, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
drc.add(IncrPanel, gridBagConstraints);
HierPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Hierarchical DRC"));
HierPanel.setLayout(new java.awt.GridBagLayout());
jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Report Type"));
jPanel1.setLayout(new java.awt.GridBagLayout());
errorTypeGroup.add(drcErrorExaustive);
drcErrorExaustive.setText("Report all errors");
drcErrorExaustive.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(1, 4, 4, 4);
jPanel1.add(drcErrorExaustive, gridBagConstraints);
errorTypeGroup.add(drcErrorDefault);
drcErrorDefault.setSelected(true);
drcErrorDefault.setText("Report just 1 error per pair of geometries");
drcErrorDefault.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(1, 4, 1, 4);
jPanel1.add(drcErrorDefault, gridBagConstraints);
errorTypeGroup.add(drcErrorCell);
drcErrorCell.setText("Report just 1 error per cell");
drcErrorCell.setAutoscrolls(true);
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, 1, 4);
jPanel1.add(drcErrorCell, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.gridwidth = 2;
HierPanel.add(jPanel1, gridBagConstraints);
loggingLabel.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
loggingLabel.setText("Report Errors: ");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
HierPanel.add(loggingLabel, gridBagConstraints);
loggingCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
loggingCombo.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
loggingComboActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
HierPanel.add(loggingCombo, gridBagConstraints);
drcMultiDRC.setText("Multi-threaded DRC");
drcMultiDRC.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
drcMultiDRCActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 5;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(1, 4, 4, 4);
HierPanel.add(drcMultiDRC, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
drc.add(HierPanel, gridBagConstraints);
BothPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Incremental and Hierarchical"));
BothPanel.setLayout(new java.awt.GridBagLayout());
drcIgnoreCenterCuts.setText("Ignore center cuts in large contacts");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(4, 4, 1, 4);
BothPanel.add(drcIgnoreCenterCuts, gridBagConstraints);
drcIgnoreExtensionRules.setText("Ignore extension rules");
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(1, 4, 1, 4);
BothPanel.add(drcIgnoreExtensionRules, gridBagConstraints);
drcIgnoreArea.setText("Ignore area checking");
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(1, 4, 1, 4);
BothPanel.add(drcIgnoreArea, gridBagConstraints);
drcDateOnCells.setText("Save valid DRC dates with cells");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(4, 4, 1, 4);
BothPanel.add(drcDateOnCells, gridBagConstraints);
drcInteractive.setText("Interactive Logging");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 5;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(1, 4, 4, 4);
BothPanel.add(drcInteractive, gridBagConstraints);
drcClearValidDates.setText("Clear valid DRC dates");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(1, 30, 4, 4);
BothPanel.add(drcClearValidDates, gridBagConstraints);
areaAlgoLabel.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
areaAlgoLabel.setText("MinArea Algorithm: ");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 6;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
BothPanel.add(areaAlgoLabel, gridBagConstraints);
areaAlgoCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
areaAlgoCombo.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
areaAlgoComboActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 6;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
BothPanel.add(areaAlgoCombo, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
drc.add(BothPanel, gridBagConstraints);
getContentPane().add(drc, new java.awt.GridBagConstraints());
pack();
}// </editor-fold>//GEN-END:initComponents
private void areaAlgoComboActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_areaAlgoComboActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_areaAlgoComboActionPerformed
private void loggingComboActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_loggingComboActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_loggingComboActionPerformed
/** Closes the dialog */
private void closeDialog(java.awt.event.WindowEvent evt)//GEN-FIRST:event_closeDialog
{
setVisible(false);
dispose();
}//GEN-LAST:event_closeDialog
private void drcMultiDRCActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_drcMultiDRCActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_drcMultiDRCActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JPanel BothPanel;
private javax.swing.JPanel HierPanel;
private javax.swing.JPanel IncrPanel;
private javax.swing.JComboBox areaAlgoCombo;
private javax.swing.JLabel areaAlgoLabel;
private javax.swing.JPanel drc;
private javax.swing.JButton drcClearValidDates;
private javax.swing.JCheckBox drcDateOnCells;
private javax.swing.JRadioButton drcErrorCell;
private javax.swing.JRadioButton drcErrorDefault;
private javax.swing.JRadioButton drcErrorExaustive;
private javax.swing.JCheckBox drcIgnoreArea;
private javax.swing.JCheckBox drcIgnoreCenterCuts;
private javax.swing.JCheckBox drcIgnoreExtensionRules;
private javax.swing.JCheckBox drcIncrementalOn;
private javax.swing.JCheckBox drcInteractive;
private javax.swing.JCheckBox drcInteractiveDrag;
private javax.swing.JCheckBox drcMultiDRC;
private javax.swing.ButtonGroup errorTypeGroup;
private javax.swing.JPanel jPanel1;
private javax.swing.JComboBox loggingCombo;
private javax.swing.JLabel loggingLabel;
// End of variables declaration//GEN-END:variables
}