mirror of
https://github.com/nomic-ai/gpt4all
synced 2024-11-06 09:20:33 +00:00
cb10465127
Signed-off-by: Adam Treat <treat.adam@gmail.com>
149 lines
5.5 KiB
QML
149 lines
5.5 KiB
QML
import QtCore
|
|
import QtQuick
|
|
import QtQuick.Controls
|
|
import QtQuick.Controls.Basic
|
|
import QtQuick.Layouts
|
|
import QtQuick.Dialogs
|
|
import chatlistmodel
|
|
import localdocs
|
|
import llm
|
|
|
|
MyDialog {
|
|
id: collectionsDialog
|
|
modal: true
|
|
padding: 20
|
|
width: 480
|
|
height: 640
|
|
|
|
signal addRemoveClicked
|
|
property var currentChat: ChatListModel.currentChat
|
|
|
|
Label {
|
|
id: listLabel
|
|
anchors.top: parent.top
|
|
anchors.left: parent.left
|
|
text: qsTr("Local Documents")
|
|
color: theme.titleTextColor
|
|
font.pixelSize: theme.fontSizeLarge
|
|
font.bold: true
|
|
}
|
|
|
|
ScrollView {
|
|
id: scrollView
|
|
anchors.top: listLabel.bottom
|
|
anchors.topMargin: 20
|
|
anchors.bottom: collectionSettings.top
|
|
anchors.bottomMargin: 20
|
|
anchors.left: parent.left
|
|
anchors.right: parent.right
|
|
clip: true
|
|
contentHeight: 300
|
|
ScrollBar.vertical.policy: ScrollBar.AlwaysOff
|
|
|
|
background: Rectangle {
|
|
color: theme.controlBackground
|
|
}
|
|
|
|
ListView {
|
|
id: listView
|
|
model: LocalDocs.localDocsModel
|
|
boundsBehavior: Flickable.StopAtBounds
|
|
ScrollBar.vertical: ScrollBar {
|
|
parent: listView.parent
|
|
anchors.top: listView.top
|
|
anchors.left: listView.right
|
|
anchors.bottom: listView.bottom
|
|
}
|
|
|
|
delegate: Rectangle {
|
|
id: item
|
|
width: listView.width
|
|
height: collectionId.height + 40
|
|
color: index % 2 === 0 ? theme.darkContrast : theme.lightContrast
|
|
MyCheckBox {
|
|
id: checkBox
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
anchors.left: parent.left
|
|
anchors.margins: 20
|
|
checked: currentChat.hasCollection(collection)
|
|
onClicked: {
|
|
if (checkBox.checked) {
|
|
currentChat.addCollection(collection)
|
|
} else {
|
|
currentChat.removeCollection(collection)
|
|
}
|
|
}
|
|
ToolTip.text: qsTr("Warning: searching collections while indexing can return incomplete results")
|
|
ToolTip.visible: hovered && model.indexing
|
|
}
|
|
Text {
|
|
id: collectionId
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
anchors.left: checkBox.right
|
|
anchors.margins: 20
|
|
anchors.leftMargin: 10
|
|
text: collection
|
|
font.pixelSize: theme.fontSizeLarge
|
|
elide: Text.ElideRight
|
|
color: theme.textColor
|
|
}
|
|
ProgressBar {
|
|
id: itemProgressBar
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
anchors.left: collectionId.right
|
|
anchors.right: parent.right
|
|
anchors.margins: 20
|
|
anchors.leftMargin: 40
|
|
visible: model.indexing || model.currentEmbeddingsToIndex !== model.totalEmbeddingsToIndex || model.error !== ""
|
|
value: model.error !== "" ? 0 : model.indexing ?
|
|
(model.totalBytesToIndex - model.currentBytesToIndex) / model.totalBytesToIndex :
|
|
(model.currentEmbeddingsToIndex / model.totalEmbeddingsToIndex)
|
|
background: Rectangle {
|
|
implicitHeight: 45
|
|
color: model.error ? theme.textErrorColor : theme.progressBackground
|
|
radius: 3
|
|
}
|
|
contentItem: Item {
|
|
implicitHeight: 40
|
|
|
|
Rectangle {
|
|
width: itemProgressBar.visualPosition * parent.width
|
|
height: parent.height
|
|
radius: 2
|
|
color: theme.progressForeground
|
|
}
|
|
}
|
|
Accessible.role: Accessible.ProgressBar
|
|
Accessible.name: qsTr("Indexing progressBar")
|
|
Accessible.description: qsTr("Shows the progress made in the indexing")
|
|
ToolTip.text: model.error
|
|
ToolTip.visible: hovered && model.error !== ""
|
|
}
|
|
Label {
|
|
id: speedLabel
|
|
color: theme.progressText
|
|
visible: model.indexing || model.currentEmbeddingsToIndex !== model.totalEmbeddingsToIndex
|
|
anchors.verticalCenter: itemProgressBar.verticalCenter
|
|
anchors.left: itemProgressBar.left
|
|
anchors.right: itemProgressBar.right
|
|
horizontalAlignment: Text.AlignHCenter
|
|
text: model.error !== "" ? qsTr("error...") : (model.indexing ? qsTr("indexing...") : qsTr("embeddings..."))
|
|
elide: Text.ElideRight
|
|
font.pixelSize: theme.fontSizeLarge
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
MySettingsButton {
|
|
id: collectionSettings
|
|
anchors.bottom: parent.bottom
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
text: qsTr("Add & Remove")
|
|
font.pixelSize: theme.fontSizeLarger
|
|
onClicked: {
|
|
addRemoveClicked()
|
|
}
|
|
}
|
|
}
|