/
klischa
/
AstraScanner2
Обзор
Документация
Войти
/
klischa
/
AstraScanner2
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/controllers/ProjectUiController.cpp
87 строк
3 KB
Arena Agent
refactor: introduce controllers and split processing services
16 июн 2026, 22:53
16 июн 2026, 22:53
31dfe9a
Код
Авторство
О чём код?
#include "ProjectUiController.h" #include "../project/ProjectManager.h" #include "../export/ExportManager.h" #include "../settings/SettingsManager.h" #include <QWidget> #include <QStatusBar> #include <QMessageBox> #include <QFileDialog> #include <QFileInfo> ProjectUiController::ProjectUiController(QWidget *parentWidget, ProjectManager *projectManager, ExportManager *exportManager, QObject *parent) : QObject(parent) , m_parentWidget(parentWidget) , m_projectManager(projectManager) , m_exportManager(exportManager) { } bool ProjectUiController::confirmDiscardDirtyProject(const QString &title, const QString &question) const { if (!m_projectManager || !m_projectManager->isDirty()) { return true; } return QMessageBox::question(m_parentWidget, title, question) == QMessageBox::Yes; } QString ProjectUiController::chooseProjectDirectory(const QString &title, bool existingOnly) const { const QString baseDir = SettingsManager::instance().projectsDirectory(); if (existingOnly) { return QFileDialog::getExistingDirectory(m_parentWidget, title, baseDir); } return QFileDialog::getSaveFileName( m_parentWidget, title, baseDir, QString(), nullptr, QFileDialog::ShowDirsOnly | QFileDialog::DontConfirmOverwrite); } bool ProjectUiController::ensureProjectOpenForSave(const std::function<void()> &saveAsCallback) const { if (m_projectManager && m_projectManager->isOpen()) { return true; } saveAsCallback(); return m_projectManager && m_projectManager->isOpen(); } QString ProjectUiController::chooseExportFilename(const QString &title, const QStringList &filters) const { QString selected; return QFileDialog::getSaveFileName( m_parentWidget, title, SettingsManager::instance().lastExportDirectory(), filters.join(";;"), &selected); } void ProjectUiController::rememberExportDirectory(const QString &filename) const { if (!filename.isEmpty()) { SettingsManager::instance().setLastExportDirectory(QFileInfo(filename).absolutePath()); } } bool ProjectUiController::tryExportPointCloud(const pcl::PointCloud<pcl::PointXYZRGB>::ConstPtr &cloud, const QString &dialogTitle, QStatusBar *statusBar) const { if (!cloud || cloud->empty()) { QMessageBox::information(m_parentWidget, "Экспорт", "Облако точек пустое."); return false; } if (!m_exportManager) return false; const QString filename = chooseExportFilename(dialogTitle, ExportManager::cloudFileFilters()); if (filename.isEmpty()) return false; rememberExportDirectory(filename); if (!m_exportManager->savePointCloud(cloud, filename)) { QMessageBox::warning(m_parentWidget, "Ошибка экспорта", m_exportManager->lastError()); return false; } if (statusBar) { statusBar->showMessage(QString("Экспортировано: %1").arg(filename), 5000); } return true; }