From 792602c8aaf387556c0035fc894493a20699c7e8 Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Wed, 29 May 2013 16:24:12 +0200 Subject: Experimental android version of Qt 5 intro Change-Id: I48041fc2abcf7d46943b5362cf84545e49d8889c Reviewed-by: Gunnar Sletta --- .../qt5-intro-android/presentation/Clock.qml | 77 ++++++++ .../qt5-intro-android/presentation/CodeSlide.qml | 162 ++++++++++++++++ .../presentation/Presentation.qml | 215 +++++++++++++++++++++ .../qt5-intro-android/presentation/Slide.qml | 192 ++++++++++++++++++ .../presentation/SlideCounter.qml | 61 ++++++ 5 files changed, 707 insertions(+) create mode 100644 experimental/qt5-intro-android/presentation/Clock.qml create mode 100644 experimental/qt5-intro-android/presentation/CodeSlide.qml create mode 100644 experimental/qt5-intro-android/presentation/Presentation.qml create mode 100644 experimental/qt5-intro-android/presentation/Slide.qml create mode 100644 experimental/qt5-intro-android/presentation/SlideCounter.qml (limited to 'experimental/qt5-intro-android/presentation') diff --git a/experimental/qt5-intro-android/presentation/Clock.qml b/experimental/qt5-intro-android/presentation/Clock.qml new file mode 100644 index 0000000..d4c97ce --- /dev/null +++ b/experimental/qt5-intro-android/presentation/Clock.qml @@ -0,0 +1,77 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the QML Presentation System. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Digia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + + +import QtQuick 2.0 + +Text { + id: clock + + property real fontSize: parent.height * 0.05 + property real fontScale: 0.5 + property color textColor: parent.textColor != undefined ? parent.textColor : "black" + property string fontFamily: parent.fontFamily != undefined ? parent.fontFamily : "Helvetica" + + text: currentTime(); + + function currentTime() { + var d = new Date(); + var m = d.getMinutes(); + if (m < 10) m = "0" + m; + return d.getHours() + ":" + m; + } + + color: textColor; + font.family: fontFamily; + font.pixelSize: fontSize * fontScale; + + anchors.bottom: parent.bottom; + anchors.left: parent.left; + anchors.margins: font.pixelSize; + + Timer { + interval: 60000; + repeat: true; + running: true + onTriggered: clock.text = clock.currentTime(); + } +} diff --git a/experimental/qt5-intro-android/presentation/CodeSlide.qml b/experimental/qt5-intro-android/presentation/CodeSlide.qml new file mode 100644 index 0000000..ba8626b --- /dev/null +++ b/experimental/qt5-intro-android/presentation/CodeSlide.qml @@ -0,0 +1,162 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the QML Presentation System. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Digia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +import QtQuick 2.0 + +Slide { + id: slide; + + property string codeFontFamily: parent.codeFontFamily; + property string code; + property real codeFontSize: baseFontSize * 0.6; + + + + Rectangle { + id: background + anchors.fill: parent + radius: height / 10; + gradient: Gradient { + GradientStop { position: 0; color: Qt.rgba(0.8, 0.8, 0.8, 0.5); } + GradientStop { position: 1; color: Qt.rgba(0.2, 0.2, 0.2, 0.5); } + } + border.color: slide.textColor; + border.width: height / 250; + antialiasing: true + } + + onCodeChanged: { + listModel.clear(); + var codeLines = slide.code.split("\n"); + for (var i=0; i 0) { + root.currentSlide = 0; + root.slides[root.currentSlide].visible = true; + } + } + + function switchSlides(from, to, forward) { + from.visible = false + to.visible = true + return true + } + + function goToNextSlide() { + root._userNum = 0 + if (_faded) + return + if (root.currentSlide + 1 < root.slides.length) { + var from = slides[currentSlide] + var to = slides[currentSlide + 1] + to.textAnimating = true + if (switchSlides(from, to, true)) { + currentSlide = currentSlide + 1; + root.focus = true; + } + } + } + + function goToPreviousSlide() { + root._userNum = 0 + if (root._faded) + return + if (root.currentSlide - 1 >= 0) { + var from = slides[currentSlide] + var to = slides[currentSlide - 1] + to.textAnimating = false + if (switchSlides(from, to, false)) { + currentSlide = currentSlide - 1; + root.focus = true; + } + } + } + + function goToUserSlide() { + --_userNum; + if (root._faded || _userNum >= root.slides.length) + return + if (_userNum < 0) + goToNextSlide() + else if (root.currentSlide != _userNum) { + var from = slides[currentSlide] + var to = slides[_userNum] + if (switchSlides(from, to, _userNum > currentSlide)) { + currentSlide = _userNum; + root.focus = true; + } + } + } + + focus: true + + + Keys.onSpacePressed: goToNextSlide() + Keys.onRightPressed: goToNextSlide() + Keys.onDownPressed: goToNextSlide() + Keys.onLeftPressed: goToPreviousSlide() + Keys.onUpPressed: goToPreviousSlide() + Keys.onEscapePressed: Qt.quit() + Keys.onPressed: { + if (event.key >= Qt.Key_0 && event.key <= Qt.Key_9) + _userNum = 10 * _userNum + (event.key - Qt.Key_0) + else { + if (event.key === Qt.Key_Return || event.key === Qt.Key_Enter) + goToUserSlide(); + else if (event.key === Qt.Key_VolumeUp) + root.masterVolume = Math.min(1.0, root.masterVolume + 0.1) + else if (event.key === Qt.Key_VolumeDown) + root.masterVolume = Math.max(0.0, root.masterVolume - 0.1) + else if (event.key === Qt.Key_VolumeMute) + root.masterVolume = 0.0 + else if (event.key === Qt.Key_Backspace) + goToPreviousSlide(); + else if (event.key === Qt.Key_C) + root._faded = !root._faded; + _userNum = 0; + } + } + Keys.onReleased: { + if (event.key === Qt.Key_Back) { + if (root.currentSlide > 0) { + goToPreviousSlide() + event.accepted = true + } + } + } + + Rectangle { + z: 1000 + color: "black" + anchors.fill: parent + opacity: root._faded ? 1 : 0 + Behavior on opacity { NumberAnimation { duration: 250 } } + } + + MouseArea { + id: mouseArea + anchors.fill: parent + acceptedButtons: Qt.LeftButton | Qt.RightButton + onClicked: { + if (mouse.button == Qt.RightButton) + goToPreviousSlide() + else + goToNextSlide() + } + onPressAndHold: goToPreviousSlide(); //A back mechanism for touch only devices + } + + Window { + id: notesWindow; + width: 400 + height: 300 + + title: "QML Presentation: Notes" + visible: root.showNotes + + Text { + anchors.fill: parent + anchors.margins: parent.height * 0.1; + + font.pixelSize: 16 + wrapMode: Text.WordWrap + + property string notes: root.slides[root.currentSlide].notes; + text: notes == "" ? "Slide has no notes..." : notes; + font.italic: notes == ""; + } + } +} diff --git a/experimental/qt5-intro-android/presentation/Slide.qml b/experimental/qt5-intro-android/presentation/Slide.qml new file mode 100644 index 0000000..039c3a3 --- /dev/null +++ b/experimental/qt5-intro-android/presentation/Slide.qml @@ -0,0 +1,192 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the QML Presentation System. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Digia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +import QtQuick 2.0 + +Item { + /* + Slides can only be instantiated as a direct child of a Presentation {} as they rely on + several properties there. + */ + + id: slide + + property bool isSlide: true; + + property string title; + property variant content: [] + property string centeredText + property string writeInText; + property string notes; + + property real fontSize: Math.min(parent.height, parent.width) * 0.05 + property real fontScale: 1 + + property real baseFontSize: fontSize * fontScale + property real titleFontSize: fontSize * 1.2 * fontScale + property real bulletSpacing: 1 + + property real contentWidth: width + + property bool textAnimating: true + + // Define the slide to be the "content area" + x: parent.width * 0.05 + y: parent.height * 0.2 + width: parent.width * 0.9 + height: parent.height * 0.7 + + property real masterWidth: parent.width + property real masterHeight: parent.height + + property color titleColor: parent.titleColor; + property color textColor: parent.textColor; + property string fontFamily: parent.fontFamily; + + property variant contentFormat: Text.PlainText + + visible: false + + Text { + id: titleText + font.pixelSize: titleFontSize + text: title; + anchors.horizontalCenter: parent.horizontalCenter + anchors.bottom: parent.top + anchors.bottomMargin: parent.fontSize * 1.5 + font.bold: true; + font.family: slide.fontFamily + color: slide.titleColor + horizontalAlignment: Text.Center + z: 1 + } + + Text { + id: centeredId + width: parent.width + anchors.centerIn: parent + anchors.verticalCenterOffset: - parent.y / 3 + text: centeredText + horizontalAlignment: Text.Center + font.pixelSize: baseFontSize + font.family: slide.fontFamily + color: slide.textColor + wrapMode: Text.Wrap + } + + Text { + id: writeInTextId + property int length; + font.family: slide.fontFamily + font.pixelSize: baseFontSize + color: slide.textColor + + anchors.fill: parent; + wrapMode: Text.Wrap + + text: slide.writeInText.substring(0, length); + + NumberAnimation on length { + from: 0; + to: slide.writeInText.length; + duration: slide.textAnimating ? slide.writeInText.length * 30 : 1; + running: slide.visible && parent.visible && slide.writeInText.length > 0 + } + + visible: slide.writeInText != undefined; + } + + + Column { + id: contentId + anchors.fill: parent + + Repeater { + model: content.length + + Row { + id: row + + function decideIndentLevel(s) { return s.charAt(0) == " " ? 1 + decideIndentLevel(s.substring(1)) : 0 } + property int indentLevel: decideIndentLevel(content[index]) + property int nextIndentLevel: index < content.length - 1 ? decideIndentLevel(content[index+1]) : 0 + property real indentFactor: (10 - row.indentLevel * 2) / 10; + + height: text.height + (nextIndentLevel == 0 ? 1 : 0.3) * slide.baseFontSize * slide.bulletSpacing + x: slide.baseFontSize * indentLevel + + Rectangle { + id: dot + y: baseFontSize * row.indentFactor / 2 + width: baseFontSize / 4 + height: baseFontSize / 4 + color: slide.textColor + radius: width / 2 + smooth: true + opacity: text.text.length == 0 ? 0 : 1 + } + + Rectangle { + id: space + width: dot.width * 2 + height: 1 + color: "#00ffffff" + } + + Text { + id: text + width: slide.contentWidth - parent.x - dot.width - space.width + font.pixelSize: baseFontSize * row.indentFactor + text: content[index] + textFormat: contentFormat + wrapMode: Text.WordWrap + color: slide.textColor + horizontalAlignment: Text.AlignLeft + font.family: slide.fontFamily + + onLinkActivated: Qt.openUrlExternally(link) + } + } + } + } + +} diff --git a/experimental/qt5-intro-android/presentation/SlideCounter.qml b/experimental/qt5-intro-android/presentation/SlideCounter.qml new file mode 100644 index 0000000..06e7542 --- /dev/null +++ b/experimental/qt5-intro-android/presentation/SlideCounter.qml @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the QML Presentation System. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Digia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +import QtQuick 2.0 + +Text { + id: counter; + + property real fontSize: parent.height * 0.05 + property real fontScale: 0.5; + property color textColor: parent.textColor != undefined ? parent.textColor : "black" + property string fontFamily: parent.fontFamily != undefined ? parent.fontFamily : "Helvetica" + + text: "# " + (parent.currentSlide + 1) + " / " + parent.slides.length; + color: counter.textColor; + font.family: counter.fontFamily; + font.pixelSize: fontSize * fontScale; + + anchors.right: parent.right; + anchors.bottom: parent.bottom; + anchors.margins: font.pixelSize; +} -- cgit v1.2.3