[Libreoffice-commits] core.git: sw/source

Oliver-Rainer Wittmann orw at apache.org
Fri Jul 18 02:12:35 PDT 2014


 sw/source/ui/fldui/fldvar.cxx |   76 +++++++++++++++++++++++-------------------
 1 file changed, 42 insertions(+), 34 deletions(-)

New commits:
commit a6b925a436b2c6c9b33b66085ca421898b25d752
Author: Oliver-Rainer Wittmann <orw at apache.org>
Date:   Fri Jul 18 07:48:50 2014 +0000

    Resolved: #124231# field variable dialog: check access...
    
    to current field as it could be unavailable caused by its change and a followed
    removal from the document by e.g. a conditional hide of a section
    
    (cherry picked from commit 58f0d79a20c3b9683c2d6a4be5dde14fe7688e01)
    (cherry picked from commit 619fb83a3bc6d372632d382eaa1eb94fb9a8e8e9)
    
    Conflicts:
    	sw/source/ui/fldui/fldvar.cxx
    
    Change-Id: I3f37b97ca8245c1996790622dd25437906b080db

diff --git a/sw/source/ui/fldui/fldvar.cxx b/sw/source/ui/fldui/fldvar.cxx
index 4e69ec3..2a1a9c4 100644
--- a/sw/source/ui/fldui/fldvar.cxx
+++ b/sw/source/ui/fldui/fldvar.cxx
@@ -114,7 +114,8 @@ void SwFldVarPage::Reset(const SfxItemSet* )
     }
     else
     {
-        SwField* pCurField = GetCurField();
+        const SwField* pCurField = GetCurField();
+        assert(pCurField && "<SwFldVarPage::Reset(..)> - <SwField> instance missing!");
         nTypeId = pCurField->GetTypeId();
         if (nTypeId == TYP_SETINPFLD)
             nTypeId = TYP_INPUTFLD;
@@ -326,7 +327,7 @@ IMPL_LINK( SwFldVarPage, SubTypeHdl, ListBox *, pBox )
                     }
                 }
             }
-            if (IsFldEdit())
+            if (GetCurField() != NULL && IsFldEdit())
             {
                 // GetFormula leads to problems with date formats because
                 // only the numeric value without formatting is returned.
@@ -419,7 +420,7 @@ IMPL_LINK( SwFldVarPage, SubTypeHdl, ListBox *, pBox )
                             m_pNumFormatLB->SelectEntryPos(0);
                         }
                     }
-                    if (IsFldEdit() && (!pBox || bInit) )
+                    if (GetCurField() && IsFldEdit() && (!pBox || bInit) )
                         m_pValueED->SetText(((SwSetExpField*)GetCurField())->GetPromptText());
                 }
                 else    // USERFLD
@@ -461,7 +462,7 @@ IMPL_LINK( SwFldVarPage, SubTypeHdl, ListBox *, pBox )
                 bName = bValue = bShowChapterFrame = true;
 
                 SwFieldType* pFldTyp;
-                if( IsFldEdit() )
+                if( GetCurField() && IsFldEdit() )
                     pFldTyp = GetCurField()->GetTyp();
                 else
                 {
@@ -473,7 +474,7 @@ IMPL_LINK( SwFldVarPage, SubTypeHdl, ListBox *, pBox )
                         pFldTyp = 0;
                 }
 
-                if( IsFldEdit() )
+                if( GetCurField() && IsFldEdit() )
                     m_pValueED->SetText( ((SwSetExpField*)GetCurField())->
                                         GetFormula() );
 
@@ -505,7 +506,7 @@ IMPL_LINK( SwFldVarPage, SubTypeHdl, ListBox *, pBox )
                 if (nSelPos != 0 && nSelPos != LISTBOX_ENTRY_NOTFOUND)
                 {
                     bValue = true;      // SubType OFF - knows no Offset
-                    if (IsFldEdit())
+                    if (GetCurField() && IsFldEdit())
                         m_pValueED->SetText(OUString::number(((SwRefPageSetField*)GetCurField())->GetOffset()));
                 }
             }
@@ -569,28 +570,27 @@ IMPL_LINK( SwFldVarPage, SubTypeHdl, ListBox *, pBox )
 // renew types in SelectionBox
 void SwFldVarPage::UpdateSubType()
 {
-    OUString sOldSel;
-    const sal_uInt16 nTypeId = (sal_uInt16)(sal_uLong)m_pTypeLB->GetEntryData(GetTypeSel());
     SetSelectionSel(m_pSelectionLB->GetSelectEntryPos());
-    if(GetSelectionSel() != LISTBOX_ENTRY_NOTFOUND)
+
+    OUString sOldSel;
+    if (GetSelectionSel() != LISTBOX_ENTRY_NOTFOUND)
         sOldSel = m_pSelectionLB->GetEntry(GetSelectionSel());
 
     // fill Selection-Listbox
     m_pSelectionLB->SetUpdateMode(false);
     m_pSelectionLB->Clear();
 
+    const sal_uInt16 nTypeId = (sal_uInt16)(sal_uLong)m_pTypeLB->GetEntryData(GetTypeSel());
     std::vector<OUString> aList;
     GetFldMgr().GetSubTypes(nTypeId, aList);
-    size_t nCount = aList.size();
-    size_t nPos;
-
-    for(size_t i = 0; i < nCount; ++i)
+    const size_t nCount = aList.size();
+    for (size_t i = 0; i < nCount; ++i)
     {
         if (nTypeId != TYP_INPUTFLD || i)
         {
             if (!IsFldEdit())
             {
-                nPos = m_pSelectionLB->InsertEntry(aList[i]);
+                const size_t nPos = m_pSelectionLB->InsertEntry(aList[i]);
                 m_pSelectionLB->SetEntryData(nPos, reinterpret_cast<void*>(i));
             }
             else
@@ -600,7 +600,7 @@ void SwFldVarPage::UpdateSubType()
                 switch (nTypeId)
                 {
                     case TYP_INPUTFLD:
-                        if (aList[i] == GetCurField()->GetPar1())
+                        if (GetCurField() && aList[i] == GetCurField()->GetPar1())
                             bInsert = true;
                         break;
 
@@ -609,13 +609,13 @@ void SwFldVarPage::UpdateSubType()
                         break;
 
                     case TYP_GETFLD:
-                        if (aList[i].equals(((const SwFormulaField*)GetCurField())->GetFormula()))
+                        if (GetCurField() && aList[i] == ((const SwFormulaField*)GetCurField())->GetFormula())
                             bInsert = true;
                         break;
 
                     case TYP_SETFLD:
                     case TYP_USERFLD:
-                        if (aList[i] == GetCurField()->GetTyp()->GetName())
+                        if (GetCurField() && aList[i] == GetCurField()->GetTyp()->GetName())
                         {
                             bInsert = true;
                             if (GetCurField()->GetSubType() & nsSwExtendedSubType::SUB_INVISIBLE)
@@ -624,23 +624,30 @@ void SwFldVarPage::UpdateSubType()
                         break;
 
                     case TYP_SETREFPAGEFLD:
-                        if ((((SwRefPageSetField*)GetCurField())->IsOn() && i) ||
-                            (!((SwRefPageSetField*)GetCurField())->IsOn() && !i))
+                    {
+                        if (GetCurField() != NULL
+                            && ((((SwRefPageSetField*)GetCurField())->IsOn()
+                                 && i) || (!((SwRefPageSetField*)GetCurField())
+                                                ->IsOn() && !i)))
+                        {
                             sOldSel = aList[i];
+                        }
 
                         // allow all entries for selection:
-                        nPos = m_pSelectionLB->InsertEntry(aList[i]);
+                        const size_t nPos = m_pSelectionLB->InsertEntry(aList[i]);
                         m_pSelectionLB->SetEntryData(nPos, reinterpret_cast<void*>(i));
-                        break;
 
+                        break;
+                    }
                     default:
-                        if (aList[i] == GetCurField()->GetPar1())
+                        if (GetCurField() && aList[i] == GetCurField()->GetPar1())
                             bInsert = true;
                         break;
                 }
+
                 if (bInsert)
                 {
-                    nPos = m_pSelectionLB->InsertEntry(aList[i]);
+                    const size_t nPos = m_pSelectionLB->InsertEntry(aList[i]);
                     m_pSelectionLB->SetEntryData(nPos, reinterpret_cast<void*>(i));
                     if (nTypeId != TYP_FORMELFLD)
                         break;
@@ -649,7 +656,7 @@ void SwFldVarPage::UpdateSubType()
         }
     }
 
-    bool bEnable = m_pSelectionLB->GetEntryCount() != 0;
+    const bool bEnable = m_pSelectionLB->GetEntryCount() != 0;
     ListBox *pLB = 0;
 
     if (bEnable)
@@ -670,13 +677,13 @@ void SwFldVarPage::UpdateSubType()
 
 sal_Int32 SwFldVarPage::FillFormatLB(sal_uInt16 nTypeId)
 {
-    OUString sOldSel, sOldNumSel;
-    sal_uLong nOldNumFormat = 0;
-
-    sal_Int32 nFormatSel = m_pFormatLB->GetSelectEntryPos();
+    OUString sOldSel;
+    const sal_Int32 nFormatSel = m_pFormatLB->GetSelectEntryPos();
     if (nFormatSel != LISTBOX_ENTRY_NOTFOUND)
         sOldSel = m_pFormatLB->GetEntry(nFormatSel);
 
+    OUString sOldNumSel;
+    sal_uLong nOldNumFormat = 0;
     sal_Int32 nNumFormatSel = m_pNumFormatLB->GetSelectEntryPos();
     if (nNumFormatSel != LISTBOX_ENTRY_NOTFOUND)
     {
@@ -691,7 +698,7 @@ sal_Int32 SwFldVarPage::FillFormatLB(sal_uInt16 nTypeId)
 
     if( TYP_GETREFPAGEFLD != nTypeId )
     {
-        if (IsFldEdit())
+        if (GetCurField() != NULL && IsFldEdit())
         {
             bSpecialFmt = GetCurField()->GetFormat() == SAL_MAX_UINT32;
 
@@ -700,9 +707,10 @@ sal_Int32 SwFldVarPage::FillFormatLB(sal_uInt16 nTypeId)
                 m_pNumFormatLB->SetDefFormat(GetCurField()->GetFormat());
                 sOldNumSel = OUString();
             }
-            else
-                if (nTypeId == TYP_GETFLD || nTypeId == TYP_FORMELFLD)
-                    m_pNumFormatLB->SetFormatType(NUMBERFORMAT_NUMBER);
+            else if (nTypeId == TYP_GETFLD || nTypeId == TYP_FORMELFLD)
+            {
+                m_pNumFormatLB->SetFormatType(NUMBERFORMAT_NUMBER);
+            }
         }
         else
         {
@@ -771,10 +779,10 @@ sal_Int32 SwFldVarPage::FillFormatLB(sal_uInt16 nTypeId)
 
     for (sal_uInt16 i = 0; i < nSize; i++)
     {
-        sal_Int32 nPos = m_pFormatLB->InsertEntry(GetFldMgr().GetFormatStr(nTypeId, i));
+        const sal_Int32 nPos = m_pFormatLB->InsertEntry(GetFldMgr().GetFormatStr(nTypeId, i));
         const sal_uInt16 nFldId = GetFldMgr().GetFormatId( nTypeId, i );
         m_pFormatLB->SetEntryData( nPos, reinterpret_cast<void*>(nFldId) );
-        if (IsFldEdit() && nFldId == GetCurField()->GetFormat())
+        if (IsFldEdit() && GetCurField() && nFldId == GetCurField()->GetFormat())
             m_pFormatLB->SelectEntryPos( nPos );
     }
 


More information about the Libreoffice-commits mailing list