Refactoring - prepare for undo/redo and document modification

This commit is contained in:
Jakub Melka
2020-04-25 14:21:06 +02:00
parent 76af397b07
commit 57b3711210
28 changed files with 318 additions and 114 deletions

View File

@@ -49,14 +49,20 @@ PDFAdvancedFindWidget::~PDFAdvancedFindWidget()
delete ui;
}
void PDFAdvancedFindWidget::setDocument(const pdf::PDFDocument* document)
void PDFAdvancedFindWidget::setDocument(const pdf::PDFModifiedDocument& document)
{
if (m_document != document)
{
m_document = document;
m_findResults.clear();
updateUI();
updateResultsUI();
// If document is not being reset, then page text should remain the same,
// so, there is no need to clear the results.
if (document.hasReset())
{
m_findResults.clear();
updateUI();
updateResultsUI();
}
}
}

View File

@@ -56,7 +56,7 @@ public:
const QMatrix& pagePointToDevicePointMatrix,
QList<pdf::PDFRenderError>& errors) const override;
void setDocument(const pdf::PDFDocument* document);
void setDocument(const pdf::PDFModifiedDocument& document);
protected:
virtual void showEvent(QShowEvent* event) override;

View File

@@ -121,10 +121,10 @@ PDFSidebarWidget::~PDFSidebarWidget()
delete ui;
}
void PDFSidebarWidget::setDocument(const pdf::PDFDocument* document, pdf::PDFOptionalContentActivity* optionalContentActivity)
void PDFSidebarWidget::setDocument(const pdf::PDFModifiedDocument& document)
{
m_document = document;
m_optionalContentActivity = optionalContentActivity;
m_optionalContentActivity = document.getOptionalContentActivity();
// Update outline
m_outlineTreeModel->setDocument(document);

View File

@@ -36,6 +36,7 @@ namespace pdf
class PDFAction;
class PDFDocument;
class PDFDrawWidgetProxy;
class PDFModifiedDocument;
class PDFOutlineTreeItemModel;
class PDFThumbnailsItemModel;
class PDFAttachmentsTreeItemModel;
@@ -69,7 +70,7 @@ public:
_END
};
void setDocument(const pdf::PDFDocument* document, pdf::PDFOptionalContentActivity* optionalContentActivity);
void setDocument(const pdf::PDFModifiedDocument& document);
/// Returns true, if all items in sidebar are empty
bool isEmpty() const;

View File

@@ -61,7 +61,7 @@ bool PDFTextToSpeech::isValid() const
return m_document != nullptr;
}
void PDFTextToSpeech::setDocument(const pdf::PDFDocument* document)
void PDFTextToSpeech::setDocument(const pdf::PDFModifiedDocument& document)
{
if (m_document != document)
{

View File

@@ -34,6 +34,7 @@ namespace pdf
{
class PDFDocument;
class PDFDrawWidgetProxy;
class PDFModifiedDocument;
}
namespace pdfviewer
@@ -66,7 +67,7 @@ public:
bool isValid() const;
/// Sets active document to text to speech engine
void setDocument(const pdf::PDFDocument* document);
void setDocument(const pdf::PDFModifiedDocument& document);
/// Apply settings to the reader
void setSettings(const PDFViewerSettings* viewerSettings);

View File

@@ -959,7 +959,8 @@ void PDFViewerMainWindow::onDocumentReadingFinished()
m_recentFileManager->addRecentFile(m_fileInfo.originalFileName);
m_pdfDocument = result.document;
setDocument(m_pdfDocument.data());
pdf::PDFModifiedDocument document(m_pdfDocument.data(), m_optionalContentActivity);
setDocument(document);
statusBar()->showMessage(tr("Document '%1' was successfully loaded!").arg(m_fileInfo.fileName), 4000);
break;
@@ -977,27 +978,36 @@ void PDFViewerMainWindow::onDocumentReadingFinished()
updateActionsAvailability();
}
void PDFViewerMainWindow::setDocument(const pdf::PDFDocument* document)
void PDFViewerMainWindow::setDocument(pdf::PDFModifiedDocument document)
{
if (m_optionalContentActivity)
if (document.hasReset())
{
// We use deleteLater, because we want to avoid consistency problem with model
// (we set document to the model before activity).
m_optionalContentActivity->deleteLater();
m_optionalContentActivity = nullptr;
if (m_optionalContentActivity)
{
// We use deleteLater, because we want to avoid consistency problem with model
// (we set document to the model before activity).
m_optionalContentActivity->deleteLater();
m_optionalContentActivity = nullptr;
}
if (document)
{
m_optionalContentActivity = new pdf::PDFOptionalContentActivity(document, pdf::OCUsage::View, this);
}
}
else if (m_optionalContentActivity)
{
Q_ASSERT(document);
m_optionalContentActivity->setDocument(document);
}
if (document)
{
m_optionalContentActivity = new pdf::PDFOptionalContentActivity(document, pdf::OCUsage::View, this);
}
m_annotationManager->setDocument(document, m_optionalContentActivity);
document.setOptionalContentActivity(m_optionalContentActivity);
m_annotationManager->setDocument(document);
m_formManager->setDocument(document);
m_toolManager->setDocument(document);
m_textToSpeech->setDocument(document);
m_pdfWidget->setDocument(document, m_optionalContentActivity);
m_sidebarWidget->setDocument(document, m_optionalContentActivity);
m_pdfWidget->setDocument(document);
m_sidebarWidget->setDocument(document);
m_advancedFindWidget->setDocument(document);
if (m_sidebarWidget->isEmpty())
@@ -1034,7 +1044,7 @@ void PDFViewerMainWindow::setDocument(const pdf::PDFDocument* document)
void PDFViewerMainWindow::closeDocument()
{
setDocument(nullptr);
setDocument(pdf::PDFModifiedDocument());
m_pdfDocument.reset();
updateActionsAvailability();
}

View File

@@ -135,7 +135,7 @@ private:
void onRenderingOptionTriggered(bool checked);
void openDocument(const QString& fileName);
void setDocument(const pdf::PDFDocument* document);
void setDocument(pdf::PDFModifiedDocument document);
void closeDocument();
void setPageLayout(pdf::PageLayout pageLayout);