mirror of
https://github.com/DanilaFe/abacus
synced 2024-11-18 00:19:32 -08:00
108 lines
2.4 KiB
Java
108 lines
2.4 KiB
Java
package org.nwapw.abacus.window;
|
|
|
|
import org.nwapw.abacus.tree.TreeNode;
|
|
|
|
import javax.swing.event.TableModelListener;
|
|
import javax.swing.table.AbstractTableModel;
|
|
import javax.swing.table.TableModel;
|
|
import java.util.ArrayList;
|
|
|
|
/**
|
|
* A table model to store data about the history of inputs
|
|
* in the calculator.
|
|
*/
|
|
public class HistoryTableModel extends AbstractTableModel {
|
|
|
|
/**
|
|
* Static array used to get the column names.
|
|
*/
|
|
public static final String[] COLUMN_NAMES = {
|
|
"Input",
|
|
"Parsed Input",
|
|
"Output"
|
|
};
|
|
|
|
/**
|
|
* Static array used to get the class of each column.
|
|
*/
|
|
public static final Class[] CLASS_TYPES = {
|
|
String.class,
|
|
TreeNode.class,
|
|
String.class
|
|
};
|
|
|
|
/**
|
|
* Class used specifically to hold data about
|
|
* the previous entries into the calculator.
|
|
*/
|
|
public static class HistoryEntry {
|
|
public String input;
|
|
public TreeNode parsedInput;
|
|
public String output;
|
|
|
|
public HistoryEntry(String input, TreeNode parsedInput, String output){
|
|
this.input = input;
|
|
this.parsedInput = parsedInput;
|
|
this.output = output;
|
|
}
|
|
|
|
Object nthValue(int n){
|
|
if(n == 0) return input;
|
|
if(n == 1) return parsedInput;
|
|
if(n == 2) return output;
|
|
return null;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* The list of entries.
|
|
*/
|
|
ArrayList<HistoryEntry> entries;
|
|
|
|
/**
|
|
* Creates a new empty history table model
|
|
*/
|
|
public HistoryTableModel() {
|
|
entries = new ArrayList<>();
|
|
}
|
|
|
|
/**
|
|
* Adds an entry to the model.
|
|
* @param entry the entry to add.
|
|
*/
|
|
public void addEntry(HistoryEntry entry){
|
|
entries.add(entry);
|
|
}
|
|
|
|
@Override
|
|
public int getRowCount() {
|
|
return entries.size();
|
|
}
|
|
|
|
@Override
|
|
public int getColumnCount() {
|
|
return 3;
|
|
}
|
|
|
|
@Override
|
|
public String getColumnName(int columnIndex) {
|
|
return COLUMN_NAMES[columnIndex];
|
|
}
|
|
|
|
@Override
|
|
public Class<?> getColumnClass(int columnIndex) {
|
|
return CLASS_TYPES[columnIndex];
|
|
}
|
|
|
|
@Override
|
|
public boolean isCellEditable(int rowIndex, int columnIndex) {
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public Object getValueAt(int rowIndex, int columnIndex) {
|
|
return entries.get(rowIndex).nthValue(columnIndex);
|
|
}
|
|
|
|
}
|