Warning, /education/gcompris/src/activities/digital_electricity/components/BcdCounter.qml is written in an unsupported language. File is not indexed.
0001 /* GCompris - BcdCounter.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 ElectricalComponent { 0017 id: bcdTo7Segment 0018 terminalSize: 0.125 0019 noOfInputs: 1 0020 noOfOutputs: 4 0021 property var outputTerminalPosY: [0.125, 0.375, 0.625, 0.875] 0022 property int count: 0 0023 property int previousInput: 0 0024 0025 information: qsTr("A BCD counter usually takes a signal generator as input. " + 0026 "The output is a BCD number starting from 0 which is increased by one at each tick.") 0027 0028 truthTable: [] 0029 property var outputTable: [['0','0','0','0'], 0030 ['0','0','0','1'], 0031 ['0','0','1','0'], 0032 ['0','0','1','1'], 0033 ['0','1','0','0'], 0034 ['0','1','0','1'], 0035 ['0','1','1','0'], 0036 ['0','1','1','1'], 0037 ['1','0','0','0'], 0038 ['1','0','0','1']] 0039 0040 property alias inputTerminals: inputTerminals 0041 property alias outputTerminals: outputTerminals 0042 0043 Repeater { 0044 id: inputTerminals 0045 model: 1 0046 delegate: inputTerminal 0047 Component { 0048 id: inputTerminal 0049 TerminalPoint { 0050 posX: 0.07 0051 posY: 0.5 0052 type: "In" 0053 } 0054 } 0055 } 0056 0057 Repeater { 0058 id: outputTerminals 0059 model: 4 0060 delegate: outputTerminal 0061 Component { 0062 id: outputTerminal 0063 TerminalPoint { 0064 posX: 0.93 0065 posY: outputTerminalPosY[index] 0066 type: "Out" 0067 } 0068 } 0069 } 0070 0071 function updateOutput(wireVisited) { 0072 for(var i = 0 ; i < noOfOutputs ; ++i) { 0073 var terminal = outputTerminals.itemAt(i) 0074 terminal.value = outputTable[count][i] 0075 for(var j = 0 ; j < terminal.wires.length ; ++j) 0076 terminal.wires[j].to.value = terminal.value 0077 } 0078 0079 if(previousInput != inputTerminals.itemAt(0).value) { 0080 previousInput = inputTerminals.itemAt(0).value 0081 count = (count + 1) % 10; 0082 0083 var componentVisited = [] 0084 for(var i = 0 ; i < noOfOutputs ; ++i) { 0085 var terminal = outputTerminals.itemAt(i) 0086 for(var j = 0 ; j < terminal.wires.length ; ++j) { 0087 var wire = terminal.wires[j] 0088 var component = wire.to.parent 0089 if(componentVisited[component] != true && wireVisited[wire] != true) { 0090 componentVisited[component] = true 0091 wireVisited[wire] = true 0092 component.updateOutput(wireVisited) 0093 } 0094 } 0095 } 0096 } 0097 } 0098 }