Warning, /education/gcompris/src/activities/digital_electricity/components/Switch.qml is written in an unsupported language. File is not indexed.

0001 /* GCompris - Switch.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 "../digital_electricity.js" as Activity
0013 
0014 import GCompris 1.0
0015 
0016 ElectricalComponent {
0017     id: switchComponent
0018     terminalSize: 0.5
0019     noOfInputs: 1
0020     noOfOutputs: 1
0021 
0022     information: qsTr("A switch is used to connect or disconnect two terminals. " +
0023                       "If the switch is turned on, the current can flow through the switch. " +
0024                       "If the switch is turned off, then the connection inside the switch is broken and the current can not flow through it.")
0025 
0026     truthTable: []
0027 
0028     property alias inputTerminals: inputTerminals
0029     property alias outputTerminals: outputTerminals
0030 
0031     Repeater {
0032         id: inputTerminals
0033         model: 1
0034         delegate: inputTerminal
0035         Component {
0036             id: inputTerminal
0037             TerminalPoint {
0038                 posX: 0.04
0039                 posY: 0.5
0040                 type: "In"
0041             }
0042         }
0043     }
0044 
0045     Repeater {
0046         id: outputTerminals
0047         model: 1
0048         delegate: outputTerminal
0049         Component {
0050             id: outputTerminal
0051             TerminalPoint {
0052                 posX: 0.96
0053                 posY: 0.5
0054                 type: "Out"
0055             }
0056         }
0057     }
0058 
0059     function updateOutput(wireVisited) {
0060         var terminal = outputTerminals.itemAt(0)
0061         terminal.value = imgSrc == "switchOn.svg" ? inputTerminals.itemAt(0).value : 0
0062         for(var i = 0 ; i < terminal.wires.length ; ++i)
0063             terminal.wires[i].to.value = terminal.value
0064 
0065         var componentVisited = []
0066         for(var i = 0 ; i < terminal.wires.length ; ++i) {
0067             var wire = terminal.wires[i]
0068             var component = wire.to.parent
0069             if(componentVisited[component] != true && wireVisited[wire] != true) {
0070                 componentVisited[component] = true
0071                 wireVisited[wire] = true
0072                 component.updateOutput(wireVisited)
0073             }
0074         }
0075     }
0076 }