diff --git a/gui/main-kf5.qml b/gui/main-kf5.qml index c1b9c89..7102dbc 100644 --- a/gui/main-kf5.qml +++ b/gui/main-kf5.qml @@ -1508,6 +1508,36 @@ ApplicationWindow { Behavior on opacity { NumberAnimation { duration: 150 } } } + // Reaction buttons + Row { + anchors.bottom: parent.bottom + anchors.right: parent.right + anchors.margins: 4 + z: 10 + spacing: 2 + opacity: assistantHover.hovered ? 0.9 : 0 + Behavior on opacity { NumberAnimation { duration: 150 } } + + Repeater { + model: [ + { emoji: "\uD83D\uDC4D", tip: "Good" }, + { emoji: "\uD83D\uDC4E", tip: "Bad" }, + { emoji: "\uD83D\uDE80", tip: "Excellent" }, + { emoji: "\uD83D\uDCA9", tip: "Very bad" }, + { emoji: "\uD83E\uDD14", tip: "Confused" } + ] + ToolButton { + text: modelData.emoji + font.pixelSize: 14 + implicitWidth: 28 + implicitHeight: 28 + onClicked: dbus.react(paneRoot.sessionId, modelData.emoji) + ToolTip.text: modelData.tip + ToolTip.visible: hovered + } + } + } + ColumnLayout { id: assistantContent anchors.fill: parent diff --git a/plasmoid/plugin/olliedbusclient.cpp b/plasmoid/plugin/olliedbusclient.cpp index 7716053..6e4b0fd 100644 --- a/plasmoid/plugin/olliedbusclient.cpp +++ b/plasmoid/plugin/olliedbusclient.cpp @@ -457,6 +457,12 @@ bool OllieDBusClient::submit(const QString &sessionId, const QString &prompt) return true; } +bool OllieDBusClient::react(const QString &sessionId, const QString &emoji) +{ + m_iface->asyncCall("React", sessionId, emoji); + return true; +} + bool OllieDBusClient::interrupt(const QString &sessionId) { m_iface->asyncCall("Interrupt", sessionId); diff --git a/plasmoid/plugin/olliedbusclient.h b/plasmoid/plugin/olliedbusclient.h index 1ad2b90..96e7dc3 100644 --- a/plasmoid/plugin/olliedbusclient.h +++ b/plasmoid/plugin/olliedbusclient.h @@ -53,6 +53,7 @@ public: Q_INVOKABLE bool renameSession(const QString &sessionId, const QString &newName); Q_INVOKABLE bool setConfig(const QString &sessionId, const QString &key, const QString &value); Q_INVOKABLE bool submit(const QString &sessionId, const QString &prompt); + Q_INVOKABLE bool react(const QString &sessionId, const QString &emoji); Q_INVOKABLE bool interrupt(const QString &sessionId); Q_INVOKABLE QStringList listBackends(); Q_INVOKABLE QStringList listModels(const QString &sessionId);