harbour-seaprint/qml/pages/FirstPage.qml

293 lines
10 KiB
QML
Raw Normal View History

2019-12-01 17:40:10 +03:00
import QtQuick 2.0
import Sailfish.Silica 1.0
2019-12-01 17:55:55 +03:00
import Sailfish.Pickers 1.0
import seaprint.ippdiscovery 1.0
import seaprint.ippprinter 1.0
import "utils.js" as Utils
2019-12-15 14:11:40 +03:00
import "../components"
2019-12-01 17:55:55 +03:00
import Nemo.DBus 2.0
2019-12-01 17:40:10 +03:00
Page {
id: page
allowedOrientations: Orientation.All
2019-12-17 22:33:21 +03:00
property string selectedFile: ""
2020-01-03 14:45:51 +03:00
property string selectedFileType
2019-12-01 17:55:55 +03:00
2019-12-02 22:56:38 +03:00
WifiChecker {
id: wifi
onConnectedChanged: {
console.log("conn", connected, ssid)
2019-12-02 22:56:38 +03:00
if(connected) {
var favourites = db.getFavourites(ssid);
console.log(favourites);
IppDiscovery.favourites = favourites;
2019-12-02 22:56:38 +03:00
}
else {
IppDiscovery.favourites = []
2019-12-02 22:56:38 +03:00
}
2019-12-02 22:23:44 +03:00
2019-12-01 22:21:36 +03:00
}
property bool initialSSIDchange: true
onSsidChanged: {
console.log("ssid changed", ssid);
if(!initialSSIDchange)
{
IppDiscovery.reset();
}
initialSSIDchange = false;
}
2019-12-01 17:55:55 +03:00
}
2019-12-17 22:20:09 +03:00
signal refreshed()
2019-12-01 17:55:55 +03:00
Component.onCompleted: {
IppDiscovery.discover();
if(selectedFile != "")
{ // Until i can convince FilePickerPage to do its magic without user interaction
if(Utils.endsWith(".pdf", selectedFile))
{
selectedFileType = "application/pdf"
}
else if(Utils.endsWith(".jpg", selectedFile) || Utils.endsWith(".jpeg", selectedFile))
{
selectedFileType = "image/jpeg"
}
else
{
selectedFile = ""
}
}
2019-12-01 17:55:55 +03:00
}
2019-12-01 17:40:10 +03:00
// To enable PullDownMenu, place our content in a SilicaFlickable
SilicaFlickable {
anchors.fill: parent
// PullDownMenu and PushUpMenu must be declared in SilicaFlickable, SilicaListView or SilicaGridView
PullDownMenu {
MenuItem {
2019-12-13 23:36:39 +03:00
text: qsTr("About SeaPrint")
onClicked: pageStack.push(Qt.resolvedUrl("AboutPage.qml"))
}
2019-12-01 17:40:10 +03:00
MenuItem {
2019-12-01 17:55:55 +03:00
text: qsTr("Add by URL")
2019-12-02 22:56:38 +03:00
enabled: wifi.connected
2019-12-02 22:23:44 +03:00
onClicked: {
var dialog = pageStack.push(Qt.resolvedUrl("AddPrinterDialog.qml"),
2019-12-02 22:56:38 +03:00
{ssid: wifi.ssid, title: qsTr("URL")});
2019-12-02 22:23:44 +03:00
dialog.accepted.connect(function() {
2019-12-13 21:14:50 +03:00
console.log("add", wifi.ssid, dialog.value);
2019-12-02 22:56:38 +03:00
db.addFavourite(wifi.ssid, dialog.value);
IppDiscovery.favourites = db.getFavourites(wifi.ssid);
2019-12-02 22:23:44 +03:00
})
2019-12-01 17:55:55 +03:00
}
}
MenuItem {
text: qsTr("Refresh")
2019-12-01 22:21:36 +03:00
onClicked: {
IppDiscovery.discover();
2019-12-17 22:20:09 +03:00
page.refreshed();
2019-12-01 22:21:36 +03:00
}
2019-12-01 17:40:10 +03:00
}
}
2019-12-01 17:55:55 +03:00
SilicaListView {
anchors.fill: parent
id: listView
model: IppDiscovery
2019-12-01 17:55:55 +03:00
spacing: Theme.paddingSmall
2019-12-08 15:55:56 +03:00
delegate: ListItem {
2019-12-01 17:55:55 +03:00
id: delegate
2019-12-08 15:55:56 +03:00
contentItem.height: visible ? Math.max(column.implicitHeight, Theme.itemSizeLarge+2*Theme.paddingMedium) : 0
2019-12-13 21:14:50 +03:00
visible: false
2020-01-03 00:10:58 +03:00
property string name: printer.attrs["printer-name"].value != "" ? printer.attrs["printer-name"].value : qsTr("Unknown")
property bool canPrint: Utils.supported_formats(printer).mimetypes.indexOf(selectedFileType) != -1
2019-12-13 21:14:50 +03:00
Connections {
target: printer
onAttrsChanged: {
if(Object.keys(printer.attrs).length === 0) {
delegate.visible = false
}
else {
delegate.visible = true
}
}
}
2019-12-17 22:20:09 +03:00
Connections {
target: page
onRefreshed: {
console.log("onRefreshed")
printer.refresh()
}
}
2020-01-26 15:27:56 +03:00
Timer
{
id: debugCountReset
interval: 666
repeat: false
onTriggered:
{
debugCount = 0;
}
}
property int debugCount: 0
2019-12-01 17:55:55 +03:00
onClicked: {
2020-01-26 15:27:56 +03:00
if(++debugCount == 5)
{
pageStack.push(Qt.resolvedUrl("DebugPage.qml"), {printer: printer})
return;
}
debugCountReset.restart();
2019-12-13 21:14:50 +03:00
if(!canPrint)
return;
2019-12-01 17:55:55 +03:00
if(selectedFile != "")
{
pageStack.push(Qt.resolvedUrl("PrinterPage.qml"), {printer: printer, selectedFile: selectedFile})
}
else
{
notifier.notify(qsTr("No file selected"))
}
}
2019-12-01 17:40:10 +03:00
2019-12-01 17:55:55 +03:00
IppPrinter {
id: printer
url: model.display
}
Image {
id: icon
anchors.top: parent.top
anchors.left: parent.left
anchors.topMargin: Theme.paddingMedium
anchors.leftMargin: Theme.paddingMedium
height: Theme.itemSizeLarge
width: Theme.itemSizeLarge
source: printer.attrs["printer-icons"] ? "image://ippdiscovery/"+printer.attrs["printer-icons"].value[0] : "icon-seaprint-nobg.svg"
2019-12-01 17:55:55 +03:00
// Some printers serve their icons over https with invalid certs...
2019-12-12 23:59:58 +03:00
onStatusChanged: if (status == Image.Error) source = "icon-seaprint-nobg.svg"
2020-01-26 15:27:56 +03:00
2019-12-01 17:55:55 +03:00
}
Column {
id: column
anchors.left: icon.right
anchors.leftMargin: Theme.paddingMedium
Label {
id: name_label
2019-12-13 21:14:50 +03:00
color: canPrint ? Theme.primaryColor : Theme.secondaryColor
text: name
2019-12-01 17:55:55 +03:00
}
Label {
id: mm_label
2019-12-13 21:14:50 +03:00
color: canPrint ? Theme.primaryColor : Theme.secondaryColor
2019-12-01 17:55:55 +03:00
font.pixelSize: Theme.fontSizeExtraSmall
text: printer.attrs["printer-make-and-model"].value
}
Label {
id: uri_label
2019-12-13 21:14:50 +03:00
color: canPrint ? Theme.highlightColor : Theme.secondaryColor
2019-12-01 17:55:55 +03:00
font.pixelSize: Theme.fontSizeTiny
text: printer.url
2019-12-01 17:55:55 +03:00
}
Row {
spacing: Theme.paddingMedium
Label {
id: format_unsupported_label
visible: format_label.text == "" && maybe_format_label.text == ""
color: "red"
font.pixelSize: Theme.fontSizeExtraSmall
text: qsTr("No compatible formats supported")
}
Label {
id: format_label
color: canPrint ? Theme.primaryColor : "red"
font.pixelSize: Theme.fontSizeExtraSmall
text: Utils.supported_formats(printer).supported
}
Label {
id: maybe_format_label
color: canPrint ? Theme.secondaryColor : "red"
font.pixelSize: Theme.fontSizeExtraSmall
font.italic: true
text: Utils.supported_formats(printer).maybe
}
2019-12-01 17:55:55 +03:00
}
2019-12-01 17:55:55 +03:00
}
2019-12-01 17:40:10 +03:00
RemorseItem {
id: removeRemorse
}
2019-12-08 15:55:56 +03:00
menu: ContextMenu {
MenuItem {
text: qsTr("View jobs")
onClicked: pageStack.push(Qt.resolvedUrl("JobsPage.qml"), {printer: printer})
}
2019-12-13 21:14:50 +03:00
MenuItem {
text: qsTr("Remove printer")
visible: db.isFavourite(wifi.ssid, model.display)
onClicked: {
removeRemorse.execute(delegate, qsTr("Removing printer"),
function() {db.removeFavourite(wifi.ssid, model.display);
IppDiscovery.favourites = db.getFavourites()})
2019-12-13 21:14:50 +03:00
}
}
2019-12-08 15:55:56 +03:00
}
2019-12-01 17:40:10 +03:00
}
2019-12-01 17:55:55 +03:00
onCountChanged: {
console.log("count", count)
}
}
}
DockedPanel {
id: fileDock
open: true
height: fileButton.height*2
width: parent.width
dock: Dock.Bottom
ValueButton {
id: fileButton
width: parent.width
anchors.verticalCenter: parent.verticalCenter
label: qsTr("Choose file")
value: selectedFile != "" ? selectedFile : qsTr("None")
onClicked: pageStack.push(filePickerPage)
}
Component {
id: filePickerPage
FilePickerPage {
title: fileButton.label
2019-12-18 23:32:49 +03:00
showSystemFiles: false
2020-01-20 22:11:41 +03:00
nameFilters: ["*.pdf", "*.jpg", "*.jpeg", "*.pwg", "*.urf"]
2019-12-01 17:55:55 +03:00
onSelectedContentPropertiesChanged: {
page.selectedFile = selectedContentProperties.filePath
2020-01-03 14:45:51 +03:00
page.selectedFileType = selectedContentProperties.mimeType
2019-12-01 17:55:55 +03:00
}
2019-12-01 17:40:10 +03:00
}
}
}
}