mirror of
https://github.com/Palm1r/QodeAssist.git
synced 2025-08-13 17:55:02 -04:00
.github
chat
chatview
qml
CMakeLists.txt
ChatModel.cpp
ChatModel.hpp
ChatRootView.cpp
ChatRootView.hpp
ChatUtils.cpp
ChatUtils.h
ChatWidget.cpp
ChatWidget.hpp
ClientInterface.cpp
ClientInterface.hpp
MessagePart.hpp
core
llmcore
logger
providers
rawPromptExamples
resources
settings
templates
utils
.gitignore
CMakeLists.txt
ConfigurationManager.cpp
ConfigurationManager.hpp
DocumentContextReader.cpp
DocumentContextReader.hpp
LICENSE
LLMClientInterface.cpp
LLMClientInterface.hpp
LLMSuggestion.cpp
LLMSuggestion.hpp
LSPCompletion.hpp
QodeAssist.json.in
QodeAssist.qrc
QodeAssistClient.cpp
QodeAssistClient.hpp
QodeAssistConstants.hpp
QodeAssist_en_001.ts
QodeAssisttr.h
README.md
qodeassist.cpp
145 lines
3.8 KiB
C++
145 lines
3.8 KiB
C++
/*
|
|
* 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 <https://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include "ChatRootView.hpp"
|
|
#include <QtGui/qclipboard.h>
|
|
#include <utils/theme/theme.h>
|
|
#include <utils/utilsicons.h>
|
|
|
|
#include "ChatAssistantSettings.hpp"
|
|
#include "GeneralSettings.hpp"
|
|
|
|
namespace QodeAssist::Chat {
|
|
|
|
ChatRootView::ChatRootView(QQuickItem *parent)
|
|
: QQuickItem(parent)
|
|
, m_chatModel(new ChatModel(this))
|
|
, m_clientInterface(new ClientInterface(m_chatModel, this))
|
|
{
|
|
auto &settings = Settings::generalSettings();
|
|
|
|
connect(&settings.caModel,
|
|
&Utils::BaseAspect::changed,
|
|
this,
|
|
&ChatRootView::currentTemplateChanged);
|
|
|
|
connect(&Settings::chatAssistantSettings().sharingCurrentFile,
|
|
&Utils::BaseAspect::changed,
|
|
this,
|
|
&ChatRootView::isSharingCurrentFileChanged);
|
|
|
|
generateColors();
|
|
}
|
|
|
|
ChatModel *ChatRootView::chatModel() const
|
|
{
|
|
return m_chatModel;
|
|
}
|
|
|
|
QColor ChatRootView::backgroundColor() const
|
|
{
|
|
return Utils::creatorColor(Utils::Theme::BackgroundColorNormal);
|
|
}
|
|
|
|
void ChatRootView::sendMessage(const QString &message, bool sharingCurrentFile) const
|
|
{
|
|
m_clientInterface->sendMessage(message, sharingCurrentFile);
|
|
}
|
|
|
|
void ChatRootView::copyToClipboard(const QString &text)
|
|
{
|
|
QGuiApplication::clipboard()->setText(text);
|
|
}
|
|
|
|
void ChatRootView::cancelRequest()
|
|
{
|
|
m_clientInterface->cancelRequest();
|
|
}
|
|
|
|
void ChatRootView::generateColors()
|
|
{
|
|
QColor baseColor = backgroundColor();
|
|
bool isDarkTheme = baseColor.lightness() < 128;
|
|
|
|
if (isDarkTheme) {
|
|
m_primaryColor = generateColor(baseColor, 0.1, 1.2, 1.4);
|
|
m_secondaryColor = generateColor(baseColor, -0.1, 1.1, 1.2);
|
|
m_codeColor = generateColor(baseColor, 0.05, 0.8, 1.1);
|
|
} else {
|
|
m_primaryColor = generateColor(baseColor, 0.05, 1.05, 1.1);
|
|
m_secondaryColor = generateColor(baseColor, -0.05, 1.1, 1.2);
|
|
m_codeColor = generateColor(baseColor, 0.02, 0.95, 1.05);
|
|
}
|
|
}
|
|
|
|
QColor ChatRootView::generateColor(const QColor &baseColor,
|
|
float hueShift,
|
|
float saturationMod,
|
|
float lightnessMod)
|
|
{
|
|
float h, s, l, a;
|
|
baseColor.getHslF(&h, &s, &l, &a);
|
|
bool isDarkTheme = l < 0.5;
|
|
|
|
h = fmod(h + hueShift + 1.0, 1.0);
|
|
|
|
s = qBound(0.0f, s * saturationMod, 1.0f);
|
|
|
|
if (isDarkTheme) {
|
|
l = qBound(0.0f, l * lightnessMod, 1.0f);
|
|
} else {
|
|
l = qBound(0.0f, l / lightnessMod, 1.0f);
|
|
}
|
|
|
|
h = qBound(0.0f, h, 1.0f);
|
|
s = qBound(0.0f, s, 1.0f);
|
|
l = qBound(0.0f, l, 1.0f);
|
|
a = qBound(0.0f, a, 1.0f);
|
|
|
|
return QColor::fromHslF(h, s, l, a);
|
|
}
|
|
|
|
QString ChatRootView::currentTemplate() const
|
|
{
|
|
auto &settings = Settings::generalSettings();
|
|
return settings.caModel();
|
|
}
|
|
|
|
QColor ChatRootView::primaryColor() const
|
|
{
|
|
return m_primaryColor;
|
|
}
|
|
|
|
QColor ChatRootView::secondaryColor() const
|
|
{
|
|
return m_secondaryColor;
|
|
}
|
|
|
|
QColor ChatRootView::codeColor() const
|
|
{
|
|
return m_codeColor;
|
|
}
|
|
|
|
bool ChatRootView::isSharingCurrentFile() const
|
|
{
|
|
return Settings::chatAssistantSettings().sharingCurrentFile();
|
|
}
|
|
|
|
} // namespace QodeAssist::Chat
|