2023-06-29 17:38:10 +00:00
|
|
|
import QtCore
|
|
|
|
import QtQuick
|
|
|
|
import QtQuick.Controls
|
|
|
|
import QtQuick.Controls.Basic
|
|
|
|
import QtQuick.Layouts
|
2023-07-09 17:05:06 +00:00
|
|
|
import QtQuick.Dialogs
|
|
|
|
import Qt.labs.folderlistmodel
|
2023-06-29 17:38:10 +00:00
|
|
|
import mysettings
|
|
|
|
|
|
|
|
Item {
|
|
|
|
id: settingsStack
|
|
|
|
|
|
|
|
Theme {
|
|
|
|
id: theme
|
|
|
|
}
|
|
|
|
|
|
|
|
property ListModel tabTitlesModel: ListModel { }
|
|
|
|
property list<Component> tabs: [ ]
|
|
|
|
|
|
|
|
TabBar {
|
|
|
|
id: settingsTabBar
|
2024-06-24 22:49:23 +00:00
|
|
|
anchors.top: parent.top
|
2023-07-01 15:34:21 +00:00
|
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
|
|
width: parent.width / 1.75
|
2023-06-29 17:38:10 +00:00
|
|
|
z: 200
|
2023-06-30 13:50:09 +00:00
|
|
|
visible: tabTitlesModel.count > 1
|
2023-07-01 15:34:21 +00:00
|
|
|
background: Rectangle {
|
|
|
|
color: "transparent"
|
|
|
|
}
|
2023-06-29 17:38:10 +00:00
|
|
|
Repeater {
|
|
|
|
model: settingsStack.tabTitlesModel
|
|
|
|
TabButton {
|
|
|
|
id: tabButton
|
2023-07-01 15:34:21 +00:00
|
|
|
padding: 10
|
2023-06-29 17:38:10 +00:00
|
|
|
contentItem: IconLabel {
|
|
|
|
color: theme.textColor
|
2023-08-07 17:54:13 +00:00
|
|
|
font.pixelSize: theme.fontSizeLarge
|
2023-06-29 17:38:10 +00:00
|
|
|
font.bold: tabButton.checked
|
|
|
|
text: model.title
|
|
|
|
}
|
|
|
|
background: Rectangle {
|
2023-07-01 15:34:21 +00:00
|
|
|
color: "transparent"
|
2023-06-29 17:38:10 +00:00
|
|
|
}
|
|
|
|
Accessible.role: Accessible.Button
|
|
|
|
Accessible.name: model.title
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-07-01 15:34:21 +00:00
|
|
|
Rectangle {
|
|
|
|
id: dividerTabBar
|
|
|
|
visible: tabTitlesModel.count > 1
|
|
|
|
anchors.top: settingsTabBar.bottom
|
|
|
|
anchors.topMargin: 15
|
|
|
|
anchors.bottomMargin: 15
|
|
|
|
anchors.leftMargin: 15
|
|
|
|
anchors.rightMargin: 15
|
|
|
|
anchors.left: parent.left
|
|
|
|
anchors.right: parent.right
|
2024-06-27 11:16:11 +00:00
|
|
|
height: 1
|
2024-06-24 22:49:23 +00:00
|
|
|
color: theme.settingsDivider
|
2023-07-01 15:34:21 +00:00
|
|
|
}
|
|
|
|
|
2023-07-09 17:05:06 +00:00
|
|
|
FolderDialog {
|
|
|
|
id: folderDialog
|
|
|
|
title: qsTr("Please choose a directory")
|
|
|
|
}
|
|
|
|
|
|
|
|
function openFolderDialog(currentFolder, onAccepted) {
|
|
|
|
folderDialog.currentFolder = currentFolder;
|
2024-07-03 16:00:01 +00:00
|
|
|
folderDialog.accepted.connect(function() { onAccepted(folderDialog.selectedFolder); });
|
2023-07-09 17:05:06 +00:00
|
|
|
folderDialog.open();
|
|
|
|
}
|
|
|
|
|
2023-06-29 17:38:10 +00:00
|
|
|
StackLayout {
|
|
|
|
id: stackLayout
|
2024-06-24 22:49:23 +00:00
|
|
|
anchors.top: tabTitlesModel.count > 1 ? dividerTabBar.bottom : parent.top
|
|
|
|
anchors.topMargin: 5
|
2023-06-29 17:38:10 +00:00
|
|
|
anchors.left: parent.left
|
|
|
|
anchors.right: parent.right
|
|
|
|
anchors.bottom: parent.bottom
|
|
|
|
currentIndex: settingsTabBar.currentIndex
|
|
|
|
|
|
|
|
Repeater {
|
|
|
|
model: settingsStack.tabs
|
|
|
|
delegate: Loader {
|
|
|
|
id: loader
|
|
|
|
sourceComponent: model.modelData
|
|
|
|
onLoaded: {
|
|
|
|
settingsStack.tabTitlesModel.append({ "title": loader.item.title });
|
2023-07-09 17:05:06 +00:00
|
|
|
item.openFolderDialog = settingsStack.openFolderDialog;
|
2023-06-29 17:38:10 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|