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

0001 /* GCompris - XorGate.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 ElectricalComponent {
0015     id: xorGate
0016     terminalSize: 0.5
0017     noOfInputs: 2
0018     noOfOutputs: 1
0019     property var inputTerminalPosY: [0.2, 0.8]
0020 
0021     information: qsTr("An XOR gate outputs 1 if the number of 1 in inputs is odd, and 0 if number of 1 in " +
0022                       "inputs is even. In this activity, a 2 inputs XOR gate is shown. The output for a 2 inputs XOR gate is:")
0023     truthTable: [['A','B',qsTr("A XOR B")],
0024                  ['0','0','0'],
0025                  ['0','1','1'],
0026                  ['1','0','1'],
0027                  ['1','1','0']]
0028 
0029     property alias inputTerminals: inputTerminals
0030     property alias outputTerminals: outputTerminals
0031 
0032     Repeater {
0033         id: inputTerminals
0034         model: 2
0035         delegate: inputTerminal
0036         Component {
0037             id: inputTerminal
0038             TerminalPoint {
0039                 posX: 0.04
0040                 posY: inputTerminalPosY[index]
0041                 type: "In"
0042             }
0043         }
0044     }
0045 
0046     Repeater {
0047         id: outputTerminals
0048         model: 1
0049         delegate: outputTerminal
0050         Component {
0051             id: outputTerminal
0052             TerminalPoint {
0053                 posX: 0.96
0054                 posY: 0.5
0055                 type: "Out"
0056             }
0057         }
0058     }
0059 
0060     function updateOutput(wireVisited) {
0061         var terminal = outputTerminals.itemAt(0)
0062         terminal.value = inputTerminals.itemAt(0).value ^ inputTerminals.itemAt(1).value
0063         for(var i = 0 ; i < terminal.wires.length ; ++i)
0064             terminal.wires[i].to.value = terminal.value
0065 
0066         var componentVisited = []
0067         for(var i = 0 ; i < terminal.wires.length ; ++i) {
0068             var wire = terminal.wires[i]
0069             var component = wire.to.parent
0070             componentVisited[component] = true
0071             wireVisited[wire] = true
0072             component.updateOutput(wireVisited)
0073         }
0074     }
0075 }