Files
GostGenerator/view/editpdfwidget.cpp
T

230 lines
11 KiB
C++

#include "editpdfwidget.h"
#include "../controller/maincontroller.h"
#include <QFileDialog>
#include <QMessageBox>
#include <QDebug>
EditPDFWidget::EditPDFWidget(QWidget *parent)
: QWidget{parent}
, m_componentModel(nullptr)
, m_projectParamModel(nullptr)
, m_controller(nullptr)
{
setUp();
}
EditPDFWidget::EditPDFWidget(MainController *controller, QWidget *parent)
: QWidget{parent}
, m_componentModel(nullptr)
, m_projectParamModel(nullptr)
, m_controller(controller)
{
setUp();
}
void EditPDFWidget::setUp(){
setWidgets();
setUpLayout();
setUpConnections();
}
void EditPDFWidget::setWidgets(){
m_tabWidget = new QTabWidget(this);
// Создаем процессоры документов
m_perechenProcessor = new PerechenProcessor(this);
m_specificationProcessor = new SpecificationProcessor(this);
m_specificationPCBProcessor = new SpecificationPCBProcessor(this);
m_vedomostProcessor = new VedomostProcessor(this);
// Устанавливаем PerechenTableController из MainController в PerechenProcessor
if (m_controller && m_perechenProcessor) {
PerechenTableController *perechenController = m_controller->perechenTableController();
if (perechenController) {
// Заменяем контроллер в PerechenProcessor на контроллер из MainController
// Это обеспечивает единую точку управления данными
qDebug() << "EditPDFWidget::setWidgets: Используем PerechenTableController из MainController";
m_perechenProcessor->setController(perechenController);
// Также устанавливаем модель из MainController в PerechenProcessor
PerechenTableModel *perechenModel = m_controller->perechenTableModel();
if (perechenModel) {
qDebug() << "EditPDFWidget::setWidgets: Устанавливаем PerechenTableModel из MainController в PerechenProcessor";
m_perechenProcessor->setModel(perechenModel);
}
}
}
// Устанавливаем SpecificationPCBController из MainController в SpecificationPCBProcessor
if (m_controller && m_specificationPCBProcessor) {
SpecificationPCBController *specPCBController = m_controller->specificationPCBController();
if (specPCBController) {
// Заменяем контроллер в SpecificationPCBProcessor на контроллер из MainController
qDebug() << "EditPDFWidget::setWidgets: Используем SpecificationPCBController из MainController";
m_specificationPCBProcessor->setController(specPCBController);
// Также устанавливаем модель из MainController в SpecificationPCBProcessor
SpecificationPCBTableModel *specPCBModel = m_controller->specificationPCBTableModel();
if (specPCBModel) {
qDebug() << "EditPDFWidget::setWidgets: Устанавливаем SpecificationPCBTableModel из MainController в SpecificationPCBProcessor";
m_specificationPCBProcessor->setModel(specPCBModel);
}
}
}
// Устанавливаем SpecificationController из MainController в SpecificationProcessor
if (m_controller && m_specificationProcessor) {
SpecificationController *specController = m_controller->specificationController();
if (specController) {
// Заменяем контроллер в SpecificationProcessor на контроллер из MainController
qDebug() << "EditPDFWidget::setWidgets: Используем SpecificationController из MainController";
m_specificationProcessor->setController(specController);
// Также устанавливаем модель из MainController в SpecificationProcessor
SpecificationTableModel *specModel = m_controller->specificationTableModel();
if (specModel) {
qDebug() << "EditPDFWidget::setWidgets: Устанавливаем SpecificationTableModel из MainController в SpecificationProcessor";
m_specificationProcessor->setModel(specModel);
}
}
}
// Устанавливаем VedomostController из MainController в VedomostProcessor
if (m_controller && m_vedomostProcessor) {
VedomostController *vedomostController = m_controller->vedomostController();
if (vedomostController) {
// Заменяем контроллер в VedomostProcessor на контроллер из MainController
qDebug() << "EditPDFWidget::setWidgets: Используем VedomostController из MainController";
m_vedomostProcessor->setController(vedomostController);
// Также устанавливаем модель из MainController в VedomostProcessor
VedomostTableModel *vedomostModel = m_controller->vedomostTableModel();
if (vedomostModel) {
qDebug() << "EditPDFWidget::setWidgets: Устанавливаем VedomostTableModel из MainController в VedomostProcessor";
m_vedomostProcessor->setModel(vedomostModel);
}
}
}
// Создаем виджеты документов с соответствующими процессорами
if (m_controller) {
// Используем новый конструктор с контроллером для сохранения настроек
m_perechenEditWidget = new DocumentEditWidget(m_perechenProcessor, m_controller, this);
m_specificationEditWidget = new DocumentEditWidget(m_specificationProcessor, m_controller, this);
m_specificationPCBEditWidget = new DocumentEditWidget(m_specificationPCBProcessor, m_controller, this);
m_vedomostEditWidget = new DocumentEditWidget(m_vedomostProcessor, m_controller, this);
} else {
// Используем старый конструктор для обратной совместимости
m_perechenEditWidget = new DocumentEditWidget(m_perechenProcessor, this);
m_specificationEditWidget = new DocumentEditWidget(m_specificationProcessor, this);
m_specificationPCBEditWidget = new DocumentEditWidget(m_specificationPCBProcessor, this);
m_vedomostEditWidget = new DocumentEditWidget(m_vedomostProcessor, this);
}
m_tabWidget->addTab(m_specificationEditWidget, "Спецификация");
m_tabWidget->addTab(m_specificationPCBEditWidget, "Спецификация ПП");
m_tabWidget->addTab(m_vedomostEditWidget, "Ведомость");
m_tabWidget->addTab(m_perechenEditWidget, "Перечень");
}
void EditPDFWidget::setUpLayout(){
QVBoxLayout* mainLayout = new QVBoxLayout(this);
mainLayout->addWidget(m_tabWidget);
this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
}
void EditPDFWidget::setUpConnections(){
// Подключаем сигнал изменения таба для синхронизации с PreviewPdfWidget
connect(m_tabWidget, QOverload<int>::of(&QTabWidget::currentChanged),
this, [this](int index) {
QString documentType;
switch (index) {
case 0: // Спецификация
documentType = "Спецификация материалов";
break;
case 1: // Спецификация ПП
documentType = "Спецификация PCB";
break;
case 2: // Ведомость
documentType = "Ведомость"; // Пока не поддерживается в PreviewPdfWidget
break;
case 3: // Перечень
documentType = "Перечень элементов";
break;
default:
documentType = "Перечень элементов";
break;
}
emit documentTypeChanged(documentType);
});
// Пока убираем экспорт, так как методы не реализованы
// TODO: Добавить экспорт когда будет реализован
}
void EditPDFWidget::setData(ComponentTableModel *componentModel, ProjectParamTableModel *projectParamModel)
{
m_componentModel = componentModel;
m_projectParamModel = projectParamModel;
// Передаем данные во все виджеты документов
m_perechenEditWidget->setData(componentModel, projectParamModel);
m_specificationEditWidget->setData(componentModel, projectParamModel);
m_specificationPCBEditWidget->setData(componentModel, projectParamModel);
m_vedomostEditWidget->setData(componentModel, projectParamModel);
}
void EditPDFWidget::updateAllViews()
{
qDebug() << "EditPDFWidget::updateAllViews: Начинаем обновление всех представлений";
if (m_componentModel && m_projectParamModel) {
qDebug() << "EditPDFWidget::updateAllViews: Обновляем представление перечня";
m_perechenEditWidget->updateView();
qDebug() << "EditPDFWidget::updateAllViews: Обновляем представление спецификации";
m_specificationEditWidget->updateView();
qDebug() << "EditPDFWidget::updateAllViews: Обновляем представление спецификации ПП";
m_specificationPCBEditWidget->updateView();
qDebug() << "EditPDFWidget::updateAllViews: Обновляем представление ведомости";
m_vedomostEditWidget->updateView();
qDebug() << "EditPDFWidget::updateAllViews: Все представления обновлены";
} else {
qDebug() << "EditPDFWidget::updateAllViews: Модели данных недоступны";
}
}
bool EditPDFWidget::exportCurrentDocument(const QString &filePath)
{
// TODO: Реализовать экспорт текущего документа
Q_UNUSED(filePath)
return false;
}
bool EditPDFWidget::exportAllDocuments(const QString &basePath)
{
// TODO: Реализовать экспорт всех документов
Q_UNUSED(basePath)
return false;
}
TitleInscriptionsModel* EditPDFWidget::getTitleInscriptionsModel() const
{
// Возвращаем модель надписей из MainController
if (m_controller) {
return m_controller->titleInscriptionsModel();
}
return nullptr;
}
PerechenTableModel* EditPDFWidget::getPerechenTableModel() const
{
// Теперь получаем модель напрямую из MainController
if (m_controller) {
return m_controller->perechenTableModel();
}
return nullptr;
}