import QtQuick import QtQuick.Controls import QtQuick.Layouts import roulette Item { anchors { left: parent.left leftMargin: 10 } Text { id: croupier font.pointSize: 18 text: "Croupier" color: { if (tapHandler.pressed) { "#99000000" } else { "#000000" } } TapHandler { id: tapHandler onSingleTapped: { PlayerAreaModel.focusedPlayer = 0 } } Rectangle { id: indicator color: "red" height: 10 width: 10 opacity: 0.5 visible: PlayerAreaModel.focusedPlayer == 0 anchors { verticalCenter: parent.verticalCenter right: parent.left rightMargin: 5 } } } ColumnLayout { anchors { top: croupier.bottom topMargin: 20 } spacing: 60 /* * A repeater can only have one delegate model * i.e. it can only have one object template defined in it. * To repeat both a Text, and Rectangle AND a TextField, we put them inside an Item * and use anchors to sort them inside the Item */ Repeater { model: 7 Item { Text { id: label text: "Player " + (index + 1) } Rectangle { id: indicator color: "red" height: 10 width: 10 /* * This check will run once when the object is created, but then only refresh * when the NOTIFY signal for .focusedPlayer is sent */ visible: PlayerAreaModel.focusedPlayer - 1 == index opacity: 0.5 anchors { verticalCenter: inputField.verticalCenter right: inputField.left rightMargin: 5 } } TextField { id: inputField anchors { top: label.bottom topMargin: 6 } onTextEdited: PlayerAreaModel.setPlayerName(text, index) onActiveFocusChanged: { /* focusReason 0, 1 and 2 are mouse, tab forward, and tab backward, respectively */ if (activeFocus && (focusReason == 0 || focusReason == 1 || focusReason == 2)) { PlayerAreaModel.focusedPlayer = index + 1 } } } Text { property int betType property int n id: currentBet1 anchors { verticalCenter: inputField.verticalCenter left: inputField.right leftMargin: 5 } text: "" } Text { property int betType property int n id: currentBet2 anchors { verticalCenter: inputField.verticalCenter left: currentBet1.right leftMargin: 5 } text: "" } Connections { target: PlayerAreaModel function onBetChanged(b, n, bet) { if (PlayerAreaModel.focusedPlayer - 1 == index) { if (currentBet1.text == "") { currentBet1.betType = b currentBet1.n = n switch(b) { case 1: currentBet1.text = "Red: " + bet + "g" break; case 2: currentBet1.text = "Black: " + bet + "g" break; case 3: currentBet1.text = "Odd: " + bet + "g" break; case 4: currentBet1.text = "Even: " + bet + "g" break; case 5: currentBet1.text = "Low: " + bet + "g" break; case 6: currentBet1.text = "High: " + bet + "g" break; case 7: currentBet1.text = "Dozen " + (n + 1) + ": " + bet + "g" break; case 8: currentBet1.text = "Street " + (n + 1) + ": " + bet + "g" break; case 9: currentBet1.text = "Single " + (n + 1) + ": " + bet + "g" break; case 10: currentBet1.text = "Column " + (n + 1) + ": " + bet + "g" break; } } else { currentBet2.betType = b currentBet2.n = n switch(b) { case 1: currentBet2.text = "Red: " + bet + "g" break; case 2: currentBet2.text = "Black: " + bet + "g" break; case 3: currentBet2.text = "Odd: " + bet + "g" break; case 4: currentBet2.text = "Even: " + bet + "g" break; case 5: currentBet2.text = "Low: " + bet + "g" break; case 6: currentBet2.text = "High: " + bet + "g" break; case 7: currentBet2.text = "Dozen " + (n + 1) + ": " + bet + "g" break; case 8: currentBet2.text = "Street " + (n + 1) + ": " + bet + "g" break; case 9: currentBet2.text = "Single " + (n + 1) + ": " + bet + "g" break; case 10: currentBet2.text = "Column " + (n + 1) + ": " + bet + "g" break; } } } } function onBetRemoved(b, n) { if (PlayerAreaModel.focusedPlayer - 1 == index) { if (currentBet1.betType == b && currentBet1.n == n) { currentBet1.text = "" } else if (currentBet2.betType == b && currentBet2.n == n) { currentBet2.text = "" } } } } } } } }