diff options
Diffstat (limited to 'sd')
-rw-r--r-- | sd/source/ui/dlg/sdtreelb.cxx | 2 | ||||
-rw-r--r-- | sd/source/ui/docshell/docshel4.cxx | 106 | ||||
-rw-r--r-- | sd/source/ui/inc/DrawDocShell.hxx | 5 |
3 files changed, 19 insertions, 94 deletions
diff --git a/sd/source/ui/dlg/sdtreelb.cxx b/sd/source/ui/dlg/sdtreelb.cxx index 4fd673a35d28..e7cd06b35f16 100644 --- a/sd/source/ui/dlg/sdtreelb.cxx +++ b/sd/source/ui/dlg/sdtreelb.cxx @@ -1109,7 +1109,7 @@ void SdPageObjsTLB::KeyInput( const KeyEvent& rKEvt ) sd::DrawDocShell* pSdDrawDocShell = SdNavigatorWin::GetDrawDocShell(mpDoc); if (pSdDrawDocShell) { - pSdDrawDocShell->GotoTreeBookmark(aStr); + pSdDrawDocShell->GetObjectIsmarked(aStr, true); bMarked = pSdDrawDocShell->GetObjectIsmarked(aStr); } pNewEntry->SetMarked(bMarked); diff --git a/sd/source/ui/docshell/docshel4.cxx b/sd/source/ui/docshell/docshel4.cxx index 0ab60d24b0dd..6b9ce0b05568 100644 --- a/sd/source/ui/docshell/docshel4.cxx +++ b/sd/source/ui/docshell/docshel4.cxx @@ -618,7 +618,7 @@ bool DrawDocShell::ConvertTo( SfxMedium& rMedium ) } } - return bRet; + return bRet; } /** @@ -845,15 +845,16 @@ bool DrawDocShell::IsMarked( SdrObject* pObject ) bisMarked = pDrViewSh->GetView()->IsObjMarked(pObject); } } - return bisMarked; + return bisMarked; } -// If object is marked return true else return false. -bool DrawDocShell::GetObjectIsmarked(const OUString& rBookmark) +// If object is marked return true else return false. Optionally realize multi-selection of objects. +bool DrawDocShell::GetObjectIsmarked(const OUString& rBookmark, bool bRealizeMultiSelectionOfObjects /* = false */) { OSL_TRACE("GotoBookmark %s", OUStringToOString(rBookmark, RTL_TEXTENCODING_UTF8).getStr()); bool bUnMark = false; + bool bFound = false; if (mpViewShell && dynamic_cast< const DrawViewShell *>( mpViewShell ) != nullptr) { @@ -885,6 +886,7 @@ bool DrawDocShell::GetObjectIsmarked(const OUString& rBookmark) /******************** * Skip to the page * ********************/ + bFound = true; SdPage* pPage = static_cast<SdPage*>( mpDoc->GetPage(nPgNum) ); PageKind eNewPageKind = pPage->GetPageKind(); @@ -918,99 +920,23 @@ bool DrawDocShell::GetObjectIsmarked(const OUString& rBookmark) // Show and select object pDrViewSh->MakeVisible(pObj->GetLogicRect(), *pDrViewSh->GetActiveWindow()); - bUnMark = pDrViewSh->GetView()->IsObjMarked(pObj); + if (bRealizeMultiSelectionOfObjects) + { + pDrViewSh->GetView()->MarkObj(pObj, pDrViewSh->GetView()->GetSdrPageView(), bUnMark); + } } } - } - - return ( bUnMark); -} - -// realize multi-selection of objects -bool DrawDocShell::GotoTreeBookmark(const OUString& rBookmark) -{ - OSL_TRACE("GotoBookmark %s", - OUStringToOString(rBookmark, RTL_TEXTENCODING_UTF8).getStr()); - bool bFound = false; - - if (mpViewShell && dynamic_cast< const DrawViewShell *>( mpViewShell ) != nullptr) - { - DrawViewShell* pDrViewSh = static_cast<DrawViewShell*>( mpViewShell ); - - OUString aBookmark( rBookmark ); - - if( rBookmark.startsWith("#") ) - aBookmark = rBookmark.copy( 1 ); - - // is the bookmark a page ? - bool bIsMasterPage; - sal_uInt16 nPgNum = mpDoc->GetPageByName( aBookmark, bIsMasterPage ); - SdrObject* pObj = nullptr; - - if (nPgNum == SDRPAGE_NOTFOUND) + if (bRealizeMultiSelectionOfObjects) { - // is the bookmark an object ? - pObj = mpDoc->GetObj(aBookmark); - - if (pObj) - { - nPgNum = pObj->GetPage()->GetPageNum(); - } + SfxBindings& rBindings = ( ( mpViewShell && mpViewShell->GetViewFrame() ) ? + mpViewShell->GetViewFrame() : SfxViewFrame::Current() )->GetBindings(); + rBindings.Invalidate(SID_NAVIGATOR_STATE, true); + rBindings.Invalidate(SID_NAVIGATOR_PAGENAME); } - - if (nPgNum != SDRPAGE_NOTFOUND) - { - /******************** - * Skip to the page * - ********************/ - bFound = true; - SdPage* pPage = static_cast<SdPage*>( mpDoc->GetPage(nPgNum) ); - - PageKind eNewPageKind = pPage->GetPageKind(); - - if (eNewPageKind != pDrViewSh->GetPageKind()) - { - // change workspace - GetFrameView()->SetPageKind(eNewPageKind); - ( ( mpViewShell && mpViewShell->GetViewFrame() ) ? - mpViewShell->GetViewFrame() : SfxViewFrame::Current() )-> - GetDispatcher()->Execute( SID_VIEWSHELL0, SfxCallMode::SYNCHRON | SfxCallMode::RECORD ); - - // The current ViewShell changed - pDrViewSh = static_cast<DrawViewShell*>( mpViewShell ); - } - - setEditMode(pDrViewSh, bIsMasterPage); - - // Jump to the page. This is done by using the API because this - // takes care of all the little things to be done. Especially - // writing the view data to the frame view (see bug #107803#). - SdUnoDrawView* pUnoDrawView = new SdUnoDrawView ( - *pDrViewSh, - *pDrViewSh->GetView()); - css::uno::Reference<css::drawing::XDrawPage> xDrawPage( pPage->getUnoPage(), css::uno::UNO_QUERY); - pUnoDrawView->setCurrentPage (xDrawPage); - delete pUnoDrawView; - - if (pObj) - { - // Show and select object - pDrViewSh->MakeVisible(pObj->GetLogicRect(), - *pDrViewSh->GetActiveWindow()); - bool bUnMark = pDrViewSh->GetView()->IsObjMarked(pObj); - pDrViewSh->GetView()->MarkObj(pObj, pDrViewSh->GetView()->GetSdrPageView(), bUnMark); - } - } - - SfxBindings& rBindings = ( ( mpViewShell && mpViewShell->GetViewFrame() ) ? - mpViewShell->GetViewFrame() : SfxViewFrame::Current() )->GetBindings(); - - rBindings.Invalidate(SID_NAVIGATOR_STATE, true); - rBindings.Invalidate(SID_NAVIGATOR_PAGENAME); } - return (bFound); + return bRealizeMultiSelectionOfObjects ? bFound : bUnMark; } /** diff --git a/sd/source/ui/inc/DrawDocShell.hxx b/sd/source/ui/inc/DrawDocShell.hxx index b43f84b9f877..8aa9b3b2664a 100644 --- a/sd/source/ui/inc/DrawDocShell.hxx +++ b/sd/source/ui/inc/DrawDocShell.hxx @@ -132,10 +132,9 @@ public: bool GotoBookmark(const OUString& rBookmark); - //realize multi-selection of objects - bool GotoTreeBookmark(const OUString& rBookmark); bool IsMarked( SdrObject* pObject ); - bool GetObjectIsmarked(const OUString& rBookmark); + // Optionally realize multi-selection of objects + bool GetObjectIsmarked(const OUString& rBookmark, bool bRealizeMultiSelectionOfObjects = false); Bitmap GetPagePreviewBitmap(SdPage* pPage, sal_uInt16 nMaxEdgePixel); /** checks, if the given name is a valid new name for a slide |