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
+30 -4
View File
@@ -1018,10 +1018,14 @@ void SpecificationPCBTableModel::updatePageNumbers()
int currentRow = 0;
int currentPage = 1;
int rowsOnCurrentPage = 0;
bool pageNumbersChanged = false;
for (int i = 0; i < m_rows.size(); ++i) {
SpecificationPCBRowData &row = m_rows[i];
// Сохраняем старый номер страницы для проверки изменений
int oldPageNumber = row.pageNumber;
// Определяем, сколько строк помещается на текущей странице
int maxRowsOnPage = (currentPage == 1) ? ROWS_PER_FIRST_PAGE : ROWS_PER_OTHER_PAGE;
@@ -1032,6 +1036,11 @@ void SpecificationPCBTableModel::updatePageNumbers()
maxRowsOnPage = ROWS_PER_OTHER_PAGE; // Начиная со второй страницы
}
// Проверяем, изменился ли номер страницы
if (oldPageNumber != currentPage) {
pageNumbersChanged = true;
}
// Устанавливаем номер страницы для строки
row.pageNumber = currentPage;
row.format.pageNumber = currentPage;
@@ -1052,8 +1061,9 @@ void SpecificationPCBTableModel::updatePageNumbers()
qDebug() << "SpecificationPCBTableModel::updatePageNumbers: Обновление завершено, всего страниц:" << currentPage;
// Уведомляем UI об изменении данных для обновления отображения страниц
if (!m_rows.isEmpty()) {
// Уведомляем UI об изменении данных ТОЛЬКО если номера страниц действительно изменились
// Это критично для производительности при редактировании больших таблиц
if (pageNumbersChanged && !m_rows.isEmpty()) {
emit dataChanged(index(0, 0), index(m_rows.size() - 1, COLUMN_COUNT - 1),
QVector<int>() << Qt::BackgroundRole);
emit headerDataChanged(Qt::Vertical, 0, m_rows.size() - 1);
@@ -1264,11 +1274,27 @@ void SpecificationPCBTableModel::updatePageDisplay()
{
qDebug() << "SpecificationPCBTableModel::updatePageDisplay: Обновляем отображение страниц в UI";
// Сохраняем старые номера страниц для проверки изменений
QList<int> oldPageNumbers;
for (const SpecificationPCBRowData &row : m_rows) {
oldPageNumbers.append(row.pageNumber);
}
// Обновляем номера страниц
updatePageNumbers();
// Уведомляем UI об изменении всех данных для обновления отображения
if (!m_rows.isEmpty()) {
// Проверяем, изменились ли номера страниц
bool pageNumbersChanged = false;
for (int i = 0; i < m_rows.size() && i < oldPageNumbers.size(); ++i) {
if (m_rows[i].pageNumber != oldPageNumbers[i]) {
pageNumbersChanged = true;
break;
}
}
// Уведомляем UI об изменении данных ТОЛЬКО если номера страниц действительно изменились
// Это критично для производительности при редактировании больших таблиц
if (pageNumbersChanged && !m_rows.isEmpty()) {
emit dataChanged(index(0, 0), index(m_rows.size() - 1, COLUMN_COUNT - 1),
QVector<int>() << Qt::BackgroundRole);