gpt4all
127 строк · 3.5 Кб
1import QtCore
2import QtQuick
3import QtQuick.Controls
4import QtQuick.Controls.Basic
5import QtQuick.Layouts
6import QtQuick.Dialogs
7import Qt.labs.folderlistmodel
8import mysettings
9
10Item {
11id: settingsStack
12
13Theme {
14id: theme
15}
16
17property alias title: titleLabelText.text
18property ListModel tabTitlesModel: ListModel { }
19property list<Component> tabs: [ ]
20
21Rectangle {
22id: titleLabel
23anchors.top: parent.top
24anchors.leftMargin: 20
25anchors.rightMargin: 15
26anchors.left: parent.left
27anchors.right: parent.right
28height: titleLabelText.height
29color: "transparent"
30Label {
31id: titleLabelText
32anchors.left: parent.left
33color: theme.titleTextColor
34topPadding: 10
35bottomPadding: 10
36font.pixelSize: theme.fontSizeLargest
37font.bold: true
38}
39}
40
41Rectangle {
42anchors.top: titleLabel.bottom
43anchors.leftMargin: 20
44anchors.rightMargin: 15
45anchors.left: parent.left
46anchors.right: parent.right
47height: 3
48color: theme.accentColor
49}
50
51TabBar {
52id: settingsTabBar
53anchors.top: titleLabel.bottom
54anchors.topMargin: 15
55anchors.horizontalCenter: parent.horizontalCenter
56width: parent.width / 1.75
57z: 200
58visible: tabTitlesModel.count > 1
59background: Rectangle {
60color: "transparent"
61}
62Repeater {
63model: settingsStack.tabTitlesModel
64TabButton {
65id: tabButton
66padding: 10
67contentItem: IconLabel {
68color: theme.textColor
69font.pixelSize: theme.fontSizeLarge
70font.bold: tabButton.checked
71text: model.title
72}
73background: Rectangle {
74color: "transparent"
75}
76Accessible.role: Accessible.Button
77Accessible.name: model.title
78}
79}
80}
81
82Rectangle {
83id: dividerTabBar
84visible: tabTitlesModel.count > 1
85anchors.top: settingsTabBar.bottom
86anchors.topMargin: 15
87anchors.bottomMargin: 15
88anchors.leftMargin: 15
89anchors.rightMargin: 15
90anchors.left: parent.left
91anchors.right: parent.right
92height: 3
93color: theme.accentColor
94}
95
96FolderDialog {
97id: folderDialog
98title: qsTr("Please choose a directory")
99}
100
101function openFolderDialog(currentFolder, onAccepted) {
102folderDialog.currentFolder = currentFolder;
103folderDialog.accepted.connect(function() { onAccepted(folderDialog.currentFolder); });
104folderDialog.open();
105}
106
107StackLayout {
108id: stackLayout
109anchors.top: tabTitlesModel.count > 1 ? dividerTabBar.bottom : titleLabel.bottom
110anchors.left: parent.left
111anchors.right: parent.right
112anchors.bottom: parent.bottom
113currentIndex: settingsTabBar.currentIndex
114
115Repeater {
116model: settingsStack.tabs
117delegate: Loader {
118id: loader
119sourceComponent: model.modelData
120onLoaded: {
121settingsStack.tabTitlesModel.append({ "title": loader.item.title });
122item.openFolderDialog = settingsStack.openFolderDialog;
123}
124}
125}
126}
127}
128