230 lines
11 KiB
C++
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;
|
|
} |