manipulateports.java
来自「The ElectricTM VLSI Design System is an 」· Java 代码 · 共 677 行 · 第 1/2 页
JAVA
677 行
/* -*- tab-width: 4 -*- * * Electric(tm) VLSI Design System * * File: ManipulatePorts.java * * Copyright (c) 2006 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.hierarchy.Cell;import com.sun.electric.database.hierarchy.Export;import com.sun.electric.database.text.TextUtils;import com.sun.electric.database.topology.Connection;import com.sun.electric.database.topology.NodeInst;import com.sun.electric.database.topology.PortInst;import com.sun.electric.database.variable.EditWindow_;import com.sun.electric.database.variable.UserInterface;import com.sun.electric.technology.ArcProto;import com.sun.electric.technology.technologies.Generic;import com.sun.electric.tool.Job;import com.sun.electric.tool.user.ExportChanges;import com.sun.electric.tool.user.Highlighter;import com.sun.electric.tool.user.ui.EditWindow;import com.sun.electric.tool.user.ui.TopLevel;import java.awt.Frame;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.Iterator;import java.util.List;import java.util.Map;import javax.swing.JTable;import javax.swing.table.AbstractTableModel;import javax.swing.table.JTableHeader;import javax.swing.table.TableColumn;import javax.swing.table.TableColumnModel;/** * Class to handle the "Manipulate Ports" dialog. */public class ManipulatePorts extends EDialog{ private static final String [] columnNames = {" ", "Name", "Characteristic", "Connections", "Arcs", "Exports"}; private class PortsTable extends JTable { private PortTableModel model; /** * Constructor for PortsTable */ public PortsTable(NodeInst ni) { model = new PortTableModel(ni); for(Iterator<PortInst> it = ni.getPortInsts(); it.hasNext(); ) { PortInst pi = it.next(); model.newVar(pi); } model.sortTable(1, true); setModel(model); TableColumn tc = getColumn(getColumnName(0)); if (tc != null) tc.setPreferredWidth(20); tc = getColumn(getColumnName(1)); if (tc != null) tc.setPreferredWidth(120); tc = getColumn(getColumnName(2)); if (tc != null) tc.setPreferredWidth(100); tc = getColumn(getColumnName(3)); if (tc != null) tc.setPreferredWidth(90); tc = getColumn(getColumnName(4)); if (tc != null) tc.setPreferredWidth(30); tc = getColumn(getColumnName(5)); if (tc != null) tc.setPreferredWidth(120); } public void toggleSelection() { int [] rows = getSelectedRows(); for(int i=0; i<rows.length; i++) { Boolean b = (Boolean)model.getValueAt(rows[i], 0); model.setValueAt(Boolean.valueOf(!b.booleanValue()), rows[i], 0); } } public PortTableModel getModel() { return model; } public void selectAll() { model.selectAll(); } public void deselectAll() { model.deselectAll(); } public void reExportSelected() { model.reExportSelected(); } public void unExportSelected() { model.unExportSelected(); } public void showSelected() { model.showSelected(); } } /** * Model for storing Table data */ private class PortTableModel extends AbstractTableModel { private NodeInst ni; private List<PortEntry> ports; private class PortEntry { private boolean selected; private PortInst pi; private PortEntry(PortInst pi) { this.pi = pi; } private PortInst getPort() { return pi; } private boolean isSelected() { return selected; } private void setSelected(boolean s) { selected = s; } private String getConnections() { ArcProto [] conns = pi.getPortProto().getBasePort().getConnections(); StringBuffer buf = new StringBuffer(); for(int i=0; i<conns.length; i++) { if (conns[i].getTechnology() == Generic.tech()) { if (ni.getProto().getTechnology() != Generic.tech()) continue; } if (buf.length() > 0) buf.append(", "); buf.append(conns[i].getName()); } return buf.toString(); } private int getNumArcs() { int num = 0; for(Iterator<Connection> it = pi.getNodeInst().getConnections(); it.hasNext(); ) { Connection con = it.next(); if (con.getPortInst() == pi) num++; } return num; } private String getExports() { StringBuffer buf = new StringBuffer(); for(Iterator<Export> it = pi.getNodeInst().getExports(); it.hasNext(); ) { Export e = it.next(); if (e.getOriginalPort() != pi) continue; if (buf.length() > 0) buf.append(", "); buf.append(e.getName()); } return buf.toString(); } } /** * Class to sort ports. */ public class PortEntrySort implements Comparator<PortEntry> { private int column; private boolean ascending; PortEntrySort(int column, boolean ascending) { this.column = column; this.ascending = ascending; } public int compare(PortEntry p1, PortEntry p2) { if (!ascending) { PortEntry swap = p1; p1 = p2; p2 = swap; } String s1 = null, s2 = null; switch (column) { case 0: boolean b1 = p1.isSelected(); boolean b2 = p2.isSelected(); if (b1 == b2) return 0; if (b1) return 1; return -1; case 1: s1 = p1.getPort().getPortProto().getName(); s2 = p2.getPort().getPortProto().getName(); break; case 2: s1 = p1.getPort().getPortProto().getCharacteristic().getName(); s2 = p2.getPort().getPortProto().getCharacteristic().getName(); return s1.compareTo(s2); case 3: s1 = p1.getConnections(); s2 = p2.getConnections(); break; case 4: int i1 = p1.getNumArcs(); int i2 = p2.getNumArcs(); if (i1 == 12) return 0; if (i1 < i2) return 1; return -1; case 5: s1 = p1.getExports(); s2 = p2.getExports(); break; } return TextUtils.STRING_NUMBER_ORDER.compare(s1, s2); } } // constructor private PortTableModel(NodeInst ni) { this.ni = ni; ports = new ArrayList<PortEntry>(); } /** * Create a new var with default properties */ public void newVar(PortInst pi) { PortEntry ve = new PortEntry(pi); ports.add(ve); } public void sortTable(int column, boolean ascending) { Collections.sort(ports, new PortEntrySort(column, ascending)); fireTableDataChanged(); } public void selectAll() { int i = 0; for(PortEntry pe : ports) { pe.setSelected(true); fireTableCellUpdated(i++, 0); } } public void deselectAll() { int i = 0; for(PortEntry pe : ports) { pe.setSelected(false); fireTableCellUpdated(i++, 0); } } public void reExportSelected() { List<PortInst> queuedExports = new ArrayList<PortInst>(); for(PortEntry pe : ports) { if (!pe.isSelected()) continue; queuedExports.add(pe.getPort()); } new ExportChanges.ReExportPorts(ni.getParent(), queuedExports, true, true, true, false, null); } public void unExportSelected() { List<Export> queuedExports = new ArrayList<Export>(); for(PortEntry pe : ports) { if (!pe.isSelected()) continue; for(Iterator<Export> eIt = pe.getPort().getExports(); eIt.hasNext(); ) { Export e = eIt.next(); queuedExports.add(e); } } ExportChanges.deleteExports(ni.getParent(), queuedExports); } public void showSelected() { UserInterface ui = Job.getUserInterface(); EditWindow_ wnd = ui.getCurrentEditWindow_(); if (wnd == null) return; wnd.clearHighlighting(); for(PortEntry pe : ports) { if (!pe.isSelected()) continue; wnd.addElectricObject(pe.getPort(), ni.getParent()); } wnd.finishedHighlighting(); } /** Method to get the number of columns. */ public int getColumnCount() { return 6; } /** Method to get the number of rows. */ public int getRowCount() { return ports.size(); } /** Method to get a location in the table. */ public Object getValueAt(int rowIndex, int columnIndex) { PortEntry pe = ports.get(rowIndex); if (pe == null) return null; switch (columnIndex) { // selected case 0: return Boolean.valueOf(pe.isSelected()); // name case 1: return pe.getPort().getPortProto().getName();
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?