Index: CMakeLists.txt ================================================================== --- CMakeLists.txt +++ CMakeLists.txt @@ -1,12 +1,13 @@ cmake_policy(SET CMP0048 NEW) cmake_minimum_required(VERSION 3.0) -set(FOTOKOPIERER_VERSION 0.2) +set(FOTOKOPIERER_VERSION 0.2.5) set(PODOFO_VERSION 0.9.6) set(OPENCV_VERSION 3.4.0) +set(FREETYPE_VERSION 2.9.1) project(fotokopierer VERSION ${FOTOKOPIERER_VERSION} LANGUAGES CXX) set(CMAKE_CXX_STANDARD 14) @@ -48,12 +49,12 @@ PODOFO_VERSION="${PODOFO_VERSION}" OPENCV_VERSION="${OPENCV_VERSION}" ) if (SAILFISH_FOUND) - set(OpenCV_SOURCE_DIR ${PROJECT_SOURCE_DIR}/3rdparty/opencv-${OPENCV_VERSION}) - set(PODOFO_SOURCE_DIR ${PROJECT_SOURCE_DIR}/3rdparty/podofo-${PODOFO_VERSION}) + set(OpenCV_SOURCE_DIR ${PROJECT_SOURCE_DIR}/3rdparty/opencv-${OPENCV_VERSION}-${CMAKE_SYSTEM_PROCESSOR}) + set(PODOFO_SOURCE_DIR ${PROJECT_SOURCE_DIR}/3rdparty/podofo-${PODOFO_VERSION}-${CMAKE_SYSTEM_PROCESSOR}) include(ExternalProject) # configure OpenCV set(OpenCV_PREFIX ${CMAKE_CURRENT_BINARY_DIR}/opencv) @@ -93,10 +94,11 @@ -DBUILD_opencv_ts=OFF -DBUILD_opencv_video=OFF -DBUILD_opencv_videoio=OFF -DBUILD_opencv_videostab=OFF -DBUILD_opencv_world=OFF + -DENABLE_PRECOMPILED_HEADERS=OFF -DWITH_JASPER=OFF -DWITH_OPENEXR=OFF -DWITH_WEBP=OFF) list(INSERT CMAKE_PREFIX_PATH 0 ${OpenCV_PREFIX}) @@ -107,11 +109,11 @@ else() add_custom_target(opencv-3rdparty) endif () # We must use our own freetype library - set(FREETYPE_SOURCE_DIR ${PROJECT_SOURCE_DIR}/3rdparty/freetype-2.9.1) + set(FREETYPE_SOURCE_DIR ${PROJECT_SOURCE_DIR}/3rdparty/freetype-${FREETYPE_VERSION}-${CMAKE_SYSTEM_PROCESSOR}) set(FREETYPE_PREFIX ${CMAKE_CURRENT_BINARY_DIR}/freetype) ExternalProject_Add(freetype-3rdparty DOWNLOAD_DIR ${PROJECT_SOURCE_DIR}/3rdparty URL "https://download.savannah.gnu.org/releases/freetype/freetype-2.9.1.tar.gz" URL_HASH SHA256=ec391504e55498adceb30baceebd147a6e963f636eb617424bcfc47a169898ce @@ -207,6 +209,9 @@ install(TARGETS ${TARGET} RUNTIME DESTINATION bin) # install(DIRECTORY qml DESTINATION share/${TARGET}) # install(DIRECTORY translations DESTINATION share/${TARGET} FILES_MATCHING PATTERN "*.qm") install(FILES ${TARGET}.desktop DESTINATION share/applications) -install(FILES ${TARGET}.png DESTINATION share/icons/hicolor/86x86/apps) +install(FILES icons/86x86/${TARGET}.png DESTINATION share/icons/hicolor/86x86/apps) +install(FILES icons/108x108/${TARGET}.png DESTINATION share/icons/hicolor/108x108/apps) +install(FILES icons/128x128/${TARGET}.png DESTINATION share/icons/hicolor/128x128/apps) +install(FILES icons/172x172/${TARGET}.png DESTINATION share/icons/hicolor/172x172/apps) Index: GNUmakefile ================================================================== --- GNUmakefile +++ GNUmakefile @@ -1,53 +1,71 @@ target = harbour-fotokopierer +sdk_dir := $(HOME)/SailfishOS +sfdk := $(sdk_dir)/bin/sfdk + arch := i486 #arch := armv7hl -sfos_version := 3.0.3.9 +#arch := aarch64 + +# Select the latest available target for the given architecture +target := $(shell $(sfdk) tools list | awk -F' ' '/$(arch)/ { print $$2 }' | tail -n1) + device := jolla -sdk_dir := $(HOME)/SailfishOS projects_root := $(HOME)/JollaProjekte +emu_dir := $(sdk_dir)/vmshare/ssh/private_keys/Sailfish_OS-Emulator-latest mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST))) current_dir := $(dir $(mkfile_path)) -mer_root_dir := $(subst $(HOME)/JollaProjekte,/home/src1,$(current_dir)) +mer_root_dir := $(current_dir) -mersdk_target := SailfishOS-$(sfos_version)-$(arch) -mersdk_device := Sailfish OS Emulator $(sfos_version) mersdk_ssh := ssh -p 2222 -i $(sdk_dir)/vmshare/ssh/private_keys/engine/mersdk mersdk@localhost -mersdk_mb2 := cd $(mer_root_dir) && mb2 -t $(mersdk_target) -mersdk_sb2 := cd $(mer_root_dir)/rpmbuilddir-arm && sb2 -t $(mersdk_target) + +ifeq ($(arch),i486) + build_dir := rpmbuilddir-i386 +else +ifeq ($(arch),armv7hl) + build_dir := rpmbuilddir-arm +else + build_dir := rpmbuilddir-$(arch) +endif +endif + +emu_ssh := ssh -p 2223 -i $(emu_dir)/nemo nemo@localhost +emu_ssh_root := ssh -p 2223 -i $(emu_dir)/root root@localhost -TRANSLATIONS = de +TRANSLATIONS = de sv -.PHONY: all build buildall clean install rpm run +.PHONY: all build buildall clean install rpm run deploy-emu all: compile reformat: clang-format -i --style=file src/*xx installdeps: - $(mersdk_ssh) '$(mersdk_mb2) installdeps' + sf build: reformat lrelease - $(mersdk_ssh) '$(mersdk_mb2) build' + $(sfdk) -c "target=$(target)" build compile: reformat lrelease - $(mersdk_ssh) '$(mersdk_sb2) make' + $(sfdk) -c "target=$(target)" build-shell make -C $(build_dir) -j4 -make: - $(mersdk_ssh) '$(mersdk_mb2) make' +.PHONY: make +make: compile install: - $(mersdk_ssh) '$(mersdk_mb2) install' + $(sfdk) -c "target=$(target)" make-install rpm: lrelease - $(mersdk_ssh) '$(mersdk_mb2) rpm' + touch rpm/*.yaml + $(sfdk) -c "target=$(target)" package -deploy: - $(mersdk_ssh) '$(mersdk_mb2) --device "$(mersdk_device)" deploy --pkcon' +deploy-emu: all rpm + scp -P 2223 -i $(emu_dir)/nemo RPMS/* nemo@localhost: + $(emu_ssh_root) 'rpm --reinstall /home/nemo/$(target)-*.i486.rpm' .PHONY: install-jolla copy-jolla run-jolla rpm-jolla: rpm scp RPMS/harbour-fotokopierer*.armv7hl.rpm $(device): @@ -76,5 +94,9 @@ @echo "" >> $@ snapshot_version := $(shell fossil info | awk '/^checkout:/ {print "1%{?dist}.fossil+" substr($$2, 1, 8)}') snapshot: sed -ie 's/^Release: 1%{?dist}.*$$/Release: ${snapshot_version}/' rpm/harbour-fotokopierer.yaml + +clean: + $(sfdk) build-shell make -C $(build_dir) clean + rm -rf 3rdparty/*-$(arch) Index: README.md ================================================================== --- README.md +++ README.md @@ -6,10 +6,14 @@ ## Author Frank Fischer +planetos (Icons) + +Åke Engelbrektson (Swedish translation) + ## Contact Talk with the developers in [#fotokopierer][IRC] on [Freenode](http://freenode.net) ## License Index: common.qrc ================================================================== --- common.qrc +++ common.qrc @@ -4,7 +4,14 @@ qml/common/CornerMarker.qml qml/common/DragDelegate.qml icons/brightness.svg icons/contrast.svg icons/harbour-fotokopierer.svg + icons/icon-m-special.svg + icons/icon-m-bw.svg + icons/icon-m-color.svg + icons/icon-m-ctrl.svg + icons/icon-m-gray.svg + icons/icon-m-size-auto.svg + icons/icon-m-size-max.svg Index: harbour-fotokopierer.desktop ================================================================== --- harbour-fotokopierer.desktop +++ harbour-fotokopierer.desktop @@ -1,11 +1,11 @@ [Desktop Entry] Type=Application X-Nemo-Application-Type=silica-qt5 Icon=harbour-fotokopierer Exec=harbour-fotokopierer -Name=fotokopierer +Name=Fotokopierer # translation example: # your app name in German locale (de) # # Remember to comment out the following line, if you do not want to use # a different app name in German locale (de). DELETED harbour-fotokopierer.png Index: harbour-fotokopierer.png ================================================================== --- harbour-fotokopierer.png +++ /dev/null cannot compute difference between binary files ADDED icons/108x108/harbour-fotokopierer.png Index: icons/108x108/harbour-fotokopierer.png ================================================================== --- /dev/null +++ icons/108x108/harbour-fotokopierer.png cannot compute difference between binary files ADDED icons/128x128/harbour-fotokopierer.png Index: icons/128x128/harbour-fotokopierer.png ================================================================== --- /dev/null +++ icons/128x128/harbour-fotokopierer.png cannot compute difference between binary files ADDED icons/172x172/harbour-fotokopierer.png Index: icons/172x172/harbour-fotokopierer.png ================================================================== --- /dev/null +++ icons/172x172/harbour-fotokopierer.png cannot compute difference between binary files ADDED icons/86x86/harbour-fotokopierer.png Index: icons/86x86/harbour-fotokopierer.png ================================================================== --- /dev/null +++ icons/86x86/harbour-fotokopierer.png cannot compute difference between binary files Index: icons/harbour-fotokopierer.svg ================================================================== --- icons/harbour-fotokopierer.svg +++ icons/harbour-fotokopierer.svg cannot compute difference between binary files ADDED icons/icon-m-bw.svg Index: icons/icon-m-bw.svg ================================================================== --- /dev/null +++ icons/icon-m-bw.svg @@ -0,0 +1,72 @@ + + + +image/svg+xml + + + + + + + + + ADDED icons/icon-m-color.svg Index: icons/icon-m-color.svg ================================================================== --- /dev/null +++ icons/icon-m-color.svg @@ -0,0 +1,106 @@ + + + +image/svg+xml + + + + + + + + + ADDED icons/icon-m-ctrl.svg Index: icons/icon-m-ctrl.svg ================================================================== --- /dev/null +++ icons/icon-m-ctrl.svg @@ -0,0 +1,152 @@ + + + +image/svg+xml + + + + + + ADDED icons/icon-m-gray.svg Index: icons/icon-m-gray.svg ================================================================== --- /dev/null +++ icons/icon-m-gray.svg @@ -0,0 +1,98 @@ + + + +image/svg+xml + + + + + + + + + ADDED icons/icon-m-size-auto.svg Index: icons/icon-m-size-auto.svg ================================================================== --- /dev/null +++ icons/icon-m-size-auto.svg @@ -0,0 +1,93 @@ + + + +image/svg+xml + + + + + ADDED icons/icon-m-size-max.svg Index: icons/icon-m-size-max.svg ================================================================== --- /dev/null +++ icons/icon-m-size-max.svg @@ -0,0 +1,289 @@ + + + +image/svg+xml + + + + + ADDED icons/icon-m-special.svg Index: icons/icon-m-special.svg ================================================================== --- /dev/null +++ icons/icon-m-special.svg @@ -0,0 +1,87 @@ + + + +image/svg+xml + + + + + + + + + Index: qml/sfos/pages/AboutPage.qml ================================================================== --- qml/sfos/pages/AboutPage.qml +++ qml/sfos/pages/AboutPage.qml @@ -1,7 +1,7 @@ /* - * Copyright (c) 2019 Frank Fischer + * Copyright (c) 2019, 2020 Frank Fischer * * This program 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, either version 3 of the * License, or (at your option) any later version. @@ -36,11 +36,12 @@ } Image { fillMode: Image.PreserveAspectFit source: Qt.resolvedUrl("/icons/harbour-fotokopierer.svg") - width: 2/3 * parent.width + width: Math.min(2/3 * parent.width, 2/3 * parent.height) + height: width anchors.horizontalCenter: parent.horizontalCenter } Label { id: apptitle @@ -61,10 +62,45 @@ wrapMode: Text.WordWrap text: qsTr("A camera scanning application for SailfishOS by %1") .arg(Fotokopierer.Author) } + + Label { + width: parent.width + + anchors.topMargin: Theme.fontSizeLarge + horizontalAlignment: Text.AlignHCenter + wrapMode: Text.WordWrap + + text: (qsTr("Icons by %1").arg("planetos")) + } + + Separator { + width: parent.width + horizontalAlignment: Qt.AlignHCenter + } + + Label { + width: parent.width + + horizontalAlignment: Text.AlignHCenter + anchors.topMargin: Theme.fontSizeLarge + font.pixelSize: Theme.fontSizeLarge + + text: "Translations" + } + + Label { + width: parent.width + + anchors.topMargin: Theme.fontSizeLarge + horizontalAlignment: Text.AlignHCenter + wrapMode: Text.WordWrap + + text: "Åke Engelbrektson (%1)".arg(qsTr("Swedish")) + } Separator { width: parent.width horizontalAlignment: Qt.AlignHCenter } DELETED qml/sfos/pages/CameraPage.qml Index: qml/sfos/pages/CameraPage.qml ================================================================== --- qml/sfos/pages/CameraPage.qml +++ /dev/null @@ -1,140 +0,0 @@ -/* - * Copyright (c) 2018 Frank Fischer - * - * This program 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, either version 3 of the - * License, or (at your option) any later version. - * - * This program 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 - */ - -import QtQuick 2.0 -import QtQuick.Layouts 1.0 -import QtMultimedia 5.6 -import Sailfish.Silica 1.0 -import Fotokopierer 1.0 - -Page { - id: page - - property Page destination - - signal addPage() - - CutPage { id: cutpage } - - ColorizePage { - id: colpage - - acceptDestination: destination - acceptDestinationAction: PageStackAction.Pop - - onAccepted: addPage() - } - - PageHeader { - id: header - title: qsTr("New Picture") - } - - Camera { - id: camera - - viewfinder { - resolution: Qt.size(640, 480) - } - - imageCapture { - resolution: Qt.size(4000, 3000) - onImageCaptured: { - //photoPreview.source = preview - console.log("image captured: " + preview) - } - onImageSaved: { - console.log("save image: " + path) - Scanner.loadFile(path) - pageStack.push(cutpage) - pageStack.pushAttached(colpage) - } - } - - focus { - focusMode: Camera.FocusContinuous - focusPointMode: Camera.FocusPointCenter - } - - flash.mode: Camera.FlashOff - - imageProcessing { - sharpeningLevel: 1 - } - - exposure { - exposureCompensation: -1.0 - exposureMode: Camera.ExposurePortrait - } - } - - Rectangle { - anchors.top: header.bottom - anchors.bottom: buttons.top - anchors.left: parent.left - anchors.right: parent.right - - VideoOutput { - anchors.fill: parent - - fillMode: VideoOutput.Stretch - - focus: visible - source: camera - } - } - - DockedPanel { - id: buttons - open: true - - width: parent.width - height: Theme.iconSizeLarge - dock: Dock.Bottom - - Row { - anchors.fill: parent - - IconButton { - width: parent.width / 3 - icon.source: - camera.flash.mode == Camera.FlashOff ? - "image://theme/icon-camera-flash-off" : - camera.flash.mode == Camera.FlashAuto ? - "image://theme/icon-camera-flash-automatic" : - "image://theme/icon-camera-flash-on" - onClicked: { - if (camera.flash.mode == Camera.FlashOff) { - camera.flash.mode = Camera.FlashOn - } else if (camera.flash.mode == Camera.FlashOn) { - camera.flash.mode = Camera.FlashAuto - } else { - camera.flash.mode = Camera.FlashOff - } - } - } - - IconButton { - width: parent.width / 3 - icon.source: "image://theme/icon-camera-shutter-release" - onClicked: { - camera.imageCapture.capture() - } - } - } - } -} Index: qml/sfos/pages/ColorizePage.qml ================================================================== --- qml/sfos/pages/ColorizePage.qml +++ qml/sfos/pages/ColorizePage.qml @@ -1,7 +1,7 @@ /* - * Copyright (c) 2018 Frank Fischer + * Copyright (c) 2018-2020 Frank Fischer * * This program 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, either version 3 of the * License, or (at your option) any later version. @@ -60,32 +60,46 @@ dock: Dock.Bottom RowLayout { id: buttonRow anchors { left: parent.left; right: parent.right } - Button { - text: "B/W" + IconButton { + icon.source: Qt.resolvedUrl("/icons/icon-m-bw.svg") + icon.width: Theme.iconSizeMedium + icon.height: Theme.iconSizeMedium + icon.color: undefined Layout.fillWidth: true onClicked: { image.filter.colorMode = ColorizeFilter.BlackAndWhite } } - Button { - text: "Gray" + IconButton { + icon.source: Qt.resolvedUrl("/icons/icon-m-gray.svg") + icon.width: Theme.iconSizeMedium + icon.height: Theme.iconSizeMedium + icon.color: undefined Layout.fillWidth: true onClicked: { image.filter.colorMode = ColorizeFilter.Gray } } - Button { - text: "Color" + IconButton { + icon.source: Qt.resolvedUrl("/icons/icon-m-color.svg") + icon.width: Theme.iconSizeMedium + icon.height: Theme.iconSizeMedium + icon.color: undefined Layout.fillWidth: true onClicked: { image.filter.colorMode = ColorizeFilter.FullColor } } - Button { - text: "Magic" + IconButton { + icon.source: Qt.resolvedUrl("/icons/icon-m-special.svg") + icon.width: Theme.iconSizeMedium + icon.height: Theme.iconSizeMedium + icon.color: undefined Layout.fillWidth: true onClicked: { image.filter.colorMode = ColorizeFilter.Colored } } - Button { - text: "Ctrl" + IconButton { + icon.source: Qt.resolvedUrl("/icons/icon-m-ctrl.svg") + icon.width: Theme.iconSizeMedium + icon.height: Theme.iconSizeMedium Layout.fillWidth: true onClicked: { sliders.open = !sliders.open; buttons.open = !buttons.open } } } } Index: qml/sfos/pages/CutPage.qml ================================================================== --- qml/sfos/pages/CutPage.qml +++ qml/sfos/pages/CutPage.qml @@ -1,7 +1,7 @@ /* - * Copyright (c) 2018 Frank Fischer + * Copyright (c) 2018-2020 Frank Fischer * * This program 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, either version 3 of the * License, or (at your option) any later version. @@ -76,18 +76,16 @@ icon: "image://theme/icon-m-rotate-right" name: "right" } ListElement { - // icon: "image://theme/icon-m-crop" - text: "auto" + icon: "/icons/icon-m-size-auto.svg" name: "auto" } ListElement { - // icon: "image://theme/icon-m-display" - text: "max" + icon: "/icons/icon-m-size-max.svg" name: "all" } property var actions : { "left": function () { cutview.rotateLeft() }, @@ -114,12 +112,14 @@ } IconButton { visible: model.icon ? true : false anchors.fill: parent - icon.source: model.icon || "" + icon.source: Qt.resolvedUrl(model.icon) || "" + icon.width: Theme.iconSizeMedium + icon.height: Theme.iconSizeMedium onClicked: listModel.actions[name]() } } } } } Index: qml/sfos/pages/NewImagePage.qml ================================================================== --- qml/sfos/pages/NewImagePage.qml +++ qml/sfos/pages/NewImagePage.qml @@ -1,7 +1,7 @@ /* - * Copyright (c) 2018 Frank Fischer + * Copyright (c) 2018-2021 Frank Fischer * * This program 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, either version 3 of the * License, or (at your option) any later version. @@ -13,19 +13,22 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see */ +import Nemo.Configuration 1.0 import QtQuick 2.0 import QtQuick.Layouts 1.0 import QtMultimedia 5.6 import Sailfish.Silica 1.0 import Sailfish.Pickers 1.0 import Fotokopierer 1.0 Page { id: page + + allowedOrientations: Orientation.Portrait property var acceptDestination property var acceptDestinationAction property Page acceptDestinationInstance property Page acceptDestinationReplaceTarget @@ -65,10 +68,17 @@ return Theme.secondaryColor; } else { return Theme.primaryColor; } } + + // from harbour-advanced-camera + function strToSize(siz) { + var w = parseInt(siz.substring(0, siz.indexOf("x"))) + var h = parseInt(siz.substring(siz.indexOf("x") + 1)) + return Qt.size(w, h) + } Component { id: picker ImagePickerPage { id: picker @@ -104,21 +114,36 @@ PageHeader { id: header title: qsTr("New Picture") } + + ConfigurationGroup { + id: jollaCameraSettings + path: "/apps/jolla-camera/primary/image" + + property string viewfinderResolution + property string viewfinderResolution_16_9 + property string viewfinderResolution_4_3 + } Camera { id: camera cameraState: Camera.UnloadedState viewfinder { - resolution: Qt.size(640, 480) + //resolution: Qt.size(640, 480) + onResolutionChanged: { + console.log("vfres: ", viewfinder.resolution) + console.log("vfressup: ", camera.supportedViewfinderResolutions()) + } } imageCapture { + resolution: Qt.size(640, 480) + onImageCaptured: { //photoPreview.source = preview console.log("image captured: " + preview) } onImageSaved: { @@ -153,14 +178,22 @@ metaData.orientation: orientation onCameraStatusChanged: { if (cameraStatus == Camera.ActiveStatus && !_haveResolution) { - var res = Fotokopierer.defaultResolution(imageCapture) + var res = Fotokopierer.defaultResolution(imageCapture, 16, 9) if (res.width > 0) { - imageCapture.resolution = res - console.log("set resolution: " + res) + imageCapture.setResolution(res) + if (jollaCameraSettings.viewfinderResolution_16_9) { + viewfinder.resolution = strToSize(jollaCameraSettings.viewfinderResolution_16_9) + } else if (jollaCameraSettings.viewfinderResolution) { + viewfinder.resolution = strToSize(jollaCameraSettings.viewfinderResolution) + } else { + viewfinder.resolution = Qt.size(Screen.height, Screen.width) + } + } else { + console.log("Found no resolution: " + res) } _haveResolution = true } } } @@ -175,12 +208,12 @@ VideoOutput { anchors.fill: parent visible: camera.cameraStatus == Camera.ActiveStatus && _haveResolution - fillMode: VideoOutput.Stretch - orientation: camera.orientation + fillMode: VideoOutput.PreserveAspectCrop + orientation: 0 focus: visible source: camera } Rectangle { Index: rpm/harbour-fotokopierer.changes ================================================================== --- rpm/harbour-fotokopierer.changes +++ rpm/harbour-fotokopierer.changes @@ -6,12 +6,35 @@ # Separate entries from eachother with a blank line. # * date Author's Name version-release # - Summary of changes -* Tue May 28 2019 Frank Fischer 0.2-2 +* Mon May 31 2021 Frank Fischer 0.2.5-1 +- fix some camera issues on Xperia 10 II +- first build for aarch64 + +* Tue Apr 21 2020 Frank Fischer 0.2.4-1 +- New icons + +* Sun Apr 19 2020 Frank Fischer 0.2.3-2 +- Fix German translation file + +* Sun Apr 19 2020 Frank Fischer 0.2.3-1 +- Add Swedish translation + +* Sat Apr 18 2020 Frank Fischer 0.2.2-1 +- Fix wrong resolution and orientation in camera preview +- Add new icons by Tobias Planitzer + +* Tue May 28 2019 Frank Fischer 0.2.1-2 +- Fix version number + +* Tue May 28 2019 Frank Fischer 0.2.1-1 - Fix position of zoom + +* Mon May 27 2019 Frank Fischer 0.2-3 +- Build against SailfishOS 3.0.2.8 * Mon May 27 2019 Frank Fischer 0.2-2 - Update translation * Mon May 27 2019 Frank Fischer 0.2-1 Index: rpm/harbour-fotokopierer.spec ================================================================== --- rpm/harbour-fotokopierer.spec +++ rpm/harbour-fotokopierer.spec @@ -1,18 +1,18 @@ # # Do NOT Edit the Auto-generated Part! -# Generated by: spectacle version 0.27 +# Generated by: spectacle version 0.32 # Name: harbour-fotokopierer # >> macros # << macros Summary: Document Scanner -Version: 0.2 -Release: 2%{?dist} +Version: 0.2.5 +Release: 1%{?dist} Group: Qt/Qt License: GPLv3+ URL: https://fifr.spdns.de/fossils/harbour-fotokopierer Source0: %{name}-%{version}.tar.bz2 Source100: harbour-fotokopierer.yaml @@ -82,8 +82,8 @@ %files %defattr(-,root,root,-) %{_bindir} %{_datadir}/applications/%{name}.desktop -%{_datadir}/icons/hicolor/86x86/apps/%{name}.png +%{_datadir}/icons/hicolor/*/apps/%{name}.png # >> files # << files Index: rpm/harbour-fotokopierer.yaml ================================================================== --- rpm/harbour-fotokopierer.yaml +++ rpm/harbour-fotokopierer.yaml @@ -1,8 +1,8 @@ Name: harbour-fotokopierer Summary: Document Scanner -Version: 0.2.1 +Version: 0.2.5 Release: 1%{?dist} # The contents of the Group field should be one of the groups listed here: # http://gitorious.org/meego-developer-tools/spectacle/blobs/master/data/GROUPS Group: Qt/Qt URL: https://fifr.spdns.de/fossils/harbour-fotokopierer @@ -52,10 +52,10 @@ # All installed files Files: - '%{_bindir}' - '%{_datadir}/applications/%{name}.desktop' - - '%{_datadir}/icons/hicolor/86x86/apps/%{name}.png' + - '%{_datadir}/icons/hicolor/*/apps/%{name}.png' #- '%{_datadir}/%{name}' # For more information about yaml and what's supported in Sailfish OS # build system, please see https://wiki.merproject.org/wiki/Spectacle Index: src/Document.cxx ================================================================== --- src/Document.cxx +++ src/Document.cxx @@ -1,7 +1,7 @@ /* - * Copyright (c) 2018 Frank Fischer + * Copyright (c) 2018-2021 Frank Fischer * * This program 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, either version 3 of the * License, or (at your option) any later version. @@ -332,15 +332,16 @@ } } bool Document::save() const { - QFileInfo finfo(d->doc.filename); + QFileInfo doc_fileinfo(d->doc.filename); + QDir docpath = doc_fileinfo.absoluteDir(); - if (!finfo.dir().exists()) { - if (!finfo.dir().mkpath(QStringLiteral("."))) { - qWarning() << tr("Cannot create path %1").arg(finfo.dir().path()); + if (!docpath.exists()) { + if (!docpath.mkpath(QStringLiteral("."))) { + qWarning() << tr("Cannot create path %1").arg(docpath.path()); return false; } } QFile file(d->doc.filename); @@ -349,17 +350,17 @@ return false; } QJsonObject doc; doc[QStringLiteral("title")] = d->doc.title; - doc[QStringLiteral("filename")] = d->doc.filename; + doc[QStringLiteral("filename")] = doc_fileinfo.fileName(); doc[QStringLiteral("creationTime")] = d->doc.creation_time.toString(FilenameFormat); QJsonArray pages; for (auto& page : d->doc.pages) { QJsonObject p; - if (!page->write(p)) { + if (!page->write(p, docpath)) { return false; } pages << p; } @@ -368,11 +369,11 @@ if (file.write(QJsonDocument(doc).toJson()) < 0) { qWarning() << tr("Error writing document file:%1").arg(file.error()); return false; } - ensureNoMedia(QFileInfo(d->doc.filename).absolutePath()); + ensureNoMedia(doc_fileinfo.absolutePath()); return true; } bool Document::load(const QString& filename) @@ -409,58 +410,72 @@ Document::DocData Document::DocData::fromFile(Document* document, const QString& filename) { auto tr = [](const char* source) { return QCoreApplication::translate("Document", source); }; + qDebug() << "Load document " << filename; + QFile file(filename); if (!file.open(QIODevice::ReadOnly)) { throw ReadError(tr("Can't open document file %1").arg(filename)); } + auto doc_fileinfo = QFileInfo(file); + auto docpath = doc_fileinfo.absolutePath(); + auto docfile = doc_fileinfo.absoluteFilePath(); + + qDebug() << "Document directory: " << docpath; + qDebug() << "Document file: " << docfile; + auto docdata = file.readAll(); auto doc = QJsonDocument::fromJson(docdata); auto json = doc.object(); auto title = json[QStringLiteral("title")]; if (!title.isString() && !title.isNull()) { + qDebug() << QStringLiteral("Could not read document title from document file %1").arg(filename); throw ReadError(tr("Could not read document title from document file %1").arg(filename)); } auto creation_time = json[QStringLiteral("creationTime")]; if (!creation_time.isString()) { + qDebug() << QStringLiteral("Could not read creation time from document file %1").arg(filename); throw ReadError(tr("Could not read creation time from document file %1").arg(filename)); } auto ctime = QDateTime::fromString(creation_time.toString(), FilenameFormat); auto pages = json[QStringLiteral("pages")]; if (!pages.isArray()) { + qDebug() << QStringLiteral("Could not read pages from document file %1").arg(filename); throw ReadError(tr("Could not read pages from document file %1").arg(filename)); } QVector> docpages; for (auto&& page : pages.toArray()) { if (!page.isObject()) { + qDebug() << QStringLiteral("Could not read page from document file %1").arg(filename); throw ReadError(tr("Could not read page from document file %1").arg(filename)); } QSharedPointer p(new Page); connect(p.data(), &Page::thumbnailChanged, document, &Document::onThumbnailUpdated); connect(p.data(), &Page::statusChanged, document, &Document::onPageUpdated); connect(p.data(), &Page::error, document, &Document::error); - if (!p->read(page.toObject())) { + if (!p->read(page.toObject(), docpath)) { + qDebug() << QStringLiteral("Error reading page from document file %1").arg(filename); throw ReadError(tr("Error reading page from document file %1").arg(filename)); } p->moveToThread(QCoreApplication::instance()->thread()); docpages.push_back(p); } - ensureNoMedia(QFileInfo(file).absolutePath()); + ensureNoMedia(docpath); DocData d; d.title = title.isString() ? title.toString() : ctime.toString(); - d.filename = filename; + d.filename = docfile; d.creation_time = ctime; d.pages = docpages; return d; } Index: src/FilterImage.cxx ================================================================== --- src/FilterImage.cxx +++ src/FilterImage.cxx @@ -1,7 +1,7 @@ /* - * Copyright (c) 2018 Frank Fischer + * Copyright (c) 2018, 2019, 2021 Frank Fischer * * This program 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, either version 3 of the * License, or (at your option) any later version. @@ -21,10 +21,12 @@ #include "Scanner.hxx" #include #include #include + +#include struct FilterImage::Data { Filter* filter = nullptr; qreal painted_width = 0; qreal painted_height = 0; Index: src/Fotokopierer.cxx ================================================================== --- src/Fotokopierer.cxx +++ src/Fotokopierer.cxx @@ -1,7 +1,7 @@ /* - * Copyright (c) 2019 Frank Fischer + * Copyright (c) 2019, 2020 Frank Fischer * * This program 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, either version 3 of the * License, or (at your option) any later version. @@ -115,27 +115,32 @@ QString Fotokopierer::opencvVersion() const { return QStringLiteral(OPENCV_VERSION); } -QSize Fotokopierer::defaultResolution(QObject* capture) const +QSize Fotokopierer::defaultResolution(QObject* capture, int desiredWidth, int desiredHeight) const { if (capture == nullptr) { return {}; } auto captures = capture->findChildren(); + auto desiredRatio = static_cast(qMax(1, qMax(desiredWidth, desiredHeight))) / + static_cast(qMax(1, qMin(desiredWidth, desiredHeight))); + auto bestRatioDist = std::numeric_limits::infinity(); if (captures.count() > 0) { QSize resolution; for (auto&& r : captures[0]->supportedResolutions()) { - if (r.width() * 3 == r.height() * 4 && r.width() > resolution.width() && - r.width() <= MaxResolutionWidth && r.height() <= MaxResolutionHeight) { + auto ratio = static_cast(r.width()) / static_cast(r.height()); + auto ratioDist = ratio > desiredRatio ? ratio / desiredRatio : desiredRatio / ratio; + if ((ratioDist < bestRatioDist + 1e-3 && r.width() > resolution.width()) || ratioDist < bestRatioDist - 1e-1) { resolution = r; + bestRatioDist = ratioDist; } } return resolution; } else { return {}; } } Index: src/Fotokopierer.hxx ================================================================== --- src/Fotokopierer.hxx +++ src/Fotokopierer.hxx @@ -1,7 +1,7 @@ /* - * Copyright (c) 2019 Frank Fischer + * Copyright (c) 2019, 2020 Frank Fischer * * This program 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, either version 3 of the * License, or (at your option) any later version. @@ -73,9 +73,15 @@ QString podofoVersion() const; QString opencvVersion() const; - Q_INVOKABLE QSize defaultResolution(QObject* capture) const; + /// Return the resolution to be used. + /// + /// The resolution is the maximum resolution whose aspect ratio is a close + /// as possible to the aspect ratio of the given width and height. In other + /// words, `desiredWidth` and `desiredHeight` should be the dimensions of + /// the target image. + Q_INVOKABLE QSize defaultResolution(QObject* capture, int desiredWidth, int desiredHeight) const; }; #endif Index: src/Page.cxx ================================================================== --- src/Page.cxx +++ src/Page.cxx @@ -1,7 +1,7 @@ /* - * Copyright (c) 2018 Frank Fischer + * Copyright (c) 2018-2021 Frank Fischer * * This program 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, either version 3 of the * License, or (at your option) any later version. @@ -54,10 +54,11 @@ QString message() const { return message_; } private: QString message_; }; + } // namespace struct Page::Data { QDateTime creation_time; QString original_path; @@ -68,10 +69,12 @@ QFutureWatcher result_thumbnail; QFutureWatcher generating; Status status = Ready; }; + +static bool fixPath(const QString& filePath, const QDir& docpath, QString& result); Page::Page(QObject* parent) : QObject(parent), d(new Data) { // TODO: For some reason, that I do not understand, the 'finished' signal is not emitted. @@ -307,62 +310,124 @@ emit thumbnailFinished(scaled_filename); return scaled_filename; } -bool Page::write(QJsonObject& json) const +bool Page::write(QJsonObject& json, const QDir& docpath) const { json[QStringLiteral("creationTime")] = d->creation_time.toString(FilenameFormat); - json[QStringLiteral("originalPath")] = d->original_path; - json[QStringLiteral("resultPath")] = d->result_path; + json[QStringLiteral("originalPath")] = docpath.relativeFilePath(d->original_path); + json[QStringLiteral("resultPath")] = docpath.relativeFilePath(d->result_path); if (!d->thumbnail_path.isEmpty()) { - json[QStringLiteral("thumbnailPath")] = d->thumbnail_path; + json[QStringLiteral("thumbnailPath")] = docpath.relativeFilePath(d->thumbnail_path); } json[QStringLiteral("filters")] = d->settings; return true; } -bool Page::read(const QJsonObject& json) +bool Page::read(const QJsonObject& json, const QDir& docpath) { auto page_creation_time = json[QStringLiteral("creationTime")]; if (!page_creation_time.isString()) { + qDebug() << "Error: empty page creation time"; return false; } auto page_ctime = QDateTime::fromString(page_creation_time.toString(), FilenameFormat); if (page_ctime.isNull()) { + qDebug() << "Error: invalid page creation time"; return false; } auto page_original_path = json[QStringLiteral("originalPath")]; if (!page_original_path.isString()) { + qDebug() << "Error: original image path is empty"; return false; } auto page_result_path = json[QStringLiteral("resultPath")]; if (!page_result_path.isString()) { + qDebug() << "Error: result image path is empty"; return false; } auto page_thumbnail_path = json[QStringLiteral("thumbnailPath")]; if (!page_thumbnail_path.isString() && !page_thumbnail_path.isUndefined()) { + qDebug() << "Error: thumbnail image path is invalid"; + return false; + } + + QString pg_original_path; + if (!fixPath(page_original_path.toString(), docpath, pg_original_path)) { + qDebug() << "Error: original image does not exist"; return false; } - // Verify that the result file exist. - if (!QFileInfo::exists(page_result_path.toString())) { + QString pg_result_path; + if (!fixPath(page_result_path.toString(), docpath, pg_result_path)) { + qDebug() << "Error: result image does not exist"; return false; } + QString pg_thumbnail_path; + if (!page_thumbnail_path.isUndefined() && + !fixPath(page_thumbnail_path.toString(), docpath, pg_thumbnail_path)) { + qDebug() << "Error: thumbnail does not exist, throw it away"; + } + + qDebug() << "Use orig: " << pg_original_path << " result: " << pg_result_path << " thumb: " << pg_thumbnail_path; + setCreationTime(page_ctime); - setOriginal(page_original_path.toString()); - setResult(page_result_path.toString()); - setThumbnail(page_thumbnail_path.toString()); + setOriginal(pg_original_path); + setResult(pg_result_path); + setThumbnail(pg_thumbnail_path); d->settings = json[QStringLiteral("filters")].toObject(); return true; } QJsonObject Page::settings() const { return d->settings; } + +/// Extract the correct absolute filename from the path in the stored json document. +/// +/// Because of a bad design decision, old documents may store absolute +/// paths to all files. This is bad because documents cannot be moved +/// or copied easily. This function possibly converts absolute paths to paths +/// relative to the document directory. This works in most cases because by default +/// all images are stored directly in the document's directory. +bool fixPath(const QString& filePath, const QDir& docpath, QString& result) +{ + auto finfo = QFileInfo(filePath); + + if (finfo.isRelative()) { + auto path = docpath.filePath(finfo.filePath()); + if (QFileInfo(path).exists()) { + result = path; + return true; + } + + qDebug() << "Error: file at " << path << " does not exist"; + } else { + if (finfo.exists()) { + result = filePath; + return true; + } + + // This is actually a workaround because older versions of Fotokopierer stored + // absolute file paths. However, this does not work well because the paths may be + // different on different systems preventing moving a document from one system + // to another. + auto relative_path = docpath.filePath(QFileInfo(filePath).fileName()); + qDebug() << "Absolute file " << filePath << " does not exist, try relative path " << relative_path; + if (QFileInfo(relative_path).exists()) { + result = docpath.absoluteFilePath(relative_path); + return true; + } + + qDebug() << "Error: image at relative path " << relative_path << " does not exist"; + } + + return false; +} Index: src/Page.hxx ================================================================== --- src/Page.hxx +++ src/Page.hxx @@ -1,7 +1,7 @@ /* - * Copyright (c) 2018 Frank Fischer + * Copyright (c) 2018-2021 Frank Fischer * * This program 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, either version 3 of the * License, or (at your option) any later version. @@ -81,13 +81,13 @@ /// Initialize this page from the results of a Scanner. /// /// The page files reuse (and overwrite) the current files. void updateFromScanner(const Scanner* scanner); - bool write(QJsonObject& json) const; + bool write(QJsonObject& json, const QDir& docpath) const; - bool read(const QJsonObject& json); + bool read(const QJsonObject& json, const QDir& docpath); /// Return the filter settings of this page. QJsonObject settings() const; public slots: Index: translations.qrc ================================================================== --- translations.qrc +++ translations.qrc @@ -1,5 +1,6 @@ translations/harbour-fotokopierer-de.qm + translations/harbour-fotokopierer-sv.qm Index: translations/harbour-fotokopierer-de.po ================================================================== --- translations/harbour-fotokopierer-de.po +++ translations/harbour-fotokopierer-de.po @@ -1,261 +1,471 @@ msgid "" msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Language: de_DE\n" -"X-Source-Language: en_US\n" "X-Qt-Contexts: true\n" -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/pages/CameraPage.qml:44 -msgctxt "CameraPage|" -msgid "New Picture" -msgstr "Neues Bild" - -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/pages/ColorizePage.qml:39 -msgctxt "ColorizePage|" -msgid "Colorize" -msgstr "Einfärben" - -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/pages/CutPage.qml:40 -msgctxt "CutPage|" -msgid "Cut & Rotate" -msgstr "Zuschneiden & Drehen" - -#~ msgctxt "Document|" +#~ msgctxt "CameraPage~|" +#~ msgid "New Picture" +#~ msgstr "Neues Bild" + +#~ msgctxt "ColorizePage~|" +#~ msgid "Colorize" +#~ msgstr "Einfärben" + +#~ msgctxt "CutPage~|" +#~ msgid "Cut & Rotate" +#~ msgstr "Zuschneiden & Drehen" + +#~ msgctxt "Document~|" #~ msgid "Page could not be created: no original image" #~ msgstr "Seite kann nicht erstellt werden: Originalbild nicht gefunden" -#~ msgctxt "Document|" +#~ msgctxt "Document~|" #~ msgid "Page could not be created: no result image" #~ msgstr "Seite kann nicht erstellt werden: Bild nicht gefunden" -#~ msgctxt "Document|" +#~ msgctxt "Document~|" #~ msgid "Page could not be created: error saving original image" #~ msgstr "" #~ "Seite kann nicht erstellt werden: Fehler beim Speichern des Originalbildes" -#~ msgctxt "Document|" +#~ msgctxt "Document~|" #~ msgid "Page could not be created: error saving result image" #~ msgstr "Seite kann nicht erstellt werden: Fehler beim Speichern des Bildes" -#: /home/fifr/JollaProjekte/fotokopierer/devel/src/Document.cxx:272 -msgctxt "Document|" -msgid "Cannot add page, document is not ready" -msgstr "Seite kann nicht hinzugefügt werden, Dokument ist nicht bereit" - -#: /home/fifr/JollaProjekte/fotokopierer/devel/src/Document.cxx:341 -#, qt-format -msgctxt "Document|" -msgid "Cannot create path %1" -msgstr "Pfad %1 kann nicht erstellt werden" - -#: /home/fifr/JollaProjekte/fotokopierer/devel/src/Document.cxx:348 -#, qt-format -msgctxt "Document|" -msgid "Can't write document file %1:%2" -msgstr "Dokumentdatei %1 kann nicht geschrieben werden: %2" - -#: /home/fifr/JollaProjekte/fotokopierer/devel/src/Document.cxx:369 -#, qt-format -msgctxt "Document|" -msgid "Error writing document file:%1" -msgstr "Fehler beim schreiben der Datei %1" - -#: /home/fifr/JollaProjekte/fotokopierer/devel/src/Document.cxx:381 -#: /home/fifr/JollaProjekte/fotokopierer/devel/src/Document.cxx:400 -#, qt-format -msgctxt "Document|" -msgid "Cannot load document from '%1', another process is running" -msgstr "" -"Dokument kann nicht von %1 gelesen werden während ein anderer Prozess läuft" - -#: /home/fifr/JollaProjekte/fotokopierer/devel/src/Document.cxx:416 -#, qt-format -msgctxt "Document|" -msgid "Can't open document file %1" -msgstr "Dokumentdatei %1 kann nicht geöffnet werden" - -#: /home/fifr/JollaProjekte/fotokopierer/devel/src/Document.cxx:425 -#, qt-format -msgctxt "Document|" -msgid "Could not read document title from document file %1" -msgstr "Dokumenttitel kann nicht von Datei %1 gelesen werden" - -#: /home/fifr/JollaProjekte/fotokopierer/devel/src/Document.cxx:430 -#, qt-format -msgctxt "Document|" -msgid "Could not read creation time from document file %1" -msgstr "Erstellungszeit kann nicht von Datei %1 gelesen werden" - -#: /home/fifr/JollaProjekte/fotokopierer/devel/src/Document.cxx:436 -#, qt-format -msgctxt "Document|" -msgid "Could not read pages from document file %1" -msgstr "Seiten des Dokuments konnten nicht von %1 gelesen werden" - -#: /home/fifr/JollaProjekte/fotokopierer/devel/src/Document.cxx:442 -#, qt-format -msgctxt "Document|" -msgid "Could not read page from document file %1" -msgstr "Eine Seite konnte nicht von Dokument %1 gelesen werden" - -#: /home/fifr/JollaProjekte/fotokopierer/devel/src/Document.cxx:451 -#, qt-format -msgctxt "Document|" -msgid "Error reading page from document file %1" -msgstr "Fehler beim lesen der Dokumentdatei %1" - -#: /home/fifr/JollaProjekte/fotokopierer/devel/src/Document.cxx:502 -msgctxt "Document|" -msgid "Cannot export to pdf, document is not ready" -msgstr "Pdf kann nicht exportiert werden, Dokument ist nicht bereit" - -#: /home/fifr/JollaProjekte/fotokopierer/devel/src/Document.cxx:558 -msgctxt "Document|" -msgid "Error creating pdf-file" -msgstr "Fehler beim Erstellen der pdf-Datei" - -#, qt-format -#~ msgctxt "DocumentDelegate|" +#~ msgctxt "Document~|" +#~ msgid "Cannot add page, document is not ready" +#~ msgstr "Seite kann nicht hinzugefügt werden, Dokument ist nicht bereit" + +#, qt-format +#~ msgctxt "Document~|" +#~ msgid "Cannot create path %1" +#~ msgstr "Pfad %1 kann nicht erstellt werden" + +#, qt-format +#~ msgctxt "Document~|" +#~ msgid "Can't write document file %1:%2" +#~ msgstr "Dokumentdatei %1 kann nicht geschrieben werden: %2" + +#, qt-format +#~ msgctxt "Document~|" +#~ msgid "Error writing document file:%1" +#~ msgstr "Fehler beim schreiben der Datei %1" + +#, qt-format +#~ msgctxt "Document~|" +#~ msgid "Cannot load document from '%1', another process is running" +#~ msgstr "" +#~ "Dokument kann nicht von %1 gelesen werden während ein anderer Prozess " +#~ "läuft" + +#, qt-format +#~ msgctxt "Document~|" +#~ msgid "Can't open document file %1" +#~ msgstr "Dokumentdatei %1 kann nicht geöffnet werden" + +#, qt-format +#~ msgctxt "Document~|" +#~ msgid "Could not read document title from document file %1" +#~ msgstr "Dokumenttitel kann nicht von Datei %1 gelesen werden" + +#, qt-format +#~ msgctxt "Document~|" +#~ msgid "Could not read creation time from document file %1" +#~ msgstr "Erstellungszeit kann nicht von Datei %1 gelesen werden" + +#, qt-format +#~ msgctxt "Document~|" +#~ msgid "Could not read pages from document file %1" +#~ msgstr "Seiten des Dokuments konnten nicht von %1 gelesen werden" + +#, qt-format +#~ msgctxt "Document~|" +#~ msgid "Could not read page from document file %1" +#~ msgstr "Eine Seite konnte nicht von Dokument %1 gelesen werden" + +#, qt-format +#~ msgctxt "Document~|" +#~ msgid "Error reading page from document file %1" +#~ msgstr "Fehler beim lesen der Dokumentdatei %1" + +#~ msgctxt "Document~|" +#~ msgid "Cannot export to pdf, document is not ready" +#~ msgstr "Pdf kann nicht exportiert werden, Dokument ist nicht bereit" + +#~ msgctxt "Document~|" +#~ msgid "Error creating pdf-file" +#~ msgstr "Fehler beim Erstellen der pdf-Datei" + +#, qt-format +#~ msgctxt "DocumentDelegate~|" #~ msgid "" #~ "Pages: %1\n" #~ "%2" #~ msgstr "" #~ "Seiten: %1\n" #~ "%2" -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/DocumentDelegate.qml:128 -#, qt-format -msgctxt "DocumentDelegate|" -msgid "Pages: %1" -msgstr "Seiten: %1" - -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/pages/DocumentPage.qml:99 -#, qt-format -msgctxt "DocumentPage|" -msgid "Page %1 of %2 (%3)" -msgstr "Seite %1 von %2 (%3)" - -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/pages/DocumentPage.qml:109 -msgctxt "DocumentPage|" -msgid "Delete page" -msgstr "Seite löschen" - -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/pages/DocumentPage.qml:151 -msgctxt "DocumentPage|" -msgid "Export to pdf" -msgstr "Pdf exportieren" - -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/pages/DocumentPage.qml:157 -msgctxt "DocumentPage|" -msgid "Rename" -msgstr "Umbenennen" - -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/pages/DocumentPage.qml:253 -#, qt-format -msgctxt "DocumentPage|" -msgid "Overwrite existing file <%1>?" -msgstr "Existierende Datei <%1> überschreiben?" - -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/pages/DocumentsPage.qml:77 -msgctxt "DocumentsPage|" -msgid "Delete document" -msgstr "Dokument löschen" - -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/pages/DocumentsPage.qml:119 -msgctxt "DocumentsPage|" -msgid "Documents" -msgstr "Dokumente" - -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/pages/DocumentsPage.qml:126 -#, qt-format -msgctxt "DocumentsPage|" -msgid "About %1" -msgstr "Über %1" - -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/pages/NewImagePage.qml:107 -msgctxt "NewImagePage|" -msgid "New Picture" -msgstr "Neues Bild" - -#, qt-format -#~ msgctxt "PageDelegate|" +#, qt-format +#~ msgctxt "DocumentPage~|" +#~ msgid "Page %1 of %2 (%3)" +#~ msgstr "Seite %1 von %2 (%3)" + +#~ msgctxt "DocumentPage~|" +#~ msgid "Delete page" +#~ msgstr "Seite löschen" + +#~ msgctxt "DocumentPage~|" +#~ msgid "Export to pdf" +#~ msgstr "Pdf exportieren" + +#~ msgctxt "DocumentPage~|" +#~ msgid "Rename" +#~ msgstr "Umbenennen" + +#, qt-format +#~ msgctxt "DocumentPage~|" +#~ msgid "Overwrite existing file <%1>?" +#~ msgstr "Existierende Datei <%1> überschreiben?" + +#~ msgctxt "DocumentsPage~|" +#~ msgid "Delete document" +#~ msgstr "Dokument löschen" + +#~ msgctxt "DocumentsPage~|" +#~ msgid "Documents" +#~ msgstr "Dokumente" + +#, qt-format +#~ msgctxt "DocumentsPage~|" +#~ msgid "About %1" +#~ msgstr "Über %1" + +#~ msgctxt "NewImagePage~|" +#~ msgid "New Picture" +#~ msgstr "Neues Bild" + +#, qt-format +#~ msgctxt "PageDelegate~|" #~ msgid "" #~ "Page %1\n" #~ "%2" #~ msgstr "" #~ "Seite %1\n" #~ "%2" -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/PageDelegate.qml:96 +#~ msgctxt "CoverPage~|" +#~ msgid "Take a new picture" +#~ msgstr "Neues Bild aufnehmen" + +#, qt-format +#~ msgctxt "CoverPage~|" +#~ msgid "Pages: %2" +#~ msgstr "Seiten: %2" + +#, qt-format +#~ msgctxt "AboutPage~|" +#~ msgid "About %1" +#~ msgstr "Über %1" + +#, qt-format +#~ msgctxt "AboutPage~|" +#~ msgid "A camera scanning application for SailfishOS by %1" +#~ msgstr "Eine Kamera-Scan Anwendung für SailfishOS von %1" + +#~ msgctxt "AboutPage~|" +#~ msgid "Homepage" +#~ msgstr "Homepage" + +#~ msgctxt "AboutPage~|" +#~ msgid "Find me on Freenode: " +#~ msgstr "Kontaktiere mich auf Freenode: " + +#~ msgctxt "AboutPage~|" +#~ msgid "This application uses" +#~ msgstr "Dieses Programm verwendet" + +#, qt-format +#~ msgctxt "AboutPage~|" +#~ msgid "Licensed under the %1" +#~ msgstr "Lizensiert unter %1" + +#~ msgctxt "RenamePage~|" +#~ msgid "Enter new document title" +#~ msgstr "Neuen Dokumenttitel eingeben" + +#~ msgctxt "RenamePage~|" +#~ msgid "Document title" +#~ msgstr "Dokumenttitel" + +#, qt-format +#~ msgctxt "DocumentDelegate~|" +#~ msgid "Pages: %1" +#~ msgstr "Seiten: %1" + +#, qt-format +#~ msgctxt "PageDelegate~|" +#~ msgid "Page %1" +#~ msgstr "Seite %1" + +#~ msgctxt "Page~|" +#~ msgid "Page could not be created: error saving original image" +#~ msgstr "" +#~ "Seite kann nicht erstellt werden: Fehler beim Speichern des Originalbildes" + +#~ msgctxt "Page~|" +#~ msgid "Page could not be created: error saving result image" +#~ msgstr "Seite kann nicht erstellt werden: Fehler beim Speichern des Bildes" + #, qt-format -msgctxt "PageDelegate|" -msgid "Page %1" -msgstr "Seite %1" +#~ msgctxt "AboutPage~|" +#~ msgid "Icons by %1" +#~ msgstr "Icons von %1" + +#~ msgctxt "AboutPage~|" +#~ msgid "Swedish" +#~ msgstr "Schwedisch" -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/CoverPage.qml:45 +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/CoverPage.qml:45 +#, fuzzy msgctxt "CoverPage|" msgid "Take a new picture" msgstr "Neues Bild aufnehmen" -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/CoverPage.qml:78 -#, qt-format +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/CoverPage.qml:78 +#, fuzzy, qt-format msgctxt "CoverPage|" msgid "Pages: %2" msgstr "Seiten: %2" -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/pages/AboutPage.qml:35 -#, qt-format +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/DocumentDelegate.qml:128 +#, fuzzy, qt-format +msgctxt "DocumentDelegate|" +msgid "Pages: %1" +msgstr "Seiten: %1" + +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/PageDelegate.qml:96 +#, fuzzy, qt-format +msgctxt "PageDelegate|" +msgid "Page %1" +msgstr "Seite %1" + +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/AboutPage.qml:35 +#, fuzzy, qt-format msgctxt "AboutPage|" msgid "About %1" msgstr "Über %1" -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/pages/AboutPage.qml:63 -#, qt-format +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/AboutPage.qml:64 +#, fuzzy, qt-format msgctxt "AboutPage|" msgid "A camera scanning application for SailfishOS by %1" msgstr "Eine Kamera-Scan Anwendung für SailfishOS von %1" -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/pages/AboutPage.qml:79 +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/AboutPage.qml:75 +#, fuzzy, qt-format +msgctxt "AboutPage|" +msgid "Icons by %1" +msgstr "Icons von %1" + +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/AboutPage.qml:100 +#, fuzzy +msgctxt "AboutPage|" +msgid "Swedish" +msgstr "Schwedisch" + +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/AboutPage.qml:115 +#, fuzzy msgctxt "AboutPage|" msgid "Homepage" msgstr "Homepage" -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/pages/AboutPage.qml:90 +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/AboutPage.qml:126 +#, fuzzy msgctxt "AboutPage|" msgid "Find me on Freenode: " msgstr "Kontaktiere mich auf Freenode: " -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/pages/AboutPage.qml:109 +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/AboutPage.qml:145 +#, fuzzy msgctxt "AboutPage|" msgid "This application uses" msgstr "Dieses Programm verwendet" -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/pages/AboutPage.qml:129 -#, qt-format +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/AboutPage.qml:165 +#, fuzzy, qt-format msgctxt "AboutPage|" msgid "Licensed under the %1" msgstr "Lizensiert unter %1" -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/pages/RenamePage.qml:32 +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/ColorizePage.qml:39 +#, fuzzy +msgctxt "ColorizePage|" +msgid "Colorize" +msgstr "Einfärben" + +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/CutPage.qml:40 +#, fuzzy +msgctxt "CutPage|" +msgid "Cut & Rotate" +msgstr "Zuschneiden & Drehen" + +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/DocumentPage.qml:99 +#, fuzzy, qt-format +msgctxt "DocumentPage|" +msgid "Page %1 of %2 (%3)" +msgstr "Seite %1 von %2 (%3)" + +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/DocumentPage.qml:109 +#, fuzzy +msgctxt "DocumentPage|" +msgid "Delete page" +msgstr "Seite löschen" + +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/DocumentPage.qml:151 +#, fuzzy +msgctxt "DocumentPage|" +msgid "Export to pdf" +msgstr "Pdf exportieren" + +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/DocumentPage.qml:157 +#, fuzzy +msgctxt "DocumentPage|" +msgid "Rename" +msgstr "Umbenennen" + +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/DocumentPage.qml:253 +#, fuzzy, qt-format +msgctxt "DocumentPage|" +msgid "Overwrite existing file <%1>?" +msgstr "Existierende Datei <%1> überschreiben?" + +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/DocumentsPage.qml:77 +#, fuzzy +msgctxt "DocumentsPage|" +msgid "Delete document" +msgstr "Dokument löschen" + +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/DocumentsPage.qml:119 +#, fuzzy +msgctxt "DocumentsPage|" +msgid "Documents" +msgstr "Dokumente" + +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/DocumentsPage.qml:126 +#, fuzzy, qt-format +msgctxt "DocumentsPage|" +msgid "About %1" +msgstr "Über %1" + +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/NewImagePage.qml:109 +#, fuzzy +msgctxt "NewImagePage|" +msgid "New Picture" +msgstr "Neues Bild" + +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/RenamePage.qml:32 +#, fuzzy msgctxt "RenamePage|" msgid "Enter new document title" msgstr "Neuen Dokumenttitel eingeben" -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/pages/RenamePage.qml:38 +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/RenamePage.qml:38 +#, fuzzy msgctxt "RenamePage|" msgid "Document title" msgstr "Dokumenttitel" -#: /home/fifr/JollaProjekte/fotokopierer/devel/src/Page.cxx:145 +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Document.cxx:272 +#, fuzzy +msgctxt "Document|" +msgid "Cannot add page, document is not ready" +msgstr "Seite kann nicht hinzugefügt werden, Dokument ist nicht bereit" + +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Document.cxx:341 +#, fuzzy, qt-format +msgctxt "Document|" +msgid "Cannot create path %1" +msgstr "Pfad %1 kann nicht erstellt werden" + +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Document.cxx:348 +#, fuzzy, qt-format +msgctxt "Document|" +msgid "Can't write document file %1:%2" +msgstr "Dokumentdatei %1 kann nicht geschrieben werden: %2" + +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Document.cxx:369 +#, fuzzy, qt-format +msgctxt "Document|" +msgid "Error writing document file:%1" +msgstr "Fehler beim schreiben der Datei %1" + +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Document.cxx:381 +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Document.cxx:400 +#, fuzzy, qt-format +msgctxt "Document|" +msgid "Cannot load document from '%1', another process is running" +msgstr "" +"Dokument kann nicht von %1 gelesen werden während ein anderer Prozess läuft" + +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Document.cxx:416 +#, fuzzy, qt-format +msgctxt "Document|" +msgid "Can't open document file %1" +msgstr "Dokumentdatei %1 kann nicht geöffnet werden" + +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Document.cxx:425 +#, fuzzy, qt-format +msgctxt "Document|" +msgid "Could not read document title from document file %1" +msgstr "Dokumenttitel kann nicht von Datei %1 gelesen werden" + +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Document.cxx:430 +#, fuzzy, qt-format +msgctxt "Document|" +msgid "Could not read creation time from document file %1" +msgstr "Erstellungszeit kann nicht von Datei %1 gelesen werden" + +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Document.cxx:436 +#, fuzzy, qt-format +msgctxt "Document|" +msgid "Could not read pages from document file %1" +msgstr "Seiten des Dokuments konnten nicht von %1 gelesen werden" + +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Document.cxx:442 +#, fuzzy, qt-format +msgctxt "Document|" +msgid "Could not read page from document file %1" +msgstr "Eine Seite konnte nicht von Dokument %1 gelesen werden" + +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Document.cxx:451 +#, fuzzy, qt-format +msgctxt "Document|" +msgid "Error reading page from document file %1" +msgstr "Fehler beim lesen der Dokumentdatei %1" + +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Document.cxx:502 +#, fuzzy +msgctxt "Document|" +msgid "Cannot export to pdf, document is not ready" +msgstr "Pdf kann nicht exportiert werden, Dokument ist nicht bereit" + +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Document.cxx:558 +#, fuzzy +msgctxt "Document|" +msgid "Error creating pdf-file" +msgstr "Fehler beim Erstellen der pdf-Datei" + +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Page.cxx:144 +#, fuzzy msgctxt "Page|" msgid "Page could not be created: error saving original image" msgstr "" "Seite kann nicht erstellt werden: Fehler beim Speichern des Originalbildes" -#: /home/fifr/JollaProjekte/fotokopierer/devel/src/Page.cxx:150 +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Page.cxx:149 +#, fuzzy msgctxt "Page|" msgid "Page could not be created: error saving result image" msgstr "Seite kann nicht erstellt werden: Fehler beim Speichern des Bildes" ADDED translations/harbour-fotokopierer-sv.po Index: translations/harbour-fotokopierer-sv.po ================================================================== --- /dev/null +++ translations/harbour-fotokopierer-sv.po @@ -0,0 +1,268 @@ +msgid "" +msgstr "" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Language: de_DE\n" +"X-Source-Language: en_US\n" +"X-Qt-Contexts: true\n" + +#~ msgctxt "CameraPage|" +#~ msgid "New Picture" +#~ msgstr "Ny bild" + +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/ColorizePage.qml:39 +msgctxt "ColorizePage|" +msgid "Colorize" +msgstr "Färglägg" + +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/CutPage.qml:40 +msgctxt "CutPage|" +msgid "Cut & Rotate" +msgstr "Klipp ut & rotera" + +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Document.cxx:272 +msgctxt "Document|" +msgid "Cannot add page, document is not ready" +msgstr "Kan inte lägga till sida, dokumentet är inte klart" + +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Document.cxx:341 +#, qt-format +msgctxt "Document|" +msgid "Cannot create path %1" +msgstr "Kan inte skapa sökvägen %1" + +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Document.cxx:348 +#, qt-format +msgctxt "Document|" +msgid "Can't write document file %1:%2" +msgstr "Kan inte skriva dokumentfil %1: %2" + +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Document.cxx:369 +#, qt-format +msgctxt "Document|" +msgid "Error writing document file:%1" +msgstr "Kunde inte skriva dokumentfil: %1" + +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Document.cxx:381 +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Document.cxx:400 +#, qt-format +msgctxt "Document|" +msgid "Cannot load document from '%1', another process is running" +msgstr "Kan inte läsa in dokument från \"%1\", en annan process hindrar." + +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Document.cxx:416 +#, qt-format +msgctxt "Document|" +msgid "Can't open document file %1" +msgstr "Kan inte öppna dokumentfil %1" + +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Document.cxx:425 +#, qt-format +msgctxt "Document|" +msgid "Could not read document title from document file %1" +msgstr "Kunde inte läsa titel från dokumentfil %1" + +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Document.cxx:430 +#, qt-format +msgctxt "Document|" +msgid "Could not read creation time from document file %1" +msgstr "Kunde inte läsa tidsstämpel från dokumentfil %1" + +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Document.cxx:436 +#, qt-format +msgctxt "Document|" +msgid "Could not read pages from document file %1" +msgstr "Kunde inte läsa sidor från dokumentfil %1" + +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Document.cxx:442 +#, qt-format +msgctxt "Document|" +msgid "Could not read page from document file %1" +msgstr "Kunde inte läsa sida från dokumentfil %1" + +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Document.cxx:451 +#, qt-format +msgctxt "Document|" +msgid "Error reading page from document file %1" +msgstr "Kunde inte läsa sida från dokumentfil %1" + +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Document.cxx:502 +msgctxt "Document|" +msgid "Cannot export to pdf, document is not ready" +msgstr "Kan inte exportera till PDF, dokumentet är inte klart" + +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Document.cxx:558 +msgctxt "Document|" +msgid "Error creating pdf-file" +msgstr "Kunde inte skapa PDF-fil" + +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/DocumentPage.qml:99 +#, qt-format +msgctxt "DocumentPage|" +msgid "Page %1 of %2 (%3)" +msgstr "Sida %1 av %2 (%3)" + +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/DocumentPage.qml:109 +msgctxt "DocumentPage|" +msgid "Delete page" +msgstr "Ta bort sidan" + +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/DocumentPage.qml:151 +msgctxt "DocumentPage|" +msgid "Export to pdf" +msgstr "Exportera till PDF" + +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/DocumentPage.qml:157 +msgctxt "DocumentPage|" +msgid "Rename" +msgstr "Byt namn" + +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/DocumentPage.qml:253 +#, qt-format +msgctxt "DocumentPage|" +msgid "Overwrite existing file <%1>?" +msgstr "Vill du skriva över befintlig fil <%1>?" + +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/DocumentsPage.qml:77 +msgctxt "DocumentsPage|" +msgid "Delete document" +msgstr "Ta bort dokumentet" + +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/DocumentsPage.qml:119 +msgctxt "DocumentsPage|" +msgid "Documents" +msgstr "Dokument" + +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/DocumentsPage.qml:126 +#, qt-format +msgctxt "DocumentsPage|" +msgid "About %1" +msgstr "Om %1" + +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/NewImagePage.qml:109 +msgctxt "NewImagePage|" +msgid "New Picture" +msgstr "Ny bild" + +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/CoverPage.qml:45 +msgctxt "CoverPage|" +msgid "Take a new picture" +msgstr "Ta en ny bild" + +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/CoverPage.qml:78 +#, qt-format +msgctxt "CoverPage|" +msgid "Pages: %2" +msgstr "Sidor: %2" + +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/AboutPage.qml:35 +#, qt-format +msgctxt "AboutPage|" +msgid "About %1" +msgstr "Om %1" + +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/AboutPage.qml:64 +#, qt-format +msgctxt "AboutPage|" +msgid "A camera scanning application for SailfishOS by %1" +msgstr "En kameraskanner för SailfishOS av %1" + +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/AboutPage.qml:75 +#, qt-format +msgctxt "AboutPage|" +msgid "Icons by %1" +msgstr "" + +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/AboutPage.qml:100 +msgctxt "AboutPage|" +msgid "Swedish" +msgstr "" + +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/AboutPage.qml:115 +msgctxt "AboutPage|" +msgid "Homepage" +msgstr "Hemsida" + +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/AboutPage.qml:126 +msgctxt "AboutPage|" +msgid "Find me on Freenode: " +msgstr "Hitta mig på Freenode: " + +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/AboutPage.qml:145 +msgctxt "AboutPage|" +msgid "This application uses" +msgstr "Denna app använder" + +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/AboutPage.qml:165 +#, qt-format +msgctxt "AboutPage|" +msgid "Licensed under the %1" +msgstr "Licensierad under %1" + +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/RenamePage.qml:32 +msgctxt "RenamePage|" +msgid "Enter new document title" +msgstr "Ange ny dokumenttitel" + +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/RenamePage.qml:38 +msgctxt "RenamePage|" +msgid "Document title" +msgstr "Dokumenttitel" + +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/DocumentDelegate.qml:128 +#, qt-format +msgctxt "DocumentDelegate|" +msgid "Pages: %1" +msgstr "Sidor: %1" + +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/PageDelegate.qml:96 +#, qt-format +msgctxt "PageDelegate|" +msgid "Page %1" +msgstr "Sida %1" + +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Page.cxx:144 +msgctxt "Page|" +msgid "Page could not be created: error saving original image" +msgstr "Sidan kunde inte skapas: Fel när originalbild sparades" + +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Page.cxx:149 +msgctxt "Page|" +msgid "Page could not be created: error saving result image" +msgstr "Sidan kunde inte skapas: Fel när resultatbild sparades" + +#~ msgctxt "Document|" +#~ msgid "Page could not be created: no original image" +#~ msgstr "Sidan kunde inte skapas: Ingen originalbild" + +#~ msgctxt "Document|" +#~ msgid "Page could not be created: no result image" +#~ msgstr "Sidan kunde inte skapas: Ingen resultatbild" + +#~ msgctxt "Document|" +#~ msgid "Page could not be created: error saving original image" +#~ msgstr "Sidan kunde inte skapas: Fel när originalbild sparades" + +#~ msgctxt "Document|" +#~ msgid "Page could not be created: error saving result image" +#~ msgstr "Sidan kunde inte skapas: Fel när resultatbild sparades" + +#, qt-format +#~ msgctxt "DocumentDelegate|" +#~ msgid "" +#~ "Pages: %1\n" +#~ "%2" +#~ msgstr "" +#~ "Sidor: %1\n" +#~ "%2" + +#, qt-format +#~ msgctxt "PageDelegate|" +#~ msgid "" +#~ "Page %1\n" +#~ "%2" +#~ msgstr "" +#~ "Sida %1\n" +#~ "%2" Index: translations/harbour-fotokopierer.pot ================================================================== --- translations/harbour-fotokopierer.pot +++ translations/harbour-fotokopierer.pot @@ -6,21 +6,20 @@ "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Language: de_DE\n" "X-Source-Language: en_US\n" "X-Qt-Contexts: true\n" -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/pages/CameraPage.qml:44 -msgctxt "CameraPage|" -msgid "New Picture" -msgstr "" +#~ msgctxt "CameraPage|" +#~ msgid "New Picture" +#~ msgstr "" -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/pages/ColorizePage.qml:39 +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/ColorizePage.qml:39 msgctxt "ColorizePage|" msgid "Colorize" msgstr "" -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/pages/CutPage.qml:40 +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/CutPage.qml:40 msgctxt "CutPage|" msgid "Cut & Rotate" msgstr "" #~ msgctxt "Document|" @@ -37,82 +36,82 @@ #~ msgctxt "Document|" #~ msgid "Page could not be created: error saving result image" #~ msgstr "" -#: /home/fifr/JollaProjekte/fotokopierer/devel/src/Document.cxx:272 +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Document.cxx:272 msgctxt "Document|" msgid "Cannot add page, document is not ready" msgstr "" -#: /home/fifr/JollaProjekte/fotokopierer/devel/src/Document.cxx:341 +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Document.cxx:341 #, qt-format msgctxt "Document|" msgid "Cannot create path %1" msgstr "" -#: /home/fifr/JollaProjekte/fotokopierer/devel/src/Document.cxx:348 +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Document.cxx:348 #, qt-format msgctxt "Document|" msgid "Can't write document file %1:%2" msgstr "" -#: /home/fifr/JollaProjekte/fotokopierer/devel/src/Document.cxx:369 +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Document.cxx:369 #, qt-format msgctxt "Document|" msgid "Error writing document file:%1" msgstr "" -#: /home/fifr/JollaProjekte/fotokopierer/devel/src/Document.cxx:381 -#: /home/fifr/JollaProjekte/fotokopierer/devel/src/Document.cxx:400 +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Document.cxx:381 +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Document.cxx:400 #, qt-format msgctxt "Document|" msgid "Cannot load document from '%1', another process is running" msgstr "" -#: /home/fifr/JollaProjekte/fotokopierer/devel/src/Document.cxx:416 +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Document.cxx:416 #, qt-format msgctxt "Document|" msgid "Can't open document file %1" msgstr "" -#: /home/fifr/JollaProjekte/fotokopierer/devel/src/Document.cxx:425 +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Document.cxx:425 #, qt-format msgctxt "Document|" msgid "Could not read document title from document file %1" msgstr "" -#: /home/fifr/JollaProjekte/fotokopierer/devel/src/Document.cxx:430 +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Document.cxx:430 #, qt-format msgctxt "Document|" msgid "Could not read creation time from document file %1" msgstr "" -#: /home/fifr/JollaProjekte/fotokopierer/devel/src/Document.cxx:436 +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Document.cxx:436 #, qt-format msgctxt "Document|" msgid "Could not read pages from document file %1" msgstr "" -#: /home/fifr/JollaProjekte/fotokopierer/devel/src/Document.cxx:442 +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Document.cxx:442 #, qt-format msgctxt "Document|" msgid "Could not read page from document file %1" msgstr "" -#: /home/fifr/JollaProjekte/fotokopierer/devel/src/Document.cxx:451 +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Document.cxx:451 #, qt-format msgctxt "Document|" msgid "Error reading page from document file %1" msgstr "" -#: /home/fifr/JollaProjekte/fotokopierer/devel/src/Document.cxx:502 +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Document.cxx:502 msgctxt "Document|" msgid "Cannot export to pdf, document is not ready" msgstr "" -#: /home/fifr/JollaProjekte/fotokopierer/devel/src/Document.cxx:558 +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Document.cxx:558 msgctxt "Document|" msgid "Error creating pdf-file" msgstr "" #, qt-format @@ -120,54 +119,54 @@ #~ msgid "" #~ "Pages: %1\n" #~ "%2" #~ msgstr "" -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/pages/DocumentPage.qml:99 +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/DocumentPage.qml:99 #, qt-format msgctxt "DocumentPage|" msgid "Page %1 of %2 (%3)" msgstr "" -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/pages/DocumentPage.qml:109 +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/DocumentPage.qml:109 msgctxt "DocumentPage|" msgid "Delete page" msgstr "" -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/pages/DocumentPage.qml:151 +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/DocumentPage.qml:151 msgctxt "DocumentPage|" msgid "Export to pdf" msgstr "" -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/pages/DocumentPage.qml:157 +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/DocumentPage.qml:157 msgctxt "DocumentPage|" msgid "Rename" msgstr "" -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/pages/DocumentPage.qml:253 +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/DocumentPage.qml:253 #, qt-format msgctxt "DocumentPage|" msgid "Overwrite existing file <%1>?" msgstr "" -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/pages/DocumentsPage.qml:77 +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/DocumentsPage.qml:77 msgctxt "DocumentsPage|" msgid "Delete document" msgstr "" -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/pages/DocumentsPage.qml:119 +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/DocumentsPage.qml:119 msgctxt "DocumentsPage|" msgid "Documents" msgstr "" -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/pages/DocumentsPage.qml:126 +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/DocumentsPage.qml:126 #, qt-format msgctxt "DocumentsPage|" msgid "About %1" msgstr "" -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/pages/NewImagePage.qml:107 +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/NewImagePage.qml:109 msgctxt "NewImagePage|" msgid "New Picture" msgstr "" #, qt-format @@ -175,80 +174,91 @@ #~ msgid "" #~ "Page %1\n" #~ "%2" #~ msgstr "" -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/CoverPage.qml:45 +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/CoverPage.qml:45 msgctxt "CoverPage|" msgid "Take a new picture" msgstr "" -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/CoverPage.qml:78 +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/CoverPage.qml:78 #, qt-format msgctxt "CoverPage|" msgid "Pages: %2" msgstr "" -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/pages/AboutPage.qml:35 +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/AboutPage.qml:35 #, qt-format msgctxt "AboutPage|" msgid "About %1" msgstr "" -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/pages/AboutPage.qml:63 +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/AboutPage.qml:64 #, qt-format msgctxt "AboutPage|" msgid "A camera scanning application for SailfishOS by %1" msgstr "" -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/pages/AboutPage.qml:79 +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/AboutPage.qml:75 +#, qt-format +msgctxt "AboutPage|" +msgid "Icons by %1" +msgstr "" + +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/AboutPage.qml:100 +msgctxt "AboutPage|" +msgid "Swedish" +msgstr "" + +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/AboutPage.qml:115 msgctxt "AboutPage|" msgid "Homepage" msgstr "" -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/pages/AboutPage.qml:90 +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/AboutPage.qml:126 msgctxt "AboutPage|" msgid "Find me on Freenode: " msgstr "" -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/pages/AboutPage.qml:109 +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/AboutPage.qml:145 msgctxt "AboutPage|" msgid "This application uses" msgstr "" -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/pages/AboutPage.qml:129 +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/AboutPage.qml:165 #, qt-format msgctxt "AboutPage|" msgid "Licensed under the %1" msgstr "" -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/pages/RenamePage.qml:32 +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/RenamePage.qml:32 msgctxt "RenamePage|" msgid "Enter new document title" msgstr "" -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/pages/RenamePage.qml:38 +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/pages/RenamePage.qml:38 msgctxt "RenamePage|" msgid "Document title" msgstr "" -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/DocumentDelegate.qml:128 +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/DocumentDelegate.qml:128 #, qt-format msgctxt "DocumentDelegate|" msgid "Pages: %1" msgstr "" -#: /home/fifr/JollaProjekte/fotokopierer/devel/qml/sfos/PageDelegate.qml:96 +#: /home/fifr/JollaProjekte/fotokopierer/release/qml/sfos/PageDelegate.qml:96 #, qt-format msgctxt "PageDelegate|" msgid "Page %1" msgstr "" -#: /home/fifr/JollaProjekte/fotokopierer/devel/src/Page.cxx:145 +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Page.cxx:144 msgctxt "Page|" msgid "Page could not be created: error saving original image" msgstr "" -#: /home/fifr/JollaProjekte/fotokopierer/devel/src/Page.cxx:150 +#: /home/fifr/JollaProjekte/fotokopierer/release/src/Page.cxx:149 msgctxt "Page|" msgid "Page could not be created: error saving result image" msgstr ""