From 39f0c447c17b11d9a0a3e071cf87c08039126313 Mon Sep 17 00:00:00 2001 From: PTyTb Date: Mon, 9 Feb 2026 22:24:24 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D1=81=D0=BF=D0=B8=D1=81=D0=BA=D0=BE=D0=B2=20=D0=B2=20=D1=80?= =?UTF-8?q?=D0=B5=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=BC=20=D0=B2=D1=80=D0=B5?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit исправил поиск пользователя убрал лишние qDebug --- commandprocessor.cpp | 72 +++++-------- commandprocessor.h | 3 + fsinglegrid.cpp | 209 +++++++++++++++++++++++++++++++++----- fsinglegrid.h | 21 ++++ mediafilemanager.cpp | 39 +++++++ mediafilemanager.h | 29 ++---- neuraltemplatemanager.cpp | 84 ++++++++++++--- neuraltemplatemanager.h | 22 ++-- udatabase.cpp | 2 - ugeneral.cpp | 137 ++++++++++++------------- ugeneral.h | 11 +- 11 files changed, 440 insertions(+), 189 deletions(-) diff --git a/commandprocessor.cpp b/commandprocessor.cpp index 040a9dc..bcc07ec 100644 --- a/commandprocessor.cpp +++ b/commandprocessor.cpp @@ -25,44 +25,27 @@ void CommandProcessor::setContext(const Context& context) QString CommandProcessor::generateResponse(QString userIndex, const QString &command, const QString &message) { - qDebug() << "generateResponse: userIndex =" << userIndex << "command =" << command; - // Сначала пробуем найти пользователя по displayName QString username = ""; if (m_context.userManager) { - User* user = m_context.userManager->findUser(userIndex); + User* user = m_context.userManager->findUserById(userIndex); if (user) { - username = user->displayName; - qDebug() << "Найден пользователь:" << username; - } else { - qDebug() << "Пользователь не найден в UserManager по displayName:" << userIndex; - - // Попробуем найти по ID - user = m_context.userManager->findUserById(userIndex); - if (user) { - username = user->displayName; - qDebug() << "Найден пользователь по ID:" << username; - } + username = user->displayName; } } if (username.isEmpty()) { // Если не нашли в UserManager, используем переданное имя username = userIndex; - qDebug() << "Используем переданное имя:" << username; } Command cmd = findCommand(command); if (cmd.command.isEmpty()) { - qDebug() << "Команда не найдена:" << command; return ""; } - qDebug() << "Найдена команда:" << cmd.command << "ответ:" << cmd.response; - QString fullCommand = command + (message.isEmpty() ? "" : " " + message); QString result = processCommand(username, fullCommand, cmd.response); - qDebug() << "Итоговый результат:" << result; return result; } @@ -175,26 +158,18 @@ QString CommandProcessor::parseRandomNumbers(const QString &response) QRegularExpression regex("\\[\\[([^\\]]+)\\]\\]"); QRegularExpressionMatchIterator matches = regex.globalMatch(response); - qDebug() << "parseRandomNumbers: исходная строка:" << response; - qDebug() << "Найдено совпадений:" << matches.hasNext(); - while (matches.hasNext()) { QRegularExpressionMatch match = matches.next(); QString rangeName = match.captured(1); - qDebug() << "Найден диапазон:" << rangeName; if (m_context.randomManager) { int randomNumber = m_context.randomManager->getRandomValue(rangeName); - qDebug() << "Получено случайное число:" << randomNumber << "для диапазона" << rangeName; result.replace("[[" + rangeName + "]]", QString::number(randomNumber)); } else { - qDebug() << "RandomManager не инициализирован!"; int fallbackNumber = QRandomGenerator::global()->bounded(1, 101); result.replace("[[" + rangeName + "]]", QString::number(fallbackNumber)); } } - - qDebug() << "Результат после замены:" << result; return result; } @@ -271,7 +246,6 @@ QString CommandProcessor::parseBan(const QString &response, const QString &sende if (m_context.twitchAPI) { if (m_context.userManager) { User* user = m_context.userManager->findUser(sender); - qDebug() << user->displayName; if (user && !user->id.isEmpty()) { if (banSeconds > 0) { m_context.twitchAPI->banUserTime(user->id, banSeconds); @@ -487,7 +461,6 @@ QString CommandProcessor::getPeriodEnding(int n, int r) QString CommandProcessor::parseNeuralTemplates(const QString &response, const QString &sender, const QString ¶meters) { QString result = response; - qDebug() << "parseNeuralTemplates: входная строка:" << response; // Исправленное регулярное выражение QRegularExpression regex("<\\|([^<]+)<\\|"); @@ -500,11 +473,9 @@ QString CommandProcessor::parseNeuralTemplates(const QString &response, const QS matchCount++; QRegularExpressionMatch match = matches.next(); QString templateName = match.captured(1).trimmed(); - qDebug() << "Найден шаблон:" << templateName << "на позиции" << match.capturedStart(); if (m_context.neuralTemplateManager) { QString templateText = m_context.neuralTemplateManager->getTemplateText(templateName); - qDebug() << "Текст шаблона:" << templateText; if (!templateText.isEmpty()) { // Заменяем плейсхолдеры в шаблоне @@ -512,8 +483,6 @@ QString CommandProcessor::parseNeuralTemplates(const QString &response, const QS processedTemplate.replace("[TO]", parameters); processedTemplate.replace("[USERNAME]", sender); - qDebug() << "Шаблон после замены плейсхолдеров:" << processedTemplate; - // Получаем ответ от нейросети QString aiResponse; if (m_context.neuralManager) { @@ -539,7 +508,6 @@ QString CommandProcessor::parseNeuralTemplates(const QString &response, const QS }); // Отправляем запрос к нейросети - qDebug() << "Отправляем запрос к нейросети:" << processedTemplate; m_context.neuralManager->sendMessage(processedTemplate); // Таймаут 30 секунд @@ -551,16 +519,11 @@ QString CommandProcessor::parseNeuralTemplates(const QString &response, const QS if (errorOccurred) { aiResponse = QString("Ошибка нейросети: %1").arg(errorMessage); - qDebug() << "Ошибка нейросети:" << errorMessage; } else if (!responseReceived) { aiResponse = "Таймаут при ожидании ответа от нейросети"; - qDebug() << "Таймаут нейросети"; - } else { - qDebug() << "Получен ответ от нейросети:" << aiResponse; } } else { aiResponse = "Нейросеть недоступна"; - qDebug() << "NeuralManager не доступен"; } // Заменяем шаблон на ответ от нейросети @@ -570,7 +533,6 @@ QString CommandProcessor::parseNeuralTemplates(const QString &response, const QS repl.text = aiResponse; replacements.append(repl); } else { - qDebug() << "Шаблон не найден или пустой:" << templateName; // Если шаблон не найден, оставляем как есть или заменяем на заглушку Replacement repl; repl.start = match.capturedStart(); @@ -579,7 +541,6 @@ QString CommandProcessor::parseNeuralTemplates(const QString &response, const QS replacements.append(repl); } } else { - qDebug() << "NeuralTemplateManager не доступен"; // Если менеджер не доступен, заменяем на заглушку Replacement repl; repl.start = match.capturedStart(); @@ -589,8 +550,6 @@ QString CommandProcessor::parseNeuralTemplates(const QString &response, const QS } } - qDebug() << "Всего найдено шаблонов:" << matchCount; - // Выполняем замены с конца к началу std::sort(replacements.begin(), replacements.end(), [](const Replacement &a, const Replacement &b) { @@ -600,8 +559,31 @@ QString CommandProcessor::parseNeuralTemplates(const QString &response, const QS for (const auto &replacement : replacements) { result.replace(replacement.start, replacement.length, replacement.text); } - - qDebug() << "parseNeuralTemplates: результат:" << result; return result; } +void CommandProcessor::editCommand(const QString &oldCommand,const QString &newCommand,const QString &response) +{ + Command oldCom = findCommand(oldCommand); + if (oldCom.command.isEmpty()) return; + for (int i = 0; i < m_commands.size(); ++i) { + if (m_commands[i].command.compare(oldCommand, Qt::CaseInsensitive) == 0) { + // Обновляем команду + m_commands[i].command = newCommand; + m_commands[i].response = response; + return; + } + } +} + +void CommandProcessor::deleteCommand(const QString &commandName) +{ + Command oldCom = findCommand(commandName); + if (oldCom.command.isEmpty()) return; + for (int i = 0; i < m_commands.size(); ++i) { + if (m_commands[i].command.compare(commandName, Qt::CaseInsensitive) == 0) { + m_commands.remove(i); + return; + } + } +} diff --git a/commandprocessor.h b/commandprocessor.h index ab844a6..ab7d28c 100644 --- a/commandprocessor.h +++ b/commandprocessor.h @@ -45,6 +45,9 @@ public: QString generateResponse(QString userIndex, const QString &command, const QString &message = ""); void addCommand(const QString &command, const QString &response); + void editCommand(const QString &oldCommand,const QString &newCommand,const QString &response); + void deleteCommand(const QString &commandName); + void addCommands(const QVector &commands); void clearCommands(); diff --git a/fsinglegrid.cpp b/fsinglegrid.cpp index 4a8d056..8420861 100644 --- a/fsinglegrid.cpp +++ b/fsinglegrid.cpp @@ -55,8 +55,39 @@ void FSingleGrid::toGrid(QString aName, QString aFile) void FSingleGrid::on_btnAdd_clicked() { - toGrid(ui->edtName->text(), ui->edtFileName->text()); - db->SaveTableWidget(ui->sg); + QString name = ui->edtName->text().trimmed(); + QString filePath = ui->edtFileName->text().trimmed(); + + if (name.isEmpty()) { + QMessageBox::warning(this, "Внимание", "Введите название!"); + return; + } + + if (filePath.isEmpty()) { + QMessageBox::warning(this, "Внимание", "Введите путь к файлу!"); + return; + } + + // Добавляем в соответствующий менеджер + if (!addToManager(name, filePath)) { + QMessageBox::warning(this, "Ошибка", + currentManagerType == TemplateManager ? + "Не удалось добавить шаблон. Возможно, такое имя уже существует." : + "Не удалось добавить файл. Возможно, такое имя уже существует."); + return; + } + + // Добавляем в таблицу + toGrid(name, filePath); + + // Сохраняем в БД + if (db) { + db->SaveTableWidget(ui->sg); + } + + // Очищаем поля + ui->edtName->clear(); + ui->edtFileName->clear(); } void FSingleGrid::setDatabase(uDataBase *database) @@ -66,62 +97,90 @@ void FSingleGrid::setDatabase(uDataBase *database) void FSingleGrid::on_btnDel_clicked() { - // Проверяем, есть ли выделенная строка if (!ui->sg->currentItem()) { QMessageBox::warning(this, "Внимание", "Выберите строку для удаления!"); return; } - // Получаем индекс выделенной строки int row = ui->sg->currentItem()->row(); + QString name = ui->sg->item(row, 0)->text(); - // Удаляем строку + // Удаляем из менеджера + if (!removeFromManager(name)) { + QMessageBox::warning(this, "Ошибка", "Не удалось удалить из менеджера!"); + return; + } + + // Удаляем строку из таблицы ui->sg->removeRow(row); - db->SaveTableWidget(ui->sg); + + // Сохраняем в БД + if (db) { + db->SaveTableWidget(ui->sg); + } } void FSingleGrid::on_btnEdt_clicked() { - // Проверяем, есть ли выделенная строка if (!ui->sg->currentItem()) { QMessageBox::warning(this, "Внимание", "Выберите строку для редактирования!"); return; } - // Получаем индекс выделенной строки int row = ui->sg->currentItem()->row(); + QString oldName = ui->sg->item(row, 0)->text(); + QString newName = ui->edtName->text().trimmed(); + QString newFilePath = ui->edtFileName->text().trimmed(); - // Получаем данные из выбранной строки - ui->sg->item(row, 0)->setText(ui->edtName->text()); - ui->sg->item(row, 1)->setText(ui->edtFileName->text()); -db->SaveTableWidget(ui->sg); + if (newName.isEmpty()) { + QMessageBox::warning(this, "Внимание", "Введите новое название!"); + return; + } + + if (newFilePath.isEmpty()) { + QMessageBox::warning(this, "Внимание", "Введите новый путь к файлу!"); + return; + } + + // Обновляем в менеджере + if (!updateInManager(oldName, newName, newFilePath)) { + QMessageBox::warning(this, "Ошибка", + currentManagerType == TemplateManager ? + "Не удалось обновить шаблон. Возможно, новое имя уже существует." : + "Не удалось обновить файл. Возможно, новое имя уже существует."); + return; + } + + // Обновляем в таблице + ui->sg->item(row, 0)->setText(newName); + ui->sg->item(row, 1)->setText(newFilePath); + + // Сохраняем в БД + if (db) { + db->SaveTableWidget(ui->sg); + } } - void FSingleGrid::on_btnOpen_clicked() { // Диалог выбора файла QString fileName = QFileDialog::getOpenFileName( - this, // родительское окно - "Выберите файл", // заголовок окна - QDir::homePath(), // начальная директория - "Все файлы (*.*);;" // фильтры файлов + this, + "Выберите файл", + QDir::homePath(), + "Все файлы (*.*);;" "Текстовые файлы (*.txt);;" "Аудио (*.mp3);;" "Приложения (*.exe *.bat *.cmd)" ); - // Если файл выбран (не нажата кнопка "Отмена") if (!fileName.isEmpty()) { - // Записываем путь к файлу в поле ввода ui->edtFileName->setText(fileName); - // Опционально: автоматически заполняем поле имени из названия файла if (ui->edtName->text().isEmpty()) { QFileInfo fileInfo(fileName); - QString baseName = fileInfo.baseName(); // Имя файла без расширения - ui->edtName->setText(baseName); + ui->edtName->setText(fileInfo.baseName()); } } } @@ -129,8 +188,110 @@ void FSingleGrid::on_btnOpen_clicked() void FSingleGrid::on_sg_cellClicked(int row, int column) { - ui->edtName->setText(ui->sg->item(row,0)->text()); - ui->edtFileName->setText(ui->sg->item(row,1)->text()); + Q_UNUSED(column); + + if (row >= 0 && row < ui->sg->rowCount()) { + ui->edtName->setText(ui->sg->item(row, 0)->text()); + ui->edtFileName->setText(ui->sg->item(row, 1)->text()); + } } +void FSingleGrid::setSoundManager(MediaFileManager *manager) +{ + soundManager = manager; + currentManagerType = SoundManager; +} + +void FSingleGrid::setTextManager(MediaFileManager *manager) +{ + textManager = manager; + currentManagerType = TextManager; +} + +void FSingleGrid::setTemplateManager(NeuralTemplateManager *manager) +{ + templateManager = manager; + currentManagerType = TemplateManager; +} + +void FSingleGrid::setManagerType(ManagerType type) +{ + currentManagerType = type; +} + +bool FSingleGrid::addToManager(const QString& name, const QString& filePath) +{ + switch (currentManagerType) { + case SoundManager: + if (soundManager) { + qDebug() << "добавляем ебаный звук"; + return soundManager->addFile(name, filePath); + } + break; + case TextManager: + if (textManager) { + qDebug() << "добавляем ебаный текст"; + return textManager->addFile(name, filePath); + } + break; + case TemplateManager: + if (templateManager) { + qDebug() << "добавляем ебаный шаблон"; + return templateManager->addTemplate(name, filePath); + } + break; + default: + qDebug() << "добавляем ебаный нихуя"; + break; + } + return false; +} + +bool FSingleGrid::removeFromManager(const QString& name) +{ + switch (currentManagerType) { + case SoundManager: + if (soundManager) { + return soundManager->removeFile(name); + } + break; + case TextManager: + if (textManager) { + return textManager->removeFile(name); + } + break; + case TemplateManager: + if (templateManager) { + return templateManager->removeTemplate(name); + } + break; + default: + break; + } + return false; +} + +bool FSingleGrid::updateInManager(const QString& oldName, const QString& newName, const QString& newFilePath) +{ + switch (currentManagerType) { + case SoundManager: + if (soundManager) { + return soundManager->updateFile(oldName, newName, newFilePath); + } + break; + case TextManager: + if (textManager) { + return textManager->updateFile(oldName, newName, newFilePath); + } + break; + case TemplateManager: + if (templateManager) { + return templateManager->updateTemplate(oldName, newName, newFilePath); + } + break; + default: + break; + } + return false; +} diff --git a/fsinglegrid.h b/fsinglegrid.h index 7b8eeab..98a651c 100644 --- a/fsinglegrid.h +++ b/fsinglegrid.h @@ -3,6 +3,8 @@ #include #include +#include "mediafilemanager.h" +#include "neuraltemplatemanager.h" #include "udatabase.h" namespace Ui { @@ -14,12 +16,24 @@ class FSingleGrid : public QWidget Q_OBJECT public: + enum ManagerType { + NoManager, + SoundManager, + TextManager, + TemplateManager + }; explicit FSingleGrid(QWidget *parent = nullptr); ~FSingleGrid(); void initForm(QString aBlockName, QString aNewName, bool btnOpen = false); void toGrid(QString aName, QString aFile); QTableWidget* tableWidget() const; + void setDatabase(uDataBase *database); + void setSoundManager(MediaFileManager *manager); + void setTextManager(MediaFileManager *manager); + void setTemplateManager(NeuralTemplateManager *manager); + + void setManagerType(ManagerType type); private slots: void on_btnAdd_clicked(); @@ -34,6 +48,13 @@ private slots: private: Ui::FSingleGrid *ui; uDataBase *db = nullptr; + ManagerType currentManagerType = NoManager; + MediaFileManager *soundManager = nullptr; + MediaFileManager *textManager = nullptr; + NeuralTemplateManager *templateManager = nullptr; + bool addToManager(const QString& name, const QString& filePath); + bool removeFromManager(const QString& name); + bool updateInManager(const QString& oldName, const QString& newName, const QString& newFilePath); }; #endif // FSINGLEGRID_H diff --git a/mediafilemanager.cpp b/mediafilemanager.cpp index eeaa96e..a055a41 100644 --- a/mediafilemanager.cpp +++ b/mediafilemanager.cpp @@ -8,6 +8,7 @@ MediaFileManager::MediaFileManager() bool MediaFileManager::addFile(const QString& name, const QString& filePath) { + qDebug() << "Добавляем ебаный файл"; // Проверка на пустые значения if (name.isEmpty() || filePath.isEmpty()) { qWarning() << "Имя файла или путь не могут быть пустыми"; @@ -99,3 +100,41 @@ int MediaFileManager::findFileIndex(const QString& name) const } return -1; } + +bool MediaFileManager::renameFile(const QString& oldName, const QString& newName) +{ + int index = findFileIndex(oldName); + + if (index == -1) { + qWarning() << "Файл с именем" << oldName << "не найден"; + return false; + } + + // Проверяем, не используется ли новое имя другим файлом + if (oldName != newName && contains(newName)) { + qWarning() << "Файл с именем" << newName << "уже существует"; + return false; + } + + QString oldPath = mediaFiles[index].filePath; + mediaFiles[index].name = newName; + + qDebug() << "Файл переименован:" << oldName << "->" << newName; + return true; +} + +bool MediaFileManager::updateFilePath(const QString& name, const QString& newFilePath) +{ + int index = findFileIndex(name); + + if (index == -1) { + qWarning() << "Файл с именем" << name << "не найден"; + return false; + } + + QString oldPath = mediaFiles[index].filePath; + mediaFiles[index].filePath = newFilePath; + + qDebug() << "Путь файла обновлен:" << name << "новый путь:" << newFilePath; + return true; +} diff --git a/mediafilemanager.h b/mediafilemanager.h index 0283eea..8ffbaa1 100644 --- a/mediafilemanager.h +++ b/mediafilemanager.h @@ -4,47 +4,38 @@ #include #include -// Структура для хранения информации о медиафайле struct MediaFile { - QString name; // Имя файла - QString filePath; // Полный путь к файлу + QString name; + QString filePath; MediaFile() = default; - MediaFile(const QString& name, const QString& filePath) - : name(name), filePath(filePath) {} + MediaFile(const QString& n, const QString& p) : name(n), filePath(p) {} }; class MediaFileManager { public: MediaFileManager(); + ~MediaFileManager() = default; - // Добавление файла bool addFile(const QString& name, const QString& filePath); - - // Удаление файла по имени bool removeFile(const QString& name); - - // Изменение информации о файле bool updateFile(const QString& oldName, const QString& newName, const QString& newFilePath); - // Получение пути к файлу по имени QString getFilePathByName(const QString& name) const; - - // Получение количества файлов int getFileCount() const; - - // Получение всех файлов (для отладки или отображения) QVector getAllFiles() const; - // Проверка существования файла по имени bool contains(const QString& name) const; -private: - QVector mediaFiles; + // Новые методы для управления файлами + bool renameFile(const QString& oldName, const QString& newName); + bool updateFilePath(const QString& name, const QString& newFilePath); - // Поиск индекса файла по имени +private: int findFileIndex(const QString& name) const; + + QVector mediaFiles; }; #endif // MEDIAFILEMANAGER_H diff --git a/neuraltemplatemanager.cpp b/neuraltemplatemanager.cpp index 0a137e2..36dd8b2 100644 --- a/neuraltemplatemanager.cpp +++ b/neuraltemplatemanager.cpp @@ -8,45 +8,99 @@ NeuralTemplateManager::NeuralTemplateManager(QObject *parent) { } -void NeuralTemplateManager::addTemplate(const QString &name, const QString &templateText) +bool NeuralTemplateManager::addTemplate(const QString &name, const QString &templateText) { - // Проверяем, нет ли уже шаблона с таким именем - for (int i = 0; i < m_templates.size(); ++i) { - if (m_templates[i].name.compare(name, Qt::CaseInsensitive) == 0) { - m_templates[i].templateText = templateText; - return; - } + if (name.isEmpty()) { + qWarning() << "Имя шаблона не может быть пустым"; + return false; } - m_templates.append({name, templateText}); + + if (containsTemplate(name)) { + qWarning() << "Шаблон с именем" << name << "уже существует"; + return false; + } + + templates.append(NeuralTemplate(name, templateText)); + // emit templateAdded(name, templateText); + + return true; } QString NeuralTemplateManager::getTemplateText(const QString &name) const { - for (const Template &t : m_templates) { - if (t.name.compare(name, Qt::CaseInsensitive) == 0) { - return t.templateText; + int index = findTemplateIndex(name); + if (index == -1) { + return QString(); + } + return templates[index].templateText; +} + +bool NeuralTemplateManager::removeTemplate(const QString& name) +{ + int index = findTemplateIndex(name); + + if (index == -1) { + qWarning() << "Шаблон с именем" << name << "не найден"; + return false; + } + + templates.remove(index); + // emit templateRemoved(name); + return true; +} + +bool NeuralTemplateManager::updateTemplate(const QString& oldName, const QString& newName, const QString& newTemplateText) +{ + int index = findTemplateIndex(oldName); + + if (index == -1) { + qWarning() << "Шаблон с именем" << oldName << "не найден"; + return false; + } + + // Проверяем, не используется ли новое имя другим шаблоном + if (oldName != newName && containsTemplate(newName)) { + qWarning() << "Шаблон с именем" << newName << "уже существует"; + return false; + } + + templates[index].name = newName; + templates[index].templateText = newTemplateText; + + // emit templateUpdated(oldName, newName, newTemplateText); + return true; +} + +int NeuralTemplateManager::findTemplateIndex(const QString& name) const +{ + for (int i = 0; i < templates.size(); ++i) { + if (templates[i].name == name) { + return i; } } - return QString(); + return -1; +} + +bool NeuralTemplateManager::containsTemplate(const QString& name) const +{ + return findTemplateIndex(name) != -1; } void NeuralTemplateManager::clear() { - m_templates.clear(); + templates.clear(); } void NeuralTemplateManager::loadFromTableWidget(QTableWidget *table) { clear(); if (!table) return; - qDebug()<< "Table Found"; for (int row = 0; row < table->rowCount(); ++row) { QTableWidgetItem *nameItem = table->item(row, 0); QTableWidgetItem *templateItem = table->item(row, 1); if (nameItem && templateItem) { QString name = nameItem->text().trimmed(); QString templateText = templateItem->text().trimmed(); - qDebug()<< "Template add " << name; if (!name.isEmpty() && !templateText.isEmpty()) { addTemplate(name, templateText); } diff --git a/neuraltemplatemanager.h b/neuraltemplatemanager.h index cafd222..541bc90 100644 --- a/neuraltemplatemanager.h +++ b/neuraltemplatemanager.h @@ -12,22 +12,30 @@ class NeuralTemplateManager : public QObject Q_OBJECT public: - struct Template { - QString name; - QString templateText; - }; explicit NeuralTemplateManager(QObject *parent = nullptr); - void addTemplate(const QString &name, const QString &templateText); + bool addTemplate(const QString &name, const QString &templateText); + bool removeTemplate(const QString& name); + bool updateTemplate(const QString& oldName, const QString& newName, const QString& newTemplateText); + QString getTemplateText(const QString &name) const; void clear(); void loadFromTableWidget(QTableWidget *table); + bool containsTemplate(const QString& name) const; - const QVector