Refactor specification handling in DocumentSettingsDialog and PDFController. Introduced primary application field for document types, updated export messages for consistency, and improved page number handling in specifications. Cleaned up unnecessary code in preview widgets.

This commit is contained in:
2025-12-23 14:12:50 +03:00
parent 129922e392
commit 80e407e6be
12 changed files with 349 additions and 105 deletions
+12 -62
View File
@@ -10,11 +10,10 @@
#include <QApplication>
#include <QScreen>
#include <QDebug> // Added for qDebug
#include <QTimer>
// Константы
const int PreviewPdfWidget::ZOOM_LEVELS[] = {25, 50, 75, 100, 125, 150, 200};
const QStringList PreviewPdfWidget::DOCUMENT_TYPES = {"Перечень элементов", "Спецификация PCB", "Спецификация материалов", "Ведомость покупных изделий"};
const QStringList PreviewPdfWidget::DOCUMENT_TYPES = {"Перечень элементов", "Спецификация PCB", "Спецификация", "Ведомость покупных изделий"};
// Дополнительные константы для мелкого масштабирования
const int PreviewPdfWidget::FINE_ZOOM_STEP = 5; // Шаг для Ctrl+колесико (5%)
@@ -44,16 +43,10 @@ PreviewPdfWidget::PreviewPdfWidget(QWidget *parent)
: QWidget{parent}
, m_mainController(nullptr)
, m_pdfController(nullptr)
, m_updateTimer(new QTimer(this))
, m_currentPage(0)
, m_currentZoom(100)
, m_currentDocumentType("Перечень элементов")
{
// Настраиваем таймер для отложенного обновления (500 мс задержка)
m_updateTimer->setSingleShot(true);
m_updateTimer->setInterval(500);
connect(m_updateTimer, &QTimer::timeout, this, &PreviewPdfWidget::updatePreview);
setUp();
}
@@ -78,6 +71,7 @@ void PreviewPdfWidget::setWidgets(){
m_prevPageBtn = new QPushButton("", this);
m_nextPageBtn = new QPushButton("", this);
m_refreshBtn = new QPushButton("Обновить", this);
m_pageInfoLabel = new QLabel("Страница 1 из 1", this);
// Создаем область прокрутки для страниц
@@ -119,6 +113,9 @@ void PreviewPdfWidget::setUpLayout(){
m_controlsLayout->addWidget(m_nextPageBtn);
m_controlsLayout->addWidget(m_pageInfoLabel);
m_controlsLayout->addSpacing(20);
m_controlsLayout->addWidget(m_refreshBtn);
m_controlsLayout->addStretch();
// Добавляем все в основной layout
@@ -154,6 +151,7 @@ void PreviewPdfWidget::setUpConnections(){
renderPage(m_currentPage);
}
});
connect(m_refreshBtn, &QPushButton::clicked, this, &PreviewPdfWidget::updatePreview);
// Подключаем сигнал масштабирования от ZoomableScrollArea
connect(m_scrollArea, &ZoomableScrollArea::zoomRequested,
@@ -180,59 +178,11 @@ void PreviewPdfWidget::setMainController(MainController *mainController)
if (m_mainController) {
m_pdfController = m_mainController->pdfController();
qDebug() << "PreviewPdfWidget::setMainController: PDFController получен из MainController:" << m_pdfController;
// Подключаемся к сигналам изменения данных (используем отложенное обновление)
connect(reinterpret_cast<QAbstractItemModel*>(m_mainController->perechenTableModel()), &QAbstractItemModel::dataChanged,
this, [this]() { m_updateTimer->start(); });
connect(reinterpret_cast<QAbstractItemModel*>(m_mainController->perechenTableModel()), &QAbstractItemModel::modelReset,
this, [this]() { m_updateTimer->start(); });
connect(reinterpret_cast<QAbstractItemModel*>(m_mainController->perechenTableModel()), &QAbstractItemModel::rowsInserted,
this, [this]() { m_updateTimer->start(); });
connect(reinterpret_cast<QAbstractItemModel*>(m_mainController->perechenTableModel()), &QAbstractItemModel::rowsRemoved,
this, [this]() { m_updateTimer->start(); });
connect(reinterpret_cast<QAbstractItemModel*>(m_mainController->specificationPCBTableModel()), &QAbstractItemModel::dataChanged,
this, [this]() { m_updateTimer->start(); });
connect(reinterpret_cast<QAbstractItemModel*>(m_mainController->specificationPCBTableModel()), &QAbstractItemModel::modelReset,
this, [this]() { m_updateTimer->start(); });
connect(reinterpret_cast<QAbstractItemModel*>(m_mainController->specificationPCBTableModel()), &QAbstractItemModel::rowsInserted,
this, [this]() { m_updateTimer->start(); });
connect(reinterpret_cast<QAbstractItemModel*>(m_mainController->specificationPCBTableModel()), &QAbstractItemModel::rowsRemoved,
this, [this]() { m_updateTimer->start(); });
connect(reinterpret_cast<QAbstractItemModel*>(m_mainController->specificationTableModel()), &QAbstractItemModel::dataChanged,
this, [this]() { m_updateTimer->start(); });
connect(reinterpret_cast<QAbstractItemModel*>(m_mainController->specificationTableModel()), &QAbstractItemModel::modelReset,
this, [this]() { m_updateTimer->start(); });
connect(reinterpret_cast<QAbstractItemModel*>(m_mainController->specificationTableModel()), &QAbstractItemModel::rowsInserted,
this, [this]() { m_updateTimer->start(); });
connect(reinterpret_cast<QAbstractItemModel*>(m_mainController->specificationTableModel()), &QAbstractItemModel::rowsRemoved,
this, [this]() { m_updateTimer->start(); });
connect(reinterpret_cast<QAbstractItemModel*>(m_mainController->vedomostTableModel()), &QAbstractItemModel::dataChanged,
this, [this]() { m_updateTimer->start(); });
connect(reinterpret_cast<QAbstractItemModel*>(m_mainController->vedomostTableModel()), &QAbstractItemModel::modelReset,
this, [this]() { m_updateTimer->start(); });
connect(reinterpret_cast<QAbstractItemModel*>(m_mainController->vedomostTableModel()), &QAbstractItemModel::rowsInserted,
this, [this]() { m_updateTimer->start(); });
connect(reinterpret_cast<QAbstractItemModel*>(m_mainController->vedomostTableModel()), &QAbstractItemModel::rowsRemoved,
this, [this]() { m_updateTimer->start(); });
// Подключаемся к сигналам изменения данных TitleInscriptionsModel
connect(m_mainController->titleInscriptionsModel(), &TitleInscriptionsModel::dataChanged,
this, [this]() {
qDebug() << "PreviewPdfWidget: Получен сигнал dataChanged от TitleInscriptionsModel";
m_updateTimer->start();
});
connect(reinterpret_cast<QAbstractItemModel*>(m_mainController->projectParamTableModel()), &QAbstractItemModel::dataChanged,
this, [this]() { m_updateTimer->start(); });
connect(reinterpret_cast<QAbstractItemModel*>(m_mainController->projectParamTableModel()), &QAbstractItemModel::modelReset,
this, [this]() { m_updateTimer->start(); });
} else {
m_pdfController = nullptr;
}
// Обновляем превью при первой установке контроллера
updatePreview();
}
@@ -261,7 +211,7 @@ void PreviewPdfWidget::updatePreview()
qDebug() << "PreviewPdfWidget::updatePreview: Количество строк в спецификации PCB:" << m_mainController->specificationPCBTableModel()->rowCount();
}
if (m_mainController->specificationTableModel()) {
qDebug() << "PreviewPdfWidget::updatePreview: Количество строк в спецификации материалов:" << m_mainController->specificationTableModel()->rowCount();
qDebug() << "PreviewPdfWidget::updatePreview: Количество строк в спецификации:" << m_mainController->specificationTableModel()->rowCount();
}
if (m_mainController->vedomostTableModel()) {
qDebug() << "PreviewPdfWidget::updatePreview: Количество строк в ведомости покупных изделий:" << m_mainController->vedomostTableModel()->rowCount();
@@ -320,10 +270,10 @@ void PreviewPdfWidget::generatePages()
qDebug() << "PreviewPdfWidget::generatePages: Вызываем getSpecificationPcbPagesInfo";
m_pagesInfo = m_pdfController->getSpecificationPcbPagesInfo(m_mainController);
qDebug() << "PreviewPdfWidget::generatePages: Получено страниц спецификации PCB:" << m_pagesInfo.size();
} else if (m_currentDocumentType == "Спецификация материалов") {
} else if (m_currentDocumentType == "Спецификация") {
qDebug() << "PreviewPdfWidget::generatePages: Вызываем getSpecificationPagesInfo";
m_pagesInfo = m_pdfController->getSpecificationPagesInfo(m_mainController);
qDebug() << "PreviewPdfWidget::generatePages: Получено страниц спецификации материалов:" << m_pagesInfo.size();
qDebug() << "PreviewPdfWidget::generatePages: Получено страниц спецификации:" << m_pagesInfo.size();
} else if (m_currentDocumentType == "Ведомость покупных изделий") {
qDebug() << "PreviewPdfWidget::generatePages: Вызываем getVedomostPagesInfo";
m_pagesInfo = m_pdfController->getVedomostPagesInfo(m_mainController);
@@ -384,9 +334,9 @@ QPixmap PreviewPdfWidget::createPagePixmap(const PageInfo &pageInfo)
} else if (m_currentDocumentType == "Спецификация PCB") {
success = m_pdfController->drawSpecificationPcbPage(painter, pageInfo, m_mainController);
qDebug() << "PreviewPdfWidget::createPagePixmap: Результат рисования спецификации PCB:" << success;
} else if (m_currentDocumentType == "Спецификация материалов") {
} else if (m_currentDocumentType == "Спецификация") {
success = m_pdfController->drawSpecificationPage(painter, pageInfo, m_mainController);
qDebug() << "PreviewPdfWidget::createPagePixmap: Результат рисования спецификации материалов:" << success;
qDebug() << "PreviewPdfWidget::createPagePixmap: Результат рисования спецификации:" << success;
} else if (m_currentDocumentType == "Ведомость покупных изделий") {
success = m_pdfController->drawVedomostPage(painter, pageInfo, m_mainController);
qDebug() << "PreviewPdfWidget::createPagePixmap: Результат рисования ведомости:" << success;