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 }