Warning, /education/gcompris/src/activities/digital_electricity/components/ElectricalComponent.qml is written in an unsupported language. File is not indexed.
0001 /* GCompris - Component.qml 0002 * 0003 * SPDX-FileCopyrightText: 2016 Pulkit Gupta <pulkitnsit@gmail.com> 0004 * 0005 * Authors: 0006 * Bruno Coudoin <bruno.coudoin@gcompris.net> (GTK+ version) 0007 * Pulkit Gupta <pulkitnsit@gmail.com> (Qt Quick port) 0008 * 0009 * SPDX-License-Identifier: GPL-3.0-or-later 0010 */ 0011 import QtQuick 2.12 0012 import GCompris 1.0 0013 0014 import "../digital_electricity.js" as Activity 0015 0016 Image { 0017 id: electricalComponent 0018 property double posX 0019 property double posY 0020 property double imgWidth 0021 property double imgHeight 0022 property string imgSrc 0023 property string information 0024 property string toolTipTxt 0025 property var truthTable: [] 0026 property int index 0027 property int noOfInputs 0028 property int noOfOutputs 0029 property int rotationAngle: 0 0030 property int initialAngle: 0 0031 property int startingAngle: 0 0032 property double terminalSize 0033 property bool destructible 0034 0035 property alias rotateComponent: rotateComponent 0036 0037 x: posX * parent.width 0038 y: posY * parent.height 0039 width: imgWidth * parent.width 0040 height: imgHeight * parent.height 0041 fillMode: Image.PreserveAspectFit 0042 0043 source: Activity.url + imgSrc 0044 z: 2 0045 mipmap: true 0046 antialiasing: true 0047 0048 onPaintedWidthChanged: { 0049 updateDragConstraints() 0050 Activity.updateWires(index) 0051 } 0052 0053 PropertyAnimation { 0054 id: rotateComponent 0055 target: electricalComponent 0056 property: "rotation" 0057 from: initialAngle; to: initialAngle + rotationAngle 0058 duration: 1 0059 onStarted:{ Activity.animationInProgress = true } 0060 onStopped: { 0061 initialAngle = initialAngle + rotationAngle 0062 Activity.updateWires(index) 0063 if(initialAngle == startingAngle + rotationAngle * 45) { 0064 if(initialAngle == 360 || initialAngle == -360) 0065 initialAngle = 0 0066 startingAngle = initialAngle 0067 Activity.animationInProgress = false 0068 updateDragConstraints() 0069 } 0070 else 0071 rotateComponent.start() 0072 } 0073 easing.type: Easing.InOutQuad 0074 } 0075 0076 function updateDragConstraints() { 0077 if(initialAngle == 0 || initialAngle == 180 || initialAngle == 360 || initialAngle == -360 0078 || initialAngle == -180) { 0079 mouseArea.drag.minimumX = (electricalComponent.paintedWidth - electricalComponent.width)/2 0080 mouseArea.drag.minimumY = (electricalComponent.paintedHeight - electricalComponent.height)/2 0081 0082 mouseArea.drag.maximumX = electricalComponent.parent.width - 0083 (electricalComponent.width + electricalComponent.paintedWidth)/2 0084 mouseArea.drag.maximumY = electricalComponent.parent.height - 0085 (electricalComponent.height + electricalComponent.paintedHeight)/2 0086 } 0087 else { 0088 mouseArea.drag.minimumX = (electricalComponent.paintedHeight - electricalComponent.width)/2 0089 mouseArea.drag.minimumY = (electricalComponent.paintedWidth - electricalComponent.height)/2 0090 0091 mouseArea.drag.maximumX = electricalComponent.parent.width - 0092 (electricalComponent.width + electricalComponent.paintedHeight)/2 0093 mouseArea.drag.maximumY = electricalComponent.parent.height - 0094 (electricalComponent.height + electricalComponent.paintedWidth)/2 0095 } 0096 } 0097 0098 MouseArea { 0099 id: mouseArea 0100 width: parent.paintedWidth 0101 height: parent.paintedHeight 0102 anchors.centerIn: parent 0103 drag.target: electricalComponent 0104 onPressed: { 0105 Activity.updateToolTip(toolTipTxt) 0106 Activity.componentSelected(index) 0107 } 0108 onClicked: { 0109 if(Activity.toolDelete) { 0110 if (destructible) { 0111 Activity.removeComponent(index) 0112 } else { 0113 Activity.deselect() 0114 } 0115 } 0116 else { 0117 if(imgSrc == "switchOff.svg") { 0118 imgSrc = "switchOn.svg" 0119 Activity.updateComponent(index) 0120 } 0121 else if(imgSrc == "switchOn.svg") { 0122 imgSrc = "switchOff.svg" 0123 Activity.updateComponent(index) 0124 } 0125 } 0126 } 0127 onReleased: { 0128 parent.posX = parent.x / parent.parent.width 0129 parent.posY = parent.y / parent.parent.height 0130 Activity.updateToolTip("") 0131 } 0132 0133 onPositionChanged: { 0134 updateDragConstraints() 0135 Activity.updateWires(index) 0136 } 0137 } 0138 }