status-desktop/ui/imports/shared/popups/ImageCropWorkflow.qml
Lukáš Tinkl d9d6d90dc9 [Style] remove legacy Style and its themes
- legacy Style and ThemePalette removed
- moved and deduplicated font definitions into `Theme` (unrelated to a
color palette)
- `Style.current.foo` -> `Theme.foo`
- `Style.current.fooColor` -> `Theme.palette.fooColor`
- upgrade the imports to 5.15
- removed some mode dead components

Fixes #16514
2024-10-22 15:54:31 +02:00

92 lines
2.7 KiB
QML

import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Dialogs 1.3
import StatusQ.Components 0.1
import StatusQ.Controls 0.1
import StatusQ.Core 0.1
import StatusQ.Core.Theme 0.1
import StatusQ.Popups 0.1
import utils 1.0
Item {
id: root
objectName: "imageCropWorkflow"
property var callback: null
property alias aspectRatio: imageCropper.aspectRatio
property alias windowStyle: imageCropper.windowStyle
/*required*/ property string imageFileDialogTitle: ""
/*required*/ property string title: ""
/*required*/ property string acceptButtonText: ""
property bool roundedImage: true
signal imageCropped(var image, var cropRect)
signal done()
function chooseImageToCrop() {
fileDialog.open()
}
function cropImage(imageUrl) {
imageCropper.source = imageUrl
imageCropperModal.open()
}
FileDialog {
id: fileDialog
title: root.imageFileDialogTitle
folder: root.userSelectedImage ? imageCropper.source.substr(0, imageCropper.source.lastIndexOf("/")) : shortcuts.pictures
nameFilters: [qsTr("Supported image formats (%1)").arg(Constants.acceptedDragNDropImageExtensions.map(img => "*" + img).join(" "))]
onAccepted: {
if (fileDialog.fileUrls.length > 0) {
cropImage(fileDialog.fileUrls[0])
}
}
} // FileDialog
StatusModal {
id: imageCropperModal
headerSettings.title: root.title
width: root.roundedImage ? 480 : 580
StatusImageCropPanel {
id: imageCropper
objectName: "profileImageCropper"
implicitHeight: root.roundedImage ? 350 : 370
anchors {
fill: parent
leftMargin: Theme.bigPadding + Theme.halfPadding / 2
rightMargin: Theme.bigPadding + Theme.halfPadding / 2
topMargin: Theme.bigPadding
bottomMargin: Theme.bigPadding
}
margins: root.roundedImage ? 10 : 20
windowStyle: root.roundedImage ? StatusImageCrop.WindowStyle.Rounded : StatusImageCrop.WindowStyle.Rectangular
enableCheckers: true
}
rightButtons: [
StatusButton {
objectName: "imageCropperAcceptButton"
text: root.acceptButtonText
enabled: imageCropper.sourceSize.width > 0 && imageCropper.sourceSize.height > 0
onClicked: {
root.imageCropped(imageCropper.source, imageCropper.cropRect)
imageCropperModal.close()
}
}
]
onClosed: root.done()
} // StatusModal
} // Item