Search in sources :

Example 1 with Value

use of com.cburch.logisim.data.Value in project logisim-evolution by reds-heig.

the class ValueTable method computePreferredSize.

private void computePreferredSize() {
    int oldCellHeight = cellHeight;
    int oldTableWidth = tableWidth;
    int oldTableHeight = tableHeight;
    int columns = model == null ? 0 : model.getColumnCount();
    if (columnWidth == null || columnWidth.length < columns)
        columnWidth = new int[columns];
    if (columns == 0) {
        cellHeight = 16;
        tableWidth = tableHeight = 0;
    } else {
        Graphics g = getGraphics();
        int cellsWidth = 0;
        if (g == null) {
            cellHeight = 16;
            cellsWidth = 24 * columns;
        } else {
            FontMetrics headerMetric = g.getFontMetrics(HEAD_FONT);
            FontMetrics bodyMetric = g.getFontMetrics(BODY_FONT);
            cellHeight = Math.max(headerMetric.getHeight(), bodyMetric.getHeight());
            for (int i = 0; i < columns; i++) {
                int radix = model.getColumnValueRadix(i);
                // column should be at least as wide as 24, as header, and
                // as formatted value
                String header = model.getColumnName(i);
                int cellWidth = Math.max(24, headerMetric.stringWidth(header));
                BitWidth w = model.getColumnValueWidth(i);
                if (w != null) {
                    Value val = Value.createKnown(w, (radix == 2 ? 0 : (radix == 10 ? (1 << (w.getWidth() - 1)) : w.getMask())));
                    String label = val.toDisplayString(radix);
                    cellWidth = Math.max(cellWidth, bodyMetric.stringWidth(label));
                }
                columnWidth[i] = cellWidth;
                cellsWidth += cellWidth;
            }
        }
        tableWidth = cellsWidth + COLUMN_SEP * (columns + 1);
        tableHeight = cellHeight * model.getRowCount();
    }
    if (cellHeight != oldCellHeight || tableWidth != oldTableWidth || tableHeight != oldTableHeight) {
        Dimension headSize = new Dimension(tableWidth, cellHeight + HEADER_SEP);
        Dimension bodySize = new Dimension(tableWidth, tableHeight);
        body.setPreferredSize(bodySize);
        header.setPreferredSize(headSize);
        body.revalidate();
        header.revalidate();
    }
}
Also used : Graphics(java.awt.Graphics) BitWidth(com.cburch.logisim.data.BitWidth) FontMetrics(java.awt.FontMetrics) Value(com.cburch.logisim.data.Value) Dimension(java.awt.Dimension)

Example 2 with Value

use of com.cburch.logisim.data.Value in project logisim-evolution by reds-heig.

the class RegTabContent method fillArray.

/**
 * This function will clear and fill the registers tab and refresh their
 * value. It will start by iterate over all circuits of the current project
 * to register all the "Register" components (providing their attributes are
 * correctly set). It will then fill the panel with each register found,
 * including their current value.
 */
private void fillArray() {
    int y = 0;
    MyLabel col1 = new MyLabel("Circuit", Font.ITALIC | Font.BOLD);
    MyLabel col2 = new MyLabel("Reg name", Font.BOLD);
    MyLabel col3 = new MyLabel("Value", Font.BOLD);
    registers.clear();
    panel.removeAll();
    for (Circuit circ : proj.getLogisimFile().getCircuits()) {
        getAllRegisters(circ);
    }
    if (proj.getLogisimFile().getLibrary("prodis_v1.3") instanceof LoadedLibrary) {
        if (((LoadedLibrary) proj.getLogisimFile().getLibrary("prodis_v1.3")).getBase() instanceof LogisimFile) {
            for (Circuit circ : ((LogisimFile) ((LoadedLibrary) proj.getLogisimFile().getLibrary("prodis_v1.3")).getBase()).getCircuits()) {
                getAllRegisters(circ);
            }
        }
    }
    col1.setColor(Color.LIGHT_GRAY);
    col2.setColor(Color.LIGHT_GRAY);
    col3.setColor(Color.LIGHT_GRAY);
    c.fill = GridBagConstraints.HORIZONTAL;
    c.anchor = GridBagConstraints.FIRST_LINE_START;
    c.ipady = 2;
    c.weighty = 0;
    c.gridy = y;
    c.gridx = 0;
    c.weightx = 0.3;
    panel.add(col1, c);
    c.gridx++;
    c.weightx = 0.5;
    panel.add(col2, c);
    c.gridx++;
    c.weightx = 0.2;
    panel.add(col3, c);
    y++;
    if (!registers.isEmpty()) {
        Object[] objArr = registers.keySet().toArray();
        Arrays.sort(objArr);
        for (Object name : objArr) {
            c.gridy = y;
            c.gridx = 0;
            String circuitName = name.toString().split("/")[0];
            panel.add(new MyLabel(circuitName, Font.ITALIC, true), c);
            c.gridx++;
            String registerName = name.toString().split("/")[1];
            panel.add(new MyLabel(registerName), c);
            c.gridx++;
            Component selReg = registers.get(name.toString());
            CircuitState mainCircState = proj.getCircuitState();
            while (mainCircState.getParentState() != null) {
                // Get the main
                // circuit
                mainCircState = mainCircState.getParentState();
            }
            Value val = findVal(mainCircState, circuitName, selReg.getEnd(0).getLocation());
            if (val != null) {
                panel.add(new MyLabel(val.toHexString()), c);
            } else {
                panel.add(new MyLabel("-"), c);
            }
            y++;
        }
    }
    c.weighty = 1;
    c.gridy++;
    c.gridx = 0;
    c.weightx = 1;
    panel.add(new MyLabel(""), c);
    panel.validate();
}
Also used : CircuitState(com.cburch.logisim.circuit.CircuitState) LogisimFile(com.cburch.logisim.file.LogisimFile) Value(com.cburch.logisim.data.Value) Circuit(com.cburch.logisim.circuit.Circuit) LoadedLibrary(com.cburch.logisim.file.LoadedLibrary) Component(com.cburch.logisim.comp.Component)

Example 3 with Value

use of com.cburch.logisim.data.Value in project logisim-evolution by reds-heig.

the class Model method propagationCompleted.

public void propagationCompleted() {
    CircuitState circuitState = getCircuitState();
    Value[] vals = new Value[selection.size()];
    boolean changed = false;
    for (int i = selection.size() - 1; i >= 0; i--) {
        SelectionItem item = selection.get(i);
        vals[i] = item.fetchValue(circuitState);
        if (!changed) {
            Value v = getValueLog(item).getLast();
            changed = v == null ? vals[i] != null : !v.equals(vals[i]);
        }
    }
    if (changed) {
        for (int i = selection.size() - 1; i >= 0; i--) {
            SelectionItem item = selection.get(i);
            getValueLog(item).append(vals[i]);
        }
        fireEntryAdded(new ModelEvent(), vals);
    }
}
Also used : CircuitState(com.cburch.logisim.circuit.CircuitState) Value(com.cburch.logisim.data.Value)

Example 4 with Value

use of com.cburch.logisim.data.Value in project logisim-evolution by reds-heig.

the class PullResistor method paintInstance.

@Override
public void paintInstance(InstancePainter painter) {
    Location loc = painter.getLocation();
    int x = loc.getX();
    int y = loc.getY();
    Graphics g = painter.getGraphics();
    g.translate(x, y);
    Value pull = getPullValue(painter.getAttributeSet());
    Value actual = painter.getPortValue(0);
    paintBase(painter, pull, pull.getColor(), actual.getColor());
    g.translate(-x, -y);
    painter.drawPorts();
}
Also used : Graphics(java.awt.Graphics) Value(com.cburch.logisim.data.Value) Location(com.cburch.logisim.data.Location)

Example 5 with Value

use of com.cburch.logisim.data.Value in project logisim-evolution by reds-heig.

the class Transistor method drawInstance.

private void drawInstance(InstancePainter painter, boolean isGhost) {
    Object type = painter.getAttributeValue(ATTR_TYPE);
    Object powerLoc = painter.getAttributeValue(Wiring.ATTR_GATE);
    Direction from = painter.getAttributeValue(StdAttr.FACING);
    Direction facing = painter.getAttributeValue(StdAttr.FACING);
    boolean flip = (facing == Direction.SOUTH || facing == Direction.WEST) == (powerLoc == Wiring.GATE_TOP_LEFT);
    int degrees = Direction.EAST.toDegrees() - from.toDegrees();
    double radians = Math.toRadians((degrees + 360) % 360);
    int m = flip ? 1 : -1;
    Graphics2D g = (Graphics2D) painter.getGraphics();
    Location loc = painter.getLocation();
    g.translate(loc.getX(), loc.getY());
    g.rotate(radians);
    Color gate;
    Color input;
    Color output;
    Color platform;
    if (!isGhost && painter.getShowState()) {
        gate = painter.getPortValue(GATE).getColor();
        input = painter.getPortValue(INPUT).getColor();
        output = painter.getPortValue(OUTPUT).getColor();
        Value out = computeOutput(painter);
        platform = out.isUnknown() ? Value.UNKNOWN.getColor() : out.getColor();
    } else {
        Color base = g.getColor();
        gate = base;
        input = base;
        output = base;
        platform = base;
    }
    // input and output lines
    GraphicsUtil.switchToWidth(g, Wire.WIDTH);
    g.setColor(output);
    g.drawLine(0, 0, -11, 0);
    g.drawLine(-11, m * 7, -11, 0);
    g.setColor(input);
    g.drawLine(-40, 0, -29, 0);
    g.drawLine(-29, m * 7, -29, 0);
    // gate line
    g.setColor(gate);
    if (type == TYPE_P) {
        g.drawLine(-20, m * 20, -20, m * 15);
        GraphicsUtil.switchToWidth(g, 1);
        g.drawOval(-22, m * 12 - 2, 4, 4);
    } else {
        g.drawLine(-20, m * 20, -20, m * 11);
        GraphicsUtil.switchToWidth(g, 1);
    }
    // draw platforms
    // gate platform
    g.drawLine(-10, m * 10, -30, m * 10);
    g.setColor(platform);
    // input/output platform
    g.drawLine(-9, m * 8, -31, m * 8);
    // arrow (same color as platform)
    g.drawLine(-21, m * 6, -18, m * 3);
    g.drawLine(-21, 0, -18, m * 3);
    g.rotate(-radians);
    g.translate(-loc.getX(), -loc.getY());
}
Also used : Color(java.awt.Color) Value(com.cburch.logisim.data.Value) Direction(com.cburch.logisim.data.Direction) Graphics2D(java.awt.Graphics2D) Location(com.cburch.logisim.data.Location)

Aggregations

Value (com.cburch.logisim.data.Value)89 BitWidth (com.cburch.logisim.data.BitWidth)30 Graphics (java.awt.Graphics)15 Location (com.cburch.logisim.data.Location)9 Color (java.awt.Color)8 Bounds (com.cburch.logisim.data.Bounds)7 InstanceDataSingleton (com.cburch.logisim.instance.InstanceDataSingleton)7 AttributeSet (com.cburch.logisim.data.AttributeSet)6 InstanceState (com.cburch.logisim.instance.InstanceState)6 Direction (com.cburch.logisim.data.Direction)3 Instance (com.cburch.logisim.instance.Instance)3 Port (com.cburch.logisim.instance.Port)3 CircuitState (com.cburch.logisim.circuit.CircuitState)2 Component (com.cburch.logisim.comp.Component)2 FailException (com.cburch.logisim.data.FailException)2 TestException (com.cburch.logisim.data.TestException)2 Dimension (java.awt.Dimension)2 FontMetrics (java.awt.FontMetrics)2 ArrayList (java.util.ArrayList)2 HashMap (java.util.HashMap)2