LCOV - code coverage report
Current view: top level - sd/source/ui/dlg - sdtreelb.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 143 722 19.8 %
Date: 2014-11-03 Functions: 16 56 28.6 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : #include <sal/types.h>
      21             : #include <sot/formats.hxx>
      22             : #include <sot/storage.hxx>
      23             : #include <vcl/layout.hxx>
      24             : #include <svl/urihelper.hxx>
      25             : #include <svx/svditer.hxx>
      26             : #include <sfx2/docfile.hxx>
      27             : #include <svx/svdoole2.hxx>
      28             : #include <vcl/svapp.hxx>
      29             : #include "cusshow.hxx"
      30             : #include <sfx2/childwin.hxx>
      31             : 
      32             : #include <sfx2/viewfrm.hxx>
      33             : 
      34             : #include "strmname.h"
      35             : #include "sdtreelb.hxx"
      36             : #include "DrawDocShell.hxx"
      37             : #include "drawdoc.hxx"
      38             : #include "sdpage.hxx"
      39             : #include "sdresid.hxx"
      40             : #include "navigatr.hxx"
      41             : #include "strings.hrc"
      42             : #include "res_bmp.hrc"
      43             : #include "customshowlist.hxx"
      44             : #include "ViewShell.hxx"
      45             : #include "DrawController.hxx"
      46             : #include "ViewShellBase.hxx"
      47             : 
      48             : #include <com/sun/star/embed/XEmbedPersist.hpp>
      49             : #include <com/sun/star/frame/Desktop.hpp>
      50             : #include <com/sun/star/frame/XFramesSupplier.hpp>
      51             : #include <svtools/embedtransfer.hxx>
      52             : #include <svtools/svlbitm.hxx>
      53             : #include <svtools/treelistentry.hxx>
      54             : #include <comphelper/servicehelper.hxx>
      55             : #include <comphelper/processfactory.hxx>
      56             : #include <tools/diagnose_ex.h>
      57             : 
      58             : using namespace com::sun::star;
      59             : 
      60           2 : class SdPageObjsTLB::IconProvider
      61             : {
      62             : public:
      63             :     IconProvider (void);
      64             : 
      65             :     // Regular icons.
      66             :     Image maImgPage;
      67             :     Image maImgPageExcl;
      68             :     Image maImgPageObjsExcl;
      69             :     Image maImgPageObjs;
      70             :     Image maImgObjects;
      71             :     Image maImgGroup;
      72             : };
      73             : 
      74             : bool SdPageObjsTLB::bIsInDrag = false;
      75             : 
      76           0 : bool SdPageObjsTLB::IsInDrag()
      77             : {
      78           0 :     return bIsInDrag;
      79             : }
      80             : 
      81             : sal_uInt32 SdPageObjsTLB::SdPageObjsTransferable::mnListBoxDropFormatId = SAL_MAX_UINT32;
      82             : 
      83             : // - SdPageObjsTLB::SdPageObjsTransferable -
      84             : 
      85           0 : SdPageObjsTLB::SdPageObjsTransferable::SdPageObjsTransferable(
      86             :     SdPageObjsTLB& rParent,
      87             :         const INetBookmark& rBookmark,
      88             :     ::sd::DrawDocShell& rDocShell,
      89             :     NavigatorDragType eDragType,
      90             :     const ::com::sun::star::uno::Any& rTreeListBoxData )
      91             :     : SdTransferable(rDocShell.GetDoc(), NULL, true),
      92             :       mrParent( rParent ),
      93             :       maBookmark( rBookmark ),
      94             :       mrDocShell( rDocShell ),
      95             :       meDragType( eDragType ),
      96           0 :       maTreeListBoxData( rTreeListBoxData )
      97             : {
      98           0 : }
      99             : 
     100           0 : extern "C" SAL_DLLPUBLIC_EXPORT vcl::Window* SAL_CALL makeSdPageObjsTLB(vcl::Window *pParent, VclBuilder::stringmap &rMap)
     101             : {
     102           0 :     WinBits nWinStyle = WB_TABSTOP;
     103           0 :     OString sBorder = VclBuilder::extractCustomProperty(rMap);
     104           0 :     if (!sBorder.isEmpty())
     105           0 :         nWinStyle |= WB_BORDER;
     106           0 :     return new SdPageObjsTLB(pParent, nWinStyle);
     107             : }
     108             : 
     109           0 : SdPageObjsTLB::SdPageObjsTransferable::~SdPageObjsTransferable()
     110             : {
     111           0 : }
     112             : 
     113           0 : void SdPageObjsTLB::SdPageObjsTransferable::AddSupportedFormats()
     114             : {
     115           0 :     AddFormat(SOT_FORMATSTR_ID_NETSCAPE_BOOKMARK);
     116           0 :     AddFormat(SOT_FORMATSTR_ID_TREELISTBOX);
     117           0 :     AddFormat(GetListBoxDropFormatId());
     118           0 : }
     119             : 
     120           0 : bool SdPageObjsTLB::SdPageObjsTransferable::GetData( const css::datatransfer::DataFlavor& rFlavor, const OUString& /*rDestDoc*/ )
     121             : {
     122           0 :     sal_uLong nFormatId = SotExchange::GetFormat( rFlavor );
     123           0 :     switch (nFormatId)
     124             :     {
     125             :         case SOT_FORMATSTR_ID_NETSCAPE_BOOKMARK:
     126           0 :             SetINetBookmark( maBookmark, rFlavor );
     127           0 :             return true;
     128             : 
     129             :         case SOT_FORMATSTR_ID_TREELISTBOX:
     130           0 :             SetAny(maTreeListBoxData, rFlavor);
     131           0 :             return true;
     132             : 
     133             :         default:
     134           0 :             return false;
     135             :     }
     136             : }
     137             : 
     138           0 : void SdPageObjsTLB::SdPageObjsTransferable::DragFinished( sal_Int8 nDropAction )
     139             : {
     140           0 :     mrParent.OnDragFinished( nDropAction );
     141           0 :     SdTransferable::DragFinished(nDropAction);
     142           0 : }
     143             : 
     144           0 : sal_Int64 SAL_CALL SdPageObjsTLB::SdPageObjsTransferable::getSomething( const ::com::sun::star::uno::Sequence< sal_Int8 >& rId ) throw( ::com::sun::star::uno::RuntimeException, std::exception )
     145             : {
     146             :     sal_Int64 nRet;
     147             : 
     148           0 :     if( ( rId.getLength() == 16 ) &&
     149           0 :         ( 0 == memcmp( getUnoTunnelId().getConstArray(), rId.getConstArray(), 16 ) ) )
     150             :     {
     151           0 :         nRet = (sal_Int64)(sal_IntPtr)this;
     152             :     }
     153             :     else
     154           0 :         nRet = SdTransferable::getSomething(rId);
     155             : 
     156           0 :     return nRet;
     157             : }
     158             : 
     159             : namespace
     160             : {
     161             :     class theSdPageObjsTLBUnoTunnelId : public rtl::Static< UnoTunnelIdInit, theSdPageObjsTLBUnoTunnelId > {};
     162             : }
     163             : 
     164           0 : const ::com::sun::star::uno::Sequence< sal_Int8 >& SdPageObjsTLB::SdPageObjsTransferable::getUnoTunnelId()
     165             : {
     166           0 :     return theSdPageObjsTLBUnoTunnelId::get().getSeq();
     167             : }
     168             : 
     169           0 : SdPageObjsTLB::SdPageObjsTransferable* SdPageObjsTLB::SdPageObjsTransferable::getImplementation( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& rxData )
     170             :     throw()
     171             : {
     172             :     try
     173             :     {
     174           0 :         ::com::sun::star::uno::Reference< ::com::sun::star::lang::XUnoTunnel > xUnoTunnel( rxData, ::com::sun::star::uno::UNO_QUERY_THROW );
     175             : 
     176             :         return reinterpret_cast<SdPageObjsTLB::SdPageObjsTransferable*>(
     177             :                 sal::static_int_cast<sal_uIntPtr>(
     178           0 :                     xUnoTunnel->getSomething( SdPageObjsTLB::SdPageObjsTransferable::getUnoTunnelId()) ) );
     179             :     }
     180           0 :     catch( const ::com::sun::star::uno::Exception& )
     181             :     {
     182             :     }
     183           0 :     return 0;
     184             : }
     185             : 
     186           0 : sal_uInt32 SdPageObjsTLB::SdPageObjsTransferable::GetListBoxDropFormatId (void)
     187             : {
     188           0 :     if (mnListBoxDropFormatId == SAL_MAX_UINT32)
     189             :         mnListBoxDropFormatId = SotExchange::RegisterFormatMimeType(OUString(
     190           0 :         "application/x-openoffice-treelistbox-moveonly;windows_formatname=\"SV_LBOX_DD_FORMAT_MOVE\""));
     191           0 :     return mnListBoxDropFormatId;
     192             : }
     193             : 
     194           2 : SdPageObjsTLB::SdPageObjsTLB( vcl::Window* pParentWin, const SdResId& rSdResId )
     195             : :   SvTreeListBox       ( pParentWin, rSdResId )
     196             : ,   bisInSdNavigatorWin  ( false )
     197             : ,   mpParent            ( pParentWin )
     198             : ,   mpDoc               ( NULL )
     199             : ,   mpBookmarkDoc       ( NULL )
     200             : ,   mpMedium            ( NULL )
     201             : ,   mpOwnMedium         ( NULL )
     202             : ,   maImgOle             ( BitmapEx( SdResId( BMP_OLE ) ) )
     203             : ,   maImgGraphic         ( BitmapEx( SdResId( BMP_GRAPHIC ) ) )
     204             : ,   mbLinkableSelected  ( false )
     205             : ,   mpDropNavWin        ( NULL )
     206             : ,   mpFrame             ( NULL )
     207             : ,   mbSaveTreeItemState ( false )
     208             : ,   mbShowAllShapes     ( false )
     209           2 : ,   mbShowAllPages      ( false )
     210             : {
     211             :     // add lines to Tree-ListBox
     212           2 :     SetStyle( GetStyle() | WB_TABSTOP | WB_BORDER | WB_HASLINES |
     213             :                            WB_HASBUTTONS | // WB_HASLINESATROOT |
     214             :                            WB_HSCROLL |
     215             :                            WB_HASBUTTONSATROOT |
     216           2 :                            WB_QUICK_SEARCH /* i31275 */ );
     217             :     SetNodeBitmaps( Image(Bitmap( SdResId(BMP_EXPAND) )),
     218           2 :                     Image(Bitmap( SdResId(BMP_COLLAPSE) )));
     219             : 
     220             :     SetDragDropMode(
     221             :          SV_DRAGDROP_CTRL_MOVE | SV_DRAGDROP_CTRL_COPY |
     222           2 :             SV_DRAGDROP_APP_MOVE  | SV_DRAGDROP_APP_COPY  | SV_DRAGDROP_APP_DROP );
     223           2 : }
     224             : 
     225           0 : SdPageObjsTLB::SdPageObjsTLB( vcl::Window* pParentWin, WinBits nStyle )
     226             : :   SvTreeListBox       ( pParentWin, nStyle )
     227             : ,   bisInSdNavigatorWin ( false )
     228             : ,   mpParent            ( pParentWin )
     229             : ,   mpDoc               ( NULL )
     230             : ,   mpBookmarkDoc       ( NULL )
     231             : ,   mpMedium            ( NULL )
     232             : ,   mpOwnMedium         ( NULL )
     233             : ,   maImgOle             ( BitmapEx( SdResId( BMP_OLE ) ) )
     234             : ,   maImgGraphic         ( BitmapEx( SdResId( BMP_GRAPHIC ) ) )
     235             : ,   mbLinkableSelected  ( false )
     236             : ,   mpDropNavWin        ( NULL )
     237             : ,   mpFrame             ( NULL )
     238             : ,   mbSaveTreeItemState ( false )
     239             : ,   mbShowAllShapes     ( false )
     240           0 : ,   mbShowAllPages      ( false )
     241             : {
     242             :     // add lines to Tree-ListBox
     243           0 :     SetStyle( GetStyle() | WB_TABSTOP | WB_BORDER | WB_HASLINES |
     244             :                            WB_HASBUTTONS | // WB_HASLINESATROOT |
     245             :                            WB_HSCROLL |
     246             :                            WB_HASBUTTONSATROOT |
     247           0 :                            WB_QUICK_SEARCH /* i31275 */ );
     248             :     SetNodeBitmaps( Image(Bitmap( SdResId(BMP_EXPAND) )),
     249           0 :                     Image(Bitmap( SdResId(BMP_COLLAPSE) )));
     250             : 
     251             :     SetDragDropMode(
     252             :          SV_DRAGDROP_CTRL_MOVE | SV_DRAGDROP_CTRL_COPY |
     253           0 :             SV_DRAGDROP_APP_MOVE  | SV_DRAGDROP_APP_COPY  | SV_DRAGDROP_APP_DROP );
     254           0 : }
     255             : 
     256           4 : SdPageObjsTLB::~SdPageObjsTLB()
     257             : {
     258           2 :     if ( mpBookmarkDoc )
     259           0 :         CloseBookmarkDoc();
     260             :     else
     261             :         // no document was created from mpMedium, so this object is still the owner of it
     262           2 :         delete mpMedium;
     263           2 : }
     264             : 
     265             : // helper function for  GetEntryAltText and GetEntryLongDescription
     266           0 : OUString SdPageObjsTLB::getAltLongDescText(SvTreeListEntry* pEntry , bool isAltText) const
     267             : {
     268           0 :     sal_uInt16 maxPages = mpDoc->GetPageCount();
     269             :     sal_uInt16 pageNo;
     270           0 :     SdrObject*   pObj = NULL;
     271           0 :     SdPage* pPage = NULL;
     272             : 
     273           0 :     OUString ParentName = GetEntryText( GetRootLevelParent( pEntry ) );
     274             : 
     275           0 :     for( pageNo = 0;  pageNo < maxPages; pageNo++ )
     276             :     {
     277           0 :         pPage = (SdPage*) mpDoc->GetPage( pageNo );
     278           0 :         if( pPage->GetPageKind() != PK_STANDARD ) continue;
     279           0 :         if( pPage->GetName() !=  ParentName ) continue;
     280           0 :         SdrObjListIter aIter( *pPage, IM_FLAT );
     281           0 :         while( aIter.IsMore() )
     282             :         {
     283           0 :             pObj = aIter.Next();
     284           0 :             if( GetEntryText(pEntry) ==  GetObjectName( pObj )  )
     285             :             {
     286           0 :                 if( isAltText )
     287           0 :                     return pObj->GetTitle();
     288             :                 else
     289           0 :                     return pObj->GetDescription();
     290             :             }
     291             :         }
     292           0 :     }
     293           0 :     return OUString();
     294             : 
     295             : }
     296             : 
     297           0 : OUString SdPageObjsTLB::GetEntryAltText( SvTreeListEntry* pEntry ) const
     298             : {
     299           0 :     return getAltLongDescText( pEntry, true );
     300             : }
     301             : 
     302           0 : OUString SdPageObjsTLB::GetEntryLongDescription( SvTreeListEntry* pEntry ) const
     303             : {
     304           0 :     return getAltLongDescText( pEntry, false);
     305             : }
     306             : 
     307           0 : void  SdPageObjsTLB::MarkCurEntry( const OUString& rName )
     308             : {
     309             : 
     310           0 :     if (!rName.isEmpty())
     311             :     {
     312           0 :         SvTreeListEntry* pCurEntry =GetCurEntry();
     313           0 :         SvTreeListEntry* pEntry =NULL;
     314           0 :         OUString aTmp1;
     315           0 :         OUString aTmp2;
     316             : 
     317           0 :         if( GetParent(pCurEntry)==NULL )
     318             :         {
     319           0 :             aTmp1 = GetEntryText( pCurEntry );
     320           0 :             for( pEntry = First(); pEntry ; pEntry = Next( pEntry ) )
     321             :             {
     322           0 :                if(GetParent( pEntry )==NULL)
     323           0 :                    continue;
     324           0 :                 aTmp2 = GetEntryText( GetParent( pEntry ));
     325           0 :                 if( aTmp1 != aTmp2)
     326             :                 {
     327             :                     // IA2 CWS. MT: Removed in SvTreeListEntry for now - only used in Sw/Sd/ScContentLBoxString, they should decide if they need this
     328           0 :                     pEntry->SetMarked(false);
     329             :                 }
     330             :             }
     331             :         }
     332             :         else
     333             :         {
     334           0 :             for( pEntry = First(); pEntry ; pEntry = Next( pEntry ) )
     335             :             {
     336           0 :                 aTmp2 = GetEntryText( pEntry );
     337           0 :                 if( aTmp2 == rName)
     338             :                 {
     339           0 :                     pEntry->SetMarked(true);
     340             :                 }
     341             :                 else
     342             :                 {
     343           0 :                     pEntry->SetMarked(false);
     344             :                 }
     345             :             }
     346           0 :         }
     347             :     }
     348           0 :     Invalidate();
     349           0 : }
     350             : 
     351           0 : void  SdPageObjsTLB:: FreshCurEntry()
     352             : {
     353           0 :     SvTreeListEntry* pEntry =NULL;
     354           0 :     for( pEntry = First(); pEntry ; pEntry = Next( pEntry ) )
     355             :     {
     356           0 :                 pEntry->SetMarked(false);
     357             :     }
     358           0 :     Invalidate();
     359           0 : }
     360             : 
     361           2 : void SdPageObjsTLB::InitEntry(SvTreeListEntry* pEntry,
     362             :     const OUString& rStr, const Image& rImg1, const Image& rImg2, SvLBoxButtonKind eButtonKind)
     363             : {
     364           2 :     sal_uInt16 nColToHilite = 1; //0==Bitmap;1=="Spalte1";2=="Spalte2"
     365           2 :     SvTreeListBox::InitEntry( pEntry, rStr, rImg1, rImg2, eButtonKind );
     366           2 :     SvLBoxString* pCol = (SvLBoxString*)pEntry->GetItem( nColToHilite );
     367           2 :     SvLBoxString* pStr = new SvLBoxString( pEntry, 0, pCol->GetText() );
     368           2 :     pEntry->ReplaceItem( pStr, nColToHilite );
     369           2 : }
     370             : 
     371           0 : void SdPageObjsTLB::SaveExpandedTreeItemState(SvTreeListEntry* pEntry, std::vector<OUString>& vectTreeItem)
     372             : {
     373           0 :     if (pEntry)
     374             :     {
     375           0 :         SvTreeListEntry* pListEntry = pEntry;
     376           0 :         while (pListEntry)
     377             :         {
     378           0 :             if (pListEntry->HasChildren())
     379             :             {
     380           0 :                 if (IsExpanded(pListEntry))
     381           0 :                     vectTreeItem.push_back(GetEntryText(pListEntry));
     382           0 :                 SvTreeListEntry* pChildEntry = FirstChild(pListEntry);
     383           0 :                 SaveExpandedTreeItemState(pChildEntry, vectTreeItem);
     384             :             }
     385           0 :             pListEntry = NextSibling(pListEntry);
     386             :         }
     387             :     }
     388           0 : }
     389           2 : void SdPageObjsTLB::Clear()
     390             : {
     391             :     //Save the expanded tree item
     392           2 :     if (mbSaveTreeItemState)
     393             :     {
     394           0 :         maSelectionEntryText = OUString();
     395           0 :         maTreeItem.clear();
     396           0 :         if (GetCurEntry())
     397           0 :             maSelectionEntryText = GetSelectEntry();
     398           0 :         SvTreeListEntry* pEntry = FirstChild(NULL);
     399           0 :         SaveExpandedTreeItemState(pEntry, maTreeItem);
     400             :     }
     401           2 :     return SvTreeListBox::Clear();
     402             : }
     403             : 
     404           0 : OUString SdPageObjsTLB::GetObjectName(
     405             :     const SdrObject* pObject,
     406             :     const bool bCreate) const
     407             : {
     408           0 :     OUString aRet;
     409             : 
     410           0 :     if ( pObject )
     411             :     {
     412           0 :         aRet = pObject->GetName();
     413             : 
     414           0 :         if (aRet.isEmpty() && pObject->ISA(SdrOle2Obj))
     415           0 :             aRet = static_cast< const SdrOle2Obj* >( pObject )->GetPersistName();
     416             :     }
     417             : 
     418           0 :     if (bCreate
     419           0 :         && mbShowAllShapes
     420           0 :         && aRet.isEmpty()
     421           0 :         && pObject!=NULL)
     422             :     {
     423           0 :         aRet = SD_RESSTR(STR_NAVIGATOR_SHAPE_BASE_NAME);
     424           0 :         aRet = aRet.replaceFirst("%1", OUString::number(pObject->GetOrdNum() + 1));
     425             :     }
     426             : 
     427           0 :     return aRet;
     428             : }
     429             : 
     430             : /**
     431             :  * select a entry in TreeLB
     432             :  */
     433           4 : bool SdPageObjsTLB::SelectEntry( const OUString& rName )
     434             : {
     435           4 :     bool bFound = false;
     436             : 
     437           4 :     if( !rName.isEmpty() )
     438             :     {
     439           4 :         SvTreeListEntry* pEntry = NULL;
     440           4 :         OUString aTmp;
     441             : 
     442           8 :         for( pEntry = First(); pEntry && !bFound; pEntry = Next( pEntry ) )
     443             :         {
     444           4 :             aTmp = GetEntryText( pEntry );
     445           4 :             if( aTmp == rName )
     446             :             {
     447           4 :                 bFound = true;
     448           4 :                 SetCurEntry( pEntry );
     449             :             }
     450           4 :         }
     451             :     }
     452           4 :     return( bFound );
     453             : }
     454             : 
     455             : /**
     456             :  * @return true if children of the specified string are selected
     457             :  */
     458           4 : bool SdPageObjsTLB::HasSelectedChildren( const OUString& rName )
     459             : {
     460           4 :     bool bFound  = false;
     461           4 :     bool bChildren = false;
     462             : 
     463           4 :     if( !rName.isEmpty() )
     464             :     {
     465           4 :         SvTreeListEntry* pEntry = NULL;
     466           4 :         OUString aTmp;
     467             : 
     468           8 :         for( pEntry = First(); pEntry && !bFound; pEntry = Next( pEntry ) )
     469             :         {
     470           4 :             aTmp = GetEntryText( pEntry );
     471           4 :             if( aTmp == rName )
     472             :             {
     473           4 :                 bFound = true;
     474           4 :                 bool bExpanded = IsExpanded( pEntry );
     475           4 :                 long nCount = GetChildSelectionCount( pEntry );
     476           4 :                 if( bExpanded && nCount > 0 )
     477           0 :                     bChildren = true;
     478             :             }
     479           4 :         }
     480             :     }
     481           4 :     return( bChildren );
     482             : }
     483             : 
     484             : /**
     485             :  * Fill TreeLB with pages and objects
     486             :  */
     487           2 : void SdPageObjsTLB::Fill( const SdDrawDocument* pInDoc, bool bAllPages,
     488             :                           const OUString& rDocName)
     489             : {
     490           2 :     OUString aSelection;
     491           2 :     if( GetSelectionCount() > 0 )
     492             :     {
     493           0 :         aSelection = GetSelectEntry();
     494           0 :         Clear();
     495             :     }
     496             : 
     497           2 :     mpDoc = pInDoc;
     498           2 :     maDocName = rDocName;
     499           2 :     mbShowAllPages = bAllPages;
     500           2 :     mpMedium = NULL;
     501             : 
     502           2 :     SdPage*      pPage = NULL;
     503             : 
     504           4 :     IconProvider aIconProvider;
     505             : 
     506             :     // first insert all pages including objects
     507           2 :     sal_uInt16 nPage = 0;
     508           2 :     const sal_uInt16 nMaxPages = mpDoc->GetPageCount();
     509             : 
     510          10 :     while( nPage < nMaxPages )
     511             :     {
     512           6 :         pPage = (SdPage*) mpDoc->GetPage( nPage );
     513          12 :         if(  (mbShowAllPages || pPage->GetPageKind() == PK_STANDARD)
     514           8 :              && !(pPage->GetPageKind()==PK_HANDOUT)   ) //#94954# never list the normal handout page ( handout-masterpage is used instead )
     515             :         {
     516           2 :             bool bPageExluded = pPage->IsExcluded();
     517             : 
     518           2 :             bool bPageBelongsToShow = PageBelongsToCurrentShow (pPage);
     519           2 :             bPageExluded |= !bPageBelongsToShow;
     520             : 
     521           2 :             AddShapeList(*pPage, NULL, pPage->GetName(), bPageExluded, NULL, aIconProvider);
     522             :         }
     523           6 :         nPage++;
     524             :     }
     525             : 
     526             :     // then insert all master pages including objects
     527           2 :     if( mbShowAllPages )
     528             :     {
     529           0 :         nPage = 0;
     530           0 :         const sal_uInt16 nMaxMasterPages = mpDoc->GetMasterPageCount();
     531             : 
     532           0 :         while( nPage < nMaxMasterPages )
     533             :         {
     534           0 :             pPage = (SdPage*) mpDoc->GetMasterPage( nPage );
     535           0 :             AddShapeList(*pPage, NULL, pPage->GetName(), false, NULL, aIconProvider);
     536           0 :             nPage++;
     537             :         }
     538             :     }
     539           2 :     if( !aSelection.isEmpty() )
     540           0 :         SelectEntry( aSelection );
     541           2 :     else if (mbSaveTreeItemState && !maSelectionEntryText.isEmpty())
     542             :     {
     543           0 :         SelectEntry(maSelectionEntryText);
     544           2 :     }
     545           2 : }
     546             : 
     547             : /**
     548             :  * We insert only the first entry. Children are created on demand.
     549             :  */
     550           0 : void SdPageObjsTLB::Fill( const SdDrawDocument* pInDoc, SfxMedium* pInMedium,
     551             :                           const OUString& rDocName )
     552             : {
     553           0 :     mpDoc = pInDoc;
     554             : 
     555             :     // this object now owns the Medium
     556           0 :     mpMedium = pInMedium;
     557           0 :     maDocName = rDocName;
     558             : 
     559           0 :     Image aImgDocOpen=Image( BitmapEx( SdResId( BMP_DOC_OPEN ) ) );
     560           0 :     Image aImgDocClosed=Image( BitmapEx( SdResId( BMP_DOC_CLOSED ) ) );
     561             : 
     562             :     // insert document name
     563             :     InsertEntry( maDocName, aImgDocOpen, aImgDocClosed, NULL, true, TREELIST_APPEND,
     564             :                  reinterpret_cast< void* >( 1 )
     565           0 :     );
     566           0 : }
     567             : 
     568           2 : void SdPageObjsTLB::AddShapeList (
     569             :     const SdrObjList& rList,
     570             :     SdrObject* pShape,
     571             :     const OUString& rsName,
     572             :     const bool bIsExcluded,
     573             :     SvTreeListEntry* pParentEntry,
     574             :     const IconProvider& rIconProvider)
     575             : {
     576           2 :     Image aIcon (rIconProvider.maImgPage);
     577           2 :     if (bIsExcluded)
     578           0 :         aIcon = rIconProvider.maImgPageExcl;
     579           2 :     else if (pShape != NULL)
     580           0 :         aIcon = rIconProvider.maImgGroup;
     581             : 
     582           2 :     void* pUserData (reinterpret_cast<void*>(1));
     583           2 :     if (pShape != NULL)
     584           0 :         pUserData = pShape;
     585             : 
     586             :     SvTreeListEntry* pEntry = InsertEntry(
     587             :         rsName,
     588             :         aIcon,
     589             :         aIcon,
     590             :         pParentEntry,
     591             :         false,
     592             :         TREELIST_APPEND,
     593           2 :         pUserData);
     594             : 
     595             :     SdrObjListIter aIter(
     596             :         rList,
     597           2 :         !rList.HasObjectNavigationOrder() /* use navigation order, if available */,
     598             :         IM_FLAT,
     599           4 :         false /*not reverse*/);
     600             : 
     601           2 :     bool  bMarked=false;
     602           2 :     if(bisInSdNavigatorWin)
     603             :     {
     604           2 :         vcl::Window* pWindow=NULL;
     605           2 :         SdNavigatorWin* pSdNavigatorWin=NULL;
     606           2 :         sd::DrawDocShell* pSdDrawDocShell = NULL;
     607           2 :         if(pEntry)
     608           2 :             pWindow=(vcl::Window*)GetParent(pEntry);
     609           2 :         if(pWindow)
     610           0 :             pSdNavigatorWin = (SdNavigatorWin*)pWindow;
     611           2 :         if( pSdNavigatorWin )
     612           0 :             pSdDrawDocShell = pSdNavigatorWin->GetDrawDocShell(mpDoc);
     613           2 :         if(pSdDrawDocShell)
     614           0 :             bMarked=pSdDrawDocShell->IsMarked(pShape);
     615           2 :         if(pEntry)
     616             :         {
     617           2 :             if(bMarked)
     618           0 :                 pEntry->SetMarked(true);
     619             :             else
     620           2 :                 pEntry->SetMarked(false);
     621             :         }
     622             :     }
     623           4 :     while( aIter.IsMore() )
     624             :     {
     625           0 :         SdrObject* pObj = aIter.Next();
     626             :         OSL_ASSERT(pObj!=NULL);
     627             : 
     628             :         // Get the shape name.
     629           0 :         OUString aStr (GetObjectName( pObj ) );
     630             : 
     631           0 :         if( !aStr.isEmpty() )
     632             :         {
     633           0 :             if( pObj->GetObjInventor() == SdrInventor && pObj->GetObjIdentifier() == OBJ_OLE2 )
     634             :             {
     635             :                 SvTreeListEntry *pNewEntry = InsertEntry(
     636             :                     aStr,
     637             :                     maImgOle,
     638             :                     maImgOle,
     639             :                     pEntry,
     640             :                     false,
     641             :                     TREELIST_APPEND,
     642             :                     pObj
     643           0 :                 );
     644             : 
     645           0 :                 if(bisInSdNavigatorWin)
     646             :                 {
     647           0 :                     vcl::Window* pWindow=NULL;
     648           0 :                     SdNavigatorWin* pSdNavigatorWin=NULL;
     649           0 :                     sd::DrawDocShell* pSdDrawDocShell = NULL;
     650           0 :                     if(pNewEntry)
     651           0 :                         pWindow=(vcl::Window*)GetParent(pNewEntry);
     652           0 :                     if(pWindow)
     653           0 :                         pSdNavigatorWin = (SdNavigatorWin*)pWindow;
     654           0 :                     if( pSdNavigatorWin )
     655           0 :                         pSdDrawDocShell = pSdNavigatorWin->GetDrawDocShell(mpDoc);
     656           0 :                     if(pSdDrawDocShell)
     657           0 :                         bMarked=pSdDrawDocShell->IsMarked((SdrObject*)pObj);
     658           0 :                     if(pNewEntry)
     659             :                     {
     660           0 :                         if(bMarked)
     661           0 :                             pNewEntry->SetMarked(true);
     662             :                         else
     663           0 :                             pNewEntry->SetMarked(false);
     664             :                     }
     665             :                 }
     666             :             }
     667           0 :             else if( pObj->GetObjInventor() == SdrInventor && pObj->GetObjIdentifier() == OBJ_GRAF )
     668             :             {
     669             :                 SvTreeListEntry *pNewEntry = InsertEntry(
     670             :                     aStr,
     671             :                     maImgGraphic,
     672             :                     maImgGraphic,
     673             :                     pEntry,
     674             :                     false,
     675             :                     TREELIST_APPEND,
     676             :                     pObj
     677           0 :                 );
     678             : 
     679           0 :                 if(bisInSdNavigatorWin)
     680             :                 {
     681           0 :                     vcl::Window* pWindow=NULL;
     682           0 :                     SdNavigatorWin* pSdNavigatorWin=NULL;
     683           0 :                     sd::DrawDocShell* pSdDrawDocShell = NULL;
     684           0 :                     if(pNewEntry)
     685           0 :                         pWindow=(vcl::Window*)GetParent(pNewEntry);
     686           0 :                     if(pWindow)
     687           0 :                         pSdNavigatorWin = (SdNavigatorWin*)pWindow;
     688           0 :                     if( pSdNavigatorWin )
     689           0 :                         pSdDrawDocShell = pSdNavigatorWin->GetDrawDocShell(mpDoc);
     690           0 :                     if(pSdDrawDocShell)
     691           0 :                         bMarked=pSdDrawDocShell->IsMarked((SdrObject*)pObj);
     692           0 :                     if(pNewEntry)
     693             :                     {
     694           0 :                         if(bMarked)
     695             :                         {
     696           0 :                             pNewEntry->SetMarked(true);
     697             :                         }
     698             :                         else
     699             :                         {
     700           0 :                             pNewEntry->SetMarked(false);
     701             :                         }
     702             :                     }
     703             :                 }
     704             :             }
     705           0 :             else if (pObj->IsGroupObject())
     706             :             {
     707             :                 AddShapeList(
     708           0 :                     *pObj->GetSubList(),
     709             :                     pObj,
     710             :                     aStr,
     711             :                     false,
     712             :                     pEntry,
     713             :                     rIconProvider
     714           0 :                 );
     715             :             }
     716             :             else
     717             :             {
     718             :                 SvTreeListEntry *pNewEntry = InsertEntry(
     719             :                     aStr,
     720             :                     rIconProvider.maImgObjects,
     721             :                     rIconProvider.maImgObjects,
     722             :                     pEntry,
     723             :                     false,
     724             :                     TREELIST_APPEND,
     725             :                     pObj
     726           0 :                 );
     727             : 
     728           0 :                 if(bisInSdNavigatorWin)
     729             :                 {
     730           0 :                     vcl::Window* pWindow=NULL;
     731           0 :                     SdNavigatorWin* pSdNavigatorWin=NULL;
     732           0 :                     sd::DrawDocShell* pSdDrawDocShell = NULL;
     733           0 :                     if(pNewEntry)
     734           0 :                         pWindow=(vcl::Window*)GetParent(pNewEntry);
     735           0 :                     if(pWindow)
     736           0 :                         pSdNavigatorWin = (SdNavigatorWin*)pWindow;
     737           0 :                     if( pSdNavigatorWin )
     738           0 :                         pSdDrawDocShell = pSdNavigatorWin->GetDrawDocShell(mpDoc);
     739           0 :                     if(pSdDrawDocShell)
     740           0 :                         bMarked=pSdDrawDocShell->IsMarked((SdrObject*)pObj);
     741           0 :                     if(pNewEntry)
     742             :                     {
     743           0 :                         if(bMarked)
     744             :                         {
     745           0 :                             pNewEntry->SetMarked(true);
     746             :                         }
     747             :                         else
     748             :                         {
     749           0 :                             pNewEntry->SetMarked(false);
     750             :                         }
     751             :                     }
     752             :                 }
     753             :             }
     754             :         }
     755           0 :     }
     756             : 
     757           2 :     if( pEntry->HasChildren() )
     758             :     {
     759             :         SetExpandedEntryBmp(
     760             :             pEntry,
     761           0 :             bIsExcluded ? rIconProvider.maImgPageObjsExcl : rIconProvider.maImgPageObjs);
     762             :         SetCollapsedEntryBmp(
     763             :             pEntry,
     764           0 :             bIsExcluded ? rIconProvider.maImgPageObjsExcl : rIconProvider.maImgPageObjs);
     765           0 :         if (mbSaveTreeItemState)
     766             :         {
     767           0 :             std::vector<OUString>::iterator iteStart = maTreeItem.begin();
     768           0 :             while (iteStart != maTreeItem.end())
     769             :             {
     770           0 :                 OUString strEntry = GetEntryText(pEntry);
     771           0 :                 if (*iteStart == strEntry)
     772             :                 {
     773           0 :                     Expand( pEntry );
     774           0 :                     break;
     775             :                 }
     776           0 :                 ++iteStart;
     777           0 :             }
     778             :         }
     779             :         else
     780           0 :             Expand( pEntry );
     781           2 :     }
     782           2 : }
     783             : 
     784           8 : void SdPageObjsTLB::SetShowAllShapes (
     785             :     const bool bShowAllShapes,
     786             :     const bool bFillList)
     787             : {
     788           8 :     mbShowAllShapes = bShowAllShapes;
     789           8 :     if (bFillList)
     790             :     {
     791           0 :         if (mpMedium == NULL)
     792           0 :             Fill(mpDoc, mbShowAllPages, maDocName);
     793             :         else
     794           0 :             Fill(mpDoc, mpMedium, maDocName);
     795             :     }
     796           8 : }
     797             : 
     798             : /**
     799             :  * Checks if the pages (PK_STANDARD) of a doc and the objects on the pages
     800             :  * are identical to the TreeLB.
     801             :  * If a doc is provided, this will be the used doc (important by more than
     802             :  * one document).
     803             :  */
     804           8 : bool SdPageObjsTLB::IsEqualToDoc( const SdDrawDocument* pInDoc )
     805             : {
     806           8 :     if( pInDoc )
     807           8 :         mpDoc = pInDoc;
     808             : 
     809           8 :     if( !mpDoc )
     810           0 :         return false;
     811             : 
     812           8 :     SdrObject*   pObj = NULL;
     813           8 :     SdPage*      pPage = NULL;
     814           8 :     SvTreeListEntry* pEntry = First();
     815           8 :     OUString     aName;
     816             : 
     817             :     // compare all pages including the objects
     818           8 :     sal_uInt16 nPage = 0;
     819           8 :     const sal_uInt16 nMaxPages = mpDoc->GetPageCount();
     820             : 
     821          36 :     while( nPage < nMaxPages )
     822             :     {
     823          22 :         pPage = (SdPage*) mpDoc->GetPage( nPage );
     824          22 :         if( pPage->GetPageKind() == PK_STANDARD )
     825             :         {
     826           8 :             if( !pEntry )
     827           4 :                 return false;
     828           6 :             aName = GetEntryText( pEntry );
     829             : 
     830           6 :             if( pPage->GetName() != aName )
     831           0 :                 return false;
     832             : 
     833           6 :             pEntry = Next( pEntry );
     834             : 
     835             :             SdrObjListIter aIter(
     836             :                 *pPage,
     837           6 :                 !pPage->HasObjectNavigationOrder() /* use navigation order, if available */,
     838           6 :                 IM_DEEPWITHGROUPS );
     839             : 
     840          12 :             while( aIter.IsMore() )
     841             :             {
     842           0 :                 pObj = aIter.Next();
     843             : 
     844           0 :                 const OUString aObjectName( GetObjectName( pObj ) );
     845             : 
     846           0 :                 if( !aObjectName.isEmpty() )
     847             :                 {
     848           0 :                     if( !pEntry )
     849           0 :                         return false;
     850             : 
     851           0 :                     aName = GetEntryText( pEntry );
     852             : 
     853           0 :                     if( aObjectName != aName )
     854           0 :                         return false;
     855             : 
     856           0 :                     pEntry = Next( pEntry );
     857             :                 }
     858           6 :             }
     859             :         }
     860          20 :         nPage++;
     861             :     }
     862             :     // If there are still entries in the listbox,
     863             :     // then objects (with names) or pages were deleted
     864           6 :     return( !pEntry );
     865             : }
     866             : 
     867             : /**
     868             :  * @return selected string
     869             :  */
     870           0 : OUString SdPageObjsTLB::GetSelectEntry()
     871             : {
     872           0 :     return( GetEntryText( GetCurEntry() ) );
     873             : }
     874             : 
     875           0 : std::vector<OUString> SdPageObjsTLB::GetSelectEntryList( const sal_uInt16 nDepth ) const
     876             : {
     877           0 :     std::vector<OUString> aEntries;
     878           0 :     SvTreeListEntry* pEntry = FirstSelected();
     879             : 
     880           0 :     while( pEntry )
     881             :     {
     882           0 :         sal_uInt16 nListDepth = GetModel()->GetDepth( pEntry );
     883             : 
     884           0 :         if( nListDepth == nDepth )
     885           0 :             aEntries.push_back(GetEntryText(pEntry));
     886             : 
     887           0 :         pEntry = NextSelected( pEntry );
     888             :     }
     889             : 
     890           0 :     return aEntries;
     891             : }
     892             : 
     893             : /**
     894             :  * Entries are inserted only by request (double click)
     895             :  */
     896           0 : void SdPageObjsTLB::RequestingChildren( SvTreeListEntry* pFileEntry )
     897             : {
     898           0 :     if( !pFileEntry->HasChildren() )
     899             :     {
     900           0 :         if( GetBookmarkDoc() )
     901             :         {
     902           0 :             SdrObject*   pObj = NULL;
     903           0 :             SdPage*      pPage = NULL;
     904           0 :             SvTreeListEntry* pPageEntry = NULL;
     905             : 
     906           0 :             Image aImgPage     = Image( BitmapEx( SdResId( BMP_PAGE     ) ) );
     907           0 :             Image aImgPageObjs = Image( BitmapEx( SdResId( BMP_PAGEOBJS ) ) );
     908           0 :             Image aImgObjects  = Image( BitmapEx( SdResId( BMP_OBJECTS  ) ) );
     909             : 
     910             :             // document name already inserted
     911             : 
     912             :             // only insert all "normal" ? slides with objects
     913           0 :             sal_uInt16 nPage = 0;
     914           0 :             const sal_uInt16 nMaxPages = mpBookmarkDoc->GetPageCount();
     915             : 
     916           0 :             while( nPage < nMaxPages )
     917             :             {
     918           0 :                 pPage = (SdPage*) mpBookmarkDoc->GetPage( nPage );
     919           0 :                 if( pPage->GetPageKind() == PK_STANDARD )
     920             :                 {
     921           0 :                     pPageEntry = InsertEntry( pPage->GetName(),
     922             :                                               aImgPage,
     923             :                                               aImgPage,
     924             :                                               pFileEntry,
     925             :                                               false,
     926             :                                               TREELIST_APPEND,
     927           0 :                                               reinterpret_cast< void* >( 1 ) );
     928             : 
     929           0 :                     SdrObjListIter aIter( *pPage, IM_DEEPWITHGROUPS );
     930             : 
     931           0 :                     while( aIter.IsMore() )
     932             :                     {
     933           0 :                         pObj = aIter.Next();
     934           0 :                         OUString aStr( GetObjectName( pObj ) );
     935           0 :                         if( !aStr.isEmpty() )
     936             :                         {
     937           0 :                             if( pObj->GetObjInventor() == SdrInventor && pObj->GetObjIdentifier() == OBJ_OLE2 )
     938             :                             {
     939           0 :                                 InsertEntry(aStr, maImgOle, maImgOle, pPageEntry);
     940             :                             }
     941           0 :                             else if( pObj->GetObjInventor() == SdrInventor && pObj->GetObjIdentifier() == OBJ_GRAF )
     942             :                             {
     943           0 :                                 InsertEntry(aStr, maImgGraphic, maImgGraphic, pPageEntry);
     944             :                             }
     945             :                             else
     946             :                             {
     947           0 :                                 InsertEntry(aStr, aImgObjects, aImgObjects, pPageEntry);
     948             :                             }
     949             :                         }
     950           0 :                     }
     951           0 :                     if( pPageEntry->HasChildren() )
     952             :                     {
     953           0 :                         SetExpandedEntryBmp(  pPageEntry, aImgPageObjs );
     954           0 :                         SetCollapsedEntryBmp( pPageEntry, aImgPageObjs );
     955           0 :                     }
     956             :                 }
     957           0 :                 nPage++;
     958           0 :             }
     959             :         }
     960             :     }
     961             :     else
     962           0 :         SvTreeListBox::RequestingChildren( pFileEntry );
     963           0 : }
     964             : 
     965             : /**
     966             :  * Checks if it is a draw file and opens the BookmarkDoc depending of
     967             :  * the provided Docs
     968             :  */
     969           0 : SdDrawDocument* SdPageObjsTLB::GetBookmarkDoc(SfxMedium* pMed)
     970             : {
     971           0 :     if (
     972           0 :        !mpBookmarkDoc ||
     973           0 :          (pMed && (!mpOwnMedium || mpOwnMedium->GetName() != pMed->GetName()))
     974             :       )
     975             :     {
     976             :         // create a new BookmarkDoc if now one exists or if a new Medium is provided
     977           0 :         if (mpOwnMedium != pMed)
     978             :         {
     979           0 :             CloseBookmarkDoc();
     980             :         }
     981             : 
     982           0 :         if (pMed)
     983             :         {
     984             :             // it looks that it is undefined if a Medium was set by Fill() already
     985             :             DBG_ASSERT( !mpMedium, "SfxMedium confusion!" );
     986           0 :             delete mpMedium;
     987           0 :             mpMedium = NULL;
     988             : 
     989             :             // take over this Medium (currently used only be Navigator)
     990           0 :             mpOwnMedium = pMed;
     991             :         }
     992             : 
     993             :         DBG_ASSERT( mpMedium || pMed, "No SfxMedium provided!" );
     994             : 
     995           0 :         if( pMed )
     996             :         {
     997             :             // in this mode the document is also owned and controlled by this instance
     998           0 :             mxBookmarkDocShRef = new ::sd::DrawDocShell(SFX_CREATE_MODE_STANDARD, true);
     999           0 :             if (mxBookmarkDocShRef->DoLoad(pMed))
    1000           0 :                 mpBookmarkDoc = mxBookmarkDocShRef->GetDoc();
    1001             :             else
    1002           0 :                 mpBookmarkDoc = NULL;
    1003             :         }
    1004           0 :         else if ( mpMedium )
    1005             :             // in this mode the document is owned and controlled by the SdDrawDocument
    1006             :             // it can be released by calling the corresponding CloseBookmarkDoc method
    1007             :             // successful creation of a document makes this the owner of the medium
    1008           0 :             mpBookmarkDoc = ((SdDrawDocument*) mpDoc)->OpenBookmarkDoc(*mpMedium);
    1009             : 
    1010           0 :         if ( !mpBookmarkDoc )
    1011             :         {
    1012           0 :             MessageDialog aErrorBox(this, SD_RESSTR(STR_READ_DATA_ERROR));
    1013           0 :             aErrorBox.Execute();
    1014           0 :             mpMedium = 0; //On failure the SfxMedium is invalid
    1015             :         }
    1016             :     }
    1017             : 
    1018           0 :     return( mpBookmarkDoc );
    1019             : }
    1020             : 
    1021             : /**
    1022             :  * Close and delete bookmark document
    1023             :  */
    1024           0 : void SdPageObjsTLB::CloseBookmarkDoc()
    1025             : {
    1026           0 :     if (mxBookmarkDocShRef.Is())
    1027             :     {
    1028           0 :         mxBookmarkDocShRef->DoClose();
    1029           0 :         mxBookmarkDocShRef.Clear();
    1030             : 
    1031             :         // Medium is owned by document, so it's destroyed already
    1032           0 :         mpOwnMedium = 0;
    1033             :     }
    1034           0 :     else if ( mpBookmarkDoc )
    1035             :     {
    1036             :         DBG_ASSERT( !mpOwnMedium, "SfxMedium confusion!" );
    1037           0 :         if ( mpDoc )
    1038             :         {
    1039             :             // The document owns the Medium, so the Medium will be invalid after closing the document
    1040           0 :             ((SdDrawDocument*) mpDoc)->CloseBookmarkDoc();
    1041           0 :             mpMedium = 0;
    1042             :         }
    1043             :     }
    1044             :     else
    1045             :     {
    1046             :         // perhaps mpOwnMedium provided, but no successful creation of BookmarkDoc
    1047           0 :         delete mpOwnMedium;
    1048           0 :         mpOwnMedium = NULL;
    1049             :     }
    1050             : 
    1051           0 :     mpBookmarkDoc = NULL;
    1052           0 : }
    1053             : 
    1054           2 : void SdPageObjsTLB::SelectHdl()
    1055             : {
    1056           2 :     SvTreeListEntry* pEntry = FirstSelected();
    1057             : 
    1058           2 :     mbLinkableSelected = true;
    1059             : 
    1060           6 :     while( pEntry && mbLinkableSelected )
    1061             :     {
    1062           2 :         if( NULL == pEntry->GetUserData() )
    1063           0 :             mbLinkableSelected = false;
    1064             : 
    1065           2 :         pEntry = NextSelected( pEntry );
    1066             :     }
    1067             : 
    1068           2 :     SvTreeListBox::SelectHdl();
    1069           2 : }
    1070             : 
    1071             : /**
    1072             :  * Overloads RETURN with the functionality of DoubleClick
    1073             :  */
    1074           0 : void SdPageObjsTLB::KeyInput( const KeyEvent& rKEvt )
    1075             : {
    1076           0 :     if( rKEvt.GetKeyCode().GetCode() == KEY_RETURN )
    1077             :     {
    1078             :         // commented code from svtools/source/contnr/svimpbox.cxx
    1079           0 :         SvTreeListEntry* pCursor = GetCurEntry();
    1080           0 :         if( pCursor->HasChildren() || pCursor->HasChildrenOnDemand() )
    1081             :         {
    1082           0 :             if( IsExpanded( pCursor ) )
    1083           0 :                 Collapse( pCursor );
    1084             :             else
    1085           0 :                 Expand( pCursor );
    1086             :         }
    1087             : 
    1088           0 :         DoubleClickHdl();
    1089             :     }
    1090           0 :     else if (rKEvt.GetKeyCode().GetCode() == KEY_SPACE)
    1091             :     {
    1092           0 :         if(bisInSdNavigatorWin)
    1093             :         {
    1094           0 :             bool bMarked=false;
    1095           0 :             SvTreeListEntry* pNewEntry = GetCurEntry();
    1096           0 :             if (!pNewEntry)
    1097           0 :                 return;
    1098           0 :             SvTreeListEntry* pParentEntry = GetParent(pNewEntry);
    1099           0 :             if (!pParentEntry)
    1100           0 :                 return;
    1101           0 :             OUString  aStr(GetSelectEntry());
    1102           0 :             SdNavigatorWin* pSdNavigatorWin = (SdNavigatorWin*)pParentEntry;
    1103           0 :             sd::DrawDocShell* pSdDrawDocShell = pSdNavigatorWin->GetDrawDocShell(mpDoc);
    1104           0 :             if (pSdDrawDocShell)
    1105             :             {
    1106           0 :                 pSdDrawDocShell->GotoTreeBookmark(aStr);
    1107           0 :                 bMarked=pSdDrawDocShell->GetObjectIsmarked(aStr);
    1108             :             }
    1109           0 :             pNewEntry->SetMarked(bMarked);
    1110           0 :             Invalidate();
    1111             :         }
    1112             :     }
    1113             :     else
    1114           0 :         SvTreeListBox::KeyInput( rKEvt );
    1115             : }
    1116             : 
    1117             : /**
    1118             :  * StartDrag-Request
    1119             :  */
    1120           0 : void SdPageObjsTLB::StartDrag( sal_Int8 nAction, const Point& rPosPixel)
    1121             : {
    1122             :     (void)nAction;
    1123             :     (void)rPosPixel;
    1124             : 
    1125           0 :     SdNavigatorWin* pNavWin = NULL;
    1126           0 :     SvTreeListEntry* pEntry = GetEntry(rPosPixel);
    1127             : 
    1128           0 :     if( mpFrame->HasChildWindow( SID_NAVIGATOR ) )
    1129           0 :         pNavWin = (SdNavigatorWin*) ( mpFrame->GetChildWindow( SID_NAVIGATOR )->GetContextWindow( SD_MOD() ) );
    1130             : 
    1131           0 :     if (pEntry != NULL
    1132           0 :         && pNavWin !=NULL
    1133           0 :         && pNavWin == mpParent
    1134           0 :         && pNavWin->GetNavigatorDragType() != NAVIGATOR_DRAGTYPE_NONE )
    1135             :     {
    1136             :         // Mark only the children of the page under the mouse as drop
    1137             :         // targets.  This prevents moving shapes from one page to another.
    1138             : 
    1139             :         // Select all entries and disable them as drop targets.
    1140           0 :         SetSelectionMode(MULTIPLE_SELECTION);
    1141           0 :         SetCursor(NULL, false);
    1142           0 :         SelectAll(true, false);
    1143           0 :         EnableSelectionAsDropTarget(false, true);
    1144             : 
    1145             :         // Enable only the entries as drop targets that are children of the
    1146             :         // page under the mouse.
    1147           0 :         SvTreeListEntry* pParent = GetRootLevelParent(pEntry);
    1148           0 :         if (pParent != NULL)
    1149             :         {
    1150           0 :             SelectAll(false, false);
    1151           0 :             Select(pParent, true);
    1152             :             //            for (SvTreeListEntry*pChild=FirstChild(pParent); pChild!=NULL; pChild=NextSibling(pChild))
    1153             :             //                Select(pChild, sal_True);
    1154           0 :             EnableSelectionAsDropTarget(true, true);//sal_False);
    1155             :         }
    1156             : 
    1157             :         // Set selection back to the entry under the mouse.
    1158           0 :         SelectAll(false, false);
    1159           0 :         SetSelectionMode(SINGLE_SELECTION);
    1160           0 :         Select(pEntry, true);
    1161             : 
    1162             :         // We can delete the Navigator from ExecuteDrag (when switching to
    1163             :         // another document type), but that would kill the StarView MouseMove
    1164             :         // Handler which is calling Command().
    1165             :         // For this reason, Drag&Drop is asynchronous.
    1166           0 :         Application::PostUserEvent( STATIC_LINK( this, SdPageObjsTLB, ExecDragHdl ) );
    1167             :     }
    1168           0 : }
    1169             : 
    1170             : /**
    1171             :  * Begin drag
    1172             :  */
    1173           0 : void SdPageObjsTLB::DoDrag()
    1174             : {
    1175           0 :     mpDropNavWin = ( mpFrame->HasChildWindow( SID_NAVIGATOR ) ) ?
    1176           0 :                   (SdNavigatorWin*)( mpFrame->GetChildWindow( SID_NAVIGATOR )->GetContextWindow( SD_MOD() ) ) :
    1177           0 :                   NULL;
    1178             : 
    1179           0 :     if( mpDropNavWin )
    1180             :     {
    1181           0 :         ::sd::DrawDocShell* pDocShell = mpDoc->GetDocSh();
    1182           0 :         OUString aURL = INetURLObject( pDocShell->GetMedium()->GetPhysicalName(), INET_PROT_FILE ).GetMainURL( INetURLObject::NO_DECODE );
    1183           0 :         NavigatorDragType   eDragType = mpDropNavWin->GetNavigatorDragType();
    1184             : 
    1185           0 :         aURL += "#" + GetSelectEntry();
    1186             : 
    1187           0 :         INetBookmark    aBookmark( aURL, GetSelectEntry() );
    1188           0 :         sal_Int8        nDNDActions = DND_ACTION_COPYMOVE;
    1189             : 
    1190           0 :         if( eDragType == NAVIGATOR_DRAGTYPE_LINK )
    1191           0 :             nDNDActions = DND_ACTION_LINK;  // Either COPY *or* LINK, never both!
    1192           0 :         else if (mpDoc->GetSdPageCount(PK_STANDARD) == 1)
    1193             :         {
    1194             :             // Can not move away the last slide in a document.
    1195           0 :             nDNDActions = DND_ACTION_COPY;
    1196             :         }
    1197             : 
    1198           0 :         SvTreeListBox::ReleaseMouse();
    1199             : 
    1200           0 :         bIsInDrag = true;
    1201             : 
    1202             :         SvLBoxDDInfo aDDInfo;
    1203           0 :         memset(&aDDInfo,0,sizeof(SvLBoxDDInfo));
    1204           0 :         aDDInfo.pApp = GetpApp();
    1205           0 :         aDDInfo.pSource = this;
    1206             :         //            aDDInfo.pDDStartEntry = pEntry;
    1207           0 :         ::com::sun::star::uno::Sequence<sal_Int8> aSequence (sizeof(SvLBoxDDInfo));
    1208           0 :         memcpy(aSequence.getArray(), (sal_Char*)&aDDInfo, sizeof(SvLBoxDDInfo));
    1209           0 :         ::com::sun::star::uno::Any aTreeListBoxData (aSequence);
    1210             : 
    1211             :         // object is destroyed by internal reference mechanism
    1212             :         SdTransferable* pTransferable = new SdPageObjsTLB::SdPageObjsTransferable(
    1213           0 :             *this, aBookmark, *pDocShell, eDragType, aTreeListBoxData);
    1214             : 
    1215             :         // Get the view.
    1216           0 :         ::sd::ViewShell* pViewShell = GetViewShellForDocShell(*pDocShell);
    1217           0 :         if (pViewShell == NULL)
    1218             :         {
    1219             :             OSL_ASSERT(pViewShell!=NULL);
    1220           0 :             return;
    1221             :         }
    1222           0 :         sd::View* pView = pViewShell->GetView();
    1223           0 :         if (pView == NULL)
    1224             :         {
    1225             :             OSL_ASSERT(pView!=NULL);
    1226           0 :             return;
    1227             :         }
    1228             : 
    1229           0 :         SdrObject* pObject = NULL;
    1230           0 :         void* pUserData = GetCurEntry()->GetUserData();
    1231           0 :         if (pUserData != NULL && pUserData != (void*)1)
    1232           0 :             pObject = reinterpret_cast<SdrObject*>(pUserData);
    1233           0 :         if (pObject != NULL)
    1234             :         {
    1235             :             // For shapes without a user supplied name (the automatically
    1236             :             // created name does not count), a different drag and drop technique
    1237             :             // is used.
    1238           0 :             if (GetObjectName(pObject, false).isEmpty())
    1239             :             {
    1240           0 :                 AddShapeToTransferable(*pTransferable, *pObject);
    1241           0 :                 pTransferable->SetView(pView);
    1242           0 :                 SD_MOD()->pTransferDrag = pTransferable;
    1243             :             }
    1244             : 
    1245             :             // Unnamed shapes have to be selected to be recognized by the
    1246             :             // current drop implementation.  In order to have a consistent
    1247             :             // behaviour for all shapes, every shape that is to be dragged is
    1248             :             // selected first.
    1249           0 :             SdrPageView* pPageView = pView->GetSdrPageView();
    1250           0 :             pView->UnmarkAllObj(pPageView);
    1251           0 :             pView->MarkObj(pObject, pPageView);
    1252             :         }
    1253             :         else
    1254             :         {
    1255           0 :             pTransferable->SetView(pView);
    1256           0 :             SD_MOD()->pTransferDrag = pTransferable;
    1257             :         }
    1258             : 
    1259           0 :         pTransferable->StartDrag( this, nDNDActions );
    1260             :     }
    1261             : }
    1262             : 
    1263           0 : void SdPageObjsTLB::OnDragFinished( sal_uInt8 )
    1264             : {
    1265           0 :     if( mpFrame->HasChildWindow( SID_NAVIGATOR ) )
    1266             :     {
    1267           0 :         SdNavigatorWin* pNewNavWin = (SdNavigatorWin*) ( mpFrame->GetChildWindow( SID_NAVIGATOR )->GetContextWindow( SD_MOD() ) );
    1268             : 
    1269           0 :         if( mpDropNavWin == pNewNavWin)
    1270             :         {
    1271           0 :             MouseEvent aMEvt( mpDropNavWin->GetPointerPosPixel() );
    1272           0 :             SvTreeListBox::MouseButtonUp( aMEvt );
    1273             :         }
    1274             :     }
    1275             : 
    1276           0 :     mpDropNavWin = NULL;
    1277           0 :     bIsInDrag = false;
    1278           0 : }
    1279             : 
    1280             : /**
    1281             :  * AcceptDrop-Event
    1282             :  */
    1283           0 : sal_Int8 SdPageObjsTLB::AcceptDrop (const AcceptDropEvent& rEvent)
    1284             : {
    1285           0 :     sal_Int8 nResult (DND_ACTION_NONE);
    1286             : 
    1287           0 :     if ( !bIsInDrag && IsDropFormatSupported( FORMAT_FILE ) )
    1288             :     {
    1289           0 :         nResult = rEvent.mnAction;
    1290             :     }
    1291             :     else
    1292             :     {
    1293           0 :         SvTreeListEntry* pEntry = GetDropTarget(rEvent.maPosPixel);
    1294           0 :         if (rEvent.mbLeaving || !CheckDragAndDropMode( this, rEvent.mnAction ))
    1295             :         {
    1296           0 :             ImplShowTargetEmphasis( pTargetEntry, false );
    1297             :         }
    1298           0 :         else if( !GetDragDropMode() )
    1299             :         {
    1300             :             SAL_WARN( "sc.ui", "SdPageObjsTLB::AcceptDrop(): no target" );
    1301             :         }
    1302           0 :         else if (IsDropAllowed(pEntry))
    1303             :         {
    1304           0 :             nResult = DND_ACTION_MOVE;
    1305             : 
    1306             :             // Draw emphasis.
    1307           0 :             if (pEntry != pTargetEntry || !(nImpFlags & SVLBOX_TARGEMPH_VIS))
    1308             :             {
    1309           0 :                 ImplShowTargetEmphasis( pTargetEntry, false );
    1310           0 :                 pTargetEntry = pEntry;
    1311           0 :                 ImplShowTargetEmphasis( pTargetEntry, true );
    1312             :             }
    1313             :         }
    1314             :     }
    1315             : 
    1316             :     // Hide emphasis when there is no valid drop action.
    1317           0 :     if (nResult == DND_ACTION_NONE)
    1318           0 :         ImplShowTargetEmphasis(pTargetEntry, false);
    1319             : 
    1320           0 :     return nResult;
    1321             : }
    1322             : 
    1323             : /**
    1324             :  * ExecuteDrop-Event
    1325             :  */
    1326           0 : sal_Int8 SdPageObjsTLB::ExecuteDrop( const ExecuteDropEvent& rEvt )
    1327             : {
    1328           0 :     sal_Int8 nRet = DND_ACTION_NONE;
    1329             : 
    1330             :     try
    1331             :     {
    1332           0 :         if( !bIsInDrag )
    1333             :         {
    1334           0 :             SdNavigatorWin* pNavWin = NULL;
    1335           0 :             sal_uInt16          nId = SID_NAVIGATOR;
    1336             : 
    1337           0 :             if( mpFrame->HasChildWindow( nId ) )
    1338           0 :                 pNavWin = (SdNavigatorWin*)( mpFrame->GetChildWindow( nId )->GetContextWindow( SD_MOD() ) );
    1339             : 
    1340           0 :             if( pNavWin && ( pNavWin == mpParent ) )
    1341             :             {
    1342           0 :                 TransferableDataHelper  aDataHelper( rEvt.maDropEvent.Transferable );
    1343           0 :                 OUString                aFile;
    1344             : 
    1345           0 :                 if( aDataHelper.GetString( FORMAT_FILE, aFile ) &&
    1346           0 :                     ( (SdNavigatorWin*) mpParent)->InsertFile( aFile ) )
    1347             :                 {
    1348           0 :                     nRet = rEvt.mnAction;
    1349           0 :                 }
    1350             :             }
    1351             :         }
    1352             :     }
    1353           0 :     catch (com::sun::star::uno::Exception&)
    1354             :     {
    1355             :         DBG_UNHANDLED_EXCEPTION();
    1356             :     }
    1357             : 
    1358           0 :     if (nRet == DND_ACTION_NONE)
    1359           0 :         SvTreeListBox::ExecuteDrop(rEvt, this);
    1360             : 
    1361           0 :     return nRet;
    1362             : }
    1363             : 
    1364             : /**
    1365             :  * Handler for Dragging
    1366             :  */
    1367           0 : IMPL_STATIC_LINK(SdPageObjsTLB, ExecDragHdl, void*, EMPTYARG)
    1368             : {
    1369             :     // as link, then it is allowed to asynchronous, without ImpMouseMoveMsg on
    1370             :     // the stack, delete the Navigator
    1371           0 :     pThis->DoDrag();
    1372           0 :     return 0;
    1373             : }
    1374             : 
    1375           2 : bool SdPageObjsTLB::PageBelongsToCurrentShow (const SdPage* pPage) const
    1376             : {
    1377             :     // Return <TRUE/> as default when there is no custom show or when none
    1378             :     // is used.  The page does then belong to the standard show.
    1379           2 :     bool bBelongsToShow = true;
    1380             : 
    1381           2 :     if (mpDoc->getPresentationSettings().mbCustomShow)
    1382             :     {
    1383             :         // Get the current custom show.
    1384           0 :         SdCustomShow* pCustomShow = NULL;
    1385           0 :         SdCustomShowList* pShowList = const_cast<SdDrawDocument*>(mpDoc)->GetCustomShowList();
    1386           0 :         if (pShowList != NULL)
    1387             :         {
    1388           0 :             sal_uLong nCurrentShowIndex = pShowList->GetCurPos();
    1389           0 :             pCustomShow = (*pShowList)[nCurrentShowIndex];
    1390             :         }
    1391             : 
    1392             :         // Check whether the given page is part of that custom show.
    1393           0 :         if (pCustomShow != NULL)
    1394             :         {
    1395           0 :             bBelongsToShow = false;
    1396           0 :             size_t nPageCount = pCustomShow->PagesVector().size();
    1397           0 :             for (size_t i=0; i<nPageCount && !bBelongsToShow; i++)
    1398           0 :                 if (pPage == pCustomShow->PagesVector()[i])
    1399           0 :                     bBelongsToShow = true;
    1400             :         }
    1401             :     }
    1402             : 
    1403           2 :     return bBelongsToShow;
    1404             : }
    1405             : 
    1406           0 : TriState SdPageObjsTLB::NotifyMoving(
    1407             :     SvTreeListEntry* pTarget,
    1408             :     SvTreeListEntry* pEntry,
    1409             :     SvTreeListEntry*& rpNewParent,
    1410             :     sal_uLong& rNewChildPos)
    1411             : {
    1412           0 :     SvTreeListEntry* pDestination = pTarget;
    1413           0 :     while (GetParent(pDestination) != NULL && GetParent(GetParent(pDestination)) != NULL)
    1414           0 :         pDestination = GetParent(pDestination);
    1415             : 
    1416           0 :     SdrObject* pTargetObject = reinterpret_cast<SdrObject*>(pDestination->GetUserData());
    1417           0 :     SdrObject* pSourceObject = reinterpret_cast<SdrObject*>(pEntry->GetUserData());
    1418           0 :     if (pSourceObject == reinterpret_cast<SdrObject*>(1))
    1419           0 :         pSourceObject = NULL;
    1420             : 
    1421           0 :     if (pTargetObject != NULL && pSourceObject != NULL)
    1422             :     {
    1423           0 :         SdrPage* pObjectList = pSourceObject->GetPage();
    1424           0 :         if (pObjectList != NULL)
    1425             :         {
    1426             :             sal_uInt32 nNewPosition;
    1427           0 :             if (pTargetObject == reinterpret_cast<SdrObject*>(1))
    1428           0 :                 nNewPosition = 0;
    1429             :             else
    1430           0 :                 nNewPosition = pTargetObject->GetNavigationPosition() + 1;
    1431           0 :             pObjectList->SetObjectNavigationPosition(*pSourceObject, nNewPosition);
    1432             :         }
    1433             : 
    1434             :         // Update the tree list.
    1435           0 :         if (GetParent(pDestination) == NULL)
    1436             :         {
    1437           0 :             rpNewParent = pDestination;
    1438           0 :             rNewChildPos = 0;
    1439             :         }
    1440             :         else
    1441             :         {
    1442           0 :             rpNewParent = GetParent(pDestination);
    1443           0 :             rNewChildPos = pModel->GetRelPos(pDestination) + 1;
    1444           0 :             rNewChildPos += nCurEntrySelPos;
    1445           0 :             nCurEntrySelPos++;
    1446             :         }
    1447           0 :         return TRISTATE_TRUE;
    1448             :     }
    1449             :     else
    1450           0 :         return TRISTATE_FALSE;
    1451             : }
    1452             : 
    1453           0 : SvTreeListEntry* SdPageObjsTLB::GetDropTarget (const Point& rLocation)
    1454             : {
    1455           0 :     SvTreeListEntry* pEntry = SvTreeListBox::GetDropTarget(rLocation);
    1456           0 :     if (pEntry == NULL)
    1457           0 :         return NULL;
    1458             : 
    1459           0 :     if (GetParent(pEntry) == NULL)
    1460             :     {
    1461             :         // Use page entry as insertion position.
    1462             :     }
    1463             :     else
    1464             :     {
    1465             :         // Go to second hierarchy level, i.e. top level shapes,
    1466             :         // i.e. children of pages.
    1467           0 :         while (GetParent(pEntry) != NULL && GetParent(GetParent(pEntry)) != NULL)
    1468           0 :             pEntry = GetParent(pEntry);
    1469             : 
    1470             :         // Advance to next sibling.
    1471             :         SvTreeListEntry* pNext;
    1472           0 :         sal_uInt16 nDepth (0);
    1473           0 :         do
    1474             :         {
    1475           0 :             pNext = dynamic_cast<SvTreeListEntry*>(NextVisible(pEntry, &nDepth));
    1476           0 :             if (pNext != NULL && nDepth > 0 && nDepth!=0xffff)
    1477           0 :                 pEntry = pNext;
    1478             :             else
    1479             :                 break;
    1480             :         }
    1481             :         while (pEntry != NULL);
    1482             :     }
    1483             : 
    1484           0 :     return pEntry;
    1485             : }
    1486             : 
    1487           0 : bool SdPageObjsTLB::IsDropAllowed (SvTreeListEntry* pEntry)
    1488             : {
    1489           0 :     if (pEntry == NULL)
    1490           0 :         return false;
    1491             : 
    1492           0 :     if ( ! IsDropFormatSupported(SdPageObjsTransferable::GetListBoxDropFormatId()))
    1493           0 :         return false;
    1494             : 
    1495           0 :     if ((pEntry->GetFlags() & SV_ENTRYFLAG_DISABLE_DROP) != 0)
    1496           0 :         return false;
    1497             : 
    1498           0 :     return true;
    1499             : }
    1500             : 
    1501           0 : void SdPageObjsTLB::AddShapeToTransferable (
    1502             :     SdTransferable& rTransferable,
    1503             :     SdrObject& rObject) const
    1504             : {
    1505           0 :     TransferableObjectDescriptor aObjectDescriptor;
    1506           0 :     bool bIsDescriptorFillingPending (true);
    1507             : 
    1508           0 :     const SdrOle2Obj* pOleObject = dynamic_cast<const SdrOle2Obj*>(&rObject);
    1509           0 :     if (pOleObject != NULL && pOleObject->GetObjRef().is())
    1510             :     {
    1511             :         // If object has no persistence it must be copied as part of the document
    1512             :         try
    1513             :         {
    1514           0 :             uno::Reference< embed::XEmbedPersist > xPersObj (pOleObject->GetObjRef(), uno::UNO_QUERY );
    1515           0 :             if (xPersObj.is() && xPersObj->hasEntry())
    1516             :             {
    1517             :                 SvEmbedTransferHelper::FillTransferableObjectDescriptor(
    1518             :                     aObjectDescriptor,
    1519             :                     pOleObject->GetObjRef(),
    1520             :                     pOleObject->GetGraphic(),
    1521           0 :                     pOleObject->GetAspect());
    1522           0 :                 bIsDescriptorFillingPending = false;
    1523           0 :             }
    1524             :         }
    1525           0 :         catch( uno::Exception& )
    1526             :         {
    1527             :         }
    1528             :     }
    1529             : 
    1530           0 :     ::sd::DrawDocShell* pDocShell = mpDoc->GetDocSh();
    1531           0 :     if (bIsDescriptorFillingPending && pDocShell!=NULL)
    1532             :     {
    1533           0 :         pDocShell->FillTransferableObjectDescriptor(aObjectDescriptor);
    1534             :     }
    1535             : 
    1536           0 :     Point aDragPos (rObject.GetCurrentBoundRect().Center());
    1537             :     //Point aDragPos (0,0);
    1538           0 :     aObjectDescriptor.maDragStartPos = aDragPos;
    1539             :     //  aObjectDescriptor.maSize = GetAllMarkedRect().GetSize();
    1540           0 :     if (pDocShell != NULL)
    1541           0 :         aObjectDescriptor.maDisplayName = pDocShell->GetMedium()->GetURLObject().GetURLNoPass();
    1542             :     else
    1543           0 :         aObjectDescriptor.maDisplayName = OUString();
    1544           0 :     aObjectDescriptor.mbCanLink = false;
    1545             : 
    1546           0 :     rTransferable.SetStartPos(aDragPos);
    1547           0 :     rTransferable.SetObjectDescriptor( aObjectDescriptor );
    1548           0 : }
    1549             : 
    1550           0 : ::sd::ViewShell* SdPageObjsTLB::GetViewShellForDocShell (::sd::DrawDocShell& rDocShell)
    1551             : {
    1552             :     {
    1553           0 :         ::sd::ViewShell* pViewShell = rDocShell.GetViewShell();
    1554           0 :         if (pViewShell != NULL)
    1555           0 :             return pViewShell;
    1556             :     }
    1557             : 
    1558             :     try
    1559             :     {
    1560             :         // Get a component enumeration from the desktop and search it for documents.
    1561           0 :         uno::Reference<uno::XComponentContext> xContext( ::comphelper::getProcessComponentContext());
    1562             : 
    1563           0 :         uno::Reference<frame::XDesktop2> xDesktop = frame::Desktop::create(xContext);
    1564             : 
    1565           0 :         uno::Reference<frame::XFramesSupplier> xFrameSupplier (xDesktop, uno::UNO_QUERY);
    1566           0 :         if ( ! xFrameSupplier.is())
    1567           0 :             return NULL;
    1568             : 
    1569           0 :         uno::Reference<container::XIndexAccess> xFrameAccess (xFrameSupplier->getFrames(), uno::UNO_QUERY);
    1570           0 :         if ( ! xFrameAccess.is())
    1571           0 :             return NULL;
    1572             : 
    1573           0 :         for (sal_Int32 nIndex=0,nCount=xFrameAccess->getCount(); nIndex<nCount; ++nIndex)
    1574             :         {
    1575           0 :             uno::Reference<frame::XFrame> xFrame;
    1576           0 :             if ( ! (xFrameAccess->getByIndex(nIndex) >>= xFrame))
    1577           0 :                 continue;
    1578             : 
    1579           0 :             ::sd::DrawController* pController = dynamic_cast<sd::DrawController*>(xFrame->getController().get());
    1580           0 :             if (pController == NULL)
    1581           0 :                 continue;
    1582           0 :             ::sd::ViewShellBase* pBase = pController->GetViewShellBase();
    1583           0 :             if (pBase == NULL)
    1584           0 :                 continue;
    1585           0 :             if (pBase->GetDocShell() != &rDocShell)
    1586           0 :                 continue;
    1587             : 
    1588           0 :             const ::boost::shared_ptr<sd::ViewShell> pViewShell (pBase->GetMainViewShell());
    1589           0 :             if (pViewShell)
    1590           0 :                 return pViewShell.get();
    1591           0 :         }
    1592             :     }
    1593           0 :     catch (uno::Exception &)
    1594             :     {
    1595             :         // When there is an exception then simply use the default value of
    1596             :         // bIsEnabled and disable the controls.
    1597             :     }
    1598           0 :     return NULL;
    1599             : }
    1600             : 
    1601             : //===== IconProvider ==========================================================
    1602             : 
    1603           2 : SdPageObjsTLB::IconProvider::IconProvider (void)
    1604             :     : maImgPage( BitmapEx( SdResId( BMP_PAGE ) ) ),
    1605             :       maImgPageExcl( BitmapEx( SdResId( BMP_PAGE_EXCLUDED ) ) ),
    1606             :       maImgPageObjsExcl( BitmapEx( SdResId( BMP_PAGEOBJS_EXCLUDED ) ) ),
    1607             :       maImgPageObjs( BitmapEx( SdResId( BMP_PAGEOBJS ) ) ),
    1608             :       maImgObjects( BitmapEx( SdResId( BMP_OBJECTS ) ) ),
    1609           2 :       maImgGroup( BitmapEx( SdResId( BMP_GROUP ) ) )
    1610             : {
    1611         116 : }
    1612             : 
    1613             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10