2
* Copyright 2017 Canonical Ltd.
4
* This program is free software; you can redistribute it and/or modify
5
* it under the terms of the GNU Lesser General Public License as published by
6
* the Free Software Foundation; version 3.
8
* This program is distributed in the hope that it will be useful,
9
* but WITHOUT ANY WARRANTY; without even the implied warranty of
10
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
* GNU Lesser General Public License for more details.
13
* You should have received a copy of the GNU Lesser General Public License
14
* along with this program. If not, see <http://www.gnu.org/licenses/>.
16
* Authored by Jonas G. Drange <jonas.drange@canonical.com>
20
import QtQuick.Layouts 1.1
21
import Ubuntu.Components 1.3
22
import Ubuntu.Components.Popups 1.3
23
import Ubuntu.Components.ListItems 1.3 as ListItems
24
import Ubuntu.Settings.Components 0.1
25
import Ubuntu.Settings.Printers 0.1
40
flickable: printerFlickable
44
id: printerPageNotYetLoaded
49
anchors.centerIn: parent
55
Component.onCompleted: {
64
id: printerPageBitsLoader
66
sourceComponent: printer.isLoaded ? printerPageLoaded : printerPageNotYetLoaded
77
topMargin: units.gu(2)
90
checked: printer.printerEnabled
91
onCheckedChanged: printer.printerEnabled = checked
100
text: "Accepting jobs"
103
checked: printer.acceptJobs
104
onCheckedChanged: printer.acceptJobs = checked
115
onClicked: pageStack.push(jobPage, { printer: printer })
127
ListItems.SingleControl {
140
text: printer.description
141
onTextChanged: printer.description = text
146
ListItems.ValueSelector {
151
enabled: values.length > 1
153
values: printer.supportedDuplexModes
154
onSelectedIndexChanged: printer.duplexMode = selectedIndex
155
Component.onCompleted: {
157
selectedIndex = printer.duplexMode
162
ListItems.ValueSelector {
168
values: printer.supportedPageSizes
169
onSelectedIndexChanged: printer.pageSize = selectedIndex
170
Component.onCompleted: selectedIndex = printer.supportedPageSizes.indexOf(printer.pageSize)
173
ListItems.ValueSelector {
178
visible: printer.supportedColorModels.length
180
values: printer.supportedColorModels
181
enabled: values.length > 1
182
onSelectedIndexChanged: printer.colorModel = selectedIndex
183
Component.onCompleted: {
185
selectedIndex = printer.colorModel
189
ListItems.ValueSelector {
194
visible: printer.supportedPrintQualities.length
196
values: printer.supportedPrintQualities
197
enabled: values.length > 1
198
onSelectedIndexChanged: printer.printQuality = selectedIndex
199
Component.onCompleted: {
201
selectedIndex = printer.printQuality
215
title: "%1 (%2 jobs)".arg(printer.name).arg(jobList.count)
224
height: jobLayout.height + (divider.visible ? divider.height : 0)
227
title.text: displayName
232
height: units.gu(2.5)
233
name: "stock_document"
234
SlotsLayout.position: SlotsLayout.First
248
title: "Printer jobs"
255
model: Printers.printJobs
257
height: jobsLayout.height + (divider.visible ? divider.height : 0)
260
title.text: displayName
265
height: units.gu(2.5)
266
name: "stock_document"
267
SlotsLayout.position: SlotsLayout.First
279
Component.onCompleted: push(printersPage)
285
flickable: printerList
291
onTriggered: pageStack.push(addPrinterPageComponent)
294
iconName: "document-print"
296
onTriggered: pageStack.push(allJobsPage)
305
anchors { fill: parent }
306
model: Printers.allPrintersWithPdf
308
height: modelLayout.height + (divider.visible ? divider.height : 0)
309
trailingActions: ListItemActions {
314
if (!Printers.removePrinter(model.name)) {
315
console.error('failed to remove printer', Printers.lastMessage);
320
iconName: model.default ? "starred" : "non-starred"
321
enabled: !model.default
322
onTriggered: Printers.defaultPrinterName = model.name
329
title.text: displayName
330
title.font.bold: model.default
335
height: units.gu(2.5)
336
name: "printer-symbolic"
337
SlotsLayout.position: SlotsLayout.First
342
onClicked: pageStack.push(printerPage, { printer: model })
349
id: addPrinterPageComponent
364
target: addPrinterCol
368
script: okTimer.start()
374
target: errorMessageContainer
381
flickable: addPrinterFlickable
382
leadingActionBar.actions: [
387
onTriggered: pageStack.pop()
398
if (driverSelector.selectedIndex == 0) {
399
ret = Printers.addPrinter(
401
driversView.selectedDriver,
403
printerDescription.text,
407
ret = Printers.addPrinterWithPpdFile(
411
printerDescription.text,
416
addPrinterPage.state = "success"
418
errorMessage.text = Printers.lastMessage;
419
addPrinterPage.state = "failure"
427
Component.onCompleted: {
428
Printers.prepareToAddPrinter();
434
onTriggered: pageStack.pop();
438
id: addPrinterFlickable
443
property bool enabled: true
450
id: errorMessageContainer
462
topMargin: units.gu(2)
463
horizontalCenter: parent.horizontalCenter
473
placeholderText: "ipp://server.local/my-queue"
475
enabled: parent.enabled
478
ListItems.ValueSelector {
484
text: "Choose driver"
486
"Select printer from database",
489
enabled: parent.enabled
497
text: "Filter drivers"
500
onTextChanged: Printers.driverFilter = text
502
visible: driverSelector.selectedIndex == 0
503
enabled: parent.enabled
508
property string selectedDriver
509
property bool loading: true
510
visible: driverSelector.selectedIndex == 0
511
model: Printers.drivers
512
anchors { left: parent.left; right: parent.right }
515
enabled: parent.enabled
516
highlightFollowsCurrentItem: false
517
highlight: Rectangle {
519
y: driversView.currentItem.y
520
width: driversView.currentItem.width
521
height: driversView.currentItem.height
522
color: theme.palette.selected.background
525
height: driverLayout.height + (divider.visible ? divider.height : 0)
528
title.text: displayName
530
summary.text: deviceId
533
driversView.selectedDriver = name
534
driversView.currentIndex = index
539
anchors.centerIn: parent
540
running: parent.loading
547
driversView.loading = false;
554
visible: driverSelector.selectedIndex == 1
557
placeholderText: "/usr/share/cups/foo.ppd"
559
enabled: parent.enabled
570
placeholderText: "laserjet"
572
enabled: parent.enabled
580
text: "Description (optional)"
582
id: printerDescription
583
placeholderText: "HP Laserjet with Duplexer"
585
enabled: parent.enabled
593
text: "Location (optional)"
596
placeholderText: "Lab 1"
598
enabled: parent.enabled