Warning, /games/kreversi/src/qml/Board.qml is written in an unsupported language. File is not indexed.

0001 /*
0002     SPDX-FileCopyrightText: 2013 Denis Kuplyakov <dener.kup@gmail.com>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 import QtQuick 2.3
0008 import "globals.js" as Globals
0009 
0010 /**
0011   * Board
0012   *
0013   * Represents board with chips.
0014   */
0015 
0016 Item {
0017     id: boardContainer
0018 
0019     /**
0020       * Is board showing labels or not
0021       */
0022     property bool isShowingLabels: false
0023     /**
0024       * Chips image's ID prefix at SVG theme file to use.
0025       */
0026     property string chipsImagePrefix: "chip_bw"
0027     /**
0028       * Duration of chip's turning animation
0029       */
0030     property int chipsAnimationTime: 25 * 12
0031     /**
0032       * Emitted when user clicks (row, column) cell
0033       * @param row row index of cell (starting from 0)
0034       * @param column column index of cell (starting from 0)
0035       */
0036     signal cellClicked(int row, int column)
0037 
0038     /**
0039       * Enables/disables hint at (row, column) cell
0040       * @param row row index of cell (starting from 0)
0041       * @param column column index of cell (starting from 0)
0042       * @param value @c true show hint
0043       *              @c false hide hint
0044       */
0045     function setHint(row, column, value) {
0046         cells.itemAt(row * Globals.COLUMN_COUNT + column).isHint = value
0047     }
0048 
0049     /**
0050       * Enables/disables legal marker at (row, column) cell
0051       * @param row row index of cell (starting from 0)
0052       * @param column column index of cell (starting from 0)
0053       * @param value @c true show legal marker
0054       *              @c false hide legal marker
0055       */
0056     function setLegal(row, column, value) {
0057         cells.itemAt(row * Globals.COLUMN_COUNT + column).isLegal = value
0058     }
0059 
0060     /**
0061       * Turn chip to White/Black at (row, column) cell
0062       * @param row row index of cell (starting from 0)
0063       * @param column column index of cell (starting from 0)
0064       * @param value @c "Black" turn chip to black
0065       *              @c "White turn chip to white
0066       *              @c "" (empty string) hide chip
0067       */
0068     function setChipState(row, column, value) {
0069         cells.itemAt(row * Globals.COLUMN_COUNT + column).chipState = value
0070     }
0071 
0072     /**
0073       * Enables/disables last move marker at (row, column) cell
0074       * @param row row index of cell (starting from 0)
0075       * @param column column index of cell (starting from 0)
0076       * @param value @c true show last move marker
0077       *              @c false hide last move marker
0078       */
0079     function setLastMove(row, column, value) {
0080         cells.itemAt(row * Globals.COLUMN_COUNT + column).isLastMove = value
0081     }
0082     
0083     /**
0084      * Sets time to wait before starting animation
0085      * @param row row index of cell (starting from 0)
0086      * @param column column index of cell (starting from 0)
0087      * @param value time to wait
0088      */
0089     function setPreAnimationTime(row, column, value) {
0090         cells.itemAt(row * Globals.COLUMN_COUNT + column).chipPreAnimationTime = value
0091     }
0092 
0093     CanvasItem {
0094         id: boardLabels
0095         anchors.fill: parent
0096         visible: isShowingLabels
0097         spriteKey: "board_numbers"
0098     }
0099 
0100     Item {
0101         anchors.horizontalCenter: parent.horizontalCenter
0102         anchors.verticalCenter: parent.verticalCenter
0103 
0104         x: Globals.GRID_OFFSET_X_PERCENT * boardContainer.width
0105         y: Globals.GRID_OFFSET_Y_PERCENT * boardContainer.height
0106 
0107         width: Globals.GRID_WIDTH_PERCENT * boardContainer.width
0108         height: Globals.GRID_HEIGHT_PERCENT * boardContainer.height
0109 
0110         Repeater {
0111             id: cells
0112             model: Globals.ROW_COUNT * Globals.COLUMN_COUNT
0113 
0114             Cell {
0115                 x: (index % Globals.COLUMN_COUNT)
0116                    * Globals.GRID_WIDTH_PERCENT
0117                    * boardContainer.width
0118                    / Globals.COLUMN_COUNT;
0119                 y: Math.floor(index / Globals.COLUMN_COUNT)
0120                    * Globals.GRID_HEIGHT_PERCENT
0121                    * boardContainer.height
0122                    / Globals.ROW_COUNT;
0123 
0124                 width: Globals.GRID_WIDTH_PERCENT * boardContainer.width
0125                        / Globals.COLUMN_COUNT
0126                 height: Globals.GRID_HEIGHT_PERCENT * boardContainer.height
0127                         / Globals.ROW_COUNT
0128 
0129                 chipImagePrefix: boardContainer.chipsImagePrefix
0130                 chipAnimationTime: boardContainer.chipsAnimationTime
0131 
0132                 onClicked: boardContainer.cellClicked(index / Globals.COLUMN_COUNT,
0133                                                  index % Globals.COLUMN_COUNT)
0134             }
0135         }
0136     }
0137 }