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

Generated by: LCOV version 1.11