Merge to XFA: Kill remaining sprintfs
[pdfium.git] / fpdfsdk / src / fsdk_baseannot.cpp
index ff054c8..e80d3b8 100644 (file)
@@ -5,6 +5,7 @@
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
 #include "../include/fsdk_define.h"
+#include "../include/fpdfxfa/fpdfxfa_doc.h"
 #include "../include/fsdk_mgr.h"
 #include "../include/fsdk_baseannot.h"
 
@@ -357,13 +358,16 @@ CFX_ByteString CPDFSDK_DateTime::ToPDFDateTimeString()
 {
        CFX_ByteString dtStr;
        char tempStr[32];
-       sprintf(tempStr, "D:%04d%02d%02d%02d%02d%02d", dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second);
+       memset(tempStr, 0, sizeof(tempStr));
+       FXSYS_snprintf(tempStr, sizeof(tempStr) - 1, "D:%04d%02d%02d%02d%02d%02d",
+                   dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second);
        dtStr = CFX_ByteString(tempStr);
        if (dt.tzHour < 0)
                dtStr += CFX_ByteString("-");
        else
                dtStr += CFX_ByteString("+");
-       sprintf(tempStr, "%02d'%02d'", abs(dt.tzHour), dt.tzMinute);
+       memset(tempStr, 0, sizeof(tempStr));
+       FXSYS_snprintf(tempStr, sizeof(tempStr) - 1, "%02d'%02d'", abs(dt.tzHour), dt.tzMinute);
        dtStr += CFX_ByteString(tempStr);
        return dtStr;
 }
@@ -500,40 +504,30 @@ CPDFSDK_DateTime& CPDFSDK_DateTime::AddSeconds(int seconds)
 //---------------------------------------------------------------------------
 //                                                             CPDFSDK_Annot   
 //---------------------------------------------------------------------------
-CPDFSDK_Annot::CPDFSDK_Annot(CPDF_Annot* pAnnot, CPDFSDK_PageView* pPageView) :
-m_pAnnot(pAnnot),
+CPDFSDK_Annot::CPDFSDK_Annot(CPDFSDK_PageView* pPageView) :
 m_pPageView(pPageView),
 m_bSelected(FALSE),
 m_nTabOrder(-1)
 {
 }
 
-CPDFSDK_Annot::~CPDFSDK_Annot()
-{
-       m_pAnnot = NULL;
-       m_pPageView = NULL;
-}
 
-CPDF_Annot*    CPDFSDK_Annot::GetPDFAnnot()
+//CPDFSDK_BAAnnot
+CPDFSDK_BAAnnot::CPDFSDK_BAAnnot(CPDF_Annot* pAnnot, CPDFSDK_PageView* pPageView) :
+       CPDFSDK_Annot(pPageView),
+               m_pAnnot(pAnnot)
 {
-       return m_pAnnot;
-}
 
-FX_DWORD CPDFSDK_Annot::GetFlags()
-{
-       ASSERT(m_pAnnot != NULL);
-       
-       return m_pAnnot->GetFlags();
 }
 
-void CPDFSDK_Annot::SetPage(CPDFSDK_PageView* pPageView)
+CPDFSDK_BAAnnot::~CPDFSDK_BAAnnot()
 {
-       m_pPageView = pPageView;
+       m_pAnnot = NULL;
 }
 
-CPDFSDK_PageView* CPDFSDK_Annot::GetPageView()
+CPDF_Annot*    CPDFSDK_BAAnnot::GetPDFAnnot()
 {
-       return m_pPageView;
+       return m_pAnnot;
 }
 
 FX_BOOL CPDFSDK_Annot::IsSelected()
@@ -557,14 +551,14 @@ void CPDFSDK_Annot::SetTabOrder(int iTabOrder)
        m_nTabOrder = iTabOrder;
 }
 
-CPDF_Dictionary* CPDFSDK_Annot::GetAnnotDict() const
+CPDF_Dictionary* CPDFSDK_BAAnnot::GetAnnotDict() const
 {
        ASSERT(m_pAnnot != NULL);
        
        return m_pAnnot->m_pAnnotDict;
 }
 
-void CPDFSDK_Annot::SetRect(const CPDF_Rect& rect)
+void CPDFSDK_BAAnnot::SetRect(const CPDF_Rect& rect)
 {
        ASSERT(m_pAnnot != NULL);
        ASSERT(m_pAnnot->m_pAnnotDict != NULL);
@@ -574,7 +568,7 @@ void CPDFSDK_Annot::SetRect(const CPDF_Rect& rect)
        m_pAnnot->m_pAnnotDict->SetAtRect("Rect", rect);
 }
 
-CPDF_Rect CPDFSDK_Annot::GetRect() const
+CPDF_Rect CPDFSDK_BAAnnot::GetRect() const
 {
        ASSERT(m_pAnnot != NULL);
        
@@ -584,19 +578,24 @@ CPDF_Rect CPDFSDK_Annot::GetRect() const
        return rect;
 }
 
-CFX_ByteString CPDFSDK_Annot::GetType() const
+CFX_ByteString CPDFSDK_BAAnnot::GetType() const
 {
        ASSERT(m_pAnnot != NULL);
        
        return m_pAnnot->GetSubType();
 }
 
-CFX_ByteString CPDFSDK_Annot::GetSubType() const
+CFX_ByteString CPDFSDK_BAAnnot::GetSubType() const
 {
        return "";
 }
 
-void CPDFSDK_Annot::DrawAppearance(CFX_RenderDevice* pDevice, const CPDF_Matrix* pUser2Device,
+void CPDFSDK_BAAnnot::ResetAppearance()
+{
+       ASSERT(FALSE);
+}
+
+void CPDFSDK_BAAnnot::DrawAppearance(CFX_RenderDevice* pDevice, const CPDF_Matrix* pUser2Device,
                                                                   CPDF_Annot::AppearanceMode mode, const CPDF_RenderOptions* pOptions) 
 {
        ASSERT(m_pPageView != NULL);
@@ -605,7 +604,7 @@ void CPDFSDK_Annot::DrawAppearance(CFX_RenderDevice* pDevice, const CPDF_Matrix*
        m_pAnnot->DrawAppearance(m_pPageView->GetPDFPage(), pDevice, pUser2Device, mode, pOptions);
 }
 
-FX_BOOL        CPDFSDK_Annot::IsAppearanceValid()
+FX_BOOL        CPDFSDK_BAAnnot::IsAppearanceValid()
 {
        ASSERT(m_pAnnot != NULL);
        ASSERT(m_pAnnot->m_pAnnotDict != NULL);
@@ -613,7 +612,7 @@ FX_BOOL     CPDFSDK_Annot::IsAppearanceValid()
        return m_pAnnot->m_pAnnotDict->GetDict("AP") != NULL;
 }
 
-FX_BOOL        CPDFSDK_Annot::IsAppearanceValid(CPDF_Annot::AppearanceMode mode)
+FX_BOOL        CPDFSDK_BAAnnot::IsAppearanceValid(CPDF_Annot::AppearanceMode mode)
 {
        ASSERT(m_pAnnot != NULL);
        ASSERT(m_pAnnot->m_pAnnotDict != NULL);
@@ -637,20 +636,20 @@ FX_BOOL   CPDFSDK_Annot::IsAppearanceValid(CPDF_Annot::AppearanceMode mode)
        return TRUE;
 }
 
-void CPDFSDK_Annot::DrawBorder(CFX_RenderDevice* pDevice, const CPDF_Matrix* pUser2Device,
+void CPDFSDK_BAAnnot::DrawBorder(CFX_RenderDevice* pDevice, const CPDF_Matrix* pUser2Device,
                                                   const CPDF_RenderOptions* pOptions)
 {
        ASSERT(m_pAnnot != NULL);
        m_pAnnot->DrawBorder(pDevice, pUser2Device, pOptions); 
 }
 
-void CPDFSDK_Annot::ClearCachedAP()
+void CPDFSDK_BAAnnot::ClearCachedAP()
 {
        ASSERT(m_pAnnot != NULL);
        m_pAnnot->ClearCachedAP();
 }    
 
-void CPDFSDK_Annot::SetContents(const CFX_WideString& sContents)
+void CPDFSDK_BAAnnot::SetContents(const CFX_WideString& sContents)
 {
        ASSERT(m_pAnnot != NULL);
        ASSERT(m_pAnnot->m_pAnnotDict != NULL);
@@ -661,7 +660,7 @@ void CPDFSDK_Annot::SetContents(const CFX_WideString& sContents)
                m_pAnnot->m_pAnnotDict->SetAtString("Contents", PDF_EncodeText(sContents));
 }
 
-CFX_WideString CPDFSDK_Annot::GetContents() const
+CFX_WideString CPDFSDK_BAAnnot::GetContents() const
 {
        ASSERT(m_pAnnot != NULL);
        ASSERT(m_pAnnot->m_pAnnotDict != NULL);
@@ -669,7 +668,7 @@ CFX_WideString CPDFSDK_Annot::GetContents() const
        return m_pAnnot->m_pAnnotDict->GetUnicodeText("Contents");
 }
 
-void CPDFSDK_Annot::SetAnnotName(const CFX_WideString& sName)
+void CPDFSDK_BAAnnot::SetAnnotName(const CFX_WideString& sName)
 {
        ASSERT(m_pAnnot != NULL);
        ASSERT(m_pAnnot->m_pAnnotDict != NULL);
@@ -680,7 +679,7 @@ void CPDFSDK_Annot::SetAnnotName(const CFX_WideString& sName)
                m_pAnnot->m_pAnnotDict->SetAtString("NM", PDF_EncodeText(sName));
 }
 
-CFX_WideString CPDFSDK_Annot::GetAnnotName() const
+CFX_WideString CPDFSDK_BAAnnot::GetAnnotName() const
 {
        ASSERT(m_pAnnot != NULL);
        ASSERT(m_pAnnot->m_pAnnotDict != NULL);
@@ -688,7 +687,7 @@ CFX_WideString CPDFSDK_Annot::GetAnnotName() const
        return m_pAnnot->m_pAnnotDict->GetUnicodeText("NM");
 }
 
-void CPDFSDK_Annot::SetModifiedDate(const FX_SYSTEMTIME& st)
+void CPDFSDK_BAAnnot::SetModifiedDate(const FX_SYSTEMTIME& st)
 {
        ASSERT(m_pAnnot != NULL);
        ASSERT(m_pAnnot->m_pAnnotDict != NULL);
@@ -702,7 +701,7 @@ void CPDFSDK_Annot::SetModifiedDate(const FX_SYSTEMTIME& st)
                m_pAnnot->m_pAnnotDict->SetAtString("M", str);
 }
 
-FX_SYSTEMTIME CPDFSDK_Annot::GetModifiedDate() const
+FX_SYSTEMTIME CPDFSDK_BAAnnot::GetModifiedDate() const
 {
        ASSERT(m_pAnnot != NULL);
        ASSERT(m_pAnnot->m_pAnnotDict != NULL);
@@ -716,7 +715,7 @@ FX_SYSTEMTIME CPDFSDK_Annot::GetModifiedDate() const
        return systime;
 }
 
-void CPDFSDK_Annot::SetFlags(int nFlags)
+void CPDFSDK_BAAnnot::SetFlags(int nFlags)
 {
        ASSERT(m_pAnnot != NULL);
        ASSERT(m_pAnnot->m_pAnnotDict != NULL);
@@ -724,7 +723,7 @@ void CPDFSDK_Annot::SetFlags(int nFlags)
        m_pAnnot->m_pAnnotDict->SetAtInteger("F", nFlags);
 }
 
-int CPDFSDK_Annot::GetFlags() const
+int CPDFSDK_BAAnnot::GetFlags() const
 {
        ASSERT(m_pAnnot != NULL);
        ASSERT(m_pAnnot->m_pAnnotDict != NULL);
@@ -732,7 +731,7 @@ int CPDFSDK_Annot::GetFlags() const
        return m_pAnnot->m_pAnnotDict->GetInteger("F");
 }
 
-void CPDFSDK_Annot::SetAppState(const CFX_ByteString& str)
+void CPDFSDK_BAAnnot::SetAppState(const CFX_ByteString& str)
 {
        ASSERT(m_pAnnot != NULL);
        ASSERT(m_pAnnot->m_pAnnotDict != NULL);
@@ -743,7 +742,7 @@ void CPDFSDK_Annot::SetAppState(const CFX_ByteString& str)
                m_pAnnot->m_pAnnotDict->SetAtString("AS", str);
 }
 
-CFX_ByteString CPDFSDK_Annot::GetAppState() const
+CFX_ByteString CPDFSDK_BAAnnot::GetAppState() const
 {
        ASSERT(m_pAnnot != NULL);
        ASSERT(m_pAnnot->m_pAnnotDict != NULL);
@@ -751,7 +750,7 @@ CFX_ByteString CPDFSDK_Annot::GetAppState() const
        return m_pAnnot->m_pAnnotDict->GetString("AS");
 }
 
-void CPDFSDK_Annot::SetStructParent(int key)
+void CPDFSDK_BAAnnot::SetStructParent(int key)
 {
        ASSERT(m_pAnnot != NULL);
        ASSERT(m_pAnnot->m_pAnnotDict != NULL);
@@ -759,7 +758,7 @@ void CPDFSDK_Annot::SetStructParent(int key)
        m_pAnnot->m_pAnnotDict->SetAtInteger("StructParent", key);
 }
 
-int    CPDFSDK_Annot::GetStructParent() const
+int    CPDFSDK_BAAnnot::GetStructParent() const
 {
        ASSERT(m_pAnnot != NULL);
        ASSERT(m_pAnnot->m_pAnnotDict != NULL);
@@ -768,7 +767,7 @@ int CPDFSDK_Annot::GetStructParent() const
 }
 
 //border
-void CPDFSDK_Annot::SetBorderWidth(int nWidth)
+void CPDFSDK_BAAnnot::SetBorderWidth(int nWidth)
 {
        ASSERT(m_pAnnot != NULL);
        ASSERT(m_pAnnot->m_pAnnotDict != NULL);
@@ -793,7 +792,7 @@ void CPDFSDK_Annot::SetBorderWidth(int nWidth)
        }
 }
 
-int    CPDFSDK_Annot::GetBorderWidth() const
+int    CPDFSDK_BAAnnot::GetBorderWidth() const
 {
        ASSERT(m_pAnnot != NULL);
        ASSERT(m_pAnnot->m_pAnnotDict != NULL);
@@ -816,7 +815,7 @@ int CPDFSDK_Annot::GetBorderWidth() const
        return 1;
 }
 
-void CPDFSDK_Annot::SetBorderStyle(int nStyle)
+void CPDFSDK_BAAnnot::SetBorderStyle(int nStyle)
 {
        ASSERT(m_pAnnot != NULL);
        ASSERT(m_pAnnot->m_pAnnotDict != NULL);
@@ -848,7 +847,7 @@ void CPDFSDK_Annot::SetBorderStyle(int nStyle)
        }
 }
 
-int    CPDFSDK_Annot::GetBorderStyle() const
+int    CPDFSDK_BAAnnot::GetBorderStyle() const
 {
        ASSERT(m_pAnnot != NULL);
        ASSERT(m_pAnnot->m_pAnnotDict != NULL);
@@ -878,7 +877,7 @@ int CPDFSDK_Annot::GetBorderStyle() const
        return BBS_SOLID;
 }
 
-void CPDFSDK_Annot::SetBorderDash(const CFX_IntArray& array)
+void CPDFSDK_BAAnnot::SetBorderDash(const CFX_IntArray& array)
 {
        ASSERT(m_pAnnot != NULL);
        ASSERT(m_pAnnot->m_pAnnotDict != NULL);
@@ -899,7 +898,7 @@ void CPDFSDK_Annot::SetBorderDash(const CFX_IntArray& array)
        pBSDict->SetAt("D", pArray);
 }
 
-void CPDFSDK_Annot::GetBorderDash(CFX_IntArray& array) const
+void CPDFSDK_BAAnnot::GetBorderDash(CFX_IntArray& array) const
 {
        ASSERT(m_pAnnot != NULL);
        ASSERT(m_pAnnot->m_pAnnotDict != NULL);
@@ -929,7 +928,7 @@ void CPDFSDK_Annot::GetBorderDash(CFX_IntArray& array) const
        }
 }
 
-void CPDFSDK_Annot::SetColor(FX_COLORREF color)
+void CPDFSDK_BAAnnot::SetColor(FX_COLORREF color)
 {
        ASSERT(m_pAnnot != NULL);
        ASSERT(m_pAnnot->m_pAnnotDict != NULL);
@@ -941,7 +940,7 @@ void CPDFSDK_Annot::SetColor(FX_COLORREF color)
        m_pAnnot->m_pAnnotDict->SetAt("C", pArray);
 }
 
-void CPDFSDK_Annot::RemoveColor()
+void CPDFSDK_BAAnnot::RemoveColor()
 {
        ASSERT(m_pAnnot != NULL);
        ASSERT(m_pAnnot->m_pAnnotDict != NULL);
@@ -949,7 +948,7 @@ void CPDFSDK_Annot::RemoveColor()
        m_pAnnot->m_pAnnotDict->RemoveAt("C") ; 
 }
 
-FX_BOOL CPDFSDK_Annot::GetColor(FX_COLORREF& color) const
+FX_BOOL CPDFSDK_BAAnnot::GetColor(FX_COLORREF& color) const
 {
        ASSERT(m_pAnnot != NULL);
        ASSERT(m_pAnnot->m_pAnnotDict != NULL);
@@ -996,7 +995,7 @@ FX_BOOL CPDFSDK_Annot::GetColor(FX_COLORREF& color) const
 }
 
 
-void CPDFSDK_Annot::WriteAppearance(const CFX_ByteString& sAPType, const CPDF_Rect& rcBBox, 
+void CPDFSDK_BAAnnot::WriteAppearance(const CFX_ByteString& sAPType, const CPDF_Rect& rcBBox, 
                                                                const CPDF_Matrix& matrix, const CFX_ByteString& sContents,
                                                                const CFX_ByteString& sAPState)
 {
@@ -1062,7 +1061,7 @@ void CPDFSDK_Annot::WriteAppearance(const CFX_ByteString& sAPType, const CPDF_Re
                pStreamDict->SetAtRect("BBox", rcBBox);         
        }
        
-       pStream->SetData((FX_BYTE*)(FX_LPCSTR)sContents, sContents.GetLength(), FALSE, FALSE);
+       pStream->SetData((FX_BYTE*)sContents.c_str(), sContents.GetLength(), FALSE, FALSE);
 }
 
 #define BA_ANNOT_MINWIDTH                      1
@@ -1078,59 +1077,46 @@ FX_FLOAT CPDFSDK_Annot::GetMinHeight() const
        return BA_ANNOT_MINHEIGHT;
 }
 
-FX_BOOL CPDFSDK_Annot::CreateFormFiller()
+FX_BOOL CPDFSDK_BAAnnot::CreateFormFiller()
 {
        return TRUE;
 }
-FX_BOOL        CPDFSDK_Annot::IsVisible() const
+FX_BOOL        CPDFSDK_BAAnnot::IsVisible() const
 {
        int nFlags = GetFlags();
        return !((nFlags & ANNOTFLAG_INVISIBLE) || (nFlags & ANNOTFLAG_HIDDEN) || (nFlags & ANNOTFLAG_NOVIEW));
 }
 
-CPDF_Action CPDFSDK_Annot::GetAction() const
+CPDF_Action CPDFSDK_BAAnnot::GetAction() const
 {
-       ASSERT(m_pAnnot != NULL);
-       ASSERT(m_pAnnot->m_pAnnotDict != NULL);
-       
-       return m_pAnnot->m_pAnnotDict->GetDict("A");
+       return CPDF_Action(m_pAnnot->m_pAnnotDict->GetDict("A"));
 }
 
-void CPDFSDK_Annot::SetAction(const CPDF_Action& action)
+void CPDFSDK_BAAnnot::SetAction(const CPDF_Action& action)
 {
-       ASSERT(m_pAnnot != NULL);
-       ASSERT(m_pAnnot->m_pAnnotDict != NULL);
-       
-       ASSERT(action != NULL);
-       
-       if ((CPDF_Action&)action != m_pAnnot->m_pAnnotDict->GetDict("A"))
+       ASSERT(action);
+       if ((CPDF_Action&)action != CPDF_Action(m_pAnnot->m_pAnnotDict->GetDict("A")))
        {
                CPDF_Document* pDoc = m_pPageView->GetPDFDocument();
-               ASSERT(pDoc != NULL);
-               
-               if (action.m_pDict && (action.m_pDict->GetObjNum() == 0))
-                       pDoc->AddIndirectObject(action.m_pDict); 
-               m_pAnnot->m_pAnnotDict->SetAtReference("A", pDoc, action.m_pDict->GetObjNum());
+               CPDF_Dictionary* pDict = action.GetDict();
+               if (pDict && pDict->GetObjNum() == 0) {
+                       pDoc->AddIndirectObject(pDict);
+               }
+               m_pAnnot->m_pAnnotDict->SetAtReference("A", pDoc, pDict->GetObjNum());
        }
 }
 
-void CPDFSDK_Annot::RemoveAction()
+void CPDFSDK_BAAnnot::RemoveAction()
 {
-       ASSERT(m_pAnnot != NULL);
-       ASSERT(m_pAnnot->m_pAnnotDict != NULL);
-       
        m_pAnnot->m_pAnnotDict->RemoveAt("A");
 }
 
-CPDF_AAction CPDFSDK_Annot::GetAAction() const
+CPDF_AAction CPDFSDK_BAAnnot::GetAAction() const
 {
-       ASSERT(m_pAnnot != NULL);
-       ASSERT(m_pAnnot->m_pAnnotDict != NULL);
-       
        return m_pAnnot->m_pAnnotDict->GetDict("AA");
 }
 
-void CPDFSDK_Annot::SetAAction(const CPDF_AAction& aa)
+void CPDFSDK_BAAnnot::SetAAction(const CPDF_AAction& aa)
 {
        ASSERT(m_pAnnot != NULL);
        ASSERT(m_pAnnot->m_pAnnotDict != NULL);
@@ -1140,7 +1126,7 @@ void CPDFSDK_Annot::SetAAction(const CPDF_AAction& aa)
                m_pAnnot->m_pAnnotDict->SetAt("AA", (CPDF_AAction&)aa);
 }
 
-void CPDFSDK_Annot::RemoveAAction()
+void CPDFSDK_BAAnnot::RemoveAAction()
 {
        ASSERT(m_pAnnot != NULL);
        ASSERT(m_pAnnot->m_pAnnotDict != NULL);
@@ -1148,23 +1134,25 @@ void CPDFSDK_Annot::RemoveAAction()
        m_pAnnot->m_pAnnotDict->RemoveAt("AA");
 }
 
-CPDF_Action    CPDFSDK_Annot::GetAAction(CPDF_AAction::AActionType eAAT)
+CPDF_Action    CPDFSDK_BAAnnot::GetAAction(CPDF_AAction::AActionType eAAT)
 {
        CPDF_AAction AAction = GetAAction();
-       
+
        if (AAction.ActionExist(eAAT))
-       {
                return AAction.GetAction(eAAT);
-       }
-       else if (eAAT == CPDF_AAction::ButtonUp)
-       {
+
+       if (eAAT == CPDF_AAction::ButtonUp)
                return GetAction();
-       }
-       
-       return NULL;
+
+       return CPDF_Action();
 }
 
-void  CPDFSDK_Annot::Annot_OnDraw(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, CPDF_RenderOptions* pOptions)
+FX_BOOL CPDFSDK_BAAnnot::IsXFAField()
+{
+       return FALSE;
+}
+
+void  CPDFSDK_BAAnnot::Annot_OnDraw(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, CPDF_RenderOptions* pOptions)
 {
        
        m_pAnnot->GetAPForm(m_pPageView->GetPDFPage(), CPDF_Annot::Normal);
@@ -1180,3 +1168,10 @@ CPDF_Page* CPDFSDK_Annot::GetPDFPage()
        return NULL;
 }
 
+CPDFXFA_Page* CPDFSDK_Annot::GetPDFXFAPage()
+{
+       if (m_pPageView)
+               return m_pPageView->GetPDFXFAPage();
+       return NULL;
+}
+