You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
166 lines
5.3 KiB
QML
166 lines
5.3 KiB
QML
/*
|
|
* SPDX-FileCopyrightText: 2020 George Florea Bănuș <georgefb899@gmail.com>
|
|
*
|
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
|
*/
|
|
|
|
import QtQuick 2.0
|
|
import QtQuick.Layouts 1.12
|
|
import QtQuick.Controls 2.12
|
|
|
|
import org.kde.kirigami 2.11 as Kirigami
|
|
|
|
// Subtitles Folders
|
|
Item {
|
|
id: root
|
|
|
|
// prevent creating multiple empty items
|
|
// until the new one has been saved
|
|
property bool canAddFolder: true
|
|
|
|
Layout.fillWidth: true
|
|
implicitHeight: sectionTitle.height + sfListView.implicitHeight + sfAddFolder.height + 25
|
|
|
|
Label {
|
|
id: sectionTitle
|
|
|
|
text: i18n("Load subtitles from")
|
|
bottomPadding: 10
|
|
}
|
|
|
|
ListView {
|
|
id: sfListView
|
|
property int sfDelegateHeight: 40
|
|
|
|
anchors.top: sectionTitle.bottom
|
|
anchors.left: parent.left
|
|
anchors.right: parent.right
|
|
implicitHeight: count > 5
|
|
? 5 * sfListView.sfDelegateHeight + (sfListView.spacing * 4)
|
|
: count * sfListView.sfDelegateHeight + (sfListView.spacing * (count - 1))
|
|
spacing: 5
|
|
clip: true
|
|
model: subsFoldersModel
|
|
Layout.fillWidth: true
|
|
ScrollBar.vertical: ScrollBar { id: scrollBar }
|
|
delegate: Rectangle {
|
|
id: sfDelegate
|
|
width: root.width
|
|
height: sfListView.sfDelegateHeight
|
|
color: Kirigami.Theme.alternateBackgroundColor
|
|
|
|
Loader {
|
|
id: sfLoader
|
|
anchors.fill: parent
|
|
sourceComponent: model.display === "" ? sfEditComponent : sfDisplayComponent
|
|
}
|
|
|
|
Component {
|
|
id: sfDisplayComponent
|
|
|
|
RowLayout {
|
|
|
|
Label {
|
|
id: sfLabel
|
|
text: model.display
|
|
leftPadding: 10
|
|
Layout.fillWidth: true
|
|
}
|
|
|
|
Button {
|
|
icon.name: "edit-entry"
|
|
flat: true
|
|
onClicked: {
|
|
sfLoader.sourceComponent = sfEditComponent
|
|
}
|
|
}
|
|
|
|
Item { width: scrollBar.width }
|
|
}
|
|
} // Component: display
|
|
|
|
Component {
|
|
id: sfEditComponent
|
|
|
|
RowLayout {
|
|
|
|
TextField {
|
|
id: editField
|
|
leftPadding: 10
|
|
text: model.display
|
|
Layout.leftMargin: 5
|
|
Layout.fillWidth: true
|
|
Component.onCompleted: editField.forceActiveFocus(Qt.MouseFocusReason)
|
|
}
|
|
|
|
Button {
|
|
property bool canDelete: editField.text === ""
|
|
icon.name: "delete"
|
|
flat: true
|
|
onClicked: {
|
|
if (!canDelete) {
|
|
text = i18n("Confirm deletion")
|
|
canDelete = true
|
|
return
|
|
}
|
|
|
|
if (model.row === sfListView.count - 1) {
|
|
root.canAddFolder = true
|
|
}
|
|
subsFoldersModel.deleteFolder(model.row)
|
|
const rows = sfListView.count
|
|
sfListView.implicitHeight = rows > 5
|
|
? 5 * sfListView.sfDelegateHeight + (sfListView.spacing * 4)
|
|
: rows * sfListView.sfDelegateHeight + (sfListView.spacing * (rows - 1))
|
|
|
|
}
|
|
ToolTip {
|
|
text: i18n("Delete this folder from list")
|
|
}
|
|
}
|
|
|
|
Button {
|
|
icon.name: "dialog-ok"
|
|
flat: true
|
|
enabled: editField.text !== "" ? true : false
|
|
onClicked: {
|
|
subsFoldersModel.updateFolder(editField.text, model.row)
|
|
sfLoader.sourceComponent = sfDisplayComponent
|
|
if (model.row === sfListView.count - 1) {
|
|
root.canAddFolder = true
|
|
}
|
|
}
|
|
ToolTip {
|
|
text: i18n("Save changes")
|
|
}
|
|
}
|
|
|
|
Item { width: scrollBar.width }
|
|
}
|
|
} // Component: edit
|
|
} // delegate: Rectangle
|
|
}
|
|
|
|
Item {
|
|
id: spacer
|
|
anchors.top: sfListView.bottom
|
|
height: 5
|
|
}
|
|
|
|
Button {
|
|
id: sfAddFolder
|
|
anchors.top: spacer.bottom
|
|
icon.name: "list-add"
|
|
text: i18n("Add new folder")
|
|
enabled: root.canAddFolder
|
|
onClicked: {
|
|
subsFoldersModel.addFolder()
|
|
const rows = sfListView.count
|
|
sfListView.implicitHeight = rows > 5
|
|
? 5 * sfListView.sfDelegateHeight + (sfListView.spacing * 4)
|
|
: rows * sfListView.sfDelegateHeight + (sfListView.spacing * (rows - 1))
|
|
root.canAddFolder = false
|
|
}
|
|
}
|
|
}
|