ZoomCaptureButton {
id: zoomCapture
- onReleased: overlay.toggleRecording()
}
- ZoomCaptureCancel {
+ CaptureControl {
+ id: captureControl
+ capturePressed: capture.pressed
+ zoomPressed: zoomCapture.zoomPressed
+ proximityClosed: proximitySensor.close
+ onStartCapture: overlay.toggleRecording()
+ }
+
+ CaptureCancel {
anchors.fill: parent
- zoomCapture: zoomCapture
+ enabled: captureControl.showCancelBanner
+ onPressed: captureControl.canceled = true
}
CaptureButton {
anchors.right: parent.right
anchors.rightMargin: 20
anchors.verticalCenter: parent.verticalCenter
- iconId: overlay.recording ? cameraTheme.captureButtonRecordingIconId : cameraTheme.captureButtonVideoIconId
+ iconSource: overlay.recording ? cameraTheme.captureButtonRecordingIconId : cameraTheme.captureButtonVideoIconId
width: 75
height: 75
opacity: 0.5
- onClicked: overlay.toggleRecording()
+ visible: controlsVisible
- visible: controlsVisible && (!settings.zoomAsShutter && keys.active)
+ onExited: {
+ if (mouseX <= 0 || mouseY <= 0 || mouseX > width || mouseY > height) {
+ // Release outside the button:
+ captureControl.canceled = true
+ }
+ }
}
CameraToolBar {
tools: CameraToolBarTools {
VideoTorchButton {
camera: cam
+ visible: !overlay.cam.quirks.hasQuirk(Quirks.NoVideoTorch)
}
VideoSceneButton {
- visible: !overlay.recording
+ property bool hide: (overlay.recording && overlay.cam.quirks.hasQuirk(Quirks.NoSceneModeChangeDuringRecording)) || overlay.cam.quirks.hasQuirk(Quirks.NoNightSceneMode)
+ visible: !hide
onClicked: toolBar.push(tools)
}
Indicator {
id: resolutionIndicator
- property string videoResolution: settings.device == 1 ? settings.secondaryVideoResolution : settings.primaryVideoResolution
- property string videoRatio: settings.device == 1 ? settings.secondaryVideoAspectRatio : settings.primaryVideoAspectRatio
- source: "image://theme/" + cameraTheme.videoIcon(videoRatio, videoResolution, settings.device)
+ source: cameraTheme.videoIcon(settings.videoAspectRatio,
+ settings.videoResolution, settings.device)
}
Indicator {
id: wbIndicator
- source: visible ? "image://theme/" + cameraTheme.whiteBalanceIndicatorIcon(settings.videoWhiteBalance) : ""
- visible: settings.videoWhiteBalance != WhiteBalance.Auto
+ source: visible ? cameraTheme.whiteBalanceIcon(settings.videoWhiteBalance) : ""
+ visible: settings.videoWhiteBalance != WhiteBalance.Auto && !toolBar.expanded
}
Indicator {
id: cfIndicator
- source: visible ? "image://theme/" + cameraTheme.colorFilterIndicatorIcon(settings.videoColorFilter) : ""
- visible: settings.videoColorFilter != ColorTone.Normal
+ source: visible ? cameraTheme.colorFilterIcon(settings.videoColorFilter) : ""
+ visible: settings.videoColorFilter != ColorTone.Normal && !toolBar.expanded
+ }
+
+ Indicator {
+ id: sceneIndicator
+ visible: settings.videoSceneMode != Scene.Auto && (!toolBar.expanded || overlay.recording)
+ source: visible ? cameraTheme.videoSceneModeIcon(settings.videoSceneMode) : ""
}
Indicator {
if (duration == 3600) {
overlay.stopRecording()
showError(qsTr("Maximum recording time reached."))
- } else if (!checkDiskSpace()) {
+ } else if (!fileSystem.hasFreeSpace(fileNaming.temporaryVideoPath)) {
page.stopRecording()
showError(qsTr("Not enough space to continue recording."))
}
duration: recordingDuration.duration
}
+ function resetToolBar() {
+ if (toolBar.depth() > 1) {
+ toolBar.pop()
+ }
+ }
+
function doStartRecording() {
if (!overlay.recording) {
return
metaData.setMetaData()
- if (!mountProtector.lock()) {
- showError(qsTr("Failed to lock images directory."))
+ if (!mountProtector.lock(fileNaming.temporaryVideoPath)) {
+ showError(qsTr("Failed to lock temporary videos directory."))
+ overlay.recording = false
+ return
+ }
+
+ if (!mountProtector.lock(fileNaming.videoPath)) {
+ showError(qsTr("Failed to lock videos directory."))
overlay.recording = false
+ mountProtector.unlockAll()
return
}
if (!videoMode.startRecording(file, tmpFile)) {
showError(qsTr("Failed to record video. Please restart the camera."))
- mountProtector.unlock()
+ mountProtector.unlockAll()
overlay.recording = false
return
}
trackerStore.storeVideo(file);
+
+ resetToolBar()
}
function startRecording() {
showError(qsTr("Camera cannot record videos in mass storage mode."))
} else if (!checkBattery()) {
showError(qsTr("Not enough battery to record video."))
- } else if (!checkDiskSpace()) {
+ } else if (!fileSystem.hasFreeSpace(fileNaming.videoPath) || !fileSystem.hasFreeSpace(fileNaming.temporaryVideoPath)) {
showError(qsTr("Not enough space to record video."))
} else {
recordingDuration.duration = 0
function stopRecording() {
videoMode.stopRecording(true)
- mountProtector.unlock()
+ mountProtector.unlockAll()
overlay.recording = false
}
}
}
+ function cameraDeviceChanged() {
+ resetToolBar()
+ }
}