From 2ec63f2cb7d3af4c543a9161aee4eaa0cd56002d Mon Sep 17 00:00:00 2001 From: Svetlana Kulikova Date: Fri, 4 Jul 2025 12:26:42 +0300 Subject: [PATCH] Change ChangeFullNameAnnot --- PdfFile/SrcReader/PdfAnnot.cpp | 39 ++++++++++++++++++++-------------- PdfFile/SrcReader/PdfAnnot.h | 3 ++- 2 files changed, 25 insertions(+), 17 deletions(-) diff --git a/PdfFile/SrcReader/PdfAnnot.cpp b/PdfFile/SrcReader/PdfAnnot.cpp index 92f1b6e9b6..d42f128372 100644 --- a/PdfFile/SrcReader/PdfAnnot.cpp +++ b/PdfFile/SrcReader/PdfAnnot.cpp @@ -1360,6 +1360,7 @@ CAnnotWidget::CAnnotWidget(PDFDoc* pdfDoc, AcroFormField* pField, int nStartRefI oObj.fetch(xref, &oField); oObj.free(); + m_bChangeFullName = false; m_dFontSize = 0.0; m_unFontStyle = 0; @@ -1603,11 +1604,11 @@ void CAnnotWidget::SetButtonFont(PDFDoc* pdfDoc, AcroFormField* pField, NSFonts: } bool CAnnotWidget::ChangeFullName(const std::string& sPrefixForm) { + m_bChangeFullName = true; if (m_unFlags & (1 << 18)) { m_sT += sPrefixForm; m_sFullName += sPrefixForm; - // ClearActions(); return true; } return false; @@ -2767,7 +2768,7 @@ bool CAnnots::ChangeFullNameAnnot(int nAnnot, const std::string& sPrefixForm) return false; CAnnotWidget* pWidget = m_arrAnnots[nAnnot]; - if (pWidget->ChangeFullName(sPrefixForm)) + if (pWidget->m_bChangeFullName) return true; unsigned int unRefNumParent = pWidget->GetRefNumParent(); if (unRefNumParent) @@ -2775,12 +2776,16 @@ bool CAnnots::ChangeFullNameAnnot(int nAnnot, const std::string& sPrefixForm) std::vector::iterator it = std::find_if(m_arrParents.begin(), m_arrParents.end(), [unRefNumParent](CAnnotParent* pP) { return pP->unRefNum == unRefNumParent; }); if (it != m_arrParents.end() && ChangeFullNameParent(std::distance(m_arrParents.begin(), it), sPrefixForm)) { - pWidget->AddFullName(sPrefixForm); - // pWidget->ClearActions(); + const std::string& sFullNameChild = pWidget->GetFullName(); + if (sFullNameChild.empty()) + pWidget->SetFullName((*it)->sFullName); + else + pWidget->SetFullName((*it)->sFullName + "." + sFullNameChild); + pWidget->m_bChangeFullName = true; return true; } } - return false; + return pWidget->ChangeFullName(sPrefixForm); } bool CAnnots::ChangeFullNameParent(int nParent, const std::string& sPrefixForm) { @@ -2790,26 +2795,28 @@ bool CAnnots::ChangeFullNameParent(int nParent, const std::string& sPrefixForm) CAnnotParent* pParent = m_arrParents[nParent]; if (pParent->bChangeFullName) return true; - if (pParent->unFlags & (1 << 0)) - { - pParent->sT += sPrefixForm; - pParent->sFullName += sPrefixForm; - pParent->bChangeFullName = true; - // pParent->ClearActions(); - return true; - } - else if (pParent->unFlags & (1 << 4)) + + if (pParent->unFlags & (1 << 4)) { unsigned int unRefNumParent = pParent->unRefNumParent; std::vector::iterator it = std::find_if(m_arrParents.begin(), m_arrParents.end(), [unRefNumParent](CAnnotParent* pP) { return pP->unRefNum == unRefNumParent; }); if (it != m_arrParents.end() && ChangeFullNameParent(std::distance(m_arrParents.begin(), it), sPrefixForm)) { - pParent->sFullName += sPrefixForm; + if (pParent->sT.empty()) + pParent->sFullName = (*it)->sFullName; + else + pParent->sFullName = (*it)->sFullName + "." + sPrefixForm; pParent->bChangeFullName = true; - // pParent->ClearActions(); return true; } } + else if (pParent->unFlags & (1 << 0)) + { + pParent->sT += sPrefixForm; + pParent->sFullName += sPrefixForm; + pParent->bChangeFullName = true; + return true; + } return false; } void CAnnots::CAnnotParent::ClearActions() diff --git a/PdfFile/SrcReader/PdfAnnot.h b/PdfFile/SrcReader/PdfAnnot.h index 280aa02e4f..1149762025 100644 --- a/PdfFile/SrcReader/PdfAnnot.h +++ b/PdfFile/SrcReader/PdfAnnot.h @@ -222,12 +222,13 @@ public: unsigned int GetRefNumParent() { return m_unRefNumParent; } const std::string& GetFullName() { return m_sFullName; } void SetFullName(const std::string& sFullName) { m_sFullName = sFullName; } - void AddFullName(const std::string& sPrefixForm) { m_sFullName += sPrefixForm; } bool ChangeFullName(const std::string& sPrefixForm); void ClearActions(); virtual std::string GetType() = 0; virtual void ToWASM(NSWasm::CData& oRes) override; + bool m_bChangeFullName; + protected: CAnnotWidget(PDFDoc* pdfDoc, AcroFormField* pField, int nStartRefID);