File: ViewFinderExportConfirmation.qml

package info (click to toggle)
lomiri-camera-app 4.0.2%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 5,092 kB
  • sloc: cpp: 1,671; javascript: 27; makefile: 16; sh: 12
file content (138 lines) | stat: -rw-r--r-- 4,670 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/*
 * Copyright 2014 Canonical Ltd.
 *
 * 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; version 3.
 *
 * 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 <http://www.gnu.org/licenses/>.
 */

import QtQuick 2.12
import Lomiri.Components 1.3

Item {
    id: viewFinderExportConfirmation

    property bool isVideo
    property string mediaPath
    property bool waitingForPictureCapture: false

    signal hideRequested()
    signal showRequested()
    property ViewFinderGeometry geometry

    visible: false

    // For videos show immediately without waiting for the preview to load,
    // since we will show a progress indicator instead of the preview
    onMediaPathChanged: if (mediaPath && isVideo) showRequested()

    function photoCaptureStarted() {
        controls.item.lockPictureOrientation()
        waitingForPictureCapture = true
    }

    Loader {
        id: controls
        anchors.fill: parent
        asynchronous: true
        sourceComponent: Component {
            Item {
                function lockPictureOrientation() { pictureReview.lockOrientation() }

                VideoReview {
                    id: videoReview
                    anchors.fill: parent
                    bottomMargin: buttons.height
                    videoPath: isVideo ? mediaPath : ""
                    visible: isVideo
                }

                PictureReview {
                    id: pictureReview
                    anchors.fill: parent
                    visible: !isVideo
                    geometry: viewFinderExportConfirmation.geometry
                    source: !isVideo ? mediaPath : ""

                    // Show export confirmation only when the snapshot is loaded to prevent the
                    // screen being black while the image loads
                    onLoadedChanged: {
                        if (loaded) {
                             viewFinderExportConfirmation.showRequested()
                             waitingForPictureCapture = false
                         }
                    }
                }

                Item {
                    id: buttons
                    anchors.bottom: parent.bottom
                    anchors.left: parent.left
                    anchors.right: parent.right
                    height: childrenRect.height

                    CircleButton {
                        id: retryButton
                        objectName: "retryButton"

                        anchors {
                            right: validateButton.left
                            rightMargin: units.gu(7.5)
                            bottom: parent.bottom
                            bottomMargin: units.gu(6)
                        }

                        iconName: "reload"
                        onClicked: hideRequested()
                    }

                    CircleButton {
                        id: validateButton
                        objectName: "validateButton"

                        width: units.gu(8)
                        anchors {
                            bottom: parent.bottom
                            bottomMargin: units.gu(5)
                            horizontalCenter: parent.horizontalCenter
                        }

                        iconName: "ok"
                        onClicked: {
                            hideRequested();
                            main.exportContent([mediaPath]);
                            mediaPath = "";
                        }
                    }

                    CircleButton {
                        id: cancelButton
                        objectName: "cancelButton"

                        anchors {
                            left: validateButton.right
                            leftMargin: units.gu(7.5)
                            bottom: parent.bottom
                            bottomMargin: units.gu(6)
                        }

                        iconName: "close"
                        onClicked: {
                            hideRequested();
                            main.cancelExport();
                            mediaPath = "";
                        }
                    }
                }
            }
        }
    }
}