1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/visidor/src/main/java/cz/xelfi/quoridor/visidor/BoardPane.java Sun Sep 05 22:34:43 2010 +0200
1.3 @@ -0,0 +1,65 @@
1.4 +/*
1.5 + * To change this template, choose Tools | Templates
1.6 + * and open the template in the editor.
1.7 + */
1.8 +
1.9 +package cz.xelfi.quoridor.visidor;
1.10 +
1.11 +import cz.xelfi.quoridor.Board;
1.12 +import cz.xelfi.quoridor.Move;
1.13 +import java.awt.GridLayout;
1.14 +import java.util.List;
1.15 +import java.util.concurrent.CopyOnWriteArrayList;
1.16 +import javax.swing.JPanel;
1.17 +
1.18 +/** JavaBean class that displays and can manipulate with Quoridor {@link Board}.
1.19 + *
1.20 + * @author Jaroslav Tulach <jtulach@netbeans.org>
1.21 + */
1.22 +public final class BoardPane extends JPanel {
1.23 + private final Viewer viewer;
1.24 + private final List<BoardListener> listeners = new CopyOnWriteArrayList<BoardListener>();
1.25 +
1.26 + public BoardPane() {
1.27 + setLayout(new GridLayout(1,1));
1.28 + viewer = new Viewer();
1.29 + viewer.moveListener(this);
1.30 + add(viewer);
1.31 + }
1.32 +
1.33 + public final void setBoard(Board b) {
1.34 + viewer.setBoard(b);
1.35 + }
1.36 +
1.37 + public final Board getBoard() {
1.38 + return viewer.getBoard();
1.39 + }
1.40 +
1.41 + /** The board can either be in <q>view only</q> mode when showing state
1.42 + * of the {@link Board} during opponent's move, or it can be editable.
1.43 + * In editable mode, one shall listen on changes delivered to
1.44 + * BoardListener.
1.45 + *
1.46 + * @param editable read only or editable mode?
1.47 + */
1.48 + public final void setEditable(boolean editable) {
1.49 + viewer.enableListeners(editable);
1.50 + }
1.51 +
1.52 + public final void addBoardListener(BoardListener l) {
1.53 + listeners.add(l);
1.54 + }
1.55 + public final void removeBoardListener(BoardListener l) {
1.56 + listeners.remove(l);
1.57 + }
1.58 +
1.59 + final void moveHappened(Move m) {
1.60 + BoardEvent ev = null;
1.61 + for (BoardListener bl : listeners) {
1.62 + if (ev == null) {
1.63 + ev = new BoardEvent(this, m);
1.64 + }
1.65 + bl.boardChanged(ev);
1.66 + }
1.67 + }
1.68 +}