From 0fe15d96f6f178f4eca13f8a3176939974a3335f Mon Sep 17 00:00:00 2001 From: Kugi Eusebio Date: Thu, 3 Dec 2020 02:23:57 +0800 Subject: [PATCH] moved content picker to a popover --- src/app/ContentExportDialog.qml | 136 ++++++++++++++++++++++++++++++++ src/app/DownloadsPage.qml | 61 +++----------- 2 files changed, 146 insertions(+), 51 deletions(-) create mode 100644 src/app/ContentExportDialog.qml diff --git a/src/app/ContentExportDialog.qml b/src/app/ContentExportDialog.qml new file mode 100644 index 000000000..7605eb2c1 --- /dev/null +++ b/src/app/ContentExportDialog.qml @@ -0,0 +1,136 @@ +/* + * Copyright 2015-2016 Canonical Ltd. + * + * This file is part of morph-browser. + * + * morph-browser 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; version 3. + * + * morph-browser 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 this program. If not, see . + */ + + +import QtQuick 2.9 +import Ubuntu.Components 1.3 +import Ubuntu.Components.Popups 1.3 +import Ubuntu.Content 1.3 + +import "UrlUtils.js" as UrlUtils + + +Popover { + id: contentExportDialog + + property alias path: exportPeerPicker.path + property alias contentType: exportPeerPicker.contentType + property string mimeType + property string downloadUrl + + property real maximumWidth: units.gu(70) + property real preferredWidth: caller ? caller.width * 0.9 : units.gu(40) + + property real maximumHeight: units.gu(80) + property real preferredHeight: caller ? caller.height > maximumHeight ? caller.height * 0.8 : caller.height - units.gu(5) : units.gu(40) + + signal preview(string url) + + contentHeight: dialogItem.height + contentWidth: preferredWidth > maximumWidth ? maximumWidth : preferredWidth + + Item { + id: dialogItem + height: (preferredHeight > maximumHeight ? maximumHeight : preferredHeight) + + anchors { + top: parent.top + left: parent.left + right: parent.right + } + + PageHeader { + id: header + title: i18n.tr("Open with") + anchors { + top: dialogItem.top + left: parent.left + right: parent.right + } + + leadingActionBar.actions: [ + Action { + iconName: "close" + text: i18n.tr("Close") + onTriggered: PopupUtils.close(contentExportDialog) + } + ] + + trailingActionBar { + actions: [ + Action { + iconName: "external-link" + text: i18n.tr("Open link in browser") + visible: (contentExportDialog.downloadUrl !== "") && (contentExportDialog.contentType !== ContentType.Unknown) + onTriggered: { + PopupUtils.close(contentExportDialog); + preview((contentExportDialog.mimeType === "application/pdf") ? UrlUtils.getPdfViewerExtensionUrlPrefix() + contentExportDialog.downloadUrl : contentExportDialog.downloadUrl); + } + }, + Action { + iconName: "document-open" + text: i18n.tr("Open file in browser") + visible: (contentExportDialog.contentType !== ContentType.Unknown) + onTriggered: { + PopupUtils.close(contentExportDialog); + preview((contentExportDialog.mimeType === "application/pdf") ? UrlUtils.getPdfViewerExtensionUrlPrefix() + "file://%1".arg(contentExportDialog.path) : contentExportDialog.path); + } + } + ] + } + } + + Item { + id: contentPickerItem + + height: (preferredHeight > maximumHeight ? maximumHeight : preferredHeight) - header.height + + anchors { + top: header.bottom + left: parent.left + right: parent.right + } + + ContentPeerPicker { + id: exportPeerPicker + + property string path + focus: visible + handler: ContentHandler.Destination + showTitle: false + + onPeerSelected: { + var transfer = peer.request() + if (transfer.state === ContentTransfer.InProgress) { + transfer.items = [contentItemComponent.createObject(contentExportDialog, {"url": path})] + transfer.state = ContentTransfer.Charged + } + PopupUtils.close(contentExportDialog) + } + onCancelPressed: PopupUtils.close(contentExportDialog) + Keys.onEscapePressed: PopupUtils.close(contentExportDialog) + } + } + + } + + Component { + id: contentItemComponent + ContentItem {} + } +} diff --git a/src/app/DownloadsPage.qml b/src/app/DownloadsPage.qml index 20875e22c..f9ef3951b 100644 --- a/src/app/DownloadsPage.qml +++ b/src/app/DownloadsPage.qml @@ -125,20 +125,6 @@ BrowserPage { selectMode = true multiSelect = true } - }, - Action { - iconName: "external-link" - visible: exportPeerPicker.visible && (exportPeerPicker.downloadUrl !== "") && (exportPeerPicker.contentType !== ContentType.Unknown) - onTriggered: { - preview((exportPeerPicker.mimeType === "application/pdf") ? UrlUtils.getPdfViewerExtensionUrlPrefix() + exportPeerPicker.downloadUrl : exportPeerPicker.downloadUrl); - } - }, - Action { - iconName: "document-open" - visible: exportPeerPicker.visible && (exportPeerPicker.contentType !== ContentType.Unknown) - onTriggered: { - preview((exportPeerPicker.mimeType === "application/pdf") ? UrlUtils.getPdfViewerExtensionUrlPrefix() + "file://%1".arg(exportPeerPicker.path) : exportPeerPicker.path); - } } ] @@ -169,7 +155,6 @@ BrowserPage { ListView { id: downloadsListView anchors.fill: parent - focus: !exportPeerPicker.focus model: SortFilterModel { model: SortFilterModel { @@ -242,20 +227,16 @@ BrowserPage { } onClicked: { - if (!selectMode) { - if (model.complete) { - exportPeerPicker.contentType = MimeTypeMapper.mimeTypeToContentType(model.mimetype); - exportPeerPicker.visible = true; - exportPeerPicker.path = model.path; - exportPeerPicker.mimeType = model.mimetype; - exportPeerPicker.downloadUrl = model.url; - } else { - if (download) { - if (paused) { - download.resume() - } else { - download.pause() - } + if (model.complete && !selectMode) { + var properties = {"path": model.path, "contentType": MimeTypeMapper.mimeTypeToContentType(model.mimetype), "mimeType": model.mimetype, "downloadUrl": model.url} + var exportDialog = PopupUtils.open(Qt.resolvedUrl("ContentExportDialog.qml"), downloadsItem, properties) + exportDialog.preview.connect(downloadsItem.preview) + } else { + if (download) { + if (paused) { + download.resume() + } else { + download.pause() } } } @@ -315,26 +296,4 @@ BrowserPage { id: contentItemComponent ContentItem {} } - - ContentPeerPicker { - id: exportPeerPicker - visible: false - focus: visible - anchors.fill: parent - handler: ContentHandler.Destination - property string path - property string mimeType - property string downloadUrl - onPeerSelected: { - var transfer = peer.request() - if (transfer.state === ContentTransfer.InProgress) { - transfer.items = [contentItemComponent.createObject(downloadsItem, {"url": path})] - transfer.state = ContentTransfer.Charged - } - visible = false - } - onCancelPressed: visible = false - Keys.onEscapePressed: visible = false - } - }