Warning, /education/gcompris/src/core/IntroMessage.qml is written in an unsupported language. File is not indexed.

0001 /*GCompris - IntroMessage.qml
0002 *
0003 *   SPDX-FileCopyrightText: 2015 Siddhesh suthar <siddhesh.it@gmail.com>
0004 *
0005 * Authors:
0006 *
0007 *   Siddhesh suthar <siddhesh.it@gmail.com>
0008 *   Sagar Chand Agarwal <atomsagar@gmail.com>
0009 *
0010 *   SPDX-License-Identifier: GPL-3.0-or-later
0011 */
0012 
0013 import QtQuick 2.12
0014 import GCompris 1.0
0015 
0016 /**
0017  * A QML component for multi activity introduction in GCompris.
0018  *
0019  * Use IntroMessage when you want to present an introductory message to the
0020  * user, that provides background information or gameplay hints.
0021  *
0022  * Contains the following basic layout elements: Introduction text (intro), a
0023  * skip and an @c Next button to leave the introduction or navigate through it.
0024  * The introDone signal is emitted when the introduction has finished and can
0025  * be used to prepare the start of the activity.
0026  *
0027  * @ingroup components
0028  * @inherit QtQuick.Item
0029  */
0030 
0031 Item {
0032     id: message
0033 
0034     focus: true
0035     anchors.fill: parent
0036     visible: index == -1 ? false : true
0037 
0038     /**
0039      * Emitted when the index of intro is equal to its length
0040      * or when skipButton is clicked.
0041      */
0042     signal introDone
0043 
0044     /**
0045      * The index of the intro array.
0046      *
0047      * Set to -1 to hide the IntroMessage item.
0048      */
0049     property int index: 0
0050 
0051     /**
0052      * The texts array used as introduction.
0053      *
0054      * It has to be filled by the user when defining an IntroMessage item.
0055      */
0056     property var intro
0057 
0058     property int textContainerWidth: 0.9 * parent.width
0059     property int textContainerHeight: 0.75 * parent.height - nextButton.height
0060 
0061     Keys.onPressed: {
0062         if(event.key === Qt.Key_Left && previousButton.visible) {
0063             previousButton.clicked();
0064         } else if(event.key === Qt.Key_Right && nextButton.visible) {
0065             nextButton.clicked();
0066         } else if(event.key === Qt.Key_Return || event.key === Qt.Key_Enter) {
0067             skipButton.clicked();
0068         } else if(event.key === Qt.Key_Space) {
0069             if(nextButton.visible) {
0070                 nextButton.clicked();
0071             } else {
0072                 skipButton.clicked();
0073             }
0074         }
0075         event.accepted = true;
0076     }
0077 
0078     Keys.onEscapePressed: {
0079         skipButton.clicked();
0080         event.accepted = true;
0081     }
0082 
0083     Keys.onReleased: {
0084         if(event.key === Qt.Key_Back) {
0085             skipButton.clicked();
0086             event.accepted = true;
0087         }
0088     }
0089 
0090     // to avoid clicking on the activity
0091     MouseArea {
0092         anchors.fill: parent
0093     }
0094 
0095     Rectangle {
0096         id: introTextContainer
0097         width: introText.width + 20
0098         height: introText.height + 2
0099         anchors.top: introText.top
0100         anchors.horizontalCenter: introText.horizontalCenter
0101         opacity: 0.9
0102         color: "white"
0103         border.color: "#87A6DD"
0104         border.width: 6
0105         radius: 10
0106     }
0107 
0108     GCText {
0109         id: introText
0110         anchors {
0111             horizontalCenter: parent.horizontalCenter
0112             top: parent.top
0113             topMargin: 10
0114         }
0115         width: textContainerWidth
0116         height: textContainerHeight
0117         horizontalAlignment: Text.AlignHCenter
0118         verticalAlignment: Text.AlignVCenter
0119         color: "black"
0120         minimumPixelSize: 10
0121         wrapMode: Text.WordWrap
0122         fontSizeMode: Text.Fit
0123         text: parent.index == -1 ? "" : parent.intro[parent.index]
0124     }
0125 
0126     IntroButton {
0127         id: previousButton
0128         width: parent.width / 4
0129         height: 90
0130         z: 5
0131         anchors.right: nextButton.left
0132         anchors.topMargin: 15
0133         anchors.rightMargin: 15
0134             anchors.top: introTextContainer.bottom
0135         visible: index != 0
0136 
0137         text: qsTr("Previous")
0138 
0139         onClicked: --index;
0140     }
0141 
0142     IntroButton {
0143         id: nextButton
0144         width: parent.width / 4
0145         height: 90
0146         z: 5
0147         anchors.right: skipButton.left
0148         anchors.topMargin: 15
0149         anchors.rightMargin: 15
0150             anchors.top: introTextContainer.bottom
0151         visible: index != (intro.length - 1)
0152 
0153         text: qsTr("Next")
0154 
0155         onClicked: index++;
0156     }
0157 
0158     IntroButton {
0159         id: skipButton
0160         width: parent.width / 4
0161         height: 90
0162         z: 5
0163         anchors.right: parent.right
0164         anchors.rightMargin: 15
0165         anchors.topMargin: 15
0166             anchors.top: introTextContainer.bottom
0167 
0168         text: nextButton.visible ? qsTr("Skip") : qsTr("Start")
0169 
0170         onClicked: {
0171             index = -1;
0172             message.introDone();
0173             }
0174     }
0175 }