[-]
[+]
|
Changed |
_service:tar_git:harbour-stopmotion.spec
|
|
|
Changed |
_service
^
|
|
Added |
_service:tar_git:harbour-stopmotion-0.2.0.tar.bz2/cover.png
^
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-stopmotion-0.2.0.tar.bz2/harbour-stopmotion.pro
^
|
@@ -16,18 +16,21 @@
DISTFILES += qml/harbour-stopmotion.qml \
qml/components/Banner.qml \
+ qml/components/CollapsingHeader.qml \
qml/cover/CoverPage.qml \
qml/cover/harbour-stopmotion.png \
- qml/pages/*.qml \
- qml/img/*.png \
+ qml/pages/CanvasSlideshowPage.qml \
+ qml/pages/ShootScreen.qml \
qml/pages/CameraButton.qml \
qml/pages/ImagePage.qml \
qml/pages/SlideShowPage.qml \
qml/pages/PlaySlideShowPage.qml \
- qml/components/*.qml \
- qml/utils/*.js \
+ qml/img/*.png \
+ qml/pages/SlideshowViewPage.qml \
+ qml/utils/localdb.js \
+ qml/utils/constants.js \
qml/sound/*.wav \
- qml/py/*.py \
+ qml/py/videox.py \
rpm/harbour-stopmotion.spec \
rpm/harbour-stopmotion.changes.in \
rpm/harbour-stopmotion.changes.run.in \
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-stopmotion-0.2.0.tar.bz2/qml/components/Banner.qml
^
|
@@ -1,4 +1,4 @@
-import QtQuick 2.6
+import QtQuick 2.2
import Sailfish.Silica 1.0
MouseArea {
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-stopmotion-0.2.0.tar.bz2/qml/harbour-stopmotion.qml
^
|
@@ -1,4 +1,4 @@
-import QtQuick 2.0
+import QtQuick 2.5
import Sailfish.Silica 1.0
import QtMultimedia 5.0
import "pages"
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-stopmotion-0.2.0.tar.bz2/qml/pages/AboutPage.qml
^
|
@@ -1,4 +1,4 @@
-import QtQuick 2.0
+import QtQuick 2.5
import Sailfish.Silica 1.0
Page {
|
[-]
[+]
|
Added |
_service:tar_git:harbour-stopmotion-0.2.0.tar.bz2/qml/pages/CanvasSlideshowPage.qml
^
|
@@ -0,0 +1,314 @@
+import QtQuick 2.5
+import Sailfish.Silica 1.0
+import Nemo.KeepAlive 1.2
+import QtMultimedia 5.6
+import QtQuick.Layouts 1.0
+import "../utils/localdb.js" as Database
+
+//import QtGraphicalEffects 1.0
+//import "../constants.js" as Constants
+
+Page {
+ id: playSlideshowPage
+
+ showNavigationIndicator: !slideshowRunning
+ backNavigation: !slideshowRunning
+
+ // The effective value will be restricted by ApplicationWindow.allowedOrientations
+ allowedOrientations: Orientation.All
+
+ // Properties.
+ property string imageSource: ""
+ property string imageSource2: ""
+ property int imageIndex: -1
+ property bool slideshowRunning:true
+ property ListModel imageModel
+ property ListModel musicModel
+ property var slideshowOrderArray: []
+ property bool firstLoaded: false
+
+ // Settings.
+ property int slideshowInterval: 200 //Settings.getIntSetting(Constants.intervalKey, 5) * 1000
+ property bool loopMusic: false //Settings.getBooleanSetting(Constants.loopMusicKey, true)
+ property int loop: 0 //Settings.getBooleanSetting(Constants.loopKey, true)
+ property int fpsMode
+ property int saveFps
+ property bool debug: true
+ property var portrait
+ property int dx: 0
+ property int dy: 0
+
+ // Signals.
+ // Notify cover about image change.
+ signal imageChanged(string url)
+
+ onOrientationChanged:
+ {
+
+ if (orientation===Orientation.Landscape){
+ console.log(orientation)
+ } else if (orientation === Orientation.Portrait){
+ console.log(orientation)
+ }
+ }
+
+
+ // React on status changes.
+ onStatusChanged:
+ {
+ if(status === PageStatus.Activating)
+ {
+ if (debug) console.log("Page activating...")
+ if (debug) console.log(slideshowOrderArray)
+
+ fpsMode = Database.getProp('fpsMode')
+ loop = Database.getProp('loop')
+ saveFps = Database.getProp('saveFps')
+
+ if (debug) console.log('fps: ' + fpsMode)
+ if (debug) console.log('saveps:' + saveFps)
+ if (debug) console.log('loop:' + loop)
+
+ if (fpsMode == 0) {
+ slideshowInterval = 1000 / saveFps
+ if (debug) console.debug("interval: " + slideshowInterval)
+ } else {
+ slideshowInterval = 1000 * saveFps
+ if (debug) console.debug("interval: "+ slideshowInterval)
+
+ }
+ if (slideshowOrderArray.length != imageModel.count) {
+ if (debug) console.error("Order array's and image model's sizes does not match. Expect wonky behavior...")
+ }
+
+ if (slideshowOrderArray.length == 0) {
+ for (var j = 0; j < imageModel.count; ++j) {
+ slideshowOrderArray.push(j)
+ }
+ if (debug) console.log(slideshowOrderArray)
+ }
+
+ if (imageModel.count > 0) {
+ imageIndex = 0;
+ imageSource = imageModel.get(slideshowOrderArray[imageIndex]).url
+ if (debug) console.debug(imageSource)
+ }
+ /*if (musicModel.count > 0) {
+ backgroundPlaylist.clear()
+ for (var i = 0; i < musicModel.count; ++i) {
+ console.log("Add music file to playlist: " + musicModel.get(i).url)
+ backgroundPlaylist.addItem(musicModel.get(i).url)
+ }
+ }*/
+
+ }
+ else if(status === PageStatus.Deactivating) // Deactivating, set defaults.
+ {
+ if (debug) console.log("Page deactivating...")
+ imageIndex = -1;
+ imageChanged("")
+ }
+ }
+
+ Component.onDestruction:
+ {
+ if (debug) console.log("PlaySlideshowPage destroyed...")
+ }
+
+ /* Audio {
+ id: backgroundMusic
+ autoPlay: false
+ audioRole: Audio.MusicRole
+ playlist: Playlist {
+ id: backgroundPlaylist
+ playbackMode: loopMusic ? Playlist.Loop : Playlist.Sequential
+ }
+ }*/
+
+ PageHeader
+ {
+ id: header
+ title: ""
+ visible: !slideshowRunning
+ }
+
+ Rectangle
+ {
+ id: background
+ anchors.fill: parent
+ color: Theme.colorScheme == Theme.LightOnDark ? "black" : "white"
+ }
+ /* we need this to obtain the orientation to pass to ffmpeg */
+ Image
+ {
+ id: infoLoad
+ visible: false
+ asynchronous: true
+ autoTransform: true
+ fillMode: Image.PreserveAspectFit
+ onStatusChanged:
+ {
+ if (status == Image.Ready) {
+ if (debug) console.log('Loaded: sourceSize ==', sourceSize);
+ if (debug) console.log('Loaded: Height ==', height);
+ if (debug) console.log('Loaded: implicitHeight ==', implicitHeight);
+ if (debug) console.log('Loaded: width ==', width);
+ if (debug) console.log('Loaded: impwidth ==', implicitWidth);
+ if (height === 1920) portrait = "1920"
+ drawingCanvas.width = width
+ drawingCanvas.height = height
+ }
+ }
+ }
+ Canvas
+ {
+ id: drawingCanvas
+ anchors
+ {
+ centerIn: parent
+ }
+
+ width:1080
+ height:1920
+
+ renderTarget: Canvas.Image
+
+ Component.onCompleted: {
+ // preload images.
+ var img = ""
+ for (var i=0;i<imageModel.count; i++)
+ {
+ img = imageModel.get(i).url
+ if (i==0)
+ infoLoad.source = img
+ loadImage(img);
+ }
+ }
+ }
+
+ /*
+ Pause indicators.
+ */
+ IconButton
+ {
+ id: recordButton
+ icon.source: Qt.resolvedUrl("../img/play-button.png")
+ scale: 0.75
+ visible: !slideshowRunning
+ anchors {
+ bottom: parent.bottom
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-stopmotion-0.2.0.tar.bz2/qml/pages/PlaySlideshowPage.qml
^
|
@@ -1,11 +1,11 @@
-import QtQuick 2.6
import QtQuick 2.5
import Sailfish.Silica 1.0
import Nemo.KeepAlive 1.2
import QtMultimedia 5.6
-import QtGraphicalEffects 1.0
import QtQuick.Layouts 1.0
+import "../utils/localdb.js" as Database
+//import QtGraphicalEffects 1.0
//import "../constants.js" as Constants
Page {
@@ -22,16 +22,36 @@
property string imageSource2: ""
property int imageIndex: -1
property bool slideshowRunning:true
+ property ListModel imageModel
+ property ListModel musicModel
+ property var slideshowOrderArray: []
+ property bool firstLoaded: false
+ // Settings.
+ property int slideshowInterval: 200 //Settings.getIntSetting(Constants.intervalKey, 5) * 1000
+ property int loop: 0 //Settings.getBooleanSetting(Constants.loopKey, true)
+ property bool loopMusic: false //Settings.getBooleanSetting(Constants.loopMusicKey, true)
+ property int fpsMode
+ property int saveFps
property bool debug: false
- onOrientationChanged: {
+ // Signals.
+ // Notify cover about image change.
+ signal imageChanged(string url)
+ // Notify about slideshow running status change.
+ signal slideshowRunningToggled(bool runningStatus)
+
+ onOrientationChanged:
+ {
- if (orientation===Orientation.Landscape){
- } else if (orientation === Orientation.Portrait){
+ if (orientation===Orientation.Landscape)
+ {
+ } else if (orientation === Orientation.Portrait)
+ {
}
}
- onSlideshowRunningChanged: {
+ onSlideshowRunningChanged:
+ {
if (debug) console.log("SlideshowRunning status changed: " + slideshowRunning)
if (slideshowRunning) {
//backgroundMusic.play()
@@ -42,38 +62,41 @@
slideshowRunningToggled(slideshowRunning)
}
- property ListModel imageModel
- property ListModel musicModel
- property var slideshowOrderArray: []
- property bool firstLoaded: false
-
- // Settings.
- property int slideshowInterval: 200 //Settings.getIntSetting(Constants.intervalKey, 5) * 1000
- property bool loop: true //Settings.getBooleanSetting(Constants.loopKey, true)
- property bool loopMusic: false //Settings.getBooleanSetting(Constants.loopMusicKey, true)
-
- // Signals.
- // Notify cover about image change.
- signal imageChanged(string url)
- // Notify about slideshow running status change.
- signal slideshowRunningToggled(bool runningStatus)
// React on status changes.
- onStatusChanged: {
+ onStatusChanged:
+ {
if(status === PageStatus.Activating)
{
- console.log("Page activating...")
- console.log(slideshowOrderArray)
+ if (debug) console.log("Page activating...")
+ if (debug) console.log(slideshowOrderArray)
+
+ fpsMode = Database.getProp('fpsMode')
+ loop = Database.getProp('loop')
+ saveFps = Database.getProp('saveFps')
+
+ if (debug) console.log('fps: ' + fpsMode)
+ if (debug) console.log('saveps:' + saveFps)
+ if (debug) console.log('loop:' + loop)
+
+ if (fpsMode == 0) {
+ slideshowInterval = 1000 / saveFps
+ if (debug) console.debug("interval: " + slideshowInterval)
+ } else {
+ slideshowInterval = 1000 * saveFps
+ if (debug) console.debug("interval: "+ slideshowInterval)
+
+ }
if (slideshowOrderArray.length != imageModel.count) {
- console.error("Order array's and image model's sizes does not match. Expect wonky behavior...")
+ if (debug) console.error("Order array's and image model's sizes does not match. Expect wonky behavior...")
}
if (slideshowOrderArray.length == 0) {
for (var j = 0; j < imageModel.count; ++j) {
slideshowOrderArray.push(j)
}
- console.log(slideshowOrderArray)
+ if (debug) console.log(slideshowOrderArray)
}
if (imageModel.count > 0) {
@@ -106,16 +129,18 @@
}
}
- Component.onDestruction: {
+ Component.onDestruction:
+ {
if (debug) console.log("PlaySlideshowPage destroyed...")
blanking.preventBlanking = false
}
- DisplayBlanking {
+ DisplayBlanking
+ {
id: blanking
}
- Audio {
+ /* Audio {
id: backgroundMusic
autoPlay: false
audioRole: Audio.MusicRole
@@ -123,27 +148,30 @@
id: backgroundPlaylist
playbackMode: loopMusic ? Playlist.Loop : Playlist.Sequential
}
- }
+ }*/
- PageHeader {
+ PageHeader
+ {
id: header
title: ""
visible: !slideshowRunning
}
- Rectangle {
+ Rectangle
+ {
id: background
anchors.fill: parent
color: Theme.colorScheme == Theme.LightOnDark ? "black" : "white"
}
// Image.
- Image {
+ Image
+ {
id: slideshowPicture
anchors.fill: parent
asynchronous: true
autoTransform: true
- cache: false
+ cache: true
clip: true
fillMode: Image.PreserveAspectFit
sourceSize.width: playSlideshowPage.width
@@ -155,7 +183,8 @@
opacity: visible ? 1.0 : 0.0
//Behavior on opacity { FadeAnimation { duration: 1000 } }
- onStatusChanged: {
+ onStatusChanged:
+ {
if(status == Image.Ready && !firstLoaded)
{
if (debug) console.log("Image ready, start timer...")
@@ -165,7 +194,8 @@
}
}
- Label {
+ Label
+ {
id: infoLabel
anchors.centerIn: parent
width: parent.width - Theme.horizontalPageMargin*2
@@ -175,13 +205,14 @@
}
}
- // Second image.
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-stopmotion-0.2.0.tar.bz2/qml/pages/ShootScreen.qml
^
|
@@ -1,4 +1,4 @@
-import QtQuick 2.2
+import QtQuick 2.5
import QtQuick.LocalStorage 2.0
import Sailfish.Pickers 1.0 // File-Loader
import Sailfish.Silica 1.0
@@ -21,7 +21,8 @@
property bool debug: false
- QtObject {
+ QtObject
+ {
id:d
property real cDOCK_PANEL_SIZE: 800
}
@@ -36,7 +37,8 @@
}
- onStatusChanged: {
+ onStatusChanged:
+ {
if(status === PageStatus.Active)
{
// not quite! but sometimes
@@ -47,7 +49,8 @@
}
}
- Camera {
+ Camera
+ {
id: camera
imageProcessing.whiteBalanceMode: CameraImageProcessing.WhiteBalanceAuto
exposure {
@@ -62,7 +65,8 @@
}
- onOrientationChanged: {
+ onOrientationChanged:
+ {
if (orientation===Orientation.Landscape){
if (debug) console.log("inverted image");
@@ -83,19 +87,22 @@
}
- Component {
+ Component
+ {
id: internalPicker
-
- FolderPickerDialog {
+ FolderPickerDialog
+ {
id: folderiDialog
title: "Save to:"
onAccepted: savePath = selectedPath
onRejected: savePath = StandardPaths.standardLocations(StandardPaths.PicturesLocation)[0]
}
}
- Component {
+ Component
+ {
id: externalPicker
- FolderPickerDialog {
+ FolderPickerDialog
+ {
id: foldereDialog
path: "/run/media/defaultuser"
title: "Save to:"
@@ -104,13 +111,16 @@
}
}
- PropertyAnimation { id: closeDockAnimation;
+ PropertyAnimation
+ {
+ id: closeDockAnimation;
target: panel;
property: "x";
to: -panel.width;
duration: 300
}
- PropertyAnimation {
+ PropertyAnimation
+ {
id: openDockAnimation;
target: panel;
property: "x";
@@ -118,7 +128,8 @@
duration: 300
}
- MouseArea {
+ MouseArea
+ {
id : mA
anchors.fill: parent
property real downX : 0
@@ -129,12 +140,13 @@
drag.minimumX: -panel.width;
drag.maximumX: 0
drag.threshold: 3.0
- onPressed: {
+ onPressed:
+ {
downX = mouse.x
gesture = "none"
}
-
- onMouseXChanged: {
+ onMouseXChanged:
+ {
if (Math.abs(downX-mouse.x)>3.0){
if (downX<mouse.x)
gesture = "swiperight"
@@ -144,7 +156,8 @@
}
}
- onReleased: {
+ onReleased:
+ {
if (gesture=="swiperight") {
if (panel.x < 0)
openDockAnimation.running=true;
@@ -167,7 +180,8 @@
visible: camera.imageCapture.ready
onClicked: camera.imageCapture.capture()
}*/
- IconButton {
+ IconButton
+ {
id: recordButton
icon.source: Qt.resolvedUrl("../img/play-button.png")
scale: 0.75
@@ -181,13 +195,17 @@
visible: !pStopmotion.busyEncoding
- onClicked: {
- if (mA.state==="Ready"){
+ onClicked:
+ {
+ if (mA.state==="Ready")
+ {
pStopmotion.start()
mA.state = "Recording";
// use autofocus
//camera.searchAndLock();
- } else {
+ }
+ else
+ {
pStopmotion.stop();
mA.state= "Ready";
// reset counter
@@ -202,11 +220,13 @@
}
states:[
- State {
+ State
+ {
name:"Horizontal"
when:orientation === Orientation.Landscape || orientation === Orientation.LandscapeInverted
- AnchorChanges {
+ AnchorChanges
+ {
target: recordButton
anchors {
bottom: undefined
@@ -218,7 +238,9 @@
}
]
}
- BusyIndicator {
+
+ BusyIndicator
+ {
id:busyIndicator
size: BusyIndicatorSize.Large
anchors.centerIn: parent
@@ -226,54 +248,40 @@
running: pStopmotion.running
}
- Label {
+ Label
+ {
id : busyText
//text: qsTr("Processing video encoding\nYou can hide app now, we inform you when it finished");
text: counter
color: Theme.highlightColor
font.pixelSize: Theme.fontSizeTiny
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-stopmotion-0.2.0.tar.bz2/qml/pages/SlideshowPage.qml
^
|
@@ -2,13 +2,17 @@
import Sailfish.Silica 1.0
import Sailfish.Pickers 1.0
import Nemo.Thumbnailer 1.0
+
import "../components"
import "../utils/localdb.js" as Database
+import "../utils/constants.js" as Constants
import io.thp.pyotherside 1.5
Page {
id: slideshowDialog
- QtObject {
+
+ QtObject
+ {
id:slides
property real cDOCK_PANEL_SIZE: 800
}
@@ -33,7 +37,7 @@
property Item remorse
- property bool debug: false
+ property bool debug: true
// python / export specific vars
@@ -49,6 +53,8 @@
property int undoNr: 0
property string portrait: "1080"
property int saveFps:5
+ property int fpsMode: 0
+ property int loop: 1
onStatusChanged: {
if(status === PageStatus.Activating)
@@ -177,15 +183,35 @@
PushUpMenu {
MenuItem {
id: menuStartSlideshow
- text: qsTr("Sart slideshow")
+ text: qsTr("Start slideshow")
enabled: imageListModel.count > 0
onClicked: {
if (debug) console.log("Start slideshow...")
//playSlideshowPage = pageStack.push(Qt.resolvedUrl("PlaySlideshowPage.qml"), {'imageModel': imageListModel, 'musicModel': backgroundMusicModel, 'slideshowOrderArray': getSlideshowOrder()})
- playSlideshowPage = pageStack.push(Qt.resolvedUrl("PlaySlideshowPage.qml"), {'imageModel': imageListModel})
+ playSlideshowPage = pageStack.push(Qt.resolvedUrl("PlaySlideshowPage.qml"), {'imageModel': imageListModel, 'fpsMode':fpsMode, 'slideshowOrderArray': getSlideshowOrder(), 'loop':loop})
mainWinConnections.target = playSlideshowPage
}
}
+ MenuItem {
+ id: menuCanvasStartSlideshow
+ text: qsTr("Start canvas slideshow")
+ enabled: imageListModel.count > 0
+ onClicked: {
+ if (debug) console.log("Start slideshow...")
+ pageStack.push(Qt.resolvedUrl("CanvasSlideshowPage.qml"), {'imageModel': imageListModel, 'fpsMode':fpsMode, 'slideshowOrderArray': getSlideshowOrder(), 'loop':loop})
+ }
+ }
+ /*
+ MenuItem {
+ id: menuSlideviewStartSlideshow
+ text: qsTr("Start sView slideshow")
+ enabled: imageListModel.count > 0
+ onClicked: {
+ if (debug) console.log("Start slideshow...")
+ pageStack.push(Qt.resolvedUrl("SlideshowViewPage.qml"), {'imageModel': imageListModel, 'fpsMode':fpsMode, 'slideshowOrderArray': getSlideshowOrder(), 'loop':loop})
+ }
+ }
+ */
}
@@ -213,27 +239,70 @@
}
width: parent.width - Theme.paddingMedium
}
-
Slider {
id: sFps
- label: "FPS"
+ label: "FPS/SPF"
width: parent.width - Theme.paddingLarge
minimumValue: 1
maximumValue: 30
value: 5
stepSize: 1
valueText: sliderValue
-
onReleased: {
Database.setProp('saveFps',String(sliderValue))
saveFps = sFps.sliderValue
}
-
Component.onCompleted: {
value = Database.getProp('saveFps')
saveFps = value
}
}
+ Row {
+ width: parent.width
+ ComboBox {
+ id:fpsModeSelector
+ width: parent.width * .66
+ menu: ContextMenu {
+ MenuItem { text: "Frames per second" ;
+ onClicked: fpsMode = "fps" }
+ MenuItem { text: "Seconds per frame" ;
+ onClicked: fpsMode = "spf" }
+
+ }
+ onCurrentIndexChanged: {
+ console.log(currentIndex)
+ Database.setProp('fpsMode',String(currentIndex))
+ }
+ Component.onCompleted: {
+ fpsMode = Database.getProp('fpsMode')
+ fpsModeSelector.currentIndex = fpsMode
+ }
+ }
+
+ ComboBox
+ {
+ id: loopSwitch
+ width: parent.width * .33
+ menu: ContextMenu
+ {
+ MenuItem { text: "Loop off" ;
+ onClicked: loop = 0 }
+ MenuItem { text: "Loop on" ;
+ onClicked: loop = 1 }
+
+ }
+ onCurrentIndexChanged:
+ {
+ console.log(currentIndex)
+ Database.setProp('loop',String(currentIndex))
+ }
+ Component.onCompleted:
+ {
+ loop = Database.getProp('loop')
+ loopSwitch.currentIndex = loop
+ }
+ }
+ }
/*
CollapsingHeader {
@@ -296,7 +365,8 @@
}
*/
- CollapsingHeader {
+ CollapsingHeader
+ {
id: slideshowImagesCollapsingHeader
text: qsTrId("slideshow-images") + "(" + imageListModel.count + ")"
collapsingItem: imageGrid
@@ -304,7 +374,8 @@
interactive: imageListModel.count > 0
menuItems: [clearImages]
- MenuItem {
+ MenuItem
+ {
id: clearImages
text: qsTrId("menu-clear")
onClicked: {
@@ -314,9 +385,9 @@
}
}
- SilicaGridView {
+ SilicaGridView
+ {
id: imageGrid
-
property Item expandedItem
width: parent.width
@@ -328,13 +399,15 @@
Behavior on height { SmoothedAnimation { duration: 300 } }
- delegate: Item {
+ delegate: Item
+ {
id: dummy
width: slideshowDialog.imageWidth
height: thumbnail.isExpanded ? thumbnail.height + gridContextMenu.height : thumbnail.height
z: thumbnail.isExpanded ? 1000 : 1
- Thumbnail {
+ Thumbnail
+ {
id: thumbnail
property bool isExpanded: imageGrid.expandedItem == thumbnail
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-stopmotion-0.2.0.tar.bz2/qml/py/videox.py
^
|
@@ -2,7 +2,7 @@
import pyotherside
import time
-import os,sys, logging
+import os,sys
import subprocess, signal
import random
from pathlib import Path
@@ -13,9 +13,6 @@
#from collections.abc import Iterator
from typing import Iterator
-loglevel=os.environ.get("LOGLEVEL", "INFO")
-logging.basicConfig(stream=sys.stderr, level=loglevel)
-
# global variables
currentFunctionErrorName = ""
success = "false"
|
|
Changed |
_service:tar_git:harbour-stopmotion-0.2.0.tar.bz2/screenshot-01.png
^
|
|
Changed |
_service:tar_git:harbour-stopmotion-0.2.0.tar.bz2/screenshot-02.png
^
|
|
Changed |
_service:tar_git:harbour-stopmotion-0.2.0.tar.bz2/screenshot-03.png
^
|
|
Changed |
_service:tar_git:harbour-stopmotion-0.2.0.tar.bz2/screenshot-04.png
^
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-stopmotion-0.2.0.tar.bz2/translations/harbour-stopmotion-de.ts
^
|
@@ -113,15 +113,15 @@
<context>
<name>SlideshowPage</name>
<message>
- <source>Add files</source>
+ <source>About</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Sart slideshow</source>
+ <source>Add files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Remove image</source>
+ <source>Start slideshow</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -133,6 +133,10 @@
<translation type="unfinished"></translation>
</message>
<message>
+ <source>Remove image</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<source>Audio extracted to</source>
<translation type="unfinished"></translation>
</message>
@@ -149,6 +153,10 @@
<translation type="unfinished"></translation>
</message>
<message>
+ <source>Exported to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<source>Extracted to</source>
<translation type="unfinished"></translation>
</message>
@@ -173,11 +181,7 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Exported to</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>About</source>
+ <source>Start canvas slideshow</source>
<translation type="unfinished"></translation>
</message>
</context>
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-stopmotion-0.2.0.tar.bz2/translations/harbour-stopmotion.ts
^
|
@@ -113,15 +113,15 @@
<context>
<name>SlideshowPage</name>
<message>
- <source>Add files</source>
+ <source>About</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Sart slideshow</source>
+ <source>Add files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Remove image</source>
+ <source>Start slideshow</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -133,6 +133,10 @@
<translation type="unfinished"></translation>
</message>
<message>
+ <source>Remove image</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<source>Audio extracted to</source>
<translation type="unfinished"></translation>
</message>
@@ -149,6 +153,10 @@
<translation type="unfinished"></translation>
</message>
<message>
+ <source>Exported to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<source>Extracted to</source>
<translation type="unfinished"></translation>
</message>
@@ -173,11 +181,7 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Exported to</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>About</source>
+ <source>Start canvas slideshow</source>
<translation type="unfinished"></translation>
</message>
</context>
|