You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openoffice.apache.org by or...@apache.org on 2013/06/21 10:59:34 UTC

svn commit: r1495337 - /openoffice/trunk/main/sw/source/ui/misc/redlndlg.cxx

Author: orw
Date: Fri Jun 21 08:59:33 2013
New Revision: 1495337

URL: http://svn.apache.org/r1495337
Log:
121435: Change Tracking - Accept and Reject dialog - on accessing redline by index assure that index has valid value

Modified:
    openoffice/trunk/main/sw/source/ui/misc/redlndlg.cxx

Modified: openoffice/trunk/main/sw/source/ui/misc/redlndlg.cxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/sw/source/ui/misc/redlndlg.cxx?rev=1495337&r1=1495336&r2=1495337&view=diff
==============================================================================
--- openoffice/trunk/main/sw/source/ui/misc/redlndlg.cxx (original)
+++ openoffice/trunk/main/sw/source/ui/misc/redlndlg.cxx Fri Jun 21 08:59:33 2013
@@ -350,7 +350,7 @@ void SwRedlineAcceptDlg::InitAuthors()
 	pFilterPage->ClearAuthors();
 
 	String sParent;
-	sal_uInt16 nCount = pSh->GetRedlineCount();
+	const sal_uInt16 nRedlineCount = pSh->GetRedlineCount();
 
 	bOnlyFormatedRedlines = sal_True;
 	bHasReadonlySel = sal_False;
@@ -358,7 +358,7 @@ void SwRedlineAcceptDlg::InitAuthors()
 	sal_uInt16 i;
 
 	// Autoren ermitteln
-	for ( i = 0; i < nCount; i++)
+	for ( i = 0; i < nRedlineCount; i++)
 	{
 		const SwRedline& rRedln = pSh->GetRedline(i);
 
@@ -390,15 +390,19 @@ void SwRedlineAcceptDlg::InitAuthors()
     sal_Bool bEnable = pTable->GetEntryCount() != 0 && !pSh->getIDocumentRedlineAccess()->GetRedlinePassword().getLength();
 	sal_Bool bSel = pTable->FirstSelected() != 0;
 
-	SvLBoxEntry* pSelEntry = pTable->FirstSelected();
-	while (pSelEntry)
-	{
-		sal_uInt16 nPos = GetRedlinePos(*pSelEntry);
-		const SwRedline& rRedln = pSh->GetRedline( nPos );
-
-		bIsNotFormated |= nsRedlineType_t::REDLINE_FORMAT != rRedln.GetType();
-		pSelEntry = pTable->NextSelected(pSelEntry);
-	}
+    {
+        SvLBoxEntry* pSelEntry = pTable->FirstSelected();
+        while (pSelEntry)
+        {
+            const sal_uInt16 nPos = GetRedlinePos(*pSelEntry);
+            if ( nPos < nRedlineCount )
+            {
+                const SwRedline& rRedln = pSh->GetRedline( nPos );
+                bIsNotFormated |= nsRedlineType_t::REDLINE_FORMAT != rRedln.GetType();
+            }
+            pSelEntry = pTable->NextSelected(pSelEntry);
+        }
+    }
 
 	pTPView->EnableAccept( bEnable && bSel );
 	pTPView->EnableReject( bEnable && bIsNotFormated && bSel );
@@ -823,7 +827,7 @@ void SwRedlineAcceptDlg::InsertParents(s
 	sal_uInt16 nAutoFmt	= HasRedlineAutoFmt() ? nsRedlineType_t::REDLINE_FORM_AUTOFMT : 0;
 
 	String sParent;
-	sal_uInt16 nCount = pSh->GetRedlineCount();
+	const sal_uInt16 nCount = pSh->GetRedlineCount();
 	nEnd = Min((sal_uInt16)nEnd, (sal_uInt16)(nCount - 1));	// Handelt auch nEnd=USHRT_MAX (bis zum Ende) ab
 
 	if (nEnd == USHRT_MAX)
@@ -949,7 +953,7 @@ void SwRedlineAcceptDlg::CallAcceptRejec
          aIter != aEnd;
          aIter++ )
     {
-        sal_uInt16 nPosition = GetRedlinePos( **aIter );
+        const sal_uInt16 nPosition = GetRedlinePos( **aIter );
         if( nPosition != USHRT_MAX )
             (pSh->*FnAccRej)( nPosition );
     }
@@ -1102,7 +1106,6 @@ IMPL_LINK( SwRedlineAcceptDlg, GotoHdl, 
 
 	sal_Bool bIsNotFormated = sal_False;
 	sal_Bool bSel = sal_False;
-//  sal_Bool bReadonlySel = sal_False;
 
     //#98883# don't select redlines while the dialog is not focussed
     //#107938# But not only ask pTable if it has the focus. To move
@@ -1135,32 +1138,28 @@ IMPL_LINK( SwRedlineAcceptDlg, GotoHdl, 
 			else
 				bSel = sal_True;
 
-			// #98864# find the selected redline (ignore, if the redline is already gone)
-			sal_uInt16 nPos = GetRedlinePos(*pActEntry);
-			if( nPos != USHRT_MAX )
-			{
-
-				const SwRedline& rRedln = pSh->GetRedline( nPos );
-				bIsNotFormated |= nsRedlineType_t::REDLINE_FORMAT != rRedln.GetType();
-
-//JP 27.9.2001: make no sense if we handle readonly sections
-//			if( !bReadonlySel && rRedln.HasReadonlySel() )
-//				bReadonlySel = sal_True;
-
-				if (pSh->GotoRedline(nPos, sal_True))
-				{
-					pSh->SetInSelect();
-					pSh->EnterAddMode();
-				}
-			}
+            // #98864# find the selected redline (ignore, if the redline is already gone)
+            const sal_uInt16 nPos = GetRedlinePos(*pActEntry);
+            if ( nPos < pSh->GetRedlineCount() )
+            {
+
+                const SwRedline& rRedln = pSh->GetRedline( nPos );
+                bIsNotFormated |= nsRedlineType_t::REDLINE_FORMAT != rRedln.GetType();
+
+                if (pSh->GotoRedline(nPos, sal_True))
+                {
+                    pSh->SetInSelect();
+                    pSh->EnterAddMode();
+                }
+            }
 
             pSelEntry = pActEntry = pTable->NextSelected(pSelEntry);
-		}
+        }
 
-		pSh->LeaveAddMode();
-		pSh->EndAction();
-		pSh->SetCareWin(NULL);
-	}
+        pSh->LeaveAddMode();
+        pSh->EndAction();
+        pSh->SetCareWin(NULL);
+    }
     sal_Bool bEnable = !pSh->getIDocumentRedlineAccess()->GetRedlinePassword().getLength();
     pTPView->EnableAccept( bEnable && bSel /*&& !bReadonlySel*/ );
     pTPView->EnableReject( bEnable && bSel && bIsNotFormated /*&& !bReadonlySel*/ );
@@ -1192,7 +1191,7 @@ IMPL_LINK( SwRedlineAcceptDlg, CommandHd
 				if (pTable->GetParent(pEntry))
 					pTopEntry = pTable->GetParent(pEntry);
 
-				sal_uInt16 nPos = GetRedlinePos(*pTopEntry);
+				const sal_uInt16 nPos = GetRedlinePos(*pTopEntry);
 
 				// Bei geschuetzten Bereichen kommentieren disablen
 				if ((pRed = pSh->GotoRedline(nPos, sal_True)) != 0)
@@ -1226,87 +1225,91 @@ IMPL_LINK( SwRedlineAcceptDlg, CommandHd
 
 			sal_uInt16 nRet = aPopup.Execute(pTable, aCEvt.GetMousePosPixel());
 
-			switch( nRet )
-			{
-				case MN_EDIT_COMMENT:
-				{
-					String sComment;
-					if (pEntry)
-					{
-						if (pTable->GetParent(pEntry))
-							pEntry = pTable->GetParent(pEntry);
-
-						sal_uInt16 nPos = GetRedlinePos(*pEntry);
-						const SwRedline &rRedline = pSh->GetRedline(nPos);
-
+            switch( nRet )
+            {
+            case MN_EDIT_COMMENT:
+                {
+                    String sComment;
+                    if (pEntry)
+                    {
+                        if (pTable->GetParent(pEntry))
+                            pEntry = pTable->GetParent(pEntry);
+
+                        const sal_uInt16 nPos = GetRedlinePos(*pEntry);
+                        if ( nPos >= pSh->GetRedlineCount() )
+                        {
+                            break;
+                        }
+                        const SwRedline &rRedline = pSh->GetRedline(nPos);
+
+
+                        /* enable again once we have redline comments in the margin
+                        sComment = rRedline.GetComment();
+                        if ( sComment == String(::rtl::OUString::createFromAscii("")) )
+                        GetActiveView()->GetDocShell()->Broadcast(SwRedlineHint(&rRedline,SWREDLINE_INSERTED));
+                        const_cast<SwRedline&>(rRedline).Broadcast(SwRedlineHint(&rRedline,SWREDLINE_FOCUS));
+                        */
 
-						/* enable again once we have redline comments in the margin
-						sComment = rRedline.GetComment();
-						if ( sComment == String(::rtl::OUString::createFromAscii("")) )
-							GetActiveView()->GetDocShell()->Broadcast(SwRedlineHint(&rRedline,SWREDLINE_INSERTED));
-						const_cast<SwRedline&>(rRedline).Broadcast(SwRedlineHint(&rRedline,SWREDLINE_FOCUS));
-						*/
-
-						sComment = rRedline.GetComment();
-						SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
+                        sComment = rRedline.GetComment();
+                        SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
                         DBG_ASSERT(pFact, "Dialogdiet fail!");
-						::DialogGetRanges fnGetRange = pFact->GetDialogGetRangesFunc( RID_SVXDLG_POSTIT );
+                        ::DialogGetRanges fnGetRange = pFact->GetDialogGetRangesFunc( RID_SVXDLG_POSTIT );
                         DBG_ASSERT(fnGetRange, "Dialogdiet fail! GetRanges()");
-						SfxItemSet aSet( pSh->GetAttrPool(), fnGetRange() );
+                        SfxItemSet aSet( pSh->GetAttrPool(), fnGetRange() );
 
-						aSet.Put(SvxPostItTextItem(sComment.ConvertLineEnd(), SID_ATTR_POSTIT_TEXT));
-						aSet.Put(SvxPostItAuthorItem(rRedline.GetAuthorString(), SID_ATTR_POSTIT_AUTHOR));
+                        aSet.Put(SvxPostItTextItem(sComment.ConvertLineEnd(), SID_ATTR_POSTIT_TEXT));
+                        aSet.Put(SvxPostItAuthorItem(rRedline.GetAuthorString(), SID_ATTR_POSTIT_AUTHOR));
 
-						aSet.Put(SvxPostItDateItem( GetAppLangDateTimeString(
-									rRedline.GetRedlineData().GetTimeStamp() ),
-									SID_ATTR_POSTIT_DATE ));
+                        aSet.Put(SvxPostItDateItem( GetAppLangDateTimeString(
+                            rRedline.GetRedlineData().GetTimeStamp() ),
+                            SID_ATTR_POSTIT_DATE ));
 
                         AbstractSvxPostItDialog* pDlg = pFact->CreateSvxPostItDialog( pParentDlg, aSet, sal_False );
                         DBG_ASSERT(pDlg, "Dialogdiet fail!");
 
-						pDlg->HideAuthor();
+                        pDlg->HideAuthor();
 
-						sal_uInt16 nResId = 0;
-						switch( rRedline.GetType() )
-						{
-						case nsRedlineType_t::REDLINE_INSERT:
-							nResId = STR_REDLINE_INSERTED;
-							break;
-						case nsRedlineType_t::REDLINE_DELETE:
-							nResId = STR_REDLINE_DELETED;
-							break;
-						case nsRedlineType_t::REDLINE_FORMAT:
-							nResId = STR_REDLINE_FORMATED;
-							break;
-						case nsRedlineType_t::REDLINE_TABLE:
-							nResId = STR_REDLINE_TABLECHG;
-							break;
+                        sal_uInt16 nResId = 0;
+                        switch( rRedline.GetType() )
+                        {
+                        case nsRedlineType_t::REDLINE_INSERT:
+                            nResId = STR_REDLINE_INSERTED;
+                            break;
+                        case nsRedlineType_t::REDLINE_DELETE:
+                            nResId = STR_REDLINE_DELETED;
+                            break;
+                        case nsRedlineType_t::REDLINE_FORMAT:
+                            nResId = STR_REDLINE_FORMATED;
+                            break;
+                        case nsRedlineType_t::REDLINE_TABLE:
+                            nResId = STR_REDLINE_TABLECHG;
+                            break;
                         default:;//prevent warning
-						}
-						String sTitle(SW_RES(STR_REDLINE_COMMENT));
-						if( nResId )
-							sTitle += SW_RESSTR( nResId );
-						pDlg->SetText(sTitle);
-
-						pSh->SetCareWin(pDlg->GetWindow());
-
-						if ( pDlg->Execute() == RET_OK )
-						{
-							const SfxItemSet* pOutSet = pDlg->GetOutputItemSet();
-							String sMsg(((const SvxPostItTextItem&)pOutSet->Get(SID_ATTR_POSTIT_TEXT)).GetValue());
-
-							// Kommentar einfuegen bzw aendern
-							pSh->SetRedlineComment(sMsg);
-							sMsg.SearchAndReplaceAll((sal_Unicode)_LF,(sal_Unicode)' ');
-							pTable->SetEntryText(sMsg, pEntry, 3);
-						}
-
-						delete pDlg;
-						pSh->SetCareWin(NULL);
-					}
+                        }
+                        String sTitle(SW_RES(STR_REDLINE_COMMENT));
+                        if( nResId )
+                            sTitle += SW_RESSTR( nResId );
+                        pDlg->SetText(sTitle);
+
+                        pSh->SetCareWin(pDlg->GetWindow());
+
+                        if ( pDlg->Execute() == RET_OK )
+                        {
+                            const SfxItemSet* pOutSet = pDlg->GetOutputItemSet();
+                            String sMsg(((const SvxPostItTextItem&)pOutSet->Get(SID_ATTR_POSTIT_TEXT)).GetValue());
+
+                            // Kommentar einfuegen bzw aendern
+                            pSh->SetRedlineComment(sMsg);
+                            sMsg.SearchAndReplaceAll((sal_Unicode)_LF,(sal_Unicode)' ');
+                            pTable->SetEntryText(sMsg, pEntry, 3);
+                        }
+
+                        delete pDlg;
+                        pSh->SetCareWin(NULL);
+                    }
 
-				}
-				break;
+                }
+                break;
 
 			case MN_SORT_ACTION:
 			case MN_SORT_AUTHOR: