package hextstar;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.Arrays;
import com.ericsson.otp.erlang.OtpErlangBinary;
import javafx.scene.control.SelectionMode;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
/**
* Created by Bart on 9/26/2015.
* Originally from https://github.com/Velocity-/Hexstar
*/
public class HexstarView extends TableView<DataRow> {
public HexstarView() {
//setContextMenu(new ContextMenu(new MenuItem("Copy"), new MenuItem("Cut"), new MenuItem("Delete")));
getSelectionModel().setCellSelectionEnabled(true);
getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
column("Address", "address");
column("0", "b0");
column("1", "b1");
column("2", "b2");
column("3", "b3");
column("4", "b4");
column("5", "b5");
column("6", "b6");
column("7", "b7");
column("8", "b8");
column("9", "b9");
column("A", "bA");
column("B", "bB");
column("C", "bC");
column("D", "bD");
column("E", "bE");
column("F", "bF");
column("Text", "text");
getColumns().forEach(c -> {
c.getStyleClass().add("hex-column");
c.setSortable(false);
});
getColumns().get(0).getStyleClass().add("hex-address-column");
}
public void setBinary(OtpErlangBinary binary) {
ByteArrayInputStream inputStream = new ByteArrayInputStream(binary.binaryValue());
byte[] input = new byte[16];
int addr = 0, bytesRead = 0;
try {
while ((bytesRead = inputStream.read(input)) > 0) {
getItems().add(new DataRow(addr, input, bytesRead));
addr += 16;
Arrays.fill(input, (byte)0);
}
}
catch (IOException e) {
throw new RuntimeException(e);
}
}
private void column(String colName, String property) {
TableColumn<DataRow, String> col;
col = new TableColumn<DataRow,String>(colName);
col.setCellValueFactory(new PropertyValueFactory<DataRow, String>(property));
getColumns().add(col);
}
}