⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 exportassertiontable.java

📁 The ElectricTM VLSI Design System is an open-source Electronic Design Automation (EDA) system that c
💻 JAVA
字号:
/* -*- tab-width: 4 -*-** Electric(tm) VLSI Design System** File: ExportAssertionTable.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.ncc;import java.awt.Color;import javax.swing.BorderFactory;import javax.swing.JEditorPane;import javax.swing.JPanel;import javax.swing.JScrollPane;import com.sun.electric.database.hierarchy.Cell;import com.sun.electric.database.hierarchy.Export;import com.sun.electric.database.network.Network;import com.sun.electric.database.text.CellName;import com.sun.electric.database.variable.VarContext;import com.sun.electric.tool.user.Highlighter;/** * This class implements a table for Export Assertion Failures */class ExportAssertionTable extends ExportTable {        protected ExportAssertionFailures[] failures;        protected ExportAssertionTable(NccGuiInfo res) {        super(res, 2);        failures = result.getExportAssertionFailures().toArray(new ExportAssertionFailures[0]);        height = Math.min(failures.length, MAXROWS);        setup();                setModel(new AssertionTableModel(this));        getTableHeader().setReorderingAllowed(false);        getColumnModel().getColumn(0).addPropertyChangeListener(this);        getColumnModel().getColumn(1).addPropertyChangeListener(this);    }}/** * This class implements a table model for Export Assertion Failures table */class AssertionTableModel extends ExportTableModel {    ExportAssertionFailures[] failures;    int[][] cellPrefHeights = parent.cellPrefHeights;    int[][] cellPrefWidths  = parent.cellPrefWidths;    String[] colNames = {"Cell", "Exports"};        protected AssertionTableModel(ExportAssertionTable parent) {        super(parent);        failures = parent.failures;        cellPrefHeights = parent.cellPrefHeights;        cellPrefWidths  = parent.cellPrefWidths;                // fill table cells with HTML (JEditorPane)        StringBuffer text = new StringBuffer(64);        for (int col=0; col<numCols; col++)            for (int row=0; row<height; row++) {                Object[][] items = null;                if (col == 1) {                    items = failures[row].getExportsGlobals();                    if (items == null || items.length == 0) continue;                }                text.setLength(0);                text.append("<html><font size=3><font face=\"Helvetica, TimesRoman\">");                if (col == 0) {                    CellName cellName = failures[row].getCell().getCellName();                    text.append(cellName.getName() + " " + cellName.getView().getAbbreviationExtension());                    cellPrefHeights[row][0] += ExportTable.LINEHEIGHT;                } else {                    appendLinks(text, row);                                    }                text.append("</font></html>");                                JEditorPane textPane = new JEditorPane();                textPane.setEditable(false);                if (col == 1) textPane.addHyperlinkListener(this);                textPane.setContentType("text/html");                textPane.setText(text.toString());                textPane.setMargin(insets);                textPane.addMouseListener(mouseAdapter);                                    textPane.moveCaretPosition(0);                cellPrefWidths[row][col] = textPane.getPreferredSize().width + ExportTable.WIDTHMARGIN;                if (cellPrefHeights[row][col] > ExportTable.MAX_VISIBLE_LINES*ExportTable.LINEHEIGHT+ExportTable.HEIGHTMARGIN)                    cellPrefHeights[row][col] = ExportTable.MAX_VISIBLE_LINES*ExportTable.LINEHEIGHT+ExportTable.HEIGHTMARGIN;                JPanel panel = new JPanel();                panel.setBackground(Color.WHITE);                panel.add(textPane);                panes[row][col] = new JScrollPane(panel);                panes[row][col].setBorder(BorderFactory.createEmptyBorder());            }    }        /**     * A helper method for printing HTML hyperlinks to table cells.     * @param html  buffer to print to     * @param row  table row     */    private void appendLinks(StringBuffer html, int row) {        if (html == null || row < 0 || row > failures.length) return;        String[][] names = failures[row].getNames();        String href = "<a style=\"text-decoration: none\" href=\"";        int rowNdx = row*1000000;        for (int i = 0; i<names.length; i++) {            html.append("{ ");            int lineNdx = rowNdx + i*1000;             for (int j = 0; j<names[i].length; j++) {                int itemNdx = lineNdx + j;                html.append(href + itemNdx +"\">"+ names[i][j] +"</a>");                if (j < names[i].length-1) html.append(", ");            }            html.append(" }");            if (i < names.length-1) html.append("<br>");            cellPrefHeights[row][1] += ExportTable.LINEHEIGHT;        }    }        /**     * Highlight an export with the given index.     * @param index  export index     */    protected void highlight(int index) {        // decrypt index        int item = index%1000;   // position in line        int line = (index/1000)%1000;  // line in cell        int row  = index/1000000;  // row in table                ExportAssertionFailures eaf = failures[row];//        Object obj = eaf.getExportsGlobals()[line][item];        String nm = eaf.getNames()[line][item];        Cell cell = eaf.getCell();        VarContext context = eaf.getContext();                // find the highlighter corresponding to the cell        Highlighter highlighter = HighlightTools.getHighlighter(cell, context);        if (highlighter == null) return;                // I changed this to highlight nets rather than Exports.        // First, I don't know how to highlight Exports. Second,        // a net is finer grain; many nets may correspond to a single        // Export.        HighlightTools.highlightNetworkByName(highlighter, cell, nm);//        // find what to highlight //        if (obj instanceof Export) {//        	Export e = (Export) obj;//        	HighlightTools.highlightExportsByName(highlighter, cell, e.getName());//            highlighter.addText((Export)obj, cell, null);//        } else if (obj instanceof Network) {//            highlighter.addNetwork((Network)obj, cell);//        }        highlighter.finished();    }    /**     * Get column name     * @param col  column     * @return name of the column     */    public String getColumnName(int col) {        return colNames[col];    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -