• Pierre Rossi's avatar
    Make WebUI popups work with QtQuick · c5431da0
    Pierre Rossi authored
    
    This is used by popups for select elements and date pickers among
    other things. We can keep using the same RenderWidgetHostViewQtDelegate
    implementations for that purpose, and query QPA to decide if they
    should be wrapped into their own QQuickWindow.
    
    Longer term, we might want to optionally delegate that functionality
    to QML.
    
    Change-Id: I88540ca32a9a707d380dfbf486b7f7806b5b65ff
    Reviewed-by: default avatarJocelyn Turcotte <jocelyn.turcotte@digia.com>
    c5431da0
DownloadView.qml 5.33 KiB
/****************************************************************************
**
** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the QtWebEngine module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
**   * Redistributions of source code must retain the above copyright
**     notice, this list of conditions and the following disclaimer.
**   * Redistributions in binary form must reproduce the above copyright
**     notice, this list of conditions and the following disclaimer in
**     the documentation and/or other materials provided with the
**     distribution.
**   * Neither the name of The Qt Company Ltd nor the names of its
**     contributors may be used to endorse or promote products derived
**     from this software without specific prior written permission.
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
** $QT_END_LICENSE$
****************************************************************************/
import QtQuick 2.1
import QtQuick.Controls 1.0
import QtQuick.Controls.Styles 1.0
import QtWebEngine 1.2
import QtQuick.Layouts 1.0
Rectangle {
    id: downloadView
    color: "lightgray"
    ListModel {
        id: downloadModel
        property var downloads: []
    function append(download) {
        downloadModel.append(download)
        downloadModel.downloads.push(download)
    Component {
        id: downloadItemDelegate
        Rectangle {
            width: listView.width
            height: childrenRect.height
            anchors.margins: 10
            radius: 3
            color: "transparent"
            border.color: "black"
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
Rectangle { id: progressBar property real progress: downloadModel.downloads[index] ? downloadModel.downloads[index].receivedBytes / downloadModel.downloads[index].totalBytes : 0 radius: 3 color: width == listView.width ? "green" : "#2b74c7" width: listView.width * progress height: cancelButton.height Behavior on width { SmoothedAnimation { duration: 100 } } } Rectangle { anchors { left: parent.left right: parent.right leftMargin: 20 } Label { id: label text: path anchors { verticalCenter: cancelButton.verticalCenter left: parent.left right: cancelButton.left } } Button { id: cancelButton anchors.right: parent.right iconSource: "icons/process-stop.png" onClicked: { var download = downloadModel.downloads[index] download.cancel() downloadModel.downloads = downloadModel.downloads.filter(function (el) { return el.id !== download.id; }); downloadModel.remove(index) } } } } } ListView { id: listView anchors { topMargin: 10 top: parent.top bottom: parent.bottom horizontalCenter: parent.horizontalCenter } width: parent.width - 20 spacing: 5 model: downloadModel delegate: downloadItemDelegate Text { visible: !listView.count horizontalAlignment: Text.AlignHCenter height: 30 anchors { top: parent.top left: parent.left
141142143144145146147148149150151152153154155156157158159160161162163164165166
right: parent.right } font.pixelSize: 20 text: "No active downloads." } Rectangle { color: "gray" anchors { bottom: parent.bottom left: parent.left right: parent.right } height: 30 Button { id: okButton text: "OK" anchors.centerIn: parent onClicked: { downloadView.visible = false } } } } }