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 }