summaryrefslogtreecommitdiff
path: root/sd/source/ui/view/outlview.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sd/source/ui/view/outlview.cxx')
-rw-r--r--sd/source/ui/view/outlview.cxx127
1 files changed, 60 insertions, 67 deletions
diff --git a/sd/source/ui/view/outlview.cxx b/sd/source/ui/view/outlview.cxx
index 0bc619036739..683476117eb5 100644
--- a/sd/source/ui/view/outlview.cxx
+++ b/sd/source/ui/view/outlview.cxx
@@ -113,8 +113,6 @@ OutlineView::OutlineView( DrawDocShell* pDocSh, ::Window* pWindow, OutlineViewSh
: ::sd::View(pDocSh->GetDoc(), pWindow, pOutlineViewSh)
, mpOutlineViewShell(pOutlineViewSh)
, mpOutliner( mpDoc->GetOutliner(sal_True) )
-, mpOldParaOrder(NULL)
-, mpSelectedParas(NULL)
, mnPagesToProcess(0)
, mnPagesProcessed(0)
, mbFirstPaint(sal_True)
@@ -228,9 +226,6 @@ OutlineView::~OutlineView()
mpOutliner->ForceAutoColor( aOptions.GetIsAutomaticFontColor() );
mpOutliner->Clear();
}
-
- DBG_ASSERT(!mpSelectedParas, "Absatzliste nicht geloescht");
- DBG_ASSERT(!mpOldParaOrder, "Absatzliste nicht geloescht");
}
@@ -669,14 +664,18 @@ IMPL_LINK( OutlineView, DepthChangedHdl, ::Outliner *, pOutliner )
{
Window* pActWin = mpOutlineViewShell->GetActiveWindow();
OutlinerView* pOlView = GetViewByWindow(pActWin);
- List* pList = pOlView->CreateSelectionList();
- Paragraph* pParagraph = (Paragraph*)pList->First();
- while (pParagraph)
+ std::vector<Paragraph*> aSelList;
+ pOlView->CreateSelectionList(aSelList);
+
+ Paragraph *pParagraph = NULL;
+ for (std::vector<Paragraph*>::const_iterator iter = aSelList.begin(); iter != aSelList.end(); ++iter)
{
- if( !pOutliner->HasParaFlag( pParagraph, PARAFLAG_ISPAGE ) && (pOutliner->GetDepth( (sal_uInt16) pOutliner->GetAbsPos( pParagraph ) ) <= 0) )
+ pParagraph = *iter;
+
+ if( !pOutliner->HasParaFlag( pParagraph, PARAFLAG_ISPAGE ) &&
+ (pOutliner->GetDepth( (sal_uInt16) pOutliner->GetAbsPos( pParagraph ) ) <= 0) )
mnPagesToProcess++;
- pParagraph = (Paragraph*)pList->Next();
}
mnPagesToProcess++; // the paragraph being in level 0 already
@@ -695,7 +694,6 @@ IMPL_LINK( OutlineView, DepthChangedHdl, ::Outliner *, pOutliner )
{
mpDocSh->SetWaitCursor( sal_True );
}
- delete pList;
}
ParagraphInsertedHdl(pOutliner);
@@ -918,46 +916,37 @@ IMPL_LINK( OutlineView, EndDropHdl, void *, EMPTYARG )
IMPL_LINK( OutlineView, BeginMovingHdl, ::Outliner *, pOutliner )
{
- DBG_ASSERT(!mpSelectedParas, "Absatzliste nicht geloescht");
- DBG_ASSERT(!mpOldParaOrder, "Absatzliste nicht geloescht");
-
OutlineViewPageChangesGuard aGuard(this);
- mpOldParaOrder = new List;
-
// list of selected title paragraphs
- mpSelectedParas = mpOutlinerView[0]->CreateSelectionList();
- Paragraph* pPara = static_cast<Paragraph*>(mpSelectedParas->First());
- while (pPara)
+ mpOutlinerView[0]->CreateSelectionList(maSelectedParas);
+
+ for (std::vector<Paragraph*>::iterator it = maSelectedParas.begin(); it != maSelectedParas.end();)
{
- if( !pOutliner->HasParaFlag(pPara, PARAFLAG_ISPAGE) )
- {
- mpSelectedParas->Remove();
- pPara = static_cast<Paragraph*>(mpSelectedParas->GetCurObject());
- }
+ if (!pOutliner->HasParaFlag(*it, PARAFLAG_ISPAGE))
+ it = maSelectedParas.erase(it);
else
- {
- pPara = static_cast<Paragraph*>(mpSelectedParas->Next());
- }
+ ++it;
}
// select the pages belonging to the paragraphs on level 0 to select
sal_uInt16 nPos = 0;
sal_uLong nParaPos = 0;
- pPara = pOutliner->GetParagraph( 0 );
+ Paragraph* pPara = pOutliner->GetParagraph( 0 );
+ std::vector<Paragraph*>::const_iterator fiter;
while(pPara)
{
if( pOutliner->HasParaFlag(pPara, PARAFLAG_ISPAGE) ) // one page?
{
- mpOldParaOrder->Insert(pPara, LIST_APPEND);
+ maOldParaOrder.push_back(pPara);
SdPage* pPage = mpDoc->GetSdPage(nPos, PK_STANDARD);
- pPage->SetSelected(sal_False);
- if (mpSelectedParas->Seek(pPara)) // selected?
- {
- pPage->SetSelected(sal_True);
- }
- nPos++;
+
+ fiter = std::find(maSelectedParas.begin(),maSelectedParas.end(),pPara);
+
+ pPage->SetSelected(fiter != maSelectedParas.end());
+
+ ++nPos;
}
pPara = pOutliner->GetParagraph( ++nParaPos );
}
@@ -975,12 +964,10 @@ IMPL_LINK( OutlineView, EndMovingHdl, ::Outliner *, pOutliner )
{
OutlineViewPageChangesGuard aGuard(this);
- DBG_ASSERT(mpSelectedParas, "keine Absatzliste");
- DBG_ASSERT(mpOldParaOrder, "keine Absatzliste");
DBG_ASSERT( isRecordingUndo(), "sd::OutlineView::EndMovingHdl(), model change without undo?!" );
// look for insertion position via the first paragraph
- Paragraph* pSearchIt = (Paragraph*)mpSelectedParas->First();
+ Paragraph* pSearchIt = maSelectedParas.empty() ? NULL : *(maSelectedParas.begin());
// look for the first of the selected paragraphs in the new ordering
sal_uInt16 nPosNewOrder = 0;
@@ -1005,14 +992,22 @@ IMPL_LINK( OutlineView, EndMovingHdl, ::Outliner *, pOutliner )
else
{
// look for the predecessor in the old ordering
- nPos = (sal_uInt16)mpOldParaOrder->GetPos(pPrev);
+ std::vector<Paragraph*>::const_iterator it = std::find(maOldParaOrder.begin(),
+ maOldParaOrder.end(),
+ pPrev);
+
+ if (it != maOldParaOrder.end())
+ nPos = static_cast<sal_uInt16>(it-maOldParaOrder.begin());
+ else
+ nPos = 0xffff;
+
DBG_ASSERT(nPos != 0xffff, "Absatz nicht gefunden");
}
mpDoc->MovePages(nPos);
// deselect the pages again
- sal_uInt16 nPageCount = (sal_uInt16)mpSelectedParas->Count();
+ sal_uInt16 nPageCount = (sal_uInt16)maSelectedParas.size();
while (nPageCount)
{
SdPage* pPage = mpDoc->GetSdPage(nPosNewOrder, PK_STANDARD);
@@ -1023,10 +1018,8 @@ IMPL_LINK( OutlineView, EndMovingHdl, ::Outliner *, pOutliner )
pOutliner->UpdateFields();
- delete mpSelectedParas;
- mpSelectedParas = NULL;
- delete mpOldParaOrder;
- mpOldParaOrder = NULL;
+ maSelectedParas.clear();
+ maOldParaOrder.clear();
InvalidateSlideNumberArea();
@@ -1350,17 +1343,22 @@ SdPage* OutlineView::GetActualPage()
{
::sd::Window* pWin = mpOutlineViewShell->GetActiveWindow();
OutlinerView* pActiveView = GetViewByWindow(pWin);
- std::auto_ptr<List> pSelList( static_cast< List* >(pActiveView->CreateSelectionList()) );
- SdPage* pCurrent = GetPageForParagraph(static_cast<Paragraph*>(pSelList->First()) );
+ std::vector<Paragraph*> aSelList;
+ pActiveView->CreateSelectionList(aSelList);
+
+ Paragraph *pPar = aSelList.empty() ? NULL : *(aSelList.begin());
+ SdPage* pCurrent = GetPageForParagraph(pPar);
+
DBG_ASSERT( pCurrent ||
(mpDocSh->GetUndoManager() && static_cast< sd::UndoManager *>(mpDocSh->GetUndoManager())->IsDoing()) ||
maDragAndDropModelGuard.get(),
"sd::OutlineView::GetActualPage(), no current page?" );
+
if( pCurrent )
return pCurrent;
- else
- return mpDoc->GetSdPage( 0, PK_STANDARD );
+
+ return mpDoc->GetSdPage( 0, PK_STANDARD );
}
SdPage* OutlineView::GetPageForParagraph( Paragraph* pPara )
@@ -1378,8 +1376,8 @@ SdPage* OutlineView::GetPageForParagraph( Paragraph* pPara )
if( nPageToSelect < (sal_uInt32)mpDoc->GetSdPageCount( PK_STANDARD ) )
return static_cast< SdPage* >( mpDoc->GetSdPage( (sal_uInt16)nPageToSelect, PK_STANDARD) );
- else
- return 0;
+
+ return 0;
}
Paragraph* OutlineView::GetParagraphForPage( ::Outliner* pOutl, SdPage* pPage )
@@ -1447,26 +1445,22 @@ SfxStyleSheet* OutlineView::GetStyleSheet() const
void OutlineView::SetSelectedPages()
{
// list of selected title paragraphs
- List* pSelParas = mpOutlinerView[0]->CreateSelectionList();
- Paragraph* pPara = (Paragraph*) pSelParas->First();
+ std::vector<Paragraph*> aSelParas;
+ mpOutlinerView[0]->CreateSelectionList(aSelParas);
- while(pPara)
+ for (std::vector<Paragraph*>::iterator it = aSelParas.begin(); it != aSelParas.end();)
{
- if( !mpOutliner->HasParaFlag(pPara, PARAFLAG_ISPAGE) )
- {
- pSelParas->Remove();
- pPara = (Paragraph*) pSelParas->GetCurObject();
- }
+ if (!mpOutliner->HasParaFlag(*it, PARAFLAG_ISPAGE))
+ it = aSelParas.erase(it);
else
- {
- pPara = (Paragraph*) pSelParas->Next();
- }
+ ++it;
}
// select the pages belonging to the paragraphs on level 0 to select
sal_uInt16 nPos = 0;
sal_uLong nParaPos = 0;
- pPara = mpOutliner->GetParagraph( 0 );
+ Paragraph *pPara = mpOutliner->GetParagraph( 0 );
+ std::vector<Paragraph*>::const_iterator fiter;
while(pPara)
{
@@ -1475,12 +1469,11 @@ void OutlineView::SetSelectedPages()
SdPage* pPage = mpDoc->GetSdPage(nPos, PK_STANDARD);
DBG_ASSERT(pPage!=NULL,
"Trying to select non-existing page OutlineView::SetSelectedPages()");
- if (pPage != NULL)
- {
- pPage->SetSelected(sal_False);
- if (pSelParas->Seek(pPara)) // selected?
- pPage->SetSelected(sal_True);
+ if (pPage)
+ {
+ fiter = std::find(aSelParas.begin(),aSelParas.end(),pPara);
+ pPage->SetSelected(fiter != aSelParas.end());
}
nPos++;