Skip to content
This repository has been archived by the owner on Jan 22, 2022. It is now read-only.

Commit

Permalink
moved content picker to a popover
Browse files Browse the repository at this point in the history
  • Loading branch information
kugiigi committed Feb 4, 2021
1 parent f6f636e commit 0fe15d9
Show file tree
Hide file tree
Showing 2 changed files with 146 additions and 51 deletions.
136 changes: 136 additions & 0 deletions src/app/ContentExportDialog.qml
Original file line number Diff line number Diff line change
@@ -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 <http://www.gnu.org/licenses/>.
*/


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 {}
}
}
61 changes: 10 additions & 51 deletions src/app/DownloadsPage.qml
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}
]

Expand Down Expand Up @@ -169,7 +155,6 @@ BrowserPage {
ListView {
id: downloadsListView
anchors.fill: parent
focus: !exportPeerPicker.focus

model: SortFilterModel {
model: SortFilterModel {
Expand Down Expand Up @@ -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()
}
}
}
Expand Down Expand Up @@ -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
}

}

0 comments on commit 0fe15d9

Please sign in to comment.