Reworking PostCapture
authorMohammed Sameer <msameer@foolab.org>
Sun, 9 Dec 2012 01:01:14 +0000 (03:01 +0200)
committerMohammed Sameer <msameer@foolab.org>
Sun, 9 Dec 2012 01:01:14 +0000 (03:01 +0200)
qml/PostCaptureImage.qml [new file with mode: 0644]
qml/PostCaptureItem.qml
qml/PostCapturePage.qml
qml/PostCaptureVideo.qml [new file with mode: 0644]
src/cameraresources.cpp

diff --git a/qml/PostCaptureImage.qml b/qml/PostCaptureImage.qml
new file mode 100644 (file)
index 0000000..f5c96c0
--- /dev/null
@@ -0,0 +1,44 @@
+// -*- qml -*-
+
+/*!
+ * This file is part of CameraPlus.
+ *
+ * Copyright (C) 2012 Mohammed Sameer <msameer@foolab.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+import QtQuick 1.1
+import com.nokia.meego 1.1
+import CameraPlus 1.0
+
+QuillItem {
+        id: item
+        source: url
+        mimeType: mimetype
+
+        Component.onCompleted: console.log("Created " + url)
+
+        function stop() {
+                // No-op
+        }
+
+        MouseArea {
+                id: mouse
+                anchors.fill: parent
+                enabled: true
+                onClicked: toolBar.visible = !toolBar.visible
+        }
+}
index b1c2edf..fec2165 100644 (file)
@@ -25,32 +25,46 @@ import com.nokia.meego 1.1
 import CameraPlus 1.0
 
 Item {
-        width: PathView.view.width
-        height: PathView.view.height
+        id: item
+        property bool isImage: mimetype.toLowerCase().search("video") < 0
+        property bool error: false
+        property bool currentItem: PathView.isCurrentItem
+        onCurrentItemChanged: {
+                if (currentItem) {
+                        page.currentItem = item
+                }
+        }
+
+        function stop() {
+                if (loader.item) {
+                        loader.item.stop();
+                }
+        }
 
         Label {
                 anchors.fill: parent
-                visible: item.error && page.status == PageStatus.Active
+                visible: (loader.status == Loader.Error || item.error) && page.status == PageStatus.Active
                 text: qsTr("Failed to load preview");
                 verticalAlignment: Text.AlignVCenter
                 horizontalAlignment: Text.AlignHCenter
                 font.pixelSize: 32
         }
 
-        QuillItem {
-                id: item
-                source: url
-                mimeType: mimetype
-                width: view.width - 10
-                height: view.height
-                anchors.centerIn: parent
-                visible: page.status == PageStatus.Activating || page.status == PageStatus.Active
-
-                MouseArea {
-                        id: mouse
-                        anchors.fill: parent
-                        enabled: true
-                        onClicked: toolBar.visible = !toolBar.visible
-                }
+        Loader {
+                id: loader
+                anchors.fill: parent
+                source: isImage ? Qt.resolvedUrl("PostCaptureImage.qml") : Qt.resolvedUrl("PostCaptureVideo.qml")
+        }
+
+        Binding {
+                target: loader.item
+                value: page.status == PageStatus.Activating || page.status == PageStatus.Active
+                property: "visible"
+        }
+
+        Binding {
+                target: item
+                value: loader.item ? loader.item.error : false
+                property: "error"
         }
 }
index 30793f6..0a8b989 100644 (file)
@@ -36,10 +36,21 @@ import CameraPlus 1.0
 CameraPage {
         id: page
 
+        property Item currentItem: null
+        property Item previousItem: null
+
         controlsVisible: false
         policyMode: CameraResources.PostCapture
         needsPipeline: true
 
+        onCurrentItemChanged: {
+                if (previousItem) {
+                        previousItem.stop();
+                }
+
+                previousItem = currentItem
+        }
+
         onStatusChanged: {
                 if (status == PageStatus.Active) {
                         cam.stop();
@@ -61,6 +72,12 @@ CameraPage {
                 anchors.fill: parent
         }
 
+        function stop() {
+                if (currentItem) {
+                        currentItem.stop();
+                }
+        }
+
         PathView {
                 id: view
                 anchors.fill: parent
@@ -96,7 +113,10 @@ CameraPage {
                         }
                 }
 
-                delegate: PostCaptureItem {}
+                delegate: PostCaptureItem {
+                        width: view.width - 10
+                        height: view.height
+                }
         }
 
         ToolBar {
@@ -105,7 +125,7 @@ CameraPage {
                 anchors.bottom: parent.bottom
                 tools: ToolBarLayout {
                         id: layout
-                        ToolIcon { iconId: "icon-m-toolbar-back"; onClicked: { cam.start(); pageStack.pop(); } }
+                        ToolIcon { iconId: "icon-m-toolbar-back"; onClicked: { page.stop(); pageStack.pop(); } }
                 }
         }
 
diff --git a/qml/PostCaptureVideo.qml b/qml/PostCaptureVideo.qml
new file mode 100644 (file)
index 0000000..d010f53
--- /dev/null
@@ -0,0 +1,40 @@
+// -*- qml -*-
+
+/*!
+ * This file is part of CameraPlus.
+ *
+ * Copyright (C) 2012 Mohammed Sameer <msameer@foolab.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+import QtQuick 1.1
+import QtMultimediaKit 1.1
+
+Video {
+        id: video
+        source: url
+
+        Component.onCompleted: console.log("Created " + url)
+        onError: console.log("ERROR");
+
+        MouseArea {
+                anchors.fill: parent
+                onClicked: {
+                        video.play()
+                        console.log("DDDDDDDDDDDDDDDDDDDDD " + url)
+                }
+        }
+}
index 3e41080..dda646f 100644 (file)
@@ -210,11 +210,9 @@ void CameraResourcesWorker::acquire(bool *ok, const CameraResources::Mode& mode)
     break;
 
   case CameraResources::PostCapture:
-    *ok = updateSet(QList<ResourcePolicy::ResourceType>()
-                   << ResourcePolicy::VideoPlaybackType
-                   << ResourcePolicy::ScaleButtonType,
+    *ok = updateSet(QList<ResourcePolicy::ResourceType>(),
                    QList<ResourcePolicy::ResourceType>()
-                   << ResourcePolicy::AudioPlaybackType);
+                   << ResourcePolicy::ScaleButtonType);
     break;
 
   default: