KTextAddons

textautogeneratewidget.cpp
1/*
2 SPDX-FileCopyrightText: 2025 Laurent Montel <montel@kde.org>
3
4 SPDX-License-Identifier: GPL-2.0-or-later
5*/
6
7#include "textautogeneratewidget.h"
8#include "core/textautogeneratechatmodel.h"
9#include "core/textautogenerateengineloader.h"
10#include "core/textautogenerateengineutil.h"
11#include "core/textautogeneratemanager.h"
12#include "core/textautogeneratemessage.h"
13#include "core/textautogeneratetextclient.h"
14#include "core/textautogeneratetextplugin.h"
15#include "textautogeneratetextwidget_debug.h"
16#include "widgets/textautogenerateheaderwidget.h"
17#include "widgets/textautogeneratehistorywidget.h"
18#include "widgets/textautogenerateresultwidget.h"
19#include "widgets/textautogeneratetextlineeditwidget.h"
20
21#include <KConfigGroup>
22#include <KSharedConfig>
23#include <KSplitterCollapserButton>
24#include <QSplitter>
25#include <QVBoxLayout>
26
27using namespace TextAutogenerateText;
28TextAutogenerateWidget::TextAutogenerateWidget(QWidget *parent)
29 : QWidget{parent}
30 , mTextAutogenerateResultWidget(new TextAutogenerateResultWidget(this))
31 , mTextAutogenerateTextLineEditWidget(new TextAutogenerateTextLineEditWidget(this))
32 , mSplitter(new QSplitter(this))
33 , mHistoryWidget(new TextAutogenerateHistoryWidget(this))
34 , mHeaderWidget(new TextAutogenerateHeaderWidget(this))
35{
36 auto mainLayout = new QVBoxLayout(this);
37 mainLayout->setObjectName(QStringLiteral("mainLayout"));
38 mainLayout->setContentsMargins(QMargins{});
39 mHeaderWidget->setObjectName(QStringLiteral("mHeaderWidget"));
40 mainLayout->addWidget(mHeaderWidget);
41
42 mSplitter->setOrientation(Qt::Horizontal);
43 mSplitter->setObjectName(QStringLiteral("mSplitter"));
44
45 mainLayout->addWidget(mSplitter, 1);
46
47 mTextAutogenerateResultWidget->setObjectName(QStringLiteral("mTextAutogenerateResultWidget"));
48
49 mHistoryWidget->setObjectName(QStringLiteral("mHistoryWidget"));
50 mSplitter->addWidget(mHistoryWidget);
51 mSplitter->addWidget(mTextAutogenerateResultWidget);
52
53 new KSplitterCollapserButton(mHistoryWidget, mSplitter);
54
55 mTextAutogenerateTextLineEditWidget->setObjectName(QStringLiteral("mTextAutogenerateTextLineEditWidget"));
56 mainLayout->addWidget(mTextAutogenerateTextLineEditWidget);
57 connect(mTextAutogenerateTextLineEditWidget, &TextAutogenerateTextLineEditWidget::editingFinished, this, &TextAutogenerateWidget::slotEditingFinished);
58
59 connect(mHeaderWidget, &TextAutogenerateHeaderWidget::configChanged, this, &TextAutogenerateWidget::slotConfigureChanged);
60 connect(mHeaderWidget, &TextAutogenerateHeaderWidget::clearModel, this, &TextAutogenerateWidget::slotClearModel);
61 loadEngine();
62 readConfig();
63}
64
65TextAutogenerateWidget::~TextAutogenerateWidget()
66{
67 if (mTextAutogeneratePlugin) {
68 mTextAutogeneratePlugin->stop();
69 mTextAutogeneratePlugin->deleteLater();
70 }
71 writeConfig();
72}
73
74void TextAutogenerateWidget::slotClearModel()
75{
76 TextAutogenerateManager::self()->textAutoGenerateChatModel()->resetConversation();
77}
78
79void TextAutogenerateWidget::writeConfig()
80{
81 KConfigGroup group(KSharedConfig::openStateConfig(), QStringLiteral("TextAutogenerateWidget"));
82 group.writeEntry("mainSplitter", mSplitter->sizes());
83}
84
85void TextAutogenerateWidget::readConfig()
86{
87 KConfigGroup group(KSharedConfig::openStateConfig(), QStringLiteral("TextAutogenerateWidget"));
88 const QList<int> size = {100, 400};
89
90 mSplitter->setSizes(group.readEntry("mainSplitter", size));
91}
92
93QString TextAutogenerateWidget::textLineEdit() const
94{
95 return mTextAutogenerateTextLineEditWidget->text();
96}
97
98void TextAutogenerateWidget::loadEngine()
99{
100 if (mTextAutogeneratePlugin) {
101 disconnect(mTextAutogeneratePlugin);
102 delete mTextAutogeneratePlugin;
103 mTextAutogeneratePlugin = nullptr;
104 }
105 // TODO connect(TextAutogenerateText::TextAutogenerateEngineLoader::self(), &TextAutogenerateText::TextAutogenerateEngineLoader::noPluginsFound, this, &)
106 TextAutogenerateText::TextAutogenerateEngineLoader::self()->loadPlugins();
107
108 mTextAutogenerateClient =
109 TextAutogenerateText::TextAutogenerateEngineLoader::self()->createTextAutoGenerateTextClient(TextAutogenerateEngineUtil::loadEngine());
110 if (!mTextAutogenerateClient) {
111 const QString fallBackEngineName = TextAutogenerateText::TextAutogenerateEngineLoader::self()->fallbackFirstEngine();
112 if (!fallBackEngineName.isEmpty()) {
113 mTextAutogenerateClient = TextAutogenerateText::TextAutogenerateEngineLoader::self()->createTextAutoGenerateTextClient(fallBackEngineName);
114 }
115 }
116 if (mTextAutogenerateClient) {
117 mHeaderWidget->updateEngineName(TextAutogenerateText::TextAutogenerateEngineLoader::self()->generateDisplayName(mTextAutogenerateClient));
118 mTextAutogeneratePlugin = mTextAutogenerateClient->createTextAutogeneratePlugin();
119 connect(mTextAutogeneratePlugin, &TextAutogenerateText::TextAutogenerateTextPlugin::finished, this, &TextAutogenerateWidget::slotAutogenerateFinished);
120 connect(mTextAutogeneratePlugin,
121 &TextAutogenerateText::TextAutogenerateTextPlugin::errorOccurred,
122 this,
123 &TextAutogenerateWidget::slotAutogenerateFailed);
124 } else {
125 qCWarning(TEXTAUTOGENERATETEXT_WIDGET_LOG) << "Impossible to create client" << TextAutogenerateEngineUtil::loadEngine();
126 }
127}
128
129void TextAutogenerateWidget::slotConfigureChanged()
130{
131 loadEngine();
132}
133
134void TextAutogenerateWidget::slotEditingFinished(const QString &str)
135{
136 mTextAutogeneratePlugin->sendMessage(str);
137}
138
139void TextAutogenerateWidget::slotAutogenerateFinished(const TextAutoGenerateMessage &msg)
140{
141 qDebug() << " TextAutogenerateWidget::slotAutogenerateFinished " << msg;
142 // mTextAutogenerateResultWidget->addMessage(msg);
143}
144
145void TextAutogenerateWidget::slotAutogenerateFailed(const QString &errorMessage)
146{
147 qDebug() << " TextAutogenerateWidget::slotAutogenerateFailed " << errorMessage;
148 // TODO report error
149}
150
151#include "moc_textautogeneratewidget.cpp"
static KSharedConfig::Ptr openStateConfig(const QString &fileName=QString())
KCALUTILS_EXPORT QString errorMessage(const KCalendarCore::Exception &exception)
QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)
bool disconnect(const QMetaObject::Connection &connection)
bool isEmpty() const const
Horizontal
QFuture< ArgsType< Signal > > connect(Sender *sender, Signal signal)
This file is part of the KDE documentation.
Documentation copyright © 1996-2025 The KDE developers.
Generated on Fri Apr 18 2025 12:00:52 by doxygen 1.13.2 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.