[libraries/ktextaddons] textautogeneratetext/core/models: Add prompt model
Laurent Montel <[email protected]>
| Newsgroups | gmane.comp.kde.cvs |
|---|---|
| Message-ID | <[email protected]> |
Git commit 675f1539c7e4587bdd310374da20c88558dce811 by Laurent Montel.
Committed on 28/07/2026 at 06:02.
Pushed by mlaurent into branch 'master'.
Add prompt model
M +4 -202 textautogeneratetext/core/models/textautogeneratetextpromptmodel.cpp
M +3 -85 textautogeneratetext/core/models/textautogeneratetextpromptmodel.h
https://invent.kde.org/libraries/ktextaddons/-/commit/675f1539c7e4587bdd310374da20c88558dce811
diff --git a/textautogeneratetext/core/models/textautogeneratetextpromptmodel.cpp b/textautogeneratetext/core/models/textautogeneratetextpromptmodel.cpp
index 439802910..29e64ebc6 100644
--- a/textautogeneratetext/core/models/textautogeneratetextpromptmodel.cpp
+++ b/textautogeneratetext/core/models/textautogeneratetextpromptmodel.cpp
@@ -4,7 +4,6 @@
SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "textautogeneratetextpromptmodel.h"
-#include "core/textautogeneratetextplugin.h"
#include "textautogeneratetextcore_debug.h"
using namespace TextAutoGenerateText;
@@ -13,225 +12,28 @@ TextAutoGenerateTextPromptModel::TextAutoGenerateTextPromptModel(QObject *parent
{
}
-TextAutoGenerateTextPromptModel::~TextAutoGenerateTextPromptModel()
-{
- qDeleteAll(mTextInstances);
-}
+TextAutoGenerateTextPromptModel::~TextAutoGenerateTextPromptModel() = default;
int TextAutoGenerateTextPromptModel::rowCount(const QModelIndex &parent) const
{
if (parent.isValid()) {
return 0; // flat model
}
- return mTextInstances.count();
-}
-
-bool TextAutoGenerateTextPromptModel::setData(const QModelIndex &idx, const QVariant &value, int role)
-{
- if (!idx.isValid() || idx.row() < 0 || idx.row() >= mTextInstances.count()) {
- qCWarning(TEXTAUTOGENERATETEXT_CORE_LOG) << "ERROR: invalid index";
- return false;
- }
- const int id = idx.row();
- const auto &instance = mTextInstances[id];
- switch (role) {
- case Qt::CheckStateRole:
- case InstanceRoles::Enabled:
- instance->setEnabled(value.toBool());
- Q_EMIT dataChanged(idx, idx, {InstanceRoles::Enabled});
- return true;
- default:
- break;
- }
- return QAbstractListModel::setData(idx, value, role);
+ return mPrompt.count();
}
QVariant TextAutoGenerateTextPromptModel::data(const QModelIndex &index, int role) const
{
- if (index.row() < 0 || index.row() >= mTextInstances.count()) {
+ if (index.row() < 0 || index.row() >= mPrompt.count()) {
return {};
}
- const auto &instance = mTextInstances[index.row()];
+ const auto &instance = mPrompt[index.row()];
switch (role) {
case Qt::DisplayRole:
- case InstanceRoles::Name:
- return instance->displayName();
- case InstanceRoles::PluginName:
- return instance->pluginName();
- case InstanceRoles::Uuid:
- return instance->instanceUuid();
- case InstanceRoles::PluginIdentifier:
- return instance->pluginIdentifier();
- case InstanceRoles::Plugin:
- return QVariant::fromValue(instance->plugin());
- case Qt::CheckStateRole:
- return instance->enabled() ? Qt::Checked : Qt::Unchecked;
- case InstanceRoles::Enabled:
- return instance->enabled();
- case InstanceRoles::IsDefault:
- return !instance->instanceUuid().isEmpty() && !mCurrentinstance.isEmpty() && (instance->instanceUuid() == mCurrentinstance) && instance->enabled();
- case InstanceRoles::TranslatedPluginName:
- return instance->plugin()->translatedPluginName();
default:
break;
}
return {};
}
-QStringList TextAutoGenerateTextPromptModel::instanceDisplayNames() const
-{
- QStringList lstDisplayNames;
- lstDisplayNames.reserve(mTextInstances.size());
- for (const auto &inst : mTextInstances) {
- lstDisplayNames.append(inst->displayName());
- }
- return lstDisplayNames;
-}
-
-QList<TextAutoGenerateTextInstance *> TextAutoGenerateTextPromptModel::textInstances() const
-{
- return mTextInstances;
-}
-
-void TextAutoGenerateTextPromptModel::setTextInstances(const QList<TextAutoGenerateTextInstance *> &newTextInstances)
-{
- beginResetModel();
- qDeleteAll(mTextInstances);
- mTextInstances.clear();
- mTextInstances = newTextInstances;
- endResetModel();
-}
-
-bool TextAutoGenerateTextPromptModel::isEmpty() const
-{
- if (mTextInstances.isEmpty()) {
- return true;
- }
- for (const auto &inst : mTextInstances) {
- if (inst->enabled()) {
- return false;
- }
- }
- return true;
-}
-
-QByteArray TextAutoGenerateTextPromptModel::currentInstance() const
-{
- return mCurrentinstance;
-}
-
-void TextAutoGenerateTextPromptModel::setCurrentInstance(const QByteArray &newCurrentinstance)
-{
- if (mCurrentinstance != newCurrentinstance) {
- auto matchesUuid = [&](TextAutoGenerateTextInstance *instance) {
- return instance->instanceUuid() == newCurrentinstance;
- };
- const auto answerIt = std::find_if(mTextInstances.constBegin(), mTextInstances.constEnd(), matchesUuid);
-
- // Notify for old current instance row before changing state
- auto notifyRow = [&](const QByteArray &uuid) {
- auto it = std::find_if(mTextInstances.constBegin(), mTextInstances.constEnd(), [&](TextAutoGenerateTextInstance *instance) {
- return instance->instanceUuid() == uuid;
- });
- if (it != mTextInstances.constEnd()) {
- const int row = std::distance(mTextInstances.constBegin(), it);
- const auto idx = index(row, 0);
- Q_EMIT dataChanged(idx, idx, {InstanceRoles::IsDefault});
- }
- };
-
- if (answerIt == mTextInstances.constEnd()) {
- // If we don't find it. => clear it.
- const QByteArray oldInstance = mCurrentinstance;
- mCurrentinstance.clear();
- notifyRow(oldInstance);
- return;
- }
- notifyRow(mCurrentinstance);
- mCurrentinstance = newCurrentinstance;
- const int newRow = std::distance(mTextInstances.constBegin(), answerIt);
- const auto newIdx = index(newRow, 0);
- Q_EMIT dataChanged(newIdx, newIdx, {InstanceRoles::IsDefault});
- }
-}
-
-TextAutoGenerateTextPlugin *TextAutoGenerateTextPromptModel::currentPlugin() const
-{
- if (isEmpty()) {
- return nullptr;
- }
- if (mCurrentinstance.isEmpty()) {
- // Fall back to first enable instance
- for (const auto &inst : mTextInstances) {
- if (inst->enabled()) {
- return inst->plugin();
- }
- }
- return nullptr;
- }
- auto matchesUuid = [&](TextAutoGenerateTextInstance *instance) {
- return (instance->instanceUuid() == mCurrentinstance) && instance->enabled();
- };
- const auto answerIt = std::find_if(mTextInstances.constBegin(), mTextInstances.constEnd(), matchesUuid);
- if (answerIt != mTextInstances.constEnd()) {
- return (*answerIt)->plugin();
- }
- // Fall back to first enable instance
- for (const auto &inst : mTextInstances) {
- if (inst->enabled()) {
- return inst->plugin();
- }
- }
- return nullptr;
-}
-
-void TextAutoGenerateTextPromptModel::addInstance(TextAutoGenerateTextInstance *instance)
-{
- beginInsertRows(QModelIndex(), mTextInstances.count(), mTextInstances.count());
- mTextInstances.append(instance);
- endInsertRows();
-}
-
-void TextAutoGenerateTextPromptModel::removeInstance(const QByteArray &uuid)
-{
- auto matchesUuid = [&](TextAutoGenerateTextInstance *instance) {
- return instance->instanceUuid() == uuid;
- };
- const auto answerIt = std::find_if(mTextInstances.constBegin(), mTextInstances.constEnd(), matchesUuid);
- if (answerIt != mTextInstances.constEnd()) {
- const int i = std::distance(mTextInstances.constBegin(), answerIt);
- beginRemoveRows(QModelIndex(), i, i);
- auto instance = mTextInstances.at(i);
- mTextInstances.removeAt(i);
- endRemoveRows();
- if (auto plugin = instance->plugin()) {
- plugin->remove();
- }
- delete instance;
- }
-}
-
-TextAutoGenerateTextPlugin *TextAutoGenerateTextPromptModel::editInstance(const QByteArray &uuid)
-{
- auto matchesUuid = [&](TextAutoGenerateTextInstance *instance) {
- return instance->instanceUuid() == uuid;
- };
- const auto answerIt = std::find_if(mTextInstances.constBegin(), mTextInstances.constEnd(), matchesUuid);
- if (answerIt != mTextInstances.constEnd()) {
- const int i = std::distance(mTextInstances.constBegin(), answerIt);
- return mTextInstances.at(i)->plugin();
- }
- qCWarning(TEXTAUTOGENERATETEXT_CORE_LOG) << "Instance not found for uuid:" << uuid;
- return nullptr;
-}
-
-Qt::ItemFlags TextAutoGenerateTextPromptModel::flags(const QModelIndex &index) const
-{
- if (!index.isValid()) {
- return Qt::NoItemFlags;
- }
-
- return Qt::ItemIsUserCheckable | QAbstractListModel::flags(index);
-}
-
#include "moc_textautogeneratetextpromptmodel.cpp"
diff --git a/textautogeneratetext/core/models/textautogeneratetextpromptmodel.h b/textautogeneratetext/core/models/textautogeneratetextpromptmodel.h
index 0db0ab382..5760e8ee8 100644
--- a/textautogeneratetext/core/models/textautogeneratetextpromptmodel.h
+++ b/textautogeneratetext/core/models/textautogeneratetextpromptmodel.h
@@ -7,7 +7,7 @@
#include "textautogeneratetext_export.h"
#include <QAbstractListModel>
-#include <TextAutoGenerateText/TextAutoGenerateTextInstance>
+#include <TextAutoGenerateText/TextAutoGeneratePrompt>
namespace TextAutoGenerateText
{
/*!
@@ -21,15 +21,8 @@ class TEXTAUTOGENERATETEXT_EXPORT TextAutoGenerateTextPromptModel : public QAbst
{
Q_OBJECT
public:
- enum InstanceRoles : uint16_t {
+ enum PromptRoles : uint16_t {
Name = Qt::UserRole + 1,
- PluginName,
- PluginIdentifier,
- Uuid,
- Plugin,
- Enabled,
- IsDefault,
- TranslatedPluginName,
};
/*!
* Constructs a new TextAutoGenerateTextPromptModel object.
@@ -53,83 +46,8 @@ public:
* \return The data value
*/
[[nodiscard]] QVariant data(const QModelIndex &index, int role) const override;
- /*!
- * Sets the data at the given index for the specified role.
- * \param index The model index
- * \param value The value to set
- * \param role The data role
- * \return true if successful, false otherwise
- */
- [[nodiscard]] bool setData(const QModelIndex &index, const QVariant &value, int role) override;
- /*!
- * Returns the flags for the given index.
- * \param index The model index
- * \return The item flags
- */
- [[nodiscard]] Qt::ItemFlags flags(const QModelIndex &index) const override;
-
- /*!
- * Returns the list of text instances in the model.
- * \return The list of TextAutoGenerateTextInstance pointers
- */
- [[nodiscard]] QList<TextAutoGenerateTextInstance *> textInstances() const;
- /*!
- * Sets the list of text instances in the model.
- * \param newTextInstances The instances to set
- */
- void setTextInstances(const QList<TextAutoGenerateTextInstance *> &newTextInstances);
-
- /*!
- * Adds an instance to the model.
- * \param instance The instance to add
- */
- void addInstance(TextAutoGenerateTextInstance *instance);
-
- /*!
- * Removes an instance from the model by UUID.
- * Calls plugin->remove() and deletes the instance.
- * \param uuid The UUID of the instance to remove
- */
- void removeInstance(const QByteArray &uuid);
-
- /*!
- * Gets the plugin for editing an instance by UUID.
- * \param uuid The UUID of the instance to edit
- * \return The plugin from the instance
- */
- [[nodiscard]] TextAutoGenerateTextPlugin *editInstance(const QByteArray &uuid);
-
- /*!
- * Returns whether the model is empty.
- * \return true if empty, false otherwise
- */
- [[nodiscard]] bool isEmpty() const;
-
- /*!
- * Returns the UUID of the current instance.
- * \return The current instance UUID
- */
- [[nodiscard]] QByteArray currentInstance() const;
- /*!
- * Sets the current instance by UUID.
- * \param newCurrentinstance The UUID to set as current
- */
- void setCurrentInstance(const QByteArray &newCurrentinstance);
-
- /*!
- * Returns the plugin of the current instance.
- * \return The plugin pointer or nullptr
- */
- [[nodiscard]] TextAutoGenerateTextPlugin *currentPlugin() const;
-
- /*!
- * Returns a list of display names for all instances.
- * \return List of instance display names
- */
- [[nodiscard]] QStringList instanceDisplayNames() const;
private:
- QList<TextAutoGenerateTextInstance *> mTextInstances;
- QByteArray mCurrentinstance;
+ QList<TextAutoGeneratePrompt> mPrompt;
};
}