From 1d64d2afc91ee96a0f14e121da2f5091cf0d6916 Mon Sep 17 00:00:00 2001 From: Petr Mironychev <9195189+Palm1r@users.noreply.github.com> Date: Wed, 15 Jan 2025 00:05:12 +0100 Subject: [PATCH] refactor: Move to using colors from QtC theme palette --- ChatView/ChatRootView.cpp | 65 ----------------------- ChatView/ChatRootView.hpp | 19 ------- ChatView/qml/ChatItem.qml | 14 ++--- ChatView/qml/RootItem.qml | 30 +++++++---- ChatView/qml/dialog/CodeBlock.qml | 8 +-- ChatView/qml/dialog/TextBlock.qml | 2 + ChatView/qml/parts/AttachedFilesPlace.qml | 4 ++ 7 files changed, 33 insertions(+), 109 deletions(-) diff --git a/ChatView/ChatRootView.cpp b/ChatView/ChatRootView.cpp index 72b1b94..898f0e5 100644 --- a/ChatView/ChatRootView.cpp +++ b/ChatView/ChatRootView.cpp @@ -62,8 +62,6 @@ ChatRootView::ChatRootView(QQuickItem *parent) &ChatRootView::autosave); connect(m_chatModel, &ChatModel::modelReseted, [this]() { m_recentFilePath = QString(); }); - - generateColors(); } ChatModel *ChatRootView::chatModel() const @@ -71,11 +69,6 @@ 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) { if (m_chatModel->totalTokens() > m_chatModel->tokensThreshold()) { @@ -116,49 +109,6 @@ void ChatRootView::clearAttachmentFiles() } } -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::getChatsHistoryDir() const { QString path; @@ -185,21 +135,6 @@ QString ChatRootView::currentTemplate() const 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(); diff --git a/ChatView/ChatRootView.hpp b/ChatView/ChatRootView.hpp index b116a5d..071d5fe 100644 --- a/ChatView/ChatRootView.hpp +++ b/ChatView/ChatRootView.hpp @@ -31,10 +31,6 @@ class ChatRootView : public QQuickItem Q_OBJECT Q_PROPERTY(QodeAssist::Chat::ChatModel *chatModel READ chatModel NOTIFY chatModelChanged FINAL) Q_PROPERTY(QString currentTemplate READ currentTemplate NOTIFY currentTemplateChanged FINAL) - Q_PROPERTY(QColor backgroundColor READ backgroundColor CONSTANT FINAL) - Q_PROPERTY(QColor primaryColor READ primaryColor CONSTANT FINAL) - Q_PROPERTY(QColor secondaryColor READ secondaryColor CONSTANT FINAL) - Q_PROPERTY(QColor codeColor READ codeColor CONSTANT FINAL) Q_PROPERTY(bool isSharingCurrentFile READ isSharingCurrentFile NOTIFY isSharingCurrentFileChanged FINAL) Q_PROPERTY(QStringList attachmentFiles MEMBER m_attachmentFiles NOTIFY attachmentFilesChanged) @@ -47,12 +43,6 @@ public: ChatModel *chatModel() const; QString currentTemplate() const; - QColor backgroundColor() const; - QColor primaryColor() const; - QColor secondaryColor() const; - - QColor codeColor() const; - bool isSharingCurrentFile() const; void saveHistory(const QString &filePath); @@ -79,21 +69,12 @@ signals: void attachmentFilesChanged(); private: - void generateColors(); - QColor generateColor(const QColor &baseColor, - float hueShift, - float saturationMod, - float lightnessMod); - QString getChatsHistoryDir() const; QString getSuggestedFileName() const; ChatModel *m_chatModel; ClientInterface *m_clientInterface; QString m_currentTemplate; - QColor m_primaryColor; - QColor m_secondaryColor; - QColor m_codeColor; QString m_recentFilePath; QStringList m_attachmentFiles; }; diff --git a/ChatView/qml/ChatItem.qml b/ChatView/qml/ChatItem.qml index 47ce2cc..df63bbe 100644 --- a/ChatView/qml/ChatItem.qml +++ b/ChatView/qml/ChatItem.qml @@ -27,9 +27,6 @@ Rectangle { property alias msgModel: msgCreator.model property alias messageAttachments: attachmentsModel.model - property color fontColor - property color codeBgColor - property color selectionColor height: msgColumn.implicitHeight + 10 radius: 8 @@ -100,14 +97,16 @@ Rectangle { height: attachText.implicitHeight + 8 width: attachText.implicitWidth + 16 radius: 4 - color: root.codeBgColor + color: palette.button + border.width: 1 + border.color: palette.mid Text { id: attachText anchors.centerIn: parent text: modelData - color: root.fontColor + color: palette.text } } } @@ -120,8 +119,6 @@ Rectangle { verticalAlignment: Text.AlignVCenter leftPadding: 10 text: itemData.text - color: root.fontColor - selectionColor: root.selectionColor } @@ -136,8 +133,5 @@ Rectangle { code: itemData.text language: itemData.language - color: root.codeBgColor - selectionColor: root.selectionColor } - } diff --git a/ChatView/qml/RootItem.qml b/ChatView/qml/RootItem.qml index eadc9ab..045332b 100644 --- a/ChatView/qml/RootItem.qml +++ b/ChatView/qml/RootItem.qml @@ -58,6 +58,7 @@ ChatRootView { ColumnLayout { anchors.fill: parent + spacing: 0 TopBar { id: topBar @@ -91,12 +92,8 @@ ChatRootView { width: ListView.view.width - scroll.width msgModel: root.chatModel.processMessageContent(model.content) messageAttachments: model.attachments - color: model.roleType === ChatModel.User ? root.primaryColor : root.secondaryColor - fontColor: root.primaryColor.hslLightness > 0.5 ? "black" : "white" - codeBgColor: root.codeColor - selectionColor: root.primaryColor.hslLightness > 0.5 ? Qt.darker(root.primaryColor, 1.5) - : Qt.lighter(root.primaryColor, 1.5) - + color: model.roleType === ChatModel.User ? palette.alternateBase + : palette.base } header: Item { @@ -130,15 +127,26 @@ ChatRootView { id: messageInput placeholderText: qsTr("Type your message here...") - placeholderTextColor: "#888" - color: root.primaryColor.hslLightness > 0.5 ? "black" : "white" + placeholderTextColor: palette.mid + color: palette.text background: Rectangle { radius: 2 - color: root.primaryColor - border.color: root.primaryColor.hslLightness > 0.5 ? Qt.lighter(root.primaryColor, 1.5) - : Qt.darker(root.primaryColor, 1.5) + color: palette.base + border.color: messageInput.activeFocus ? palette.highlight : palette.button border.width: 1 + + Behavior on border.color { + ColorAnimation { duration: 150 } + } + + Rectangle { + anchors.fill: parent + color: palette.highlight + opacity: messageInput.hovered ? 0.1 : 0 + radius: parent.radius + } } + Keys.onPressed: function(event) { if ((event.key === Qt.Key_Return || event.key === Qt.Key_Enter) && !(event.modifiers & Qt.ShiftModifier)) { root.sendChatMessage() diff --git a/ChatView/qml/dialog/CodeBlock.qml b/ChatView/qml/dialog/CodeBlock.qml index 99ed84a..c0b9de1 100644 --- a/ChatView/qml/dialog/CodeBlock.qml +++ b/ChatView/qml/dialog/CodeBlock.qml @@ -26,7 +26,6 @@ Rectangle { property string code: "" property string language: "" - property color selectionColor readonly property string monospaceFont: { switch (Qt.platform.os) { @@ -41,6 +40,7 @@ Rectangle { } } + color: palette.alternateBase border.color: root.color.hslLightness > 0.5 ? Qt.darker(root.color, 1.3) : Qt.lighter(root.color, 1.3) border.width: 2 @@ -62,10 +62,10 @@ Rectangle { readOnly: true selectByMouse: true font.family: root.monospaceFont - font.pointSize: 12 + font.pointSize: Qt.application.font.pointSize color: parent.color.hslLightness > 0.5 ? "black" : "white" wrapMode: Text.WordWrap - selectionColor: root.selectionColor + selectionColor: palette.highlight } TextEdit { @@ -80,7 +80,7 @@ Rectangle { font.pointSize: 8 } - Button { + QoAButton { anchors.top: parent.top anchors.right: parent.right anchors.margins: 5 diff --git a/ChatView/qml/dialog/TextBlock.qml b/ChatView/qml/dialog/TextBlock.qml index 626b24c..cab7c44 100644 --- a/ChatView/qml/dialog/TextBlock.qml +++ b/ChatView/qml/dialog/TextBlock.qml @@ -26,4 +26,6 @@ TextEdit { selectByMouse: true wrapMode: Text.WordWrap textFormat: Text.StyledText + selectionColor: palette.highlight + color: palette.text } diff --git a/ChatView/qml/parts/AttachedFilesPlace.qml b/ChatView/qml/parts/AttachedFilesPlace.qml index a930d94..d67a8a8 100644 --- a/ChatView/qml/parts/AttachedFilesPlace.qml +++ b/ChatView/qml/parts/AttachedFilesPlace.qml @@ -30,6 +30,8 @@ Flow { spacing: 5 leftPadding: 5 rightPadding: 5 + topPadding: attachRepeater.model.length > 0 ? 2 : 0 + bottomPadding: attachRepeater.model.length > 0 ? 2 : 0 Repeater { id: attachRepeater @@ -42,6 +44,8 @@ Flow { width: fileNameText.width + closeButton.width + 20 radius: 4 color: palette.button + border.width: 1 + border.color: palette.mid Row { spacing: 5