summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--LICENSES/LGPLv2.1-Presentation83
-rw-r--r--LICENSES/LGPLv2.1-Presentation-Exception22
-rw-r--r--src/qml/calamares/slideshow/Presentation.qml175
-rw-r--r--src/qml/calamares/slideshow/Slide.qml13
4 files changed, 202 insertions, 91 deletions
diff --git a/LICENSES/LGPLv2.1-Presentation b/LICENSES/LGPLv2.1-Presentation
new file mode 100644
index 000000000..1bb6461eb
--- /dev/null
+++ b/LICENSES/LGPLv2.1-Presentation
@@ -0,0 +1,83 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QML Presentation System.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, 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.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QML Presentation System.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, 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.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
diff --git a/LICENSES/LGPLv2.1-Presentation-Exception b/LICENSES/LGPLv2.1-Presentation-Exception
new file mode 100644
index 000000000..7e2e30ff9
--- /dev/null
+++ b/LICENSES/LGPLv2.1-Presentation-Exception
@@ -0,0 +1,22 @@
+Digia Qt LGPL Exception version 1.1
+
+As an additional permission to the GNU Lesser General Public License version
+2.1, the object code form of a "work that uses the Library" may incorporate
+material from a header file that is part of the Library. You may distribute
+such object code under terms of your choice, provided that:
+ (i) the header files of the Library have not been modified; and
+ (ii) the incorporated material is limited to numerical parameters, data
+ structure layouts, accessors, macros, inline functions and
+ templates; and
+ (iii) you comply with the terms of Section 6 of the GNU Lesser General
+ Public License version 2.1.
+
+Moreover, you may apply this exception to a modified version of the Library,
+provided that such modification does not involve copying material from the
+Library into the modified Library's header files unless such material is
+limited to (i) numerical parameters; (ii) data structure layouts;
+(iii) accessors; and (iv) small macros, templates and inline functions of
+five lines or less in length.
+
+Furthermore, you are not required to apply this additional permission to a
+modified version of the Library.
diff --git a/src/qml/calamares/slideshow/Presentation.qml b/src/qml/calamares/slideshow/Presentation.qml
index 59878c644..00903bfa3 100644
--- a/src/qml/calamares/slideshow/Presentation.qml
+++ b/src/qml/calamares/slideshow/Presentation.qml
@@ -1,29 +1,7 @@
-/* === This file is part of Calamares - <http://github.com/calamares> ===
- *
- * Copyright 2015, Teo Mrnjavac <teo@kde.org>
- *
- * Based on the QML Presentation System.
- * Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
- * Header reproduced verbatim below.
- *
- * Calamares is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Calamares is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Calamares. If not, see <http://www.gnu.org/licenses/>.
- */
-
/****************************************************************************
**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
**
** This file is part of the QML Presentation System.
**
@@ -62,18 +40,20 @@
****************************************************************************/
-import QtQuick 2.0
+import QtQuick 2.5
import QtQuick.Window 2.0
Item {
id: root
property variant slides: []
- property int currentSlide;
+ property int currentSlide: 0
property bool showNotes: false;
property bool allowDelay: true;
- property bool loop: true;
+ property alias mouseNavigation: mouseArea.enabled
+ property bool arrowNavigation: true
+ property bool keyShortcutsEnabled: true
property color titleColor: textColor;
property color textColor: "black"
@@ -83,6 +63,7 @@ Item {
// Private API
property bool _faded: false
property int _userNum;
+ property int _lastShownSlide: 0
Component.onCompleted: {
var slideCount = 0;
@@ -98,10 +79,8 @@ Item {
root._userNum = 0;
// Make first slide visible...
- if (root.slides.length > 0) {
- root.currentSlide = 0;
+ if (root.slides.length > 0)
root.slides[root.currentSlide].visible = true;
- }
}
function switchSlides(from, to, forward) {
@@ -110,6 +89,11 @@ Item {
return true
}
+ onCurrentSlideChanged: {
+ switchSlides(root.slides[_lastShownSlide], root.slides[currentSlide], currentSlide > _lastShownSlide)
+ _lastShownSlide = currentSlide
+ }
+
function goToNextSlide() {
root._userNum = 0
if (_faded)
@@ -118,38 +102,16 @@ Item {
if (root.slides[currentSlide]._advance())
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;
- }
- }
- else {
- if (root.loop) {
- var from = slides[currentSlide]
- var to = slides[0]
- if (switchSlides(from, to, true)) {
- currentSlide = 0;
- root.focus = true;
- }
- }
- }
+ if (currentSlide + 1 < root.slides.length)
+ ++currentSlide;
}
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;
- }
- }
+ if (currentSlide - 1 >= 0)
+ --currentSlide;
}
function goToUserSlide() {
@@ -158,38 +120,38 @@ Item {
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;
- }
+ else {
+ 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()
+ // directly type in the slide number: depends on root having focus
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;
}
}
+ // navigate with arrow keys
+ Shortcut { sequence: StandardKey.MoveToNextLine; enabled: root.arrowNavigation; onActivated: goToNextSlide() }
+ Shortcut { sequence: StandardKey.MoveToPreviousLine; enabled: root.arrowNavigation; onActivated: goToPreviousSlide() }
+ Shortcut { sequence: StandardKey.MoveToNextChar; enabled: root.arrowNavigation; onActivated: goToNextSlide() }
+ Shortcut { sequence: StandardKey.MoveToPreviousChar; enabled: root.arrowNavigation; onActivated: goToPreviousSlide() }
+
+ // presentation-specific single-key shortcuts (which interfere with normal typing)
+ Shortcut { sequence: " "; enabled: root.keyShortcutsEnabled; onActivated: goToNextSlide() }
+ Shortcut { sequence: "c"; enabled: root.keyShortcutsEnabled; onActivated: root._faded = !root._faded }
+
+ // standard shortcuts
+ Shortcut { sequence: StandardKey.MoveToNextPage; onActivated: goToNextSlide() }
+ Shortcut { sequence: StandardKey.MoveToPreviousPage; onActivated: goToPreviousSlide() }
+ Shortcut { sequence: StandardKey.Quit; onActivated: Qt.quit() }
+
Rectangle {
z: 1000
color: "black"
@@ -219,16 +181,61 @@ Item {
title: "QML Presentation: Notes"
visible: root.showNotes
- Text {
+ Flickable {
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 == "";
+ contentWidth: parent.width
+ contentHeight: textContainer.height
+
+ Item {
+ id: textContainer
+ width: parent.width
+ height: notesText.height + 2 * notesText.padding
+
+ Text {
+ id: notesText
+
+ property real padding: 16;
+
+ x: padding
+ y: padding
+ width: parent.width - 2 * padding
+
+
+ font.pixelSize: 16
+ wrapMode: Text.WordWrap
+
+ property string notes: root.slides[root.currentSlide].notes;
+
+ onNotesChanged: {
+ var result = "";
+
+ var lines = notes.split("\n");
+ var beginNewLine = false
+ for (var i=0; i<lines.length; ++i) {
+ var line = lines[i].trim();
+ if (line.length == 0) {
+ beginNewLine = true;
+ } else {
+ if (beginNewLine && result.length) {
+ result += "\n\n"
+ beginNewLine = false
+ }
+ if (result.length > 0)
+ result += " ";
+ result += line;
+ }
+ }
+
+ if (result.length == 0) {
+ font.italic = true;
+ text = "no notes.."
+ } else {
+ font.italic = false;
+ text = result;
+ }
+ }
+ }
+ }
}
}
}
diff --git a/src/qml/calamares/slideshow/Slide.qml b/src/qml/calamares/slideshow/Slide.qml
index e46b5687d..d5c43c830 100644
--- a/src/qml/calamares/slideshow/Slide.qml
+++ b/src/qml/calamares/slideshow/Slide.qml
@@ -167,20 +167,19 @@ Item {
Rectangle {
id: dot
- y: baseFontSize * row.indentFactor / 2
- width: baseFontSize / 4
- height: baseFontSize / 4
+ anchors.baseline: text.baseline
+ anchors.baselineOffset: -text.font.pixelSize / 2
+ width: text.font.pixelSize / 3
+ height: text.font.pixelSize / 3
color: slide.textColor
radius: width / 2
- smooth: true
opacity: text.text.length == 0 ? 0 : 1
}
- Rectangle {
+ Item {
id: space
- width: dot.width * 2
+ width: dot.width * 1.5
height: 1
- color: "#00ffffff"
}
Text {