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: