Files
Artemis/ui/DbManager.qml
2024-05-31 16:36:34 +02:00

290 lines
8.4 KiB
QML

import QtQuick
import QtQuick.Window
import QtQuick.Controls
import QtQuick.Controls.Material
import QtQuick.Layouts
Window {
id: windowDBmanager
width: 500
height: 400
modality: Qt.ApplicationModal
flags: Qt.Dialog
title: qsTr("Artemis - Load Database")
signal loadDB (string dbName)
signal deleteDB (string dbName)
signal renameDB (string dbName, string newDbName)
function loadList(dict) {
clearAll()
for (var i = 0; i < dict.length; i++) {
myModel.append(dict[i])
}
itemChanged()
}
function itemChanged() {
var selected_db = myModel.get(listView.currentIndex)
if (selected_db !== undefined) {
lockMenu(false)
titleLabel.text = myModel.get(listView.currentIndex).name
totDocsLabel.text = myModel.get(listView.currentIndex).documents_n
totSignalsLabel.text = myModel.get(listView.currentIndex).signals_n
totImagesLabel.text = myModel.get(listView.currentIndex).images_n
totAudioLabel.text = myModel.get(listView.currentIndex).audio_n
} else {
lockMenu(true)
}
}
function clearAll() {
titleLabel.text = 'N/A'
totDocsLabel.text = ''
totSignalsLabel.text = ''
totImagesLabel.text = ''
totAudioLabel.text = ''
myModel.clear()
}
function loadDBButton() {
loadDB(myModel.get(listView.currentIndex).db_dir_name)
}
function renameDb() {
if (textDBName.readOnly) {
textDBName.focus = true
textDBName.readOnly = false
renameButton.highlighted = true
createDbButton.enabled = false
deleteDbButton.enabled = false
}
else {
renameDB(myModel.get(listView.currentIndex).db_dir_name, textDBName.text)
textDBName.focus = false
textDBName.readOnly = true
renameButton.highlighted = false
createDbButton.enabled = true
deleteDbButton.enabled = true
}
}
function lockMenu(toggle) {
if (toggle) {
deleteButton.enabled = false
renameButton.enabled = false
loadButton.enabled = false
} else {
deleteButton.enabled = true
renameButton.enabled = true
loadButton.enabled = true
}
}
DialogMessage {
id: dialogDeleteConfirmation
modal: true
title: "Are you sure?"
message: "You are about to delete the database and all its contents permanently. The process cannot be undone."
messageType: "warn"
standardButtons: Dialog.Cancel | Dialog.Yes
onAccepted: {
deleteDB(myModel.get(listView.currentIndex).db_dir_name)
}
}
Dialog {
id: renameDb
x: (parent.width - width) / 2
y: (parent.height - height) / 2
modal: true
closePolicy: Popup.NoAutoClose
standardButtons: Dialog.Ok | Dialog.Cancel
ColumnLayout {
anchors.fill: parent
Label {
text: qsTr("Enter the new for the database:")
Layout.bottomMargin: 15
font.pointSize: 12
}
TextField {
id: newDbName
Layout.fillWidth: true
placeholderText: qsTr("New DB Name")
}
}
onAccepted: {
renameDB(myModel.get(listView.currentIndex).db_dir_name, newDbName.text)
}
}
Page {
anchors.fill: parent
RowLayout {
anchors.fill: parent
anchors.rightMargin: 10
anchors.leftMargin: 10
anchors.bottomMargin: 10
anchors.topMargin: 10
ListView {
id: listView
width: 150
Layout.fillHeight: true
highlight: Rectangle { color: Material.accent; radius: 5 }
onCurrentIndexChanged: { itemChanged() }
delegate: Item {
id: listDelegate
width: ListView.view.width
height: 20
Label { text: name }
MouseArea {
anchors.fill: parent
onClicked: {
listView.currentIndex = index
}
}
}
model: ListModel {
id: myModel
}
}
ToolSeparator {
rightPadding: 10
leftPadding: 10
Layout.fillHeight: true
}
ColumnLayout {
Layout.fillHeight: true
Layout.fillWidth: true
Label {
id: titleLabel
Layout.bottomMargin: 20
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
font.pointSize: 15
font.bold: true
}
GridLayout {
columnSpacing: 25
columns: 2
Label {
text: qsTr("Total Signals:")
font.pointSize: 12
font.bold: true
}
Label {
id: totSignalsLabel
text: qsTr("0")
font.pointSize: 12
font.bold: true
}
Label {
text: qsTr("Total Documents:")
font.pointSize: 12
}
Label {
id: totDocsLabel
text: qsTr("0")
font.pointSize: 12
}
Label {
text: qsTr("Images:")
Layout.leftMargin: 15
font.pointSize: 12
}
Label {
id: totImagesLabel
text: qsTr("0")
font.pointSize: 12
}
Label {
text: qsTr("Audio:")
Layout.leftMargin: 15
font.pointSize: 12
}
Label {
id: totAudioLabel
text: qsTr("0")
font.pointSize: 12
}
}
Item {
Layout.fillWidth: true
Layout.fillHeight: true
}
RowLayout {
Button {
id: deleteButton
text: qsTr("Delete")
icon.source: "qrc:/images/icons/delete.svg"
display: AbstractButton.TextBesideIcon
enabled: false
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
onClicked: {
dialogDeleteConfirmation.open()
}
}
Item {
Layout.fillWidth: true
}
Button {
id: renameButton
text: qsTr("Rename")
icon.source: "qrc:/images/icons/rename.svg"
display: AbstractButton.TextBesideIcon
enabled: false
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
onClicked: {
renameDb.open()
}
}
Item {
Layout.fillWidth: true
}
Button {
id: loadButton
text: qsTr("Load")
icon.source: "qrc:/images/icons/load.svg"
display: AbstractButton.TextBesideIcon
enabled: false
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
onClicked: {
loadDBButton()
}
}
}
}
}
}
}