Warning, /education/gcompris/src/activities/path_encoding/MapView.qml is written in an unsupported language. File is not indexed.
0001 /* GCompris - MapView.qml
0002 *
0003 * SPDX-FileCopyrightText: 2021 Harsh Kumar <hadron43@yahoo.com>
0004 * SPDX-License-Identifier: GPL-3.0-or-later
0005 */
0006
0007 import QtQuick 2.12
0008 import GCompris 1.0
0009 import QtQml.Models 2.12
0010
0011 import "../../core"
0012 import "path.js" as Activity
0013
0014 Rectangle {
0015 id: mapView
0016
0017 color: 'transparent'
0018
0019 property int rows
0020 property int cols
0021
0022 property int cellSize
0023
0024 property bool touchEnabled: true
0025
0026 height: cellSize * rows
0027 width: cellSize * cols
0028
0029 signal init
0030
0031 onInit: {
0032 selectedOverlay.visible = false
0033 }
0034
0035 DelegateModel {
0036 id: delegateModel
0037 model: mapListModel
0038 delegate: Block {
0039 width: mapView.cellSize
0040 height: mapView.cellSize
0041 index: DelegateModel.itemsIndex
0042 }
0043 }
0044
0045 GridView {
0046 id: gridview
0047 anchors.fill: parent
0048 interactive: false
0049
0050 cellWidth: mapView.cellSize
0051 cellHeight: mapView.cellSize
0052
0053 model: delegateModel
0054 }
0055
0056 MultiPointTouchArea {
0057 anchors.fill: parent
0058 maximumTouchPoints: 1
0059 onPressed: {
0060 checkTouchPoint(touchPoints);
0061 }
0062 onTouchUpdated: checkTouchPoint(touchPoints);
0063 onReleased: {
0064 checkTouchPoint(touchPoints)
0065 if(selectedOverlay.visible && touchEnabled && !items.tux.isAnimationRunning) {
0066 var row = Math.floor(selectedOverlay.y / cellSize)
0067 var col = Math.floor(selectedOverlay.x / cellSize)
0068 Activity.processBlockClick([col, row])
0069 }
0070 }
0071 }
0072
0073 Rectangle {
0074 id: selectedOverlay
0075 opacity: 0.35
0076 color: "#2651DA"
0077 width: cellSize
0078 height: cellSize
0079 visible: false
0080 }
0081
0082 function checkTouchPoint(touchPoints) {
0083 var touch = touchPoints[0]
0084
0085 if(items.tux.isAnimationRunning || !touch || !touchEnabled)
0086 return
0087
0088 var row = Math.floor(touch.y / cellSize)
0089 var col = Math.floor(touch.x / cellSize)
0090
0091 if(row >= 0 && row < rows && col >= 0 && col < cols) {
0092 selectedOverlay.x = col * cellSize
0093 selectedOverlay.y = row * cellSize
0094 selectedOverlay.visible = true
0095 }
0096 else {
0097 selectedOverlay.visible = false
0098 }
0099 }
0100 }