mirror of
https://github.com/nomic-ai/gpt4all
synced 2024-11-10 01:10:35 +00:00
aad502f336
Signed-off-by: Adam Treat <treat.adam@gmail.com>
255 lines
8.2 KiB
QML
255 lines
8.2 KiB
QML
import QtCore
|
|
import QtQuick
|
|
import QtQuick.Controls
|
|
import QtQuick.Controls.Basic
|
|
import QtQuick.Layouts
|
|
import Qt5Compat.GraphicalEffects
|
|
import llm
|
|
import chatlistmodel
|
|
import download
|
|
import modellist
|
|
import network
|
|
import gpt4all
|
|
import mysettings
|
|
|
|
Window {
|
|
id: window
|
|
width: 1920
|
|
height: 1080
|
|
minimumWidth: 720
|
|
minimumHeight: 480
|
|
visible: true
|
|
title: qsTr("GPT4All v") + Qt.application.version
|
|
|
|
Settings {
|
|
property alias x: window.x
|
|
property alias y: window.y
|
|
property alias width: window.width
|
|
property alias height: window.height
|
|
}
|
|
|
|
Theme {
|
|
id: theme
|
|
}
|
|
|
|
property bool hasSaved: false
|
|
|
|
PopupDialog {
|
|
id: savingPopup
|
|
anchors.centerIn: parent
|
|
shouldTimeOut: false
|
|
shouldShowBusy: true
|
|
text: qsTr("Saving chats.")
|
|
font.pixelSize: theme.fontSizeLarge
|
|
}
|
|
|
|
NetworkDialog {
|
|
id: networkDialog
|
|
anchors.centerIn: parent
|
|
width: Math.min(1024, window.width - (window.width * .2))
|
|
height: Math.min(600, window.height - (window.height * .2))
|
|
Item {
|
|
Accessible.role: Accessible.Dialog
|
|
Accessible.name: qsTr("Network dialog")
|
|
Accessible.description: qsTr("opt-in to share feedback/conversations")
|
|
}
|
|
}
|
|
|
|
AboutDialog {
|
|
id: aboutDialog
|
|
anchors.centerIn: parent
|
|
width: Math.min(1024, window.width - (window.width * .2))
|
|
height: Math.min(600, window.height - (window.height * .2))
|
|
}
|
|
|
|
onClosing: function(close) {
|
|
if (window.hasSaved)
|
|
return;
|
|
|
|
savingPopup.open();
|
|
ChatListModel.saveChats();
|
|
close.accepted = false
|
|
}
|
|
|
|
Connections {
|
|
target: ChatListModel
|
|
function onSaveChatsFinished() {
|
|
window.hasSaved = true;
|
|
savingPopup.close();
|
|
window.close()
|
|
}
|
|
}
|
|
|
|
color: theme.black
|
|
|
|
Rectangle {
|
|
id: viewBar
|
|
anchors.top: parent.top
|
|
anchors.bottom: parent.bottom
|
|
anchors.left: parent.left
|
|
width: 80
|
|
color: theme.viewBarBackground
|
|
|
|
ColumnLayout {
|
|
id: viewsLayout
|
|
anchors.top: parent.top
|
|
anchors.topMargin: 30
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
Layout.margins: 0
|
|
spacing: 25
|
|
|
|
MyToolButton {
|
|
id: chatButton
|
|
backgroundColor: toggled ? theme.iconBackgroundViewBarToggled : theme.iconBackgroundViewBar
|
|
backgroundColorHovered: toggled ? backgroundColor : theme.iconBackgroundViewBarHovered
|
|
Layout.preferredWidth: 40
|
|
Layout.preferredHeight: 40
|
|
Layout.alignment: Qt.AlignCenter
|
|
toggledWidth: 0
|
|
toggled: stackLayout.currentIndex === 0
|
|
toggledColor: theme.iconBackgroundViewBarToggled
|
|
scale: 1.5
|
|
source: "qrc:/gpt4all/icons/chat.svg"
|
|
Accessible.name: qsTr("Chat view")
|
|
Accessible.description: qsTr("Chat view to interact with models")
|
|
onClicked: {
|
|
stackLayout.currentIndex = 0
|
|
}
|
|
}
|
|
|
|
MyToolButton {
|
|
id: searchButton
|
|
backgroundColor: toggled ? theme.iconBackgroundViewBarToggled : theme.iconBackgroundViewBar
|
|
backgroundColorHovered: toggled ? backgroundColor : theme.iconBackgroundViewBarHovered
|
|
Layout.preferredWidth: 40
|
|
Layout.preferredHeight: 40
|
|
toggledWidth: 0
|
|
toggled: stackLayout.currentIndex === 1
|
|
toggledColor: theme.iconBackgroundViewBarToggled
|
|
scale: 1.5
|
|
source: "qrc:/gpt4all/icons/models.svg"
|
|
Accessible.name: qsTr("Search")
|
|
Accessible.description: qsTr("Launch a dialog to download new models")
|
|
onClicked: {
|
|
stackLayout.currentIndex = 1
|
|
}
|
|
}
|
|
|
|
MyToolButton {
|
|
id: settingsButton
|
|
backgroundColor: toggled ? theme.iconBackgroundViewBarToggled : theme.iconBackgroundViewBar
|
|
backgroundColorHovered: toggled ? backgroundColor : theme.iconBackgroundViewBarHovered
|
|
Layout.preferredWidth: 40
|
|
Layout.preferredHeight: 40
|
|
toggledWidth: 0
|
|
toggledColor: theme.iconBackgroundViewBarToggled
|
|
toggled: stackLayout.currentIndex === 2
|
|
scale: 1.5
|
|
source: "qrc:/gpt4all/icons/settings.svg"
|
|
Accessible.name: qsTr("Settings")
|
|
Accessible.description: qsTr("Reveals a dialogue with settings")
|
|
|
|
onClicked: {
|
|
stackLayout.currentIndex = 2
|
|
}
|
|
}
|
|
}
|
|
|
|
ColumnLayout {
|
|
id: buttonsLayout
|
|
anchors.bottom: parent.bottom
|
|
anchors.margins: 0
|
|
anchors.bottomMargin: 25
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
Layout.margins: 0
|
|
spacing: 25
|
|
|
|
MyToolButton {
|
|
id: networkButton
|
|
backgroundColor: toggled ? theme.iconBackgroundViewBarToggled : theme.iconBackgroundViewBar
|
|
backgroundColorHovered: toggled ? backgroundColor : theme.iconBackgroundViewBarHovered
|
|
toggledColor: theme.iconBackgroundViewBar
|
|
Layout.preferredWidth: 40
|
|
Layout.preferredHeight: 40
|
|
scale: 1.2
|
|
toggled: MySettings.networkIsActive
|
|
source: "qrc:/gpt4all/icons/network.svg"
|
|
Accessible.name: qsTr("Network")
|
|
Accessible.description: qsTr("Reveals a dialogue where you can opt-in for sharing data over network")
|
|
|
|
onClicked: {
|
|
if (MySettings.networkIsActive) {
|
|
MySettings.networkIsActive = false
|
|
Network.sendNetworkToggled(false);
|
|
} else
|
|
networkDialog.open()
|
|
}
|
|
}
|
|
|
|
MyToolButton {
|
|
id: infoButton
|
|
backgroundColor: theme.iconBackgroundViewBar
|
|
backgroundColorHovered: theme.iconBackgroundViewBarHovered
|
|
Layout.preferredWidth: 40
|
|
Layout.preferredHeight: 40
|
|
scale: 1.2
|
|
source: "qrc:/gpt4all/icons/info.svg"
|
|
Accessible.name: qsTr("About")
|
|
Accessible.description: qsTr("Reveals an about dialog")
|
|
onClicked: {
|
|
aboutDialog.open()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
StackLayout {
|
|
id: stackLayout
|
|
anchors.top: parent.top
|
|
anchors.bottom: parent.bottom
|
|
anchors.left: viewBar.right
|
|
anchors.right: parent.right
|
|
|
|
ChatView {
|
|
id: chatView
|
|
Layout.fillWidth: true
|
|
Layout.fillHeight: true
|
|
|
|
Connections {
|
|
target: chatView
|
|
function onDownloadViewRequested(showEmbeddingModels) {
|
|
console.log("onDownloadViewRequested")
|
|
stackLayout.currentIndex = 1;
|
|
if (showEmbeddingModels)
|
|
downloadView.showEmbeddingModels();
|
|
}
|
|
function onSettingsViewRequested(page) {
|
|
settingsDialog.pageToDisplay = page;
|
|
stackLayout.currentIndex = 2;
|
|
}
|
|
}
|
|
}
|
|
|
|
ModelDownloaderView {
|
|
id: downloadView
|
|
Layout.fillWidth: true
|
|
Layout.fillHeight: true
|
|
Item {
|
|
Accessible.role: Accessible.Dialog
|
|
Accessible.name: qsTr("Download new models")
|
|
Accessible.description: qsTr("View for downloading new models")
|
|
}
|
|
}
|
|
|
|
SettingsView {
|
|
id: settingsDialog
|
|
Layout.fillWidth: true
|
|
Layout.fillHeight: true
|
|
onDownloadClicked: {
|
|
stackLayout.currentIndex = 1
|
|
downloadView.showEmbeddingModels()
|
|
}
|
|
}
|
|
}
|
|
}
|