77 lines
2.0 KiB
Java
77 lines
2.0 KiB
Java
package dev.kske.chess.ui;
|
|
|
|
import java.awt.BorderLayout;
|
|
import java.util.ArrayList;
|
|
import java.util.Arrays;
|
|
import java.util.HashSet;
|
|
import java.util.List;
|
|
import java.util.Set;
|
|
|
|
import javax.swing.JPanel;
|
|
import javax.swing.JScrollPane;
|
|
import javax.swing.JTable;
|
|
import javax.swing.border.EmptyBorder;
|
|
import javax.swing.table.DefaultTableModel;
|
|
|
|
import dev.kske.chess.board.Log;
|
|
import dev.kske.chess.board.Log.MoveNode;
|
|
import dev.kske.chess.event.Event;
|
|
import dev.kske.chess.event.EventBus;
|
|
import dev.kske.chess.event.MoveEvent;
|
|
import dev.kske.chess.event.Subscribable;
|
|
|
|
/**
|
|
* Project: <strong>Chess</strong><br>
|
|
* File: <strong>LogPanel.java</strong><br>
|
|
* Created: <strong>17.07.2019</strong><br>
|
|
* Author: <strong>Kai S. K. Engelbart</strong>
|
|
*/
|
|
public class LogPanel extends JPanel implements Subscribable {
|
|
|
|
private static final long serialVersionUID = 1932671698254197119L;
|
|
|
|
private JTable mtable;
|
|
|
|
private Log log;
|
|
|
|
/**
|
|
* Create the frame.
|
|
*/
|
|
public LogPanel() {
|
|
setBorder(new EmptyBorder(5, 5, 5, 5));
|
|
setLayout(new BorderLayout(0, 0));
|
|
|
|
mtable = new JTable();
|
|
mtable.setEnabled(false);
|
|
add(new JScrollPane(mtable), BorderLayout.CENTER);
|
|
|
|
EventBus.getInstance().register(this);
|
|
}
|
|
|
|
@Override
|
|
public Set<Class<?>> supports() {
|
|
return new HashSet<>(Arrays.asList(MoveEvent.class));
|
|
}
|
|
|
|
@Override
|
|
public void handle(Event<?> event) {
|
|
if (log == null) return;
|
|
|
|
// TODO: Display log with variations
|
|
final List<MoveNode> moves = /* log.getLoggedMoves() */ new ArrayList<>();
|
|
String[][] data = new String[moves.size() / 2 + moves.size() % 2][2];
|
|
for (int i = 0; i < data.length; i++) {
|
|
data[i][0] = moves.get(i * 2).move.toSAN();
|
|
if (i * 2 + 1 < moves.size()) data[i][1] = moves.get(i * 2 + 1).move.toSAN();
|
|
}
|
|
mtable.setModel(new DefaultTableModel(data, new String[] { "White", "Black" }));
|
|
}
|
|
|
|
public Log getLog() { return log; }
|
|
|
|
public void setLog(Log log) {
|
|
this.log = log;
|
|
handle(null);
|
|
}
|
|
}
|