Revision control

Copy as Markdown

// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
import QtQuick.Controls.Fusion
import QtQuick.Layouts
import MediaControls
import Config
Popup {
id: urlPopup
anchors.centerIn: Overlay.overlay
padding: 30
width: 500
height: column.height + 60
property url path: ""
readonly property color borderColor: urlText.text ? (!errorMsg.visible ? Config.highlightColor : "red") : Config.secondaryColor
background: Rectangle {
color: Config.mainColor
opacity: 0.9
radius: 15
border.color: "grey"
}
function setUrl(urlPath: url) {
path = urlPath
urlPopup.close()
}
function validateUrl(urlText: string) : bool {
const urlPattern = /^([a-z]+:){1,2}\/\/.+/
return urlPattern.test(urlText)
}
Column {
id: column
spacing: 20
Label {
text: qsTr("Load from URL")
font.pixelSize: 18
anchors.horizontalCenter: parent.horizontalCenter
color: Config.secondaryColor
}
ColumnLayout {
spacing: 0
TextField {
id: urlText
leftPadding: 15
verticalAlignment: TextInput.AlignVCenter
font.pixelSize: 16
placeholderText: qsTr("URL:")
placeholderTextColor: Config.secondaryColor
color: Config.secondaryColor
Layout.preferredHeight: 40
Layout.preferredWidth: 440
background: Rectangle {
color: Config.mainColor
border.color: urlPopup.borderColor
}
}
Rectangle {
id: errorMsg
visible: false
color: "#FF3A3A"
Layout.minimumHeight: 40
Layout.minimumWidth: 130
Layout.alignment: Qt.AlignLeft
Row {
anchors.centerIn: parent
spacing: 10
Image {
source: Images.iconSource("Warning_Icon", false)
}
Label {
text: qsTr("Wrong URL")
font.pixelSize: 16
color: "white"
}
}
onVisibleChanged: showError.start()
NumberAnimation {
id: showError
target: errorMsg
properties: "opacity"
from: 0
to: 1
duration: 1000
}
}
}
RowLayout {
spacing: 20
anchors.horizontalCenter: parent.horizontalCenter
CustomButton {
icon.source: ControlImages.iconSource("Cancel_Button", false)
onClicked: {
urlText.text = ""
urlPopup.close()
}
}
CustomButton {
icon.source: ControlImages.iconSource("Load_Button", false)
enabled: urlText.text
opacity: urlText.text ? 1 : 0.5
onClicked: {
if (urlPopup.validateUrl(urlText.text)) {
urlPopup.setUrl(new URL(urlText.text))
} else {
errorMsg.visible = true
}
}
}
}
}
onOpened: urlPopup.forceActiveFocus()
onClosed: {
urlText.text = ""
errorMsg.visible = false
}
}