visidor/src/main/java/cz/xelfi/quoridor/visidor/BoardPane.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Tue, 14 Sep 2010 09:46:43 +0200
changeset 266 15fcdfc4cd4a
parent 255 9ecd02d694cd
permissions -rw-r--r--
Using maven-license-plugin and updating all missing headers
     1 /**
     2  * Quoridor server and related libraries
     3  * Copyright (C) 2009-2010 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
     4  *
     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.
     8  *
     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.
    13  *
    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/.
    17  */
    18 
    19 
    20 package cz.xelfi.quoridor.visidor;
    21 
    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;
    28 
    29 /** JavaBean class that displays and can manipulate with Quoridor {@link Board}.
    30  *
    31  * @author Jaroslav Tulach <jtulach@netbeans.org>
    32  */
    33 public final class BoardPane extends JPanel {
    34     private final Viewer viewer;
    35     private final List<BoardListener> listeners = new CopyOnWriteArrayList<BoardListener>();
    36     
    37     public BoardPane() {
    38         setLayout(new GridLayout(1,1));
    39         viewer = new Viewer();
    40         viewer.moveListener(this);
    41         add(viewer);
    42     }
    43     
    44     public final void setBoard(Board b) {
    45         viewer.setBoard(b);
    46     }
    47     
    48     public final Board getBoard() {
    49         return viewer.getBoard();
    50     }
    51 
    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 
    55      * BoardListener.
    56      * 
    57      * @param editable read only or editable mode?
    58      */
    59     public final void setEditable(boolean editable) {
    60         viewer.enableListeners(editable);
    61     }
    62     
    63     public final void addBoardListener(BoardListener l) {
    64         listeners.add(l);
    65     }
    66     public final void removeBoardListener(BoardListener l) {
    67         listeners.remove(l);
    68     }
    69     
    70     final void moveHappened(Move m) {
    71         BoardEvent ev = null;
    72         for (BoardListener bl : listeners) {
    73             if (ev == null) {
    74                 ev = new BoardEvent(this, m);
    75             }
    76             bl.boardChanged(ev);
    77         }
    78     }
    79 }