From 162c068431d07e8a676fecd6163877278f4ae52f Mon Sep 17 00:00:00 2001 From: Petr Mironychev <9195189+Palm1r@users.noreply.github.com> Date: Sat, 5 Oct 2024 20:50:15 +0200 Subject: [PATCH 1/6] Upgrade version to 0.2.4 --- QodeAssist.json.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/QodeAssist.json.in b/QodeAssist.json.in index 4389e57..14543c1 100644 --- a/QodeAssist.json.in +++ b/QodeAssist.json.in @@ -1,6 +1,6 @@ { "Name" : "QodeAssist", - "Version" : "0.2.3", + "Version" : "0.2.4", "CompatVersion" : "${IDE_VERSION_COMPAT}", "Vendor" : "Petr Mironychev", "Copyright" : "(C) ${IDE_COPYRIGHT_YEAR} Petr Mironychev, (C) ${IDE_COPYRIGHT_YEAR} The Qt Company Ltd", From d77e13cddb03b2c531be263691ef0b959a9c99d5 Mon Sep 17 00:00:00 2001 From: Petr Mironychev <9195189+Palm1r@users.noreply.github.com> Date: Sun, 6 Oct 2024 16:03:50 +0200 Subject: [PATCH 2/6] Change to scope pointer --- qodeassist.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/qodeassist.cpp b/qodeassist.cpp index 9dc8128..87ea06d 100644 --- a/qodeassist.cpp +++ b/qodeassist.cpp @@ -124,9 +124,9 @@ public: void restartClient() { - LanguageClient::LanguageClientManager::shutdownClient(m_qodeAssistClient); + LanguageClient::LanguageClientManager::shutdownClient(m_qodeAssistClient.get()); - m_qodeAssistClient = new QodeAssistClient(); + m_qodeAssistClient.reset(new QodeAssistClient()); } bool delayedInitialize() final @@ -140,7 +140,7 @@ public: { if (!m_qodeAssistClient) return SynchronousShutdown; - connect(m_qodeAssistClient, + connect(m_qodeAssistClient.get(), &QObject::destroyed, this, &IPlugin::asynchronousShutdownFinished); @@ -148,7 +148,7 @@ public: } private: - QPointer m_qodeAssistClient; + QScopedPointer m_qodeAssistClient; QPointer m_chatOutputPane; }; From 8be279a5fdbeaf84c7a2e52c05f0c68b0db2b9fb Mon Sep 17 00:00:00 2001 From: Petr Mironychev <9195189+Palm1r@users.noreply.github.com> Date: Sun, 6 Oct 2024 17:54:00 +0200 Subject: [PATCH 3/6] Add base qml chat view to navigation panel --- CMakeLists.txt | 5 +++++ chat/NavigationPanel.cpp | 45 +++++++++++++++++++++++++++++++++++++ chat/NavigationPanel.hpp | 37 ++++++++++++++++++++++++++++++ chatview/BaseChatWidget.cpp | 35 +++++++++++++++++++++++++++++ chatview/BaseChatWidget.hpp | 34 ++++++++++++++++++++++++++++ chatview/CMakeLists.txt | 24 ++++++++++++++++++++ chatview/qml/ChatView.qml | 7 ++++++ qodeassist.cpp | 3 +++ 8 files changed, 190 insertions(+) create mode 100644 chat/NavigationPanel.cpp create mode 100644 chat/NavigationPanel.hpp create mode 100644 chatview/BaseChatWidget.cpp create mode 100644 chatview/BaseChatWidget.hpp create mode 100644 chatview/CMakeLists.txt create mode 100644 chatview/qml/ChatView.qml diff --git a/CMakeLists.txt b/CMakeLists.txt index cef074d..dfd905a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -62,4 +62,9 @@ add_qtc_plugin(QodeAssist chat/ChatWidget.h chat/ChatWidget.cpp chat/ChatOutputPane.h chat/ChatOutputPane.cpp chat/ChatClientInterface.hpp chat/ChatClientInterface.cpp + chat/NavigationPanel.hpp chat/NavigationPanel.cpp ) + +add_subdirectory(chatview) + +target_link_libraries(QodeAssist PUBLIC QodeAssistChatViewplugin) diff --git a/chat/NavigationPanel.cpp b/chat/NavigationPanel.cpp new file mode 100644 index 0000000..19b9211 --- /dev/null +++ b/chat/NavigationPanel.cpp @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2024 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 . + */ + +#include "NavigationPanel.hpp" + +#include "chatview/BaseChatWidget.hpp" + +namespace QodeAssist::Chat { + +NavigationPanel::NavigationPanel() { + setDisplayName(tr("QodeAssist Chat")); + setPriority(500); + setId("QodeAssistChat"); + setActivationSequence(QKeySequence(Qt::CTRL | Qt::ALT | Qt::Key_C)); +} + +NavigationPanel::~NavigationPanel() +{ +} + +Core::NavigationView NavigationPanel::createWidget() +{ + Core::NavigationView view; + view.widget = new BaseChatWidget; + + return view; +} + +} diff --git a/chat/NavigationPanel.hpp b/chat/NavigationPanel.hpp new file mode 100644 index 0000000..e7eff5a --- /dev/null +++ b/chat/NavigationPanel.hpp @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2024 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 . + */ + +#pragma once + +#include +#include + +namespace QodeAssist::Chat { + +class NavigationPanel : public Core::INavigationWidgetFactory +{ + Q_OBJECT +public: + explicit NavigationPanel(); + ~NavigationPanel(); + + Core::NavigationView createWidget() override; +}; + +} diff --git a/chatview/BaseChatWidget.cpp b/chatview/BaseChatWidget.cpp new file mode 100644 index 0000000..427503d --- /dev/null +++ b/chatview/BaseChatWidget.cpp @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2024 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 . + */ + +#include "BaseChatWidget.hpp" + +#include +#include + +namespace QodeAssist::Chat { + +BaseChatWidget::BaseChatWidget(QWidget *parent) +{ + setSource(QUrl("qrc:/ChatView/qml/ChatView.qml")); + setResizeMode(QQuickWidget::SizeRootObjectToView); + + engine()->rootContext()->setContextObject(this); +} + +} diff --git a/chatview/BaseChatWidget.hpp b/chatview/BaseChatWidget.hpp new file mode 100644 index 0000000..79f5b7e --- /dev/null +++ b/chatview/BaseChatWidget.hpp @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2024 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 . + */ + +#pragma once + +#include + +namespace QodeAssist::Chat { + +class BaseChatWidget : public QQuickWidget +{ + Q_OBJECT +public: + explicit BaseChatWidget(QWidget *parent = nullptr); + ~BaseChatWidget() = default; +}; + +} diff --git a/chatview/CMakeLists.txt b/chatview/CMakeLists.txt new file mode 100644 index 0000000..be590c8 --- /dev/null +++ b/chatview/CMakeLists.txt @@ -0,0 +1,24 @@ +qt_add_library(QodeAssistChatView STATIC) + +find_package(Qt6 COMPONENTS Core Widgets Quick QuickWidgets Network REQUIRED) + +qt_add_qml_module(QodeAssistChatView + URI ChatView + VERSION 1.0 + QML_FILES + qml/ChatView.qml + SOURCES + BaseChatWidget.hpp BaseChatWidget.cpp +) + +target_link_libraries(QodeAssistChatView + PRIVATE + Qt::Widgets + Qt::Quick + Qt::QuickWidgets + Qt::Network +) + +target_include_directories(QodeAssistChatView + PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} +) diff --git a/chatview/qml/ChatView.qml b/chatview/qml/ChatView.qml new file mode 100644 index 0000000..a6a76c4 --- /dev/null +++ b/chatview/qml/ChatView.qml @@ -0,0 +1,7 @@ +import QtQuick + +Rectangle { + id: root + + color: "gray" +} diff --git a/qodeassist.cpp b/qodeassist.cpp index 87ea06d..e3f08e0 100644 --- a/qodeassist.cpp +++ b/qodeassist.cpp @@ -43,6 +43,7 @@ #include "PromptTemplateManager.hpp" #include "QodeAssistClient.hpp" #include "chat/ChatOutputPane.h" +#include "chat/NavigationPanel.hpp" #include "providers/LMStudioProvider.hpp" #include "providers/OllamaProvider.hpp" #include "providers/OpenAICompatProvider.hpp" @@ -116,6 +117,7 @@ public: StatusBarManager::addStatusBarWidget(toggleButton, StatusBarManager::RightCorner); m_chatOutputPane = new Chat::ChatOutputPane(this); + m_navigationPanel.reset(new Chat::NavigationPanel()); } void extensionsInitialized() final @@ -150,6 +152,7 @@ public: private: QScopedPointer m_qodeAssistClient; QPointer m_chatOutputPane; + QScopedPointer m_navigationPanel; }; } // namespace QodeAssist::Internal From 7442256babdec8acd0447de4fe88bb5c455b492f Mon Sep 17 00:00:00 2001 From: Petr Mironychev <9195189+Palm1r@users.noreply.github.com> Date: Sun, 6 Oct 2024 18:19:12 +0200 Subject: [PATCH 4/6] Add ChatModel --- chatview/BaseChatWidget.cpp | 4 +- chatview/BaseChatWidget.hpp | 1 + chatview/CMakeLists.txt | 3 +- chatview/ChatModel.cpp | 72 +++++++++++++++++++++ chatview/ChatModel.hpp | 56 ++++++++++++++++ chatview/qml/{ChatView.qml => RootItem.qml} | 0 6 files changed, 133 insertions(+), 3 deletions(-) create mode 100644 chatview/ChatModel.cpp create mode 100644 chatview/ChatModel.hpp rename chatview/qml/{ChatView.qml => RootItem.qml} (100%) diff --git a/chatview/BaseChatWidget.cpp b/chatview/BaseChatWidget.cpp index 427503d..bb16c20 100644 --- a/chatview/BaseChatWidget.cpp +++ b/chatview/BaseChatWidget.cpp @@ -24,9 +24,9 @@ namespace QodeAssist::Chat { -BaseChatWidget::BaseChatWidget(QWidget *parent) +BaseChatWidget::BaseChatWidget(QWidget *parent) : QQuickWidget(parent) { - setSource(QUrl("qrc:/ChatView/qml/ChatView.qml")); + setSource(QUrl("qrc:/ChatView/qml/RootItem.qml")); setResizeMode(QQuickWidget::SizeRootObjectToView); engine()->rootContext()->setContextObject(this); diff --git a/chatview/BaseChatWidget.hpp b/chatview/BaseChatWidget.hpp index 79f5b7e..e255672 100644 --- a/chatview/BaseChatWidget.hpp +++ b/chatview/BaseChatWidget.hpp @@ -26,6 +26,7 @@ namespace QodeAssist::Chat { class BaseChatWidget : public QQuickWidget { Q_OBJECT + public: explicit BaseChatWidget(QWidget *parent = nullptr); ~BaseChatWidget() = default; diff --git a/chatview/CMakeLists.txt b/chatview/CMakeLists.txt index be590c8..14812bb 100644 --- a/chatview/CMakeLists.txt +++ b/chatview/CMakeLists.txt @@ -6,9 +6,10 @@ qt_add_qml_module(QodeAssistChatView URI ChatView VERSION 1.0 QML_FILES - qml/ChatView.qml + qml/RootItem.qml SOURCES BaseChatWidget.hpp BaseChatWidget.cpp + ChatModel.hpp ChatModel.cpp ) target_link_libraries(QodeAssistChatView diff --git a/chatview/ChatModel.cpp b/chatview/ChatModel.cpp new file mode 100644 index 0000000..67eda66 --- /dev/null +++ b/chatview/ChatModel.cpp @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2024 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 . + */ + +#include "ChatModel.hpp" + +namespace QodeAssist::Chat { + +ChatModel::ChatModel(QObject *parent) + : QAbstractListModel(parent) +{ +} + +int ChatModel::rowCount(const QModelIndex &parent) const +{ + return m_messages.size(); +} + +QVariant ChatModel::data(const QModelIndex &index, int role) const +{ + if (!index.isValid() || index.row() >= m_messages.size()) + return QVariant(); + + const Message &message = m_messages[index.row()]; + switch (static_cast(role)) { + case Roles::RoleType: + return QVariant::fromValue(message.role); + case Roles::Content: + return message.content; + default: + return QVariant(); + } +} + +QHash ChatModel::roleNames() const +{ + QHash roles; + roles[Roles::RoleType] = "roleType"; + roles[Roles::Content] = "content"; + return roles; +} + +void ChatModel::addMessage(const QString &content, ChatRole role) +{ + beginInsertRows(QModelIndex(), m_messages.size(), m_messages.size()); + m_messages.append({role, content}); + endInsertRows(); +} + +void ChatModel::clear() +{ + beginResetModel(); + m_messages.clear(); + endResetModel(); +} + +} // namespace QodeAssist::Chat diff --git a/chatview/ChatModel.hpp b/chatview/ChatModel.hpp new file mode 100644 index 0000000..2058d34 --- /dev/null +++ b/chatview/ChatModel.hpp @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2024 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 . + */ + +#pragma once + +#include + +namespace QodeAssist::Chat { + +enum class ChatRole { System, User, Assistant }; + +struct Message +{ + ChatRole role; + QString content; +}; + +class ChatModel : public QAbstractListModel +{ + Q_OBJECT + +public: + enum Roles { RoleType = Qt::UserRole, Content }; + + explicit ChatModel(QObject *parent = nullptr); + + int rowCount(const QModelIndex &parent = QModelIndex()) const override; + QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; + QHash roleNames() const override; + + Q_INVOKABLE void addMessage(const QString &content, ChatRole role); + Q_INVOKABLE void clear(); + +private: + QVector m_messages; +}; + +} // namespace QodeAssist::Chat + +Q_DECLARE_METATYPE(QodeAssist::Chat::ChatRole) diff --git a/chatview/qml/ChatView.qml b/chatview/qml/RootItem.qml similarity index 100% rename from chatview/qml/ChatView.qml rename to chatview/qml/RootItem.qml From 30fcd7e0195eae17fab8dfac00af52aafc1e8f6c Mon Sep 17 00:00:00 2001 From: Petr Mironychev <9195189+Palm1r@users.noreply.github.com> Date: Sun, 6 Oct 2024 18:47:10 +0200 Subject: [PATCH 5/6] Add ChatRootView QML item --- chatview/CMakeLists.txt | 7 +++--- chatview/ChatRootView.cpp | 34 +++++++++++++++++++++++++++++ chatview/ChatRootView.hpp | 46 +++++++++++++++++++++++++++++++++++++++ chatview/qml/RootItem.qml | 10 +++++++-- 4 files changed, 92 insertions(+), 5 deletions(-) create mode 100644 chatview/ChatRootView.cpp create mode 100644 chatview/ChatRootView.hpp diff --git a/chatview/CMakeLists.txt b/chatview/CMakeLists.txt index 14812bb..cdba3b7 100644 --- a/chatview/CMakeLists.txt +++ b/chatview/CMakeLists.txt @@ -6,10 +6,11 @@ qt_add_qml_module(QodeAssistChatView URI ChatView VERSION 1.0 QML_FILES - qml/RootItem.qml + qml/RootItem.qml SOURCES - BaseChatWidget.hpp BaseChatWidget.cpp - ChatModel.hpp ChatModel.cpp + BaseChatWidget.hpp BaseChatWidget.cpp + ChatModel.hpp ChatModel.cpp + ChatRootView.hpp ChatRootView.cpp ) target_link_libraries(QodeAssistChatView diff --git a/chatview/ChatRootView.cpp b/chatview/ChatRootView.cpp new file mode 100644 index 0000000..c98f1f4 --- /dev/null +++ b/chatview/ChatRootView.cpp @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2024 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 . + */ + +#include "ChatRootView.hpp" + +namespace QodeAssist::Chat { + +ChatRootView::ChatRootView(QQuickItem *parent) + : QQuickItem(parent) + , m_chatModel(new ChatModel(this)) +{} + +ChatModel *ChatRootView::chatModel() const +{ + return m_chatModel; +} + +} // namespace QodeAssist::Chat diff --git a/chatview/ChatRootView.hpp b/chatview/ChatRootView.hpp new file mode 100644 index 0000000..9f83ed7 --- /dev/null +++ b/chatview/ChatRootView.hpp @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2024 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 . + */ + +#pragma once + +#include + +#include "ChatModel.hpp" + +namespace QodeAssist::Chat { + +class ChatRootView : public QQuickItem +{ + Q_OBJECT + QML_ELEMENT + + Q_PROPERTY(ChatModel *chatModel READ chatModel NOTIFY chatModelChanged FINAL) +public: + ChatRootView(QQuickItem *parent = nullptr); + + ChatModel *chatModel() const; + +signals: + void chatModelChanged(); + +private: + ChatModel *m_chatModel = nullptr; +}; + +} // namespace QodeAssist::Chat diff --git a/chatview/qml/RootItem.qml b/chatview/qml/RootItem.qml index a6a76c4..f166a45 100644 --- a/chatview/qml/RootItem.qml +++ b/chatview/qml/RootItem.qml @@ -1,7 +1,13 @@ import QtQuick +import ChatView -Rectangle { +ChatRootView { id: root - color: "gray" + Rectangle { + id: bg + + anchors.fill: parent + color: "gray" + } } From b808d0ec104632a8445622b8e34e47c61b117733 Mon Sep 17 00:00:00 2001 From: Petr Mironychev <9195189+Palm1r@users.noreply.github.com> Date: Mon, 7 Oct 2024 00:49:49 +0200 Subject: [PATCH 6/6] Remove temporary code --- CMakeLists.txt | 4 ++-- qodeassist.cpp | 3 --- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index dfd905a..54337e3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,6 +12,8 @@ set(CMAKE_CXX_EXTENSIONS OFF) find_package(QtCreator REQUIRED COMPONENTS Core) find_package(Qt6 COMPONENTS Core Gui Widgets Network REQUIRED) +add_subdirectory(chatview) + add_qtc_plugin(QodeAssist PLUGIN_DEPENDS QtCreator::Core @@ -65,6 +67,4 @@ add_qtc_plugin(QodeAssist chat/NavigationPanel.hpp chat/NavigationPanel.cpp ) -add_subdirectory(chatview) - target_link_libraries(QodeAssist PUBLIC QodeAssistChatViewplugin) diff --git a/qodeassist.cpp b/qodeassist.cpp index e3f08e0..87ea06d 100644 --- a/qodeassist.cpp +++ b/qodeassist.cpp @@ -43,7 +43,6 @@ #include "PromptTemplateManager.hpp" #include "QodeAssistClient.hpp" #include "chat/ChatOutputPane.h" -#include "chat/NavigationPanel.hpp" #include "providers/LMStudioProvider.hpp" #include "providers/OllamaProvider.hpp" #include "providers/OpenAICompatProvider.hpp" @@ -117,7 +116,6 @@ public: StatusBarManager::addStatusBarWidget(toggleButton, StatusBarManager::RightCorner); m_chatOutputPane = new Chat::ChatOutputPane(this); - m_navigationPanel.reset(new Chat::NavigationPanel()); } void extensionsInitialized() final @@ -152,7 +150,6 @@ public: private: QScopedPointer m_qodeAssistClient; QPointer m_chatOutputPane; - QScopedPointer m_navigationPanel; }; } // namespace QodeAssist::Internal