/* -*- tab-width: 4 -*- * * Electric(tm) VLSI Design System * * File: CrossLibCopy.java * * Copyright (c) 2003 Sun Microsystems and Static Free Software * * 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; import com.sun.electric.database.IdMapper; import com.sun.electric.database.hierarchy.Cell; import com.sun.electric.database.hierarchy.Library; import com.sun.electric.database.id.CellId; import com.sun.electric.tool.Job; import com.sun.electric.tool.JobException; import com.sun.electric.tool.user.CellChangeJobs; import com.sun.electric.tool.user.User; import java.awt.Frame; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import javax.swing.BoundedRangeModel; import javax.swing.DefaultListModel; import javax.swing.JComboBox; import javax.swing.JList; import javax.swing.JScrollBar; import javax.swing.ListSelectionModel; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; /** * Class to handle the "Cross-Library Copy" dialog. */ public class CrossLibCopy extends EDialog { private List<Library> libList; private List<Cell> cellListLeft, cellListRight; private JList listLeft, listRight, listCenter; private DefaultListModel modelLeft, modelRight, modelCenter; private static Library curLibLeft = null, curLibRight = null; private static boolean lastDeleteAfterCopy = false; private static boolean lastCopyRelated = false; private static boolean lastCopySubcells = false; private static boolean lastUseExisting = true; // Class to synchronize the 3 scrollbars in dialog private class CrossLibScrollBarListener implements ChangeListener { private JScrollBar[] scrollBarList; protected boolean blocked = false; public CrossLibScrollBarListener(JScrollBar[] bars) { scrollBarList = new JScrollBar[2]; System.arraycopy(bars, 0, scrollBarList, 0, bars.length); } public void stateChanged(ChangeEvent evt) { if (blocked) return; blocked = true; BoundedRangeModel sourceScroll = (BoundedRangeModel)evt.getSource(); int iSMin = sourceScroll.getMinimum(); int iSMax = sourceScroll.getMaximum(); int iSDiff = iSMax - iSMin; int iSVal = sourceScroll.getValue(); int iDMin = cellsLeft.getVerticalScrollBar().getMinimum(); int iDMax = cellsLeft.getVerticalScrollBar().getMaximum(); int iDDiff = iDMax - iDMin; int iDVal = (iSDiff == iDDiff) ? iSVal : (iDDiff * iSVal) / iSDiff; for (int i = 0; i < scrollBarList.length; i++) scrollBarList[i].setValue(iDVal); blocked = false; } } /** Creates new form CrossLibCopy */ public CrossLibCopy(Frame parent) { super(parent, true); initComponents(); // determine the two libraries to show libList = Library.getVisibleLibraries(); if (curLibLeft == null) curLibLeft = Library.getCurrent(); if (curLibRight == null) curLibRight = Library.getCurrent(); if (curLibLeft == curLibRight) { for(Library lib : libList) { if (lib != curLibLeft) { curLibRight = lib; break; } } } // setup the library popups Library saveLeft = curLibLeft, saveRight = curLibRight; for(Library lib : libList) { librariesLeft.addItem(lib.getName()); librariesRight.addItem(lib.getName()); } int curIndex = libList.indexOf(saveLeft); if (curIndex >= 0) librariesLeft.setSelectedIndex(curIndex); curIndex = libList.indexOf(saveRight); if (curIndex >= 0) librariesRight.setSelectedIndex(curIndex); // make the left list modelLeft = new DefaultListModel(); listLeft = new JList(modelLeft); listLeft.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); // SINGLE_SELECTION); cellsLeft.setViewportView(listLeft); listLeft.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent evt) { leftListClick(evt); } }); // make the right list modelRight = new DefaultListModel(); listRight = new JList(modelRight); listRight.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); cellsRight.setViewportView(listRight); listRight.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent evt) { rightListClick(evt); } }); // make the center list modelCenter = new DefaultListModel(); listCenter = new JList(modelCenter); listCenter.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); center.setViewportView(listCenter); listCenter.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent evt) { centerListClick(evt); } }); showCells(false); // show the check boxes if (lastCopySubcells) { lastUseExisting = true; useExistingSubcells.setEnabled(false); } deleteAfterCopy.setSelected(lastDeleteAfterCopy); copyRelatedViews.setSelected(lastCopyRelated); copySubcells.setSelected(lastCopySubcells); useExistingSubcells.setSelected(lastUseExisting); // TO syncronize scroll bars JScrollBar[] scrollArray1 = {cellsRight.getVerticalScrollBar(), center.getVerticalScrollBar()}; cellsLeft.getVerticalScrollBar().getModel().addChangeListener(new CrossLibScrollBarListener(scrollArray1)); JScrollBar[] scrollArray2 = {cellsLeft.getVerticalScrollBar(), center.getVerticalScrollBar()}; cellsRight.getVerticalScrollBar().getModel().addChangeListener(new CrossLibScrollBarListener(scrollArray2)); JScrollBar[] scrollArray3 = {cellsLeft.getVerticalScrollBar(), cellsRight.getVerticalScrollBar()}; center.getVerticalScrollBar().getModel().addChangeListener(new CrossLibScrollBarListener(scrollArray3)); finishInitialization(); } private void leftListClick(MouseEvent evt) { int[] indices = listLeft.getSelectedIndices(); listCenter.setSelectedIndices(indices); listRight.setSelectedIndices(indices); } private void rightListClick(MouseEvent evt) { int[] indices = listRight.getSelectedIndices(); listLeft.setSelectedIndices(indices); listCenter.setSelectedIndices(indices); } private void centerListClick(MouseEvent evt) { int[] indices = listCenter.getSelectedIndices(); listLeft.setSelectedIndices(indices); listRight.setSelectedIndices(indices); } private void showCells(boolean report) { if (modelLeft == null || modelRight == null || modelCenter == null) return; cellListLeft = new ArrayList<Cell>(); for (Iterator<Cell> it = curLibLeft.getCells(); it.hasNext(); ) cellListLeft.add(it.next()); cellListRight = new ArrayList<Cell>(); for (Iterator<Cell> it = curLibRight.getCells(); it.hasNext(); ) cellListRight.add(it.next()); modelLeft.clear(); modelRight.clear(); modelCenter.clear(); boolean examineContents = compareContent.isSelected(); // put out the parallel list of cells in the two libraries int leftPos = 0, rightPos = 0; int leftCount = cellListLeft.size(); int rightCount = cellListRight.size(); for(;;) { int op; if (leftPos >= leftCount && rightPos >= rightCount) break; if (leftPos >= leftCount) op = 2; else if (rightPos >= rightCount) op = 1; else { Cell leftCell = cellListLeft.get(leftPos); Cell rightCell = cellListRight.get(rightPos); int j = leftCell.getCellName().compareTo(rightCell.getCellName()); if (j < 0) op = 1; else if (j > 0) op = 2; else op = 3; } String leftName = " "; Cell leftCell = null; if (op == 1 || op == 3) { leftCell = cellListLeft.get(leftPos++); leftName = leftCell.noLibDescribe(); } modelLeft.addElement(leftName); String rightName = " "; Cell rightCell = null; if (op == 2 || op == 3) { rightCell = cellListRight.get(rightPos++); rightName = rightCell.noLibDescribe(); } modelRight.addElement(rightName); String pt = " "; if (op == 3) { int compare = leftCell.getRevisionDate().compareTo(rightCell.getRevisionDate()); StringBuffer buffer = null; boolean result = true; String message = ""; if (examineContents) { if (report) buffer = new StringBuffer("\n"); result = leftCell.compare(rightCell, buffer); // This message is only valid if the content is compared. message = (result) ? "(but contents are the same)" : "(and contents are different)"; } if (compare > 0) { pt = (result) ? "<-New" : "<-New/Diff"; if (report) System.out.println(curLibLeft.getName() + ":" + leftName + " NEWER THAN " + curLibRight.getName() + ":" + rightName + message + ":" + ((buffer != null) ? buffer.toString() : "\n")); } else if (compare < 0) { pt = (result) ? " New->" : " Diff/New->"; if (report) System.out.println(curLibRight.getName() + ":" + rightName + " NEWER THAN " + curLibLeft.getName() + ":" + leftName + message + ":" + ((buffer != null) ? buffer.toString() : "\n")); } else { pt = (result) ? "-Same-" : "-Diff -"; if (!result && report) System.out.println(curLibLeft.getName() + ":" + leftName + " DIFFERS FROM " + curLibRight.getName() + ":" + rightName + ":" + ((buffer != null) ? buffer.toString() : "\n")); } } modelCenter.addElement(pt); } } // // Class to compare two cells // private static class CrossLibraryExamineJob extends Job // { // private Cell leftC; // private Cell rightC; // private boolean reportResults; // to report to std output the comparison // private boolean result; // private StringBuffer buffer; // // private CrossLibraryExamineJob(Cell left, Cell right, boolean report) // { // super("Cross-Library examine", User.getUserTool(), Job.Type.EXAMINE, null, null, Job.Priority.USER); // this.leftC = left; // this.rightC = right; // this.reportResults = report; // startJob(); // } // // public boolean doIt() throws JobException // { // if (reportResults) // buffer = new StringBuffer("Cells '" + leftC.libDescribe() + "' and '" + rightC.libDescribe() + ":"); // result = (leftC != null && leftC.compare(rightC, buffer)); // // if (reportResults) // { // if (result) // buffer.append("Do not differ"); // System.out.println(buffer); // } // return (true); // } // public boolean getResult() { return (result); } // public StringBuffer getDifference() { return (buffer); } // } public static class CrossLibraryCopyJob extends Job { private List<Cell> fromCells; private Library toLibrary; private transient CrossLibCopy dialog; private boolean deleteAfter, copyRelated, copySubs, useExisting; private int index; private IdMapper idMapper; private Map<CellId,Cell> newCells = new HashMap<CellId,Cell>(); public CrossLibraryCopyJob(List<Cell> fromCells, Library toLibrary, CrossLibCopy dialog, boolean deleteAfter, boolean copyRelated, boolean copySubs, boolean useExisting) { super("Cross-Library copy", User.getUserTool(), Job.Type.CHANGE, null, null, Job.Priority.USER); this.fromCells = fromCells; this.toLibrary = toLibrary; this.dialog = dialog; this.deleteAfter = deleteAfter; this.copyRelated = copyRelated; this.copySubs = copySubs; this.useExisting = useExisting; // remember the selection line if (dialog != null) index = dialog.listLeft.getSelectedIndex(); else index = -1; // use from the ExplorerTree startJob(); } public boolean doIt() throws JobException { // do the copy idMapper = CellChangeJobs.copyRecursively(fromCells, toLibrary, true, deleteAfter, copyRelated, copySubs, useExisting, newCells); fieldVariableChanged("idMapper"); fieldVariableChanged("newCells"); return true; } @Override public void terminateOK() { User.fixStaleCellReferences(idMapper); CellChangeJobs.copyExpandedStatus(newCells); if (dialog == null) return; // from ExplorerTree // reload the dialog dialog.showCells(false); // reselect the last selected line dialog.listLeft.setSelectedIndex(index); dialog.listRight.setSelectedIndex(index); dialog.listCenter.setSelectedIndex(index); } } /** 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; Top = new javax.swing.JPanel(); librariesLeft = new javax.swing.JComboBox(); librariesRight = new javax.swing.JComboBox(); copyLeft = new javax.swing.JButton(); copyRight = new javax.swing.JButton(); done = new javax.swing.JButton(); cellsLeft = new javax.swing.JScrollPane(); center = new javax.swing.JScrollPane(); cellsRight = new javax.swing.JScrollPane(); centerLabel = new javax.swing.JLabel(); Bottom = new javax.swing.JPanel(); BottomLeft = new javax.swing.JPanel(); compareContent = new javax.swing.JCheckBox(); compareQuite = new javax.swing.JCheckBox(); BottomCenter = new javax.swing.JPanel(); examineContents = new javax.swing.JButton(); BottomRight = new javax.swing.JPanel(); deleteAfterCopy = new javax.swing.JCheckBox(); copySubcells = new javax.swing.JCheckBox(); useExistingSubcells = new javax.swing.JCheckBox(); copyRelatedViews = new javax.swing.JCheckBox(); getContentPane().setLayout(new java.awt.BorderLayout(0, 10)); setTitle("Cross Library Copy"); setName(""); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { closeDialog(evt); } }); Top.setLayout(new java.awt.GridBagLayout()); librariesLeft.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { librariesLeftActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.insets = new java.awt.Insets(4, 4, 0, 4); Top.add(librariesLeft, gridBagConstraints); librariesRight.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { librariesRightActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.insets = new java.awt.Insets(4, 4, 0, 4); Top.add(librariesRight, gridBagConstraints); copyLeft.setText("<< Copy"); copyLeft.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { copyLeftActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 2; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); Top.add(copyLeft, gridBagConstraints); copyRight.setText("Copy >>"); copyRight.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { copyRightActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 2; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); Top.add(copyRight, gridBagConstraints); done.setText("Done"); done.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { doneActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 2; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); Top.add(done, gridBagConstraints); cellsLeft.setPreferredSize(new java.awt.Dimension(200, 350)); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 0.5; gridBagConstraints.weighty = 1.0; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); Top.add(cellsLeft, gridBagConstraints); center.setMinimumSize(new java.awt.Dimension(50, 200)); center.setOpaque(false); center.setPreferredSize(new java.awt.Dimension(50, 200)); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weighty = 1.0; gridBagConstraints.insets = new java.awt.Insets(4, 0, 4, 0); Top.add(center, gridBagConstraints); cellsRight.setPreferredSize(new java.awt.Dimension(200, 350)); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 0.5; gridBagConstraints.weighty = 1.0; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); Top.add(cellsRight, gridBagConstraints); centerLabel.setText("Date"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 0; Top.add(centerLabel, gridBagConstraints); getContentPane().add(Top, java.awt.BorderLayout.CENTER); BottomLeft.setLayout(new java.awt.GridBagLayout()); compareContent.setText("Date and content"); compareContent.addItemListener(new java.awt.event.ItemListener() { public void itemStateChanged(java.awt.event.ItemEvent evt) { compareContentItemStateChanged(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; BottomLeft.add(compareContent, gridBagConstraints); compareQuite.setSelected(true); compareQuite.setText("Examine quietly"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 2; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; BottomLeft.add(compareQuite, gridBagConstraints); Bottom.add(BottomLeft); BottomCenter.setLayout(new java.awt.GridBagLayout()); examineContents.setText("Compare"); examineContents.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { examineContentsActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); BottomCenter.add(examineContents, gridBagConstraints); Bottom.add(BottomCenter); BottomRight.setLayout(new java.awt.GridBagLayout()); deleteAfterCopy.setText("Delete after copy"); deleteAfterCopy.addItemListener(new java.awt.event.ItemListener() { public void itemStateChanged(java.awt.event.ItemEvent evt) { deleteAfterCopyItemStateChanged(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 2; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; BottomRight.add(deleteAfterCopy, gridBagConstraints); copySubcells.setText("Copy subcells"); copySubcells.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { copySubcellsActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 3; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; BottomRight.add(copySubcells, gridBagConstraints); useExistingSubcells.setText("Use existing subcells"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 4; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(0, 20, 0, 0); BottomRight.add(useExistingSubcells, gridBagConstraints); copyRelatedViews.setText("Copy all related views"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 5; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; BottomRight.add(copyRelatedViews, gridBagConstraints); Bottom.add(BottomRight); getContentPane().add(Bottom, java.awt.BorderLayout.SOUTH); pack(); }// </editor-fold>//GEN-END:initComponents private void copySubcellsActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_copySubcellsActionPerformed {//GEN-HEADEREND:event_copySubcellsActionPerformed if (copySubcells.isSelected()) { useExistingSubcells.setSelected(true); useExistingSubcells.setEnabled(false); } else { useExistingSubcells.setEnabled(true); } }//GEN-LAST:event_copySubcellsActionPerformed private void compareContentItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_compareContentItemStateChanged if (compareContent.isSelected()) { centerLabel.setText("Date/Content"); } else { centerLabel.setText("Date"); } // Clean any information modelCenter.clear(); // re-create data column again showCells(false); }//GEN-LAST:event_compareContentItemStateChanged private void deleteAfterCopyItemStateChanged(java.awt.event.ItemEvent evt)//GEN-FIRST:event_deleteAfterCopyItemStateChanged {//GEN-HEADEREND:event_deleteAfterCopyItemStateChanged if (deleteAfterCopy.isSelected()) { copyLeft.setText("<< Move"); copyRight.setText("Move >>"); } else { copyLeft.setText("<< Copy"); copyRight.setText("Copy >>"); } }//GEN-LAST:event_deleteAfterCopyItemStateChanged private void librariesRightActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_librariesRightActionPerformed {//GEN-HEADEREND:event_librariesRightActionPerformed // the right popup of libraies changed JComboBox cb = (JComboBox)evt.getSource(); int index = cb.getSelectedIndex(); curLibRight = libList.get(index); showCells(false); }//GEN-LAST:event_librariesRightActionPerformed private void librariesLeftActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_librariesLeftActionPerformed {//GEN-HEADEREND:event_librariesLeftActionPerformed // the left popup of libraies changed JComboBox cb = (JComboBox)evt.getSource(); int index = cb.getSelectedIndex(); curLibLeft = libList.get(index); showCells(false); }//GEN-LAST:event_librariesLeftActionPerformed private void examineContentsActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_examineContentsActionPerformed {//GEN-HEADEREND:event_examineContentsActionPerformed showCells(!compareQuite.isSelected()); }//GEN-LAST:event_examineContentsActionPerformed private void copyRightActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_copyRightActionPerformed {//GEN-HEADEREND:event_copyRightActionPerformed List<Cell> fromCells = new ArrayList<Cell>(); for (Object cellObj : listLeft.getSelectedValues()) { String cellName = (String)cellObj; Cell fromCell = curLibLeft.findNodeProto(cellName); if (fromCell == null) return; fromCells.add(fromCell); } new CrossLibraryCopyJob(fromCells, curLibRight, this, deleteAfterCopy.isSelected(), copyRelatedViews.isSelected(), copySubcells.isSelected(), useExistingSubcells.isSelected()); }//GEN-LAST:event_copyRightActionPerformed private void doneActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_doneActionPerformed {//GEN-HEADEREND:event_doneActionPerformed closeDialog(null); }//GEN-LAST:event_doneActionPerformed private void copyLeftActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_copyLeftActionPerformed {//GEN-HEADEREND:event_copyLeftActionPerformed List<Cell> fromCells = new ArrayList<Cell>(); for (Object cellObj : listRight.getSelectedValues()) { String cellName = (String)cellObj; Cell fromCell = curLibRight.findNodeProto(cellName); if (fromCell == null) return; fromCells.add(fromCell); } new CrossLibraryCopyJob(fromCells, curLibLeft, this, deleteAfterCopy.isSelected(), copyRelatedViews.isSelected(), copySubcells.isSelected(), useExistingSubcells.isSelected()); }//GEN-LAST:event_copyLeftActionPerformed /** Closes the dialog */ private void closeDialog(java.awt.event.WindowEvent evt)//GEN-FIRST:event_closeDialog { lastDeleteAfterCopy = deleteAfterCopy.isSelected(); lastCopyRelated = copyRelatedViews.isSelected(); lastCopySubcells = copySubcells.isSelected(); lastUseExisting = useExistingSubcells.isSelected(); setVisible(false); dispose(); }//GEN-LAST:event_closeDialog // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JPanel Bottom; private javax.swing.JPanel BottomCenter; private javax.swing.JPanel BottomLeft; private javax.swing.JPanel BottomRight; private javax.swing.JPanel Top; private javax.swing.JScrollPane cellsLeft; private javax.swing.JScrollPane cellsRight; private javax.swing.JScrollPane center; private javax.swing.JLabel centerLabel; private javax.swing.JCheckBox compareContent; private javax.swing.JCheckBox compareQuite; private javax.swing.JButton copyLeft; private javax.swing.JCheckBox copyRelatedViews; private javax.swing.JButton copyRight; private javax.swing.JCheckBox copySubcells; private javax.swing.JCheckBox deleteAfterCopy; private javax.swing.JButton done; private javax.swing.JButton examineContents; private javax.swing.JComboBox librariesLeft; private javax.swing.JComboBox librariesRight; private javax.swing.JCheckBox useExistingSubcells; // End of variables declaration//GEN-END:variables }