Licensing: Re-import GPLv2.1 slideshow

Re-import presentation code (commercial, LGPLv2.1 or GPLv3), with licensing
info. Calamares chooses LGPLv2.1 for the QML "library" code.

 - Digia LGPL Exception obtained from:
   Repo: https://raw.githubusercontent.com/meta-qt5/meta-qt5/master/licenses/Digia-Qt-LGPL-Exception-1.1
   Rev: 48ebff679e5dc084d395b861a1fc4cb21790d51b
 - Presentation QML obtained from:
   Repo: https://github.com/qt-labs/qml-presentation-system
   Rev: 4071343a4dffffc4b05d777faa9c5cf54f2b4f08
This commit is contained in:
Adriaan de Groot 2017-09-25 13:26:31 +02:00
parent a4a05acc61
commit 420f135628
4 changed files with 200 additions and 89 deletions

View File

@ -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$
**
****************************************************************************/

View File

@ -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.

View File

@ -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). ** Copyright (C) 2016 The Qt Company Ltd.
** Contact: http://www.qt-project.org/legal ** Contact: https://www.qt.io/licensing/
** **
** This file is part of the QML Presentation System. ** 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 import QtQuick.Window 2.0
Item { Item {
id: root id: root
property variant slides: [] property variant slides: []
property int currentSlide; property int currentSlide: 0
property bool showNotes: false; property bool showNotes: false;
property bool allowDelay: true; 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 titleColor: textColor;
property color textColor: "black" property color textColor: "black"
@ -83,6 +63,7 @@ Item {
// Private API // Private API
property bool _faded: false property bool _faded: false
property int _userNum; property int _userNum;
property int _lastShownSlide: 0
Component.onCompleted: { Component.onCompleted: {
var slideCount = 0; var slideCount = 0;
@ -98,10 +79,8 @@ Item {
root._userNum = 0; root._userNum = 0;
// Make first slide visible... // Make first slide visible...
if (root.slides.length > 0) { if (root.slides.length > 0)
root.currentSlide = 0;
root.slides[root.currentSlide].visible = true; root.slides[root.currentSlide].visible = true;
}
} }
function switchSlides(from, to, forward) { function switchSlides(from, to, forward) {
@ -110,6 +89,11 @@ Item {
return true return true
} }
onCurrentSlideChanged: {
switchSlides(root.slides[_lastShownSlide], root.slides[currentSlide], currentSlide > _lastShownSlide)
_lastShownSlide = currentSlide
}
function goToNextSlide() { function goToNextSlide() {
root._userNum = 0 root._userNum = 0
if (_faded) if (_faded)
@ -118,38 +102,16 @@ Item {
if (root.slides[currentSlide]._advance()) if (root.slides[currentSlide]._advance())
return; return;
} }
if (root.currentSlide + 1 < root.slides.length) { if (currentSlide + 1 < root.slides.length)
var from = slides[currentSlide] ++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;
}
}
}
} }
function goToPreviousSlide() { function goToPreviousSlide() {
root._userNum = 0 root._userNum = 0
if (root._faded) if (root._faded)
return return
if (root.currentSlide - 1 >= 0) { if (currentSlide - 1 >= 0)
var from = slides[currentSlide] --currentSlide;
var to = slides[currentSlide - 1]
if (switchSlides(from, to, false)) {
currentSlide = currentSlide - 1;
root.focus = true;
}
}
} }
function goToUserSlide() { function goToUserSlide() {
@ -158,38 +120,38 @@ Item {
return return
if (_userNum < 0) if (_userNum < 0)
goToNextSlide() goToNextSlide()
else if (root.currentSlide != _userNum) { else {
var from = slides[currentSlide] currentSlide = _userNum;
var to = slides[_userNum] root.focus = true;
if (switchSlides(from, to, _userNum > currentSlide)) {
currentSlide = _userNum;
root.focus = true;
}
} }
} }
focus: true // directly type in the slide number: depends on root having focus
Keys.onSpacePressed: goToNextSlide()
Keys.onRightPressed: goToNextSlide()
Keys.onDownPressed: goToNextSlide()
Keys.onLeftPressed: goToPreviousSlide()
Keys.onUpPressed: goToPreviousSlide()
Keys.onEscapePressed: Qt.quit()
Keys.onPressed: { Keys.onPressed: {
if (event.key >= Qt.Key_0 && event.key <= Qt.Key_9) if (event.key >= Qt.Key_0 && event.key <= Qt.Key_9)
_userNum = 10 * _userNum + (event.key - Qt.Key_0) _userNum = 10 * _userNum + (event.key - Qt.Key_0)
else { else {
if (event.key == Qt.Key_Return || event.key == Qt.Key_Enter) if (event.key == Qt.Key_Return || event.key == Qt.Key_Enter)
goToUserSlide(); goToUserSlide();
else if (event.key == Qt.Key_Backspace)
goToPreviousSlide();
else if (event.key == Qt.Key_C)
root._faded = !root._faded;
_userNum = 0; _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 { Rectangle {
z: 1000 z: 1000
color: "black" color: "black"
@ -219,16 +181,61 @@ Item {
title: "QML Presentation: Notes" title: "QML Presentation: Notes"
visible: root.showNotes visible: root.showNotes
Text { Flickable {
anchors.fill: parent anchors.fill: parent
anchors.margins: parent.height * 0.1; contentWidth: parent.width
contentHeight: textContainer.height
font.pixelSize: 16 Item {
wrapMode: Text.WordWrap id: textContainer
width: parent.width
height: notesText.height + 2 * notesText.padding
property string notes: root.slides[root.currentSlide].notes; Text {
text: notes == "" ? "Slide has no notes..." : notes; id: notesText
font.italic: notes == "";
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;
}
}
}
}
} }
} }
} }

View File

@ -167,20 +167,19 @@ Item {
Rectangle { Rectangle {
id: dot id: dot
y: baseFontSize * row.indentFactor / 2 anchors.baseline: text.baseline
width: baseFontSize / 4 anchors.baselineOffset: -text.font.pixelSize / 2
height: baseFontSize / 4 width: text.font.pixelSize / 3
height: text.font.pixelSize / 3
color: slide.textColor color: slide.textColor
radius: width / 2 radius: width / 2
smooth: true
opacity: text.text.length == 0 ? 0 : 1 opacity: text.text.length == 0 ? 0 : 1
} }
Rectangle { Item {
id: space id: space
width: dot.width * 2 width: dot.width * 1.5
height: 1 height: 1
color: "#00ffffff"
} }
Text { Text {