De-duplicate some settings code
This commit is contained in:
parent
8fad10a2d1
commit
0fe054b3db
7 changed files with 73 additions and 127 deletions
|
@ -48,6 +48,7 @@ DISTFILES += qml/harbour-seaprint.qml \
|
|||
qml/components/CylinderGraph.qml \
|
||||
qml/components/DocumentFilter.notqml \
|
||||
qml/components/LargeChoiceDialog.qml \
|
||||
qml/components/SettingsColumn.qml \
|
||||
qml/components/SupplyItem.qml \
|
||||
qml/cover/CoverPage.qml \
|
||||
qml/components/*.qml \
|
||||
|
|
|
@ -5,7 +5,7 @@ import seaprint.mimer 1.0
|
|||
import "../pages/utils.js" as Utils
|
||||
|
||||
Setting {
|
||||
property var choices
|
||||
property var choices: parent.getChoices(name)
|
||||
property string mime_type
|
||||
|
||||
property var limited_choices: Utils.limitChoices(name, choices, mime_type, ConvertChecker)
|
||||
|
|
|
@ -2,8 +2,8 @@ import QtQuick 2.0
|
|||
import Sailfish.Silica 1.0
|
||||
|
||||
Setting {
|
||||
property int low
|
||||
property int high
|
||||
property int low: valid ? parent.printer.attrs[name+"-supported"].value.low : 0
|
||||
property int high: valid ? parent.printer.attrs[name+"-supported"].value.high : 0
|
||||
|
||||
property bool suppressChange: false
|
||||
|
||||
|
|
|
@ -3,17 +3,10 @@ import Sailfish.Silica 1.0
|
|||
import seaprint.ippmsg 1.0
|
||||
|
||||
Setting {
|
||||
property var printer
|
||||
|
||||
Component.onCompleted: {
|
||||
if((printer.attrs["media-left-margin-supported"].value.indexOf(0) != -1) &&
|
||||
(printer.attrs["media-right-margin-supported"].value.indexOf(0) != -1) &&
|
||||
(printer.attrs["media-top-margin-supported"].value.indexOf(0) != -1) &&
|
||||
(printer.attrs["media-bottom-margin-supported"].value.indexOf(0) != -1))
|
||||
{
|
||||
valid = true
|
||||
}
|
||||
}
|
||||
valid: ((parent.printer.attrs["media-left-margin-supported"].value.indexOf(0) != -1) &&
|
||||
(parent.printer.attrs["media-right-margin-supported"].value.indexOf(0) != -1) &&
|
||||
(parent.printer.attrs["media-top-margin-supported"].value.indexOf(0) != -1) &&
|
||||
(parent.printer.attrs["media-bottom-margin-supported"].value.indexOf(0) != -1))
|
||||
|
||||
displayValue: choice ? qsTr("true") : qsTr("false")
|
||||
|
||||
|
|
|
@ -8,10 +8,15 @@ Item {
|
|||
property string name
|
||||
property string prettyName
|
||||
property int tag
|
||||
property bool valid: false
|
||||
property bool _valid: parent.isValid(name)
|
||||
property bool valid: _valid
|
||||
|
||||
property var choice
|
||||
property var default_choice
|
||||
property var default_choice: parent.getDefaultChoice(name)
|
||||
|
||||
Component.onCompleted: parent.setInitialChoice(this)
|
||||
|
||||
onChoiceChanged: parent.choiceMade(this)
|
||||
|
||||
signal clicked()
|
||||
onClicked: {
|
||||
|
|
50
qml/components/SettingsColumn.qml
Normal file
50
qml/components/SettingsColumn.qml
Normal file
|
@ -0,0 +1,50 @@
|
|||
import QtQuick 2.6
|
||||
import Sailfish.Silica 1.0
|
||||
import seaprint.mimer 1.0
|
||||
import seaprint.ippprinter 1.0
|
||||
|
||||
Column {
|
||||
id: settingsColumn
|
||||
|
||||
property var printer
|
||||
property var jobParams
|
||||
property string selectedFile
|
||||
property string selectedFileType: Mimer.get_type(selectedFile)
|
||||
|
||||
function isValid(name) {
|
||||
return printer.attrs.hasOwnProperty(name+"-supported");
|
||||
}
|
||||
function setInitialChoice(setting) {
|
||||
if(jobParams.hasOwnProperty(setting.name))
|
||||
{
|
||||
if(setting.valid)
|
||||
{
|
||||
setting.choice = jobParams[setting.name].value;
|
||||
}
|
||||
else
|
||||
{ // Clear jobParams of invalid settings
|
||||
jobParams[setting.name] = undefined;
|
||||
}
|
||||
}
|
||||
}
|
||||
function getChoices(name) {
|
||||
return isValid(name) ? printer.attrs[name+"-supported"].value : [];
|
||||
}
|
||||
function getDefaultChoice(name) {
|
||||
return printer.attrs.hasOwnProperty(name+"-default") ? printer.attrs[name+"-default"].value : undefined;
|
||||
}
|
||||
function choiceMade(setting)
|
||||
{
|
||||
if(setting.choice != undefined)
|
||||
{
|
||||
jobParams[setting.name] = {tag: setting.tag, value: setting.choice};
|
||||
}
|
||||
else
|
||||
{
|
||||
jobParams[setting.name] = undefined;
|
||||
}
|
||||
console.log(JSON.stringify(jobParams));
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -10,10 +10,10 @@ Page {
|
|||
allowedOrientations: Orientation.All
|
||||
|
||||
id: page
|
||||
property var printer
|
||||
property var jobParams
|
||||
property string selectedFile
|
||||
property string selectedFileType: Mimer.get_type(selectedFile)
|
||||
property alias printer: settingsColumn.printer
|
||||
property alias jobParams: settingsColumn.jobParams
|
||||
property alias selectedFile: settingsColumn.selectedFile
|
||||
property alias selectedFileType: settingsColumn.selectedFileType
|
||||
|
||||
Connections {
|
||||
target: wifi
|
||||
|
@ -24,23 +24,10 @@ Page {
|
|||
}
|
||||
}
|
||||
|
||||
function choiceMade(setting)
|
||||
{
|
||||
if(setting.choice != undefined)
|
||||
{
|
||||
jobParams[setting.name] = {tag: setting.tag, value: setting.choice};
|
||||
}
|
||||
else
|
||||
{
|
||||
jobParams[setting.name] = undefined;
|
||||
}
|
||||
console.log(JSON.stringify(jobParams));
|
||||
}
|
||||
|
||||
// To enable PullDownMenu, place our content in a SilicaFlickable
|
||||
SilicaFlickable {
|
||||
anchors.fill: parent
|
||||
contentHeight: settingColumn.height
|
||||
contentHeight: settingsColumn.height
|
||||
|
||||
// PullDownMenu and PushUpMenu must be declared in SilicaFlickable, SilicaListView or SilicaGridView
|
||||
PullDownMenu {
|
||||
|
@ -85,8 +72,8 @@ Page {
|
|||
|
||||
VerticalScrollDecorator {}
|
||||
|
||||
Column {
|
||||
id: settingColumn
|
||||
SettingsColumn {
|
||||
id: settingsColumn
|
||||
width: parent.width
|
||||
|
||||
PageHeader {
|
||||
|
@ -95,163 +82,73 @@ Page {
|
|||
description: Utils.basename(selectedFile)
|
||||
}
|
||||
|
||||
Item {
|
||||
id: utils
|
||||
|
||||
function isValid(name) {
|
||||
return printer.attrs.hasOwnProperty(name+"-supported");
|
||||
}
|
||||
function setInitialChoice(setting) {
|
||||
if(jobParams.hasOwnProperty(setting.name))
|
||||
{
|
||||
if(setting.valid)
|
||||
{
|
||||
setting.choice = jobParams[setting.name].value;
|
||||
}
|
||||
else
|
||||
{ // Clear jobParams of invalid settings
|
||||
jobParams[setting.name] = undefined;
|
||||
}
|
||||
}
|
||||
}
|
||||
function getChoices(name) {
|
||||
return isValid(name) ? printer.attrs[name+"-supported"].value : [];
|
||||
}
|
||||
function getDefaultChoice(name) {
|
||||
return printer.attrs.hasOwnProperty(name+"-default") ? printer.attrs[name+"-default"].value : undefined;
|
||||
}
|
||||
}
|
||||
|
||||
ChoiceSetting {
|
||||
tag: IppMsg.Keyword
|
||||
name: "sides"
|
||||
prettyName: qsTr("Sides")
|
||||
valid: utils.isValid(name)
|
||||
choices: utils.getChoices(name)
|
||||
default_choice: utils.getDefaultChoice(name)
|
||||
mime_type: selectedFileType
|
||||
|
||||
onChoiceChanged: page.choiceMade(this)
|
||||
Component.onCompleted: utils.setInitialChoice(this)
|
||||
}
|
||||
ChoiceSetting {
|
||||
tag: IppMsg.Keyword
|
||||
name: "media"
|
||||
prettyName: qsTr("Print media")
|
||||
valid: utils.isValid(name)
|
||||
choices: utils.getChoices(name)
|
||||
default_choice: utils.getDefaultChoice(name)
|
||||
mime_type: selectedFileType
|
||||
|
||||
onChoiceChanged: page.choiceMade(this)
|
||||
Component.onCompleted: utils.setInitialChoice(this)
|
||||
}
|
||||
IntegerSetting {
|
||||
tag: IppMsg.Integer
|
||||
name: "copies"
|
||||
prettyName: qsTr("Copies")
|
||||
valid: utils.isValid(name)
|
||||
low: valid ? printer.attrs[name+"-supported"].value.low : 0
|
||||
high: valid ? printer.attrs[name+"-supported"].value.high : 0
|
||||
default_choice: utils.getDefaultChoice(name)
|
||||
|
||||
onChoiceChanged: page.choiceMade(this)
|
||||
Component.onCompleted: utils.setInitialChoice(this)
|
||||
}
|
||||
ChoiceSetting {
|
||||
tag: IppMsg.Keyword
|
||||
name: "multiple-document-handling"
|
||||
prettyName: qsTr("Collated copies")
|
||||
valid: utils.isValid(name)
|
||||
choices: utils.getChoices(name)
|
||||
default_choice: utils.getDefaultChoice(name)
|
||||
mime_type: selectedFileType
|
||||
|
||||
onChoiceChanged: page.choiceMade(this)
|
||||
Component.onCompleted: utils.setInitialChoice(this)
|
||||
}
|
||||
RangeSetting {
|
||||
tag: IppMsg.IntegerRange
|
||||
name: "page-ranges"
|
||||
prettyName: qsTr("Page range")
|
||||
valid: (utils.isValid(name) || ConvertChecker.pdf) &&
|
||||
valid: (_valid || ConvertChecker.pdf) &&
|
||||
(selectedFileType == "application/pdf" || Mimer.isOffice(selectedFileType))
|
||||
|
||||
property var pdfpages: ConvertChecker.pdfPages(selectedFile)
|
||||
high: pdfpages == 0 ? 65535 : pdfpages
|
||||
|
||||
onChoiceChanged: page.choiceMade(this)
|
||||
Component.onCompleted: utils.setInitialChoice(this)
|
||||
}
|
||||
ChoiceSetting {
|
||||
tag: IppMsg.Keyword
|
||||
name: "print-color-mode"
|
||||
prettyName: qsTr("Color mode")
|
||||
valid: utils.isValid(name)
|
||||
choices: utils.getChoices(name)
|
||||
default_choice: utils.getDefaultChoice(name)
|
||||
mime_type: selectedFileType
|
||||
|
||||
onChoiceChanged: page.choiceMade(this)
|
||||
Component.onCompleted: utils.setInitialChoice(this)
|
||||
}
|
||||
ChoiceSetting {
|
||||
tag: IppMsg.Enum
|
||||
name: "print-quality"
|
||||
prettyName: qsTr("Quality")
|
||||
valid: utils.isValid(name)
|
||||
choices: utils.getChoices(name)
|
||||
default_choice: utils.getDefaultChoice(name)
|
||||
mime_type: selectedFileType
|
||||
|
||||
onChoiceChanged: page.choiceMade(this)
|
||||
Component.onCompleted: utils.setInitialChoice(this)
|
||||
}
|
||||
ChoiceSetting {
|
||||
tag: IppMsg.Resolution
|
||||
name: "printer-resolution"
|
||||
prettyName: qsTr("Resolution")
|
||||
valid: utils.isValid(name)
|
||||
choices: utils.getChoices(name)
|
||||
default_choice: utils.getDefaultChoice(name)
|
||||
mime_type: selectedFileType
|
||||
|
||||
onChoiceChanged: page.choiceMade(this)
|
||||
Component.onCompleted: utils.setInitialChoice(this)
|
||||
}
|
||||
ChoiceSetting {
|
||||
tag: IppMsg.MimeMediaType
|
||||
name: "document-format"
|
||||
prettyName: qsTr("Transfer format")
|
||||
valid: utils.isValid(name)
|
||||
choices: utils.getChoices(name)
|
||||
default_choice: utils.getDefaultChoice(name)
|
||||
mime_type: selectedFileType
|
||||
|
||||
onChoiceChanged: page.choiceMade(this)
|
||||
Component.onCompleted: utils.setInitialChoice(this)
|
||||
}
|
||||
ChoiceSetting {
|
||||
tag: IppMsg.Keyword
|
||||
name: "media-source"
|
||||
prettyName: qsTr("Media source")
|
||||
valid: utils.isValid(name)
|
||||
choices: utils.getChoices(name)
|
||||
default_choice: utils.getDefaultChoice(name)
|
||||
mime_type: selectedFileType
|
||||
|
||||
onChoiceChanged: page.choiceMade(this)
|
||||
Component.onCompleted: utils.setInitialChoice(this)
|
||||
}
|
||||
MediaColSetting {
|
||||
tag: IppMsg.BeginCollection
|
||||
name: "media-col"
|
||||
prettyName: qsTr("Zero margins")
|
||||
valid: false
|
||||
printer: page.printer
|
||||
|
||||
onChoiceChanged: page.choiceMade(this)
|
||||
Component.onCompleted: utils.setInitialChoice(this)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue