summaryrefslogtreecommitdiffstats
path: root/basicsuite/qt5-launchpresentation/presentation
diff options
context:
space:
mode:
Diffstat (limited to 'basicsuite/qt5-launchpresentation/presentation')
-rw-r--r--basicsuite/qt5-launchpresentation/presentation/Clock.qml77
-rw-r--r--basicsuite/qt5-launchpresentation/presentation/CodeSlide.qml162
-rw-r--r--basicsuite/qt5-launchpresentation/presentation/Presentation.qml196
-rw-r--r--basicsuite/qt5-launchpresentation/presentation/Slide.qml186
-rw-r--r--basicsuite/qt5-launchpresentation/presentation/SlideCounter.qml61
5 files changed, 682 insertions, 0 deletions
diff --git a/basicsuite/qt5-launchpresentation/presentation/Clock.qml b/basicsuite/qt5-launchpresentation/presentation/Clock.qml
new file mode 100644
index 0000000..d4c97ce
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/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/basicsuite/qt5-launchpresentation/presentation/CodeSlide.qml b/basicsuite/qt5-launchpresentation/presentation/CodeSlide.qml
new file mode 100644
index 0000000..ba8626b
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/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<codeLines.length; ++i) {
+ listModel.append({
+ line: i,
+ code: codeLines[i]
+ });
+ }
+ }
+
+
+
+ ListModel {
+ id: listModel
+ }
+
+
+ onVisibleChanged: {
+ listView.focus = slide.visible;
+ listView.currentIndex = -1;
+ }
+
+ ListView {
+ id: listView;
+
+ anchors.fill: parent;
+ anchors.margins: background.radius / 2
+ clip: true
+
+ model: listModel;
+ focus: true;
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: {
+ listView.focus = true;
+ listView.currentIndex = listView.indexAt(mouse.x, mouse.y + listView.contentY);
+ }
+
+ }
+
+ delegate: Item {
+
+ id: itemDelegate
+
+ height: lineLabel.height
+ width: parent.width
+
+ Rectangle {
+ id: lineLabelBackground
+ width: lineLabel.height * 3;
+ height: lineLabel.height;
+ color: slide.textColor;
+ opacity: 0.1;
+ }
+
+ Text {
+ id: lineLabel
+ anchors.right: lineLabelBackground.right;
+ text: (line+1) + ":"
+ color: slide.textColor;
+ font.family: slide.codeFontFamily
+ font.pixelSize: slide.codeFontSize
+ font.bold: itemDelegate.ListView.isCurrentItem;
+ opacity: itemDelegate.ListView.isCurrentItem ? 1 : 0.9;
+
+ }
+
+ Rectangle {
+ id: lineContentBackground
+ anchors.fill: lineContent;
+ anchors.leftMargin: -height / 2;
+ color: slide.textColor
+ opacity: 0.2
+ visible: itemDelegate.ListView.isCurrentItem;
+ }
+
+ Text {
+ id: lineContent
+ anchors.left: lineLabelBackground.right
+ anchors.leftMargin: lineContent.height;
+ anchors.right: parent.right;
+ color: slide.textColor;
+ text: code;
+ font.family: slide.codeFontFamily
+ font.pixelSize: slide.codeFontSize
+ font.bold: itemDelegate.ListView.isCurrentItem;
+ opacity: itemDelegate.ListView.isCurrentItem ? 1 : 0.9;
+ }
+ }
+ }
+
+
+
+}
diff --git a/basicsuite/qt5-launchpresentation/presentation/Presentation.qml b/basicsuite/qt5-launchpresentation/presentation/Presentation.qml
new file mode 100644
index 0000000..fc9ea4c
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/presentation/Presentation.qml
@@ -0,0 +1,196 @@
+/****************************************************************************
+**
+** 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
+import QtQuick.Window 2.0
+
+Item {
+ id: root
+
+ property variant slides: []
+ property int currentSlide;
+
+ property bool showNotes: false;
+
+ property color titleColor: textColor;
+ property color textColor: "black"
+ property string fontFamily: "Helvetica"
+ property string codeFontFamily: "Courier New"
+
+ // Private API
+ property bool _faded: false
+ property int _userNum;
+
+ Component.onCompleted: {
+ var slideCount = 0;
+ var slides = [];
+ for (var i=0; i<root.children.length; ++i) {
+ var r = root.children[i];
+ if (r.isSlide) {
+ slides.push(r);
+ }
+ }
+
+ root.slides = slides;
+ root._userNum = 0;
+
+ // Make first slide visible...
+ if (root.slides.length > 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]
+ 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]
+ 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_Backspace)
+ goToPreviousSlide();
+ else if (event.key == Qt.Key_C)
+ root._faded = !root._faded;
+ _userNum = 0;
+ }
+ }
+
+ 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/basicsuite/qt5-launchpresentation/presentation/Slide.qml b/basicsuite/qt5-launchpresentation/presentation/Slide.qml
new file mode 100644
index 0000000..339298d
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/presentation/Slide.qml
@@ -0,0 +1,186 @@
+/****************************************************************************
+**
+** 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: parent.height * 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
+
+ // 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;
+
+ 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.writeInText.length * 30;
+ 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: Text.PlainText
+ wrapMode: Text.WordWrap
+ color: slide.textColor
+ horizontalAlignment: Text.AlignLeft
+ font.family: slide.fontFamily
+ }
+ }
+ }
+ }
+
+}
diff --git a/basicsuite/qt5-launchpresentation/presentation/SlideCounter.qml b/basicsuite/qt5-launchpresentation/presentation/SlideCounter.qml
new file mode 100644
index 0000000..06e7542
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/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;
+}