mirror of
https://github.com/Palm1r/QodeAssist.git
synced 2026-02-13 02:22:59 -05:00
feat: Add navigation panel for messages
This commit is contained in:
@ -16,6 +16,8 @@ qt_add_qml_module(QodeAssistChatView
|
|||||||
qml/parts/TopBar.qml
|
qml/parts/TopBar.qml
|
||||||
qml/parts/BottomBar.qml
|
qml/parts/BottomBar.qml
|
||||||
qml/parts/AttachedFilesPlace.qml
|
qml/parts/AttachedFilesPlace.qml
|
||||||
|
qml/parts/ErrorToast.qml
|
||||||
|
qml/parts/Navigation.qml
|
||||||
qml/ToolStatusItem.qml
|
qml/ToolStatusItem.qml
|
||||||
|
|
||||||
RESOURCES
|
RESOURCES
|
||||||
@ -43,7 +45,6 @@ qt_add_qml_module(QodeAssistChatView
|
|||||||
ChatSerializer.hpp ChatSerializer.cpp
|
ChatSerializer.hpp ChatSerializer.cpp
|
||||||
ChatView.hpp ChatView.cpp
|
ChatView.hpp ChatView.cpp
|
||||||
ChatData.hpp
|
ChatData.hpp
|
||||||
QML_FILES qml/parts/ErrorToast.qml
|
|
||||||
)
|
)
|
||||||
|
|
||||||
target_link_libraries(QodeAssistChatView
|
target_link_libraries(QodeAssistChatView
|
||||||
|
|||||||
@ -81,6 +81,17 @@ ChatRootView {
|
|||||||
checked: typeof _chatview !== 'undefined' ? _chatview.isPin : false
|
checked: typeof _chatview !== 'undefined' ? _chatview.isPin : false
|
||||||
onCheckedChanged: _chatview.isPin = topBar.pinButton.checked
|
onCheckedChanged: _chatview.isPin = topBar.pinButton.checked
|
||||||
}
|
}
|
||||||
|
navigation.currentMessageNumber: {
|
||||||
|
return "%1/%2".arg(chatListView.currentIndex + 1).arg(chatListView.count)
|
||||||
|
}
|
||||||
|
navigation.onMessageUp: {
|
||||||
|
const newIndex = Math.max(0, chatListView.currentIndex - 1)
|
||||||
|
chatListView.positionViewAtIndex(newIndex, ListView.Center)
|
||||||
|
}
|
||||||
|
navigation.onMessageDown: {
|
||||||
|
const newIndex = Math.min(chatListView.count - 1, chatListView.currentIndex + 1)
|
||||||
|
chatListView.positionViewAtIndex(newIndex, ListView.Center)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ListView {
|
ListView {
|
||||||
@ -95,7 +106,6 @@ ChatRootView {
|
|||||||
boundsBehavior: Flickable.StopAtBounds
|
boundsBehavior: Flickable.StopAtBounds
|
||||||
cacheBuffer: 2000
|
cacheBuffer: 2000
|
||||||
|
|
||||||
|
|
||||||
delegate: Loader {
|
delegate: Loader {
|
||||||
required property var model
|
required property var model
|
||||||
required property int index
|
required property int index
|
||||||
@ -124,6 +134,13 @@ ChatRootView {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onContentYChanged: {
|
||||||
|
const index = indexAt(width / 2, contentY + height / 2)
|
||||||
|
if (index !== -1) {
|
||||||
|
currentIndex = index
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Component {
|
Component {
|
||||||
id: chatItemComponent
|
id: chatItemComponent
|
||||||
|
|
||||||
|
|||||||
61
ChatView/qml/parts/Navigation.qml
Normal file
61
ChatView/qml/parts/Navigation.qml
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2025 Petr Mironychev
|
||||||
|
*
|
||||||
|
* This file is part of QodeAssist.
|
||||||
|
*
|
||||||
|
* QodeAssist is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* QodeAssist is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with QodeAssist. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import QtQuick
|
||||||
|
import QtQuick.Controls
|
||||||
|
import UIControls
|
||||||
|
|
||||||
|
Row {
|
||||||
|
id: root
|
||||||
|
|
||||||
|
property alias currentMessageNumber: currentMessageNumber.text
|
||||||
|
|
||||||
|
signal messageUp()
|
||||||
|
signal messageDown()
|
||||||
|
|
||||||
|
spacing: 4
|
||||||
|
|
||||||
|
QoAButton {
|
||||||
|
text: "▲"
|
||||||
|
onClicked: root.messageUp()
|
||||||
|
|
||||||
|
ToolTip.visible: hovered
|
||||||
|
ToolTip.delay: 250
|
||||||
|
ToolTip.text: qsTr("Previous message")
|
||||||
|
}
|
||||||
|
|
||||||
|
QoAButton {
|
||||||
|
text: "▼"
|
||||||
|
onClicked: root.messageDown()
|
||||||
|
|
||||||
|
ToolTip.visible: hovered
|
||||||
|
ToolTip.delay: 250
|
||||||
|
ToolTip.text: qsTr("Next message")
|
||||||
|
}
|
||||||
|
|
||||||
|
Badge {
|
||||||
|
id: currentMessageNumber
|
||||||
|
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
|
||||||
|
ToolTip.visible: hovered
|
||||||
|
ToolTip.delay: 250
|
||||||
|
ToolTip.text: qsTr("Current message position")
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -33,6 +33,7 @@ Rectangle {
|
|||||||
property alias recentPath: recentPathId
|
property alias recentPath: recentPathId
|
||||||
property alias openChatHistory: openChatHistoryId
|
property alias openChatHistory: openChatHistoryId
|
||||||
property alias pinButton: pinButtonId
|
property alias pinButton: pinButtonId
|
||||||
|
property alias navigation: navigationId
|
||||||
|
|
||||||
color: palette.window.hslLightness > 0.5 ?
|
color: palette.window.hslLightness > 0.5 ?
|
||||||
Qt.darker(palette.window, 1.1) :
|
Qt.darker(palette.window, 1.1) :
|
||||||
@ -130,6 +131,10 @@ Rectangle {
|
|||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Navigation {
|
||||||
|
id: navigationId
|
||||||
|
}
|
||||||
|
|
||||||
Badge {
|
Badge {
|
||||||
id: tokensBadgeId
|
id: tokensBadgeId
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user