summaryrefslogtreecommitdiffstats
path: root/experimental/qt5-intro-android/presentation/Slide.qml
diff options
context:
space:
mode:
Diffstat (limited to 'experimental/qt5-intro-android/presentation/Slide.qml')
-rw-r--r--experimental/qt5-intro-android/presentation/Slide.qml192
1 files changed, 192 insertions, 0 deletions
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)
+ }
+ }
+ }
+ }
+
+}