Warning, /education/gcompris/src/activities/louis-braille/ReorderList.qml is written in an unsupported language. File is not indexed.
0001 /* GCompris - ReorderList.qml 0002 * 0003 * SPDX-FileCopyrightText: 2014 Arkit Vora <arkitvora123@gmail.com> 0004 * 0005 * Authors: 0006 * <Srishti Sethi> (GTK+ version) 0007 * Arkit Vora <arkitvora123@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 "../../core" 0015 import "louis-braille.js" as Activity 0016 0017 Rectangle { 0018 id: wholeBody 0019 width: parent.width 0020 height: parent.height 0021 color: "#85D8F6" 0022 0023 property int selectedIndex: -1 0024 property alias containerModel: list.model 0025 property bool bonusRunning: false 0026 0027 signal up 0028 signal down 0029 signal space 0030 0031 onUp: list.decrementCurrentIndex() 0032 onDown: list.incrementCurrentIndex() 0033 onSpace: selectItem() 0034 0035 function selectItem() { 0036 if(list.currentIndex == selectedIndex) { 0037 selectedIndex = -1 0038 } else if(selectedIndex != -1) { 0039 containerModel.move(selectedIndex, list.currentIndex, 1) 0040 selectedIndex = -1 0041 } else { 0042 selectedIndex = list.currentIndex 0043 } 0044 } 0045 0046 function checkWin() { 0047 var win = true 0048 // The shifted numbering comes from the header in the List 0049 for(var i = 0; i < list.count; i++) { 0050 if(list.contentItem.children[i].placed === false) { 0051 win = false 0052 return 0053 } 0054 } 0055 if(win) { 0056 bonusRunning = true 0057 bonus.good("tux") 0058 list.currentIndex = -1 0059 } 0060 } 0061 0062 function stopTimer() { 0063 timer.stop(); 0064 } 0065 0066 Component { 0067 id: listElement 0068 0069 Rectangle { 0070 id: listRect 0071 color: wholeBody.selectedIndex == index ? "#b5b9ff" : (placed ? "#c1ffb4" : "#F0F0F0") 0072 border.width: list.currentIndex == index ? 0 : ApplicationInfo.ratio 0073 border.color: "#373737" 0074 radius: 3 0075 width: list.width 0076 height: textinfo.height + background.baseMargins 0077 0078 property bool placed: model.sequence === index 0079 property string text: model.text 0080 0081 SequentialAnimation { 0082 id: borderAnim 0083 running: list.currentIndex == index 0084 loops: Animation.Infinite 0085 NumberAnimation { 0086 target: listRect 0087 property: "border.width" 0088 to: 2 * ApplicationInfo.ratio; duration: 500 0089 easing.type: Easing.InOutQuad 0090 } 0091 NumberAnimation { 0092 target: listRect 0093 property: "border.width" 0094 to: 0; duration: 500 0095 easing.type: Easing.InOutQuad 0096 } 0097 } 0098 0099 GCText { 0100 id: textinfo 0101 text: listRect.text 0102 anchors.centerIn: parent 0103 horizontalAlignment: Text.AlignHCenter 0104 width: parent.width - background.baseMargins 0105 wrapMode: Text.WordWrap 0106 fontSize: smallSize 0107 color: "#373737" 0108 } 0109 0110 MouseArea { 0111 id: dragArea 0112 anchors.fill: parent 0113 onClicked: { 0114 list.currentIndex = index 0115 wholeBody.selectItem() 0116 } 0117 } 0118 0119 Behavior on color { 0120 ColorAnimation { 0121 duration: 200 0122 } 0123 } 0124 0125 } 0126 } 0127 0128 ListModel { 0129 id: containerModel 0130 } 0131 0132 ListView { 0133 id: list 0134 anchors { 0135 top: parent.top 0136 left: parent.left 0137 right: scrollItem.left 0138 bottom: parent.bottom 0139 topMargin: background.baseMargins 0140 leftMargin: background.baseMargins 0141 rightMargin: background.baseMargins 0142 bottomMargin: bar.height * 1.5 0143 } 0144 model: containerModel 0145 spacing: 5 * ApplicationInfo.ratio 0146 delegate: listElement 0147 interactive: true 0148 // setting huge cacheBuffer is needed to make sure hidden children are not discarded... 0149 cacheBuffer: 100000 0150 clip: true 0151 0152 header: Item { 0153 width: parent.width 0154 height: heading.height + background.baseMargins * 2 0155 Rectangle { 0156 width: parent.width 0157 height: heading.height + background.baseMargins 0158 radius: background.baseMargins * 0.5 0159 anchors.top: parent.top 0160 color: "#80FFFFFF" 0161 GCText { 0162 id: heading 0163 text: qsTr("Arrange the events in the order in which they happened. " + 0164 "Select the line to move, then select its target position.") 0165 width: parent.width - background.baseMargins * 2 0166 wrapMode: Text.WordWrap 0167 horizontalAlignment: Text.AlignHCenter 0168 anchors.centerIn: parent 0169 color: "#373737" 0170 fontSize: smallSize 0171 } 0172 } 0173 } 0174 onCurrentIndexChanged: { 0175 if(!wholeBody.bonusRunning) { 0176 timer.restart(); 0177 } 0178 } 0179 displaced: Transition { 0180 NumberAnimation { properties: "y"; duration: 500 } 0181 } 0182 move: Transition { 0183 NumberAnimation { properties: "y"; duration: 500 } 0184 } 0185 Component.onCompleted: currentIndex = -1 0186 } 0187 0188 GCButtonScroll { 0189 id: scrollItem 0190 anchors.right: parent.right 0191 anchors.rightMargin: background.baseMargins 0192 anchors.top: parent.top 0193 anchors.topMargin: background.baseMargins 0194 anchors.bottom: parent.bottom 0195 anchors.bottomMargin: bar.height * 1.5 0196 onUp: list.flick(0, 1000) 0197 onDown: list.flick(0, -1000) 0198 upVisible: list.atYBeginning ? false : true 0199 downVisible: list.atYEnd ? false : true 0200 } 0201 0202 Timer { 0203 id: timer 0204 interval: 1000 0205 running: false 0206 repeat: false 0207 onTriggered: wholeBody.checkWin() 0208 } 0209 }