table model is editable

This commit is contained in:
hneemann 2016-05-08 13:07:26 +02:00
parent bcbfd7a068
commit d016ddea94
4 changed files with 61 additions and 7 deletions

View File

@ -1,7 +1,7 @@
package de.neemann.digital.analyse;
import de.neemann.digital.analyse.expression.BitSetter;
import de.neemann.digital.analyse.quinemc.BoolTableBoolArray;
import de.neemann.digital.analyse.quinemc.BoolTableIntArray;
import de.neemann.digital.core.Model;
import de.neemann.digital.core.NodeException;
import de.neemann.digital.lang.Lang;
@ -64,9 +64,9 @@ public class ModelAnalyser {
for (Model.Signal s : inputs)
tt.addVariable(s.getName());
ArrayList<BoolTableBoolArray> data = new ArrayList<>();
ArrayList<BoolTableIntArray> data = new ArrayList<>();
for (Model.Signal s : outputs) {
BoolTableBoolArray e = new BoolTableBoolArray(rows);
BoolTableIntArray e = new BoolTableIntArray(rows);
data.add(e);
tt.addResult(s.getName(), e);
}

View File

@ -3,6 +3,7 @@ package de.neemann.digital.analyse;
import de.neemann.digital.analyse.expression.BitSetter;
import de.neemann.digital.analyse.expression.Variable;
import de.neemann.digital.analyse.quinemc.BoolTable;
import de.neemann.digital.analyse.quinemc.BoolTableIntArray;
import java.util.ArrayList;
@ -141,12 +142,43 @@ public class TruthTable {
* @return the table value (2 means "don't care")
*/
public int getValue(int rowIndex, int columnIndex) {
if (columnIndex < variables.size())
return getBitSetter().getBit(rowIndex, columnIndex) ? 1 : 0;
else
if (columnIndex < variables.size()) {
if (getBitSetter().getBit(rowIndex, columnIndex)) return 1;
else return 0;
} else
return results.get(columnIndex - variables.size()).getValues().get(rowIndex).asInt();
}
/**
* Returns true if given column is editable
*
* @param columnIndex the column
* @return thrue if editable
*/
public boolean isEditable(int columnIndex) {
if (columnIndex < variables.size())
return false;
else {
BoolTable v = results.get(columnIndex - variables.size()).getValues();
return v instanceof BoolTableIntArray;
}
}
/**
* Sets modifies the table
*
* @param rowIndex the row
* @param columnIndex the column
* @param aValue the new value
*/
public void setValue(int rowIndex, int columnIndex, int aValue) {
if (columnIndex >= variables.size()) {
BoolTable v = results.get(columnIndex - variables.size()).getValues();
if (v instanceof BoolTableIntArray)
((BoolTableIntArray) v).set(rowIndex, aValue);
}
}
/**
* A single result column
*/

View File

@ -42,7 +42,7 @@ public class TruthTableTableModel implements TableModel {
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
return truthTable.isEditable(columnIndex);
}
@Override
@ -52,6 +52,8 @@ public class TruthTableTableModel implements TableModel {
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
if (aValue instanceof Integer)
truthTable.setValue(rowIndex, columnIndex, (Integer) aValue);
}
@Override

View File

@ -38,4 +38,24 @@ public class BoolTableIntArray implements BoolTable {
public ThreeStateValue get(int i) {
return ThreeStateValue.value(table[i]);
}
/**
* Sets a table value
*
* @param row the row
* @param bool the value
*/
public void set(int row, boolean bool) {
set(row, bool ? 1 : 0);
}
/**
* Sets a table value
*
* @param row the row
* @param value the value
*/
public void set(int row, int value) {
table[row] = value;
}
}