visidor/src/main/java/cz/xelfi/quoridor/visidor/BoardPane.java
changeset 255 9ecd02d694cd
child 266 15fcdfc4cd4a
     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 +}