diff --git a/ChatView/ChatRootView.cpp b/ChatView/ChatRootView.cpp index 05b3241..5971c7e 100644 --- a/ChatView/ChatRootView.cpp +++ b/ChatView/ChatRootView.cpp @@ -217,6 +217,11 @@ ChatRootView::ChatRootView(QQuickItem *parent) &Utils::BaseAspect::changed, this, &ChatRootView::isThinkingSupportChanged); + connect( + &Settings::toolsSettings().debugToolsAndThinkingComponent, + &Utils::BaseAspect::changed, + this, + &ChatRootView::isToolDebugging); } ChatModel *ChatRootView::chatModel() const @@ -1126,4 +1131,9 @@ bool ChatRootView::isThinkingSupport() const return provider && provider->supportThinking(); } +bool ChatRootView::isToolDebugging() const +{ + return Settings::toolsSettings().debugToolsAndThinkingComponent(); +} + } // namespace QodeAssist::Chat diff --git a/ChatView/ChatRootView.hpp b/ChatView/ChatRootView.hpp index 0d79e90..e70a6b3 100644 --- a/ChatView/ChatRootView.hpp +++ b/ChatView/ChatRootView.hpp @@ -58,6 +58,7 @@ class ChatRootView : public QQuickItem Q_PROPERTY(int currentMessagePendingEdits READ currentMessagePendingEdits NOTIFY currentMessageEditsStatsChanged FINAL) Q_PROPERTY(int currentMessageRejectedEdits READ currentMessageRejectedEdits NOTIFY currentMessageEditsStatsChanged FINAL) Q_PROPERTY(bool isThinkingSupport READ isThinkingSupport NOTIFY isThinkingSupportChanged FINAL) + Q_PROPERTY(bool isToolDebugging READ isToolDebugging NOTIFY isToolDebuggingChanged FINAL) QML_ELEMENT @@ -142,6 +143,8 @@ public: bool isThinkingSupport() const; + bool isToolDebugging() const; + public slots: void sendMessage(const QString &message); void copyToClipboard(const QString &text); @@ -177,6 +180,8 @@ signals: void isThinkingSupportChanged(); + void isToolDebuggingChanged(); + private: void updateFileEditStatus(const QString &editId, const QString &status); QString getChatsHistoryDir() const; diff --git a/ChatView/qml/RootItem.qml b/ChatView/qml/RootItem.qml index ca1a177..f077695 100644 --- a/ChatView/qml/RootItem.qml +++ b/ChatView/qml/RootItem.qml @@ -103,16 +103,20 @@ ChatRootView { ListView { id: chatListView + signal hideServiceComponents(int itemIndex) + Layout.fillWidth: true Layout.fillHeight: true leftMargin: 5 model: root.chatModel clip: true - spacing: 10 + spacing: 0 boundsBehavior: Flickable.StopAtBounds cacheBuffer: 2000 delegate: Loader { + id: componentLoader + required property var model required property int index @@ -129,6 +133,12 @@ ChatRootView { return chatItemComponent } } + + onLoaded: { + if (componentLoader.sourceComponent == chatItemComponent && !root.isToolDebugging) { + chatListView.hideServiceComponents(index) + } + } } header: Item { @@ -179,8 +189,23 @@ ChatRootView { id: toolMessageComponent ToolStatusItem { + id: toolsItem + width: parent.width toolContent: model.content + + FadeListItemAnimation{ + id: toolFadeAnimation + } + + Connections { + target: chatListView + function onHideServiceComponents(itemIndex) { + if (index !== itemIndex) { + toolFadeAnimation.start() + } + } + } } } @@ -223,6 +248,19 @@ ChatRootView { return content } isRedacted: model.isRedacted !== undefined ? model.isRedacted : false + + FadeListItemAnimation{ + id: thinkingFadeAnimation + } + + Connections { + target: chatListView + function onHideServiceComponents(itemIndex) { + if (index !== itemIndex) { + thinkingFadeAnimation.start() + } + } + } } } } diff --git a/UIControls/CMakeLists.txt b/UIControls/CMakeLists.txt index 35ec23c..96a028d 100644 --- a/UIControls/CMakeLists.txt +++ b/UIControls/CMakeLists.txt @@ -11,6 +11,7 @@ qt_add_qml_module(QodeAssistUIControls qml/Badge.qml qml/QoAButton.qml qml/QoATextSlider.qml + qml/FadeListItemAnimation.qml ) target_link_libraries(QodeAssistUIControls diff --git a/UIControls/qml/FadeListItemAnimation.qml b/UIControls/qml/FadeListItemAnimation.qml new file mode 100644 index 0000000..7ae0e41 --- /dev/null +++ b/UIControls/qml/FadeListItemAnimation.qml @@ -0,0 +1,22 @@ +import QtQuick + +ParallelAnimation { + id: root + + property Item targetObject: parent + + NumberAnimation { + target: root.targetObject + property: "opacity" + to: 0 + duration: 200 + easing.type: Easing.InQuad + } + NumberAnimation { + target: root.targetObject + property: "height" + to: 0 + duration: 250 + easing.type: Easing.InQuad + } +} diff --git a/settings/SettingsConstants.hpp b/settings/SettingsConstants.hpp index 5c80f46..48c938a 100644 --- a/settings/SettingsConstants.hpp +++ b/settings/SettingsConstants.hpp @@ -91,6 +91,7 @@ const char CA_ALLOW_FILE_SYSTEM_WRITE[] = "QodeAssist.caAllowFileSystemWrite"; const char CA_ALLOW_ACCESS_OUTSIDE_PROJECT[] = "QodeAssist.caAllowAccessOutsideProject"; const char CA_ENABLE_EDIT_FILE_TOOL[] = "QodeAssist.caEnableEditFileTool"; const char CA_ENABLE_BUILD_PROJECT_TOOL[] = "QodeAssist.caEnableBuildProjectTool"; +const char CA_DEBUG_TOOLS_AND_THINKING_COMPONENT[] = "QodeAssist.caDebugToolsAndThinkingComponent"; const char QODE_ASSIST_GENERAL_OPTIONS_ID[] = "QodeAssist.GeneralOptions"; const char QODE_ASSIST_GENERAL_SETTINGS_PAGE_ID[] = "QodeAssist.1GeneralSettingsPageId"; diff --git a/settings/ToolsSettings.cpp b/settings/ToolsSettings.cpp index cf79316..7b6ae60 100644 --- a/settings/ToolsSettings.cpp +++ b/settings/ToolsSettings.cpp @@ -89,6 +89,12 @@ ToolsSettings::ToolsSettings() "project. This feature is under testing and may have unexpected behavior.")); enableBuildProjectTool.setDefaultValue(false); + debugToolsAndThinkingComponent.setSettingsKey(Constants::CA_DEBUG_TOOLS_AND_THINKING_COMPONENT); + debugToolsAndThinkingComponent.setLabelText(Tr::tr("Always show Tools and Thinking Components in chat")); + debugToolsAndThinkingComponent.setToolTip( + Tr::tr("Disable disapearing tools and thinking component from chat")); + debugToolsAndThinkingComponent.setDefaultValue(false); + resetToDefaults.m_buttonText = Tr::tr("Reset Page to Defaults"); readSettings(); @@ -109,6 +115,7 @@ ToolsSettings::ToolsSettings() allowFileSystemRead, allowFileSystemWrite, allowAccessOutsideProject, + debugToolsAndThinkingComponent }}, Space{8}, Group{ @@ -144,6 +151,7 @@ void ToolsSettings::resetSettingsToDefaults() resetAspect(autoApplyFileEdits); resetAspect(enableEditFileTool); resetAspect(enableBuildProjectTool); + resetAspect(debugToolsAndThinkingComponent); writeSettings(); } } diff --git a/settings/ToolsSettings.hpp b/settings/ToolsSettings.hpp index df02407..7b3baeb 100644 --- a/settings/ToolsSettings.hpp +++ b/settings/ToolsSettings.hpp @@ -36,6 +36,7 @@ public: Utils::BoolAspect allowFileSystemRead{this}; Utils::BoolAspect allowFileSystemWrite{this}; Utils::BoolAspect allowAccessOutsideProject{this}; + Utils::BoolAspect debugToolsAndThinkingComponent{this}; // Experimental features Utils::BoolAspect enableEditFileTool{this};