Transfer from old project

This commit is contained in:
Anton Thomasson 2019-12-01 15:55:55 +01:00
parent 3e406c67db
commit c5ef6a6982
6 changed files with 261 additions and 34 deletions

View file

@ -14,12 +14,18 @@ TARGET = harbour-seaprint
CONFIG += sailfishapp CONFIG += sailfishapp
SOURCES += src/harbour-seaprint.cpp SOURCES += src/harbour-seaprint.cpp \
src/ippdiscovery.cpp \
src/bytestream.cpp \
src/ippmsg.cpp \
src/ippprinter.cpp
DISTFILES += qml/harbour-seaprint.qml \ DISTFILES += qml/harbour-seaprint.qml \
qml/cover/CoverPage.qml \ qml/cover/CoverPage.qml \
qml/pages/FirstPage.qml \ qml/pages/*.qml \
qml/pages/SecondPage.qml \ qml/pages/utils.js \
qml/pages/printer.svg \
rpm/harbour-seaprint.changes.in \ rpm/harbour-seaprint.changes.in \
rpm/harbour-seaprint.changes.run.in \ rpm/harbour-seaprint.changes.run.in \
rpm/harbour-seaprint.spec \ rpm/harbour-seaprint.spec \
@ -38,3 +44,9 @@ CONFIG += sailfishapp_i18n
# following TRANSLATIONS line. And also do not forget to # following TRANSLATIONS line. And also do not forget to
# modify the localized app name in the the .desktop file. # modify the localized app name in the the .desktop file.
TRANSLATIONS += translations/harbour-seaprint-de.ts TRANSLATIONS += translations/harbour-seaprint-de.ts
HEADERS += \
src/ippdiscovery.h \
src/bytestream.h \
src/ippmsg.h \
src/ippprinter.h

View file

@ -1,5 +1,7 @@
import QtQuick 2.0 import QtQuick 2.0
import Sailfish.Silica 1.0 import Sailfish.Silica 1.0
import QtQuick.LocalStorage 2.0
import Nemo.Notifications 1.0
import "pages" import "pages"
ApplicationWindow ApplicationWindow
@ -7,4 +9,49 @@ ApplicationWindow
initialPage: Component { FirstPage { } } initialPage: Component { FirstPage { } }
cover: Qt.resolvedUrl("cover/CoverPage.qml") cover: Qt.resolvedUrl("cover/CoverPage.qml")
allowedOrientations: defaultAllowedOrientations allowedOrientations: defaultAllowedOrientations
Item {
id: db
property var db_conn
Component.onCompleted: {
db_conn = LocalStorage.openDatabaseSync("TintDB", "1.0", "Tint storage", 100000)
db_conn.transaction(function (tx) {
tx.executeSql('CREATE TABLE IF NOT EXISTS Favourites (url STRING UNIQUE)');
});
}
function addFavourite(url) {
db_conn.transaction(function (tx) {
tx.executeSql('REPLACE INTO Favourites VALUES(?)', [url] );
});
}
function getFavourites() {
var favs = [];
db_conn.transaction(function (tx) {
var res = tx.executeSql('SELECT * FROM Favourites');
if (res.rows.length !== 0) {
console.log(res.rows.item(0).url)
favs.push(res.rows.item(0).url);
}
});
return favs
}
}
Notification {
id: notifier
expireTimeout: 4000
function notify(data) {
console.log("notifyMessage", data)
body = data
previewBody = data
publish()
}
}
} }

View file

@ -1,12 +1,32 @@
import QtQuick 2.0 import QtQuick 2.0
import Sailfish.Silica 1.0 import Sailfish.Silica 1.0
import Sailfish.Pickers 1.0
import seaprint.ippdiscovery 1.0
import seaprint.ippprinter 1.0
import "utils.js" as Utils
import Nemo.DBus 2.0
Page { Page {
id: page id: page
// The effective value will be restricted by ApplicationWindow.allowedOrientations
allowedOrientations: Orientation.All allowedOrientations: Orientation.All
property string selectedFile: "/home/nemo/Downloads/1.pdf"
IppDiscovery {
id: discovery
}
DBusAdaptor {
}
Component.onCompleted: {
discovery.discover();
var favourites = db.getFavourites();
console.log(favourites);
discovery.favourites = favourites;
}
// To enable PullDownMenu, place our content in a SilicaFlickable // To enable PullDownMenu, place our content in a SilicaFlickable
SilicaFlickable { SilicaFlickable {
anchors.fill: parent anchors.fill: parent
@ -14,29 +34,126 @@ Page {
// PullDownMenu and PushUpMenu must be declared in SilicaFlickable, SilicaListView or SilicaGridView // PullDownMenu and PushUpMenu must be declared in SilicaFlickable, SilicaListView or SilicaGridView
PullDownMenu { PullDownMenu {
MenuItem { MenuItem {
text: qsTr("Show Page 2") text: qsTr("Add by URL")
onClicked: pageStack.push(Qt.resolvedUrl("SecondPage.qml")) onClicked: {var dialog = pageStack.push(Qt.resolvedUrl("InputDialog.qml"),
{value: qsTr("Add favourite"), title: qsTr("URL")});
dialog.accepted.connect(function() {
db.addFavourite(dialog.value);
discovery.insert(dialog.value);
})
}
}
MenuItem {
text: qsTr("Refresh")
onClicked: discovery.discover()
} }
} }
// Tell SilicaFlickable the height of its content. SilicaListView {
contentHeight: column.height anchors.fill: parent
id: listView
model: discovery
spacing: Theme.paddingSmall
delegate: BackgroundItem {
id: delegate
height: visible ? Math.max(column.implicitHeight, Theme.itemSizeLarge+2*Theme.paddingMedium) : 0
visible: printer.attrs["printer-name"] ? true : false
enabled: Utils.can_print(printer, selectedFile)
onClicked: {
if(selectedFile != "")
{
pageStack.push(Qt.resolvedUrl("PrinterPage.qml"), {printer: printer, selectedFile: selectedFile})
}
else
{
notifier.notify(qsTr("No file selected"))
}
}
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"] ? printer.attrs["printer-icons"].value[0] : "printer.svg"
// Some printers serve their icons over https with invalid certs...
onStatusChanged: if (status == Image.Error) source = "printer.svg"
}
// Place our content in a Column. The PageHeader is always placed at the top
// of the page, followed by our content.
Column { Column {
id: column id: column
anchors.left: icon.right
anchors.leftMargin: Theme.paddingMedium
width: page.width
spacing: Theme.paddingLarge
PageHeader {
title: qsTr("UI Template")
}
Label { Label {
x: Theme.horizontalPageMargin id: name_label
text: qsTr("Hello Sailors") color: delegate.enabled ? Theme.primaryColor : Theme.secondaryColor
color: Theme.secondaryHighlightColor text: printer.attrs["printer-name"].value
font.pixelSize: Theme.fontSizeExtraLarge }
Label {
id: mm_label
color: delegate.enabled ? Theme.primaryColor : Theme.secondaryColor
font.pixelSize: Theme.fontSizeExtraSmall
text: printer.attrs["printer-make-and-model"].value
}
Label {
id: uri_label
color: Theme.secondaryColor
font.pixelSize: Theme.fontSizeTiny
text: model.display
}
Label {
id: format_label
color: delegate.enabled ? Theme.primaryColor : "red"
font.pixelSize: Theme.fontSizeExtraSmall
text: Utils.supported_formats(printer)
}
}
}
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
nameFilters: ["*.pdf", "*.jpg", "*.jpeg"]
onSelectedContentPropertiesChanged: {
page.selectedFile = selectedContentProperties.filePath
}
} }
} }
} }

View file

@ -3,10 +3,15 @@
#endif #endif
#include <sailfishapp.h> #include <sailfishapp.h>
#include <src/ippdiscovery.h>
#include <src/ippprinter.h>
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
// SailfishApp::main() will display "qml/harbour-seaprint.qml", if you need more qmlRegisterType<IppDiscovery>("seaprint.ippdiscovery", 1, 0, "IppDiscovery");
qmlRegisterType<IppPrinter>("seaprint.ippprinter", 1, 0, "IppPrinter");
// SailfishApp::main() will display "qml/harbour-printtool.qml", if you need more
// control over initialization, you can use: // control over initialization, you can use:
// //
// - SailfishApp::application(int, char *[]) to get the QGuiApplication * // - SailfishApp::application(int, char *[]) to get the QGuiApplication *

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS> <!DOCTYPE TS>
<TS version="2.0"> <TS version="2.1">
<context> <context>
<name>CoverPage</name> <name>CoverPage</name>
<message> <message>
@ -11,16 +11,39 @@
<context> <context>
<name>FirstPage</name> <name>FirstPage</name>
<message> <message>
<source>Show Page 2</source> <source>Add by URL</source>
<translation>Zur Seite 2</translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>UI Template</source> <source>Add favourite</source>
<translation>UI-Vorlage</translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Hello Sailors</source> <source>URL</source>
<translation>Hallo Matrosen</translation> <translation type="unfinished"></translation>
</message>
<message>
<source>Refresh</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>No file selected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Choose file</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>None</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>PrinterPage</name>
<message>
<source>Print</source>
<translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context> <context>

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS> <!DOCTYPE TS>
<TS version="2.0"> <TS version="2.1">
<context> <context>
<name>CoverPage</name> <name>CoverPage</name>
<message> <message>
@ -11,15 +11,38 @@
<context> <context>
<name>FirstPage</name> <name>FirstPage</name>
<message> <message>
<source>Show Page 2</source> <source>Add by URL</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>UI Template</source> <source>Add favourite</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Hello Sailors</source> <source>URL</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Refresh</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>No file selected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Choose file</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>None</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>PrinterPage</name>
<message>
<source>Print</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>