2 * Quoridor server and related libraries
3 * Copyright (C) 2009-2010 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program. Look for COPYING file in the top folder.
16 * If not, see http://www.gnu.org/licenses/.
20 package cz.xelfi.quoridor.visidor;
22 import cz.xelfi.quoridor.Board;
23 import cz.xelfi.quoridor.Move;
24 import java.awt.GridLayout;
25 import java.util.List;
26 import java.util.concurrent.CopyOnWriteArrayList;
27 import javax.swing.JPanel;
29 /** JavaBean class that displays and can manipulate with Quoridor {@link Board}.
31 * @author Jaroslav Tulach <jtulach@netbeans.org>
33 public final class BoardPane extends JPanel {
34 private final Viewer viewer;
35 private final List<BoardListener> listeners = new CopyOnWriteArrayList<BoardListener>();
38 setLayout(new GridLayout(1,1));
39 viewer = new Viewer();
40 viewer.moveListener(this);
44 public final void setBoard(Board b) {
48 public final Board getBoard() {
49 return viewer.getBoard();
52 /** The board can either be in <q>view only</q> mode when showing state
53 * of the {@link Board} during opponent's move, or it can be editable.
54 * In editable mode, one shall listen on changes delivered to
57 * @param editable read only or editable mode?
59 public final void setEditable(boolean editable) {
60 viewer.enableListeners(editable);
63 public final void addBoardListener(BoardListener l) {
66 public final void removeBoardListener(BoardListener l) {
70 final void moveHappened(Move m) {
72 for (BoardListener bl : listeners) {
74 ev = new BoardEvent(this, m);