diff options
Diffstat (limited to 'sd/source/ui/view/outlview.cxx')
-rw-r--r-- | sd/source/ui/view/outlview.cxx | 127 |
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++; |