From c1f5b3336836e15d193582e9b8f3e044f7d8bc1b Mon Sep 17 00:00:00 2001 From: saturneric Date: Thu, 29 Feb 2024 18:15:57 +0800 Subject: feat: add module controller and continue to work on module system 1. speed up building by reducing build info sheader including 2. add module controller 3. continue to work on module system --- .../dialog/controller/ModuleControllerDialog.cpp | 111 +++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 src/ui/dialog/controller/ModuleControllerDialog.cpp (limited to 'src/ui/dialog/controller/ModuleControllerDialog.cpp') diff --git a/src/ui/dialog/controller/ModuleControllerDialog.cpp b/src/ui/dialog/controller/ModuleControllerDialog.cpp new file mode 100644 index 00000000..db177155 --- /dev/null +++ b/src/ui/dialog/controller/ModuleControllerDialog.cpp @@ -0,0 +1,111 @@ +/** + * Copyright (C) 2021 Saturneric + * + * This file is part of GpgFrontend. + * + * GpgFrontend is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GpgFrontend is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GpgFrontend. If not, see . + * + * The initial version of the source code is inherited from + * the gpg4usb project, which is under GPL-3.0-or-later. + * + * All the source code of GpgFrontend was modified and released by + * Saturneric starting on May 12, 2021. + * + * SPDX-License-Identifier: GPL-3.0-or-later + * + */ + +#include "ModuleControllerDialog.h" + +#include "ui_ModuleControllerDialog.h" + +// +#include "core/module/ModuleManager.h" +#include "ui/widgets/ModuleListView.h" + +namespace GpgFrontend::UI { + +ModuleControllerDialog::ModuleControllerDialog(QWidget* parent) + : QDialog(parent), + ui_(std::make_shared()), + model_list_view_(new ModuleListView(this)) { + ui_->setupUi(this); + + model_list_view_->setMinimumWidth(250); + model_list_view_->setViewMode(QListView::ListMode); + model_list_view_->setMovement(QListView::Static); + + ui_->moduleListViewLayout->addWidget(model_list_view_); + connect(model_list_view_, &ModuleListView::SignalSelectModule, this, + &ModuleControllerDialog::slot_load_module_details); + + connect(ui_->activateButton, &QPushButton::clicked, this, [=]() { + auto module_id = model_list_view_->GetCurrentModuleID(); + if (module_id.isEmpty()) return; + + Module::ModuleManager::GetInstance().ActiveModule(module_id); + QTimer::singleShot(1000, [=]() { slot_load_module_details(module_id); }); + }); + + connect(ui_->triggerEventButton, &QPushButton::clicked, this, [=]() { + auto event_id = + QInputDialog::getText(this, "Please provide an Event ID", "Event ID"); + Module::TriggerEvent(event_id); + }); +} + +void ModuleControllerDialog::slot_load_module_details( + Module::ModuleIdentifier module_id) { + GF_UI_LOG_DEBUG("loading module detailes, module id: {}", module_id); + + auto module = Module::ModuleManager::GetInstance().SearchModule(module_id); + + ui_->moduleIDLabel->setText(module->GetModuleIdentifier()); + + QString buffer; + QTextStream info(&buffer); + + info << "# BASIC INFO" << Qt::endl << Qt::endl; + + info << tr("Version") << ": " << module->GetModuleVersion() << Qt::endl; + info << tr("Hash") << ": " << module->GetModuleHash() << Qt::endl; + info << tr("Path") << ": " << module->GetModulePath() << Qt::endl; + + info << tr("Active") << ": " + << (Module::ModuleManager::GetInstance().IsModuleActivated(module_id) + ? tr("True") + : tr("False")) + << Qt::endl; + + info << Qt::endl; + + info << "# METADATA" << Qt::endl << Qt::endl; + + for (const auto& metadata : module->GetModuleMetaData()) { + info << metadata.first << ": " << metadata.second << "\n"; + } + + info << Qt::endl; + + info << "# Listening Event" << Qt::endl << Qt::endl; + + auto listening_event_ids = + Module::ModuleManager::GetInstance().GetModuleListening(module_id); + for (const auto& event_id : listening_event_ids) { + info << " - " << event_id << "\n"; + } + + ui_->moduleInfoTextBrowser->setText(buffer); +} +} // namespace GpgFrontend::UI -- cgit v1.2.3