/**************************************************************************** ** ** 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 bool shouldTimeout: true property real timeout: 0 property bool showTapToAdvance: !shouldTimeout 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 * 10 : 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) } } } } }