xref: /aoo41x/main/sd/source/ui/dlg/sdtreelb.cxx (revision 0deba7fb)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sd.hxx"
26 
27 #include <sal/types.h>
28 #include <sot/formats.hxx>
29 #include <sot/storage.hxx>
30 #include <vcl/msgbox.hxx>
31 #include <svl/urihelper.hxx>
32 #include <svx/svditer.hxx>
33 #include <sfx2/docfile.hxx>
34 #include <svx/svdoole2.hxx>
35 #include <vcl/svapp.hxx>
36 #include "cusshow.hxx"
37 #include <sfx2/childwin.hxx>
38 
39 #include <sfx2/viewfrm.hxx>
40 
41 #include "strmname.h"
42 #include "sdtreelb.hxx"
43 #include "DrawDocShell.hxx"
44 #include "drawdoc.hxx"
45 #include "sdpage.hxx"
46 #include "sdresid.hxx"
47 #include "navigatr.hxx"
48 #ifndef _SD_CFGID_HXX
49 #include "strings.hrc"
50 #endif
51 #include "res_bmp.hrc"
52 #include "ViewShell.hxx"
53 #include "DrawController.hxx"
54 #include "ViewShellBase.hxx"
55 
56 #include <com/sun/star/embed/XEmbedPersist.hpp>
57 #include <com/sun/star/frame/XDesktop.hpp>
58 #include <com/sun/star/frame/XFramesSupplier.hpp>
59 #include <svtools/embedtransfer.hxx>
60 #include <comphelper/processfactory.hxx>
61 #include <tools/diagnose_ex.h>
62 
63 using namespace com::sun::star;
64 
65 class SdPageObjsTLB::IconProvider
66 {
67 public:
68     IconProvider (void);
69 
70     // Regular icons.
71     Image maImgPage;
72     Image maImgPageExcl;
73     Image maImgPageObjsExcl;
74     Image maImgPageObjs;
75     Image maImgObjects;
76     Image maImgGroup;
77 
78     // High contrast icons.
79     Image maImgPageH;
80     Image maImgPageExclH;
81     Image maImgPageObjsExclH;
82     Image maImgPageObjsH;
83     Image maImgObjectsH;
84     Image maImgGroupH;
85 };
86 
87 
88 sal_Bool SD_DLLPRIVATE SdPageObjsTLB::bIsInDrag = sal_False;
89 
90 sal_Bool SdPageObjsTLB::IsInDrag()
91 {
92 	return bIsInDrag;
93 }
94 
95 sal_uInt32 SdPageObjsTLB::SdPageObjsTransferable::mnListBoxDropFormatId = SAL_MAX_UINT32;
96 
97 // -----------------------------------------
98 // - SdPageObjsTLB::SdPageObjsTransferable -
99 // -----------------------------------------
100 
101 SdPageObjsTLB::SdPageObjsTransferable::SdPageObjsTransferable(
102     SdPageObjsTLB& rParent,
103         const INetBookmark& rBookmark,
104     ::sd::DrawDocShell& rDocShell,
105     NavigatorDragType eDragType,
106     const ::com::sun::star::uno::Any& rTreeListBoxData )
107     : SdTransferable(rDocShell.GetDoc(), NULL, sal_True),
108       mrParent( rParent ),
109       maBookmark( rBookmark ),
110       mrDocShell( rDocShell ),
111       meDragType( eDragType ),
112       maTreeListBoxData( rTreeListBoxData )
113 {
114 }
115 
116 
117 
118 
119 SdPageObjsTLB::SdPageObjsTransferable::~SdPageObjsTransferable()
120 {
121 }
122 
123 // -----------------------------------------------------------------------------
124 
125 void SdPageObjsTLB::SdPageObjsTransferable::AddSupportedFormats()
126 {
127     AddFormat(SOT_FORMATSTR_ID_NETSCAPE_BOOKMARK);
128     AddFormat(SOT_FORMATSTR_ID_TREELISTBOX);
129     AddFormat(GetListBoxDropFormatId());
130 }
131 
132 // -----------------------------------------------------------------------------
133 
134 sal_Bool SdPageObjsTLB::SdPageObjsTransferable::GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor )
135 {
136 	sal_uLong nFormatId = SotExchange::GetFormat( rFlavor );
137     switch (nFormatId)
138     {
139         case SOT_FORMATSTR_ID_NETSCAPE_BOOKMARK:
140             SetINetBookmark( maBookmark, rFlavor );
141             return sal_True;
142 
143         case SOT_FORMATSTR_ID_TREELISTBOX:
144             SetAny(maTreeListBoxData, rFlavor);
145             return sal_True;
146 
147         default:
148             return sal_False;
149     }
150 }
151 
152 // -----------------------------------------------------------------------------
153 
154 void SdPageObjsTLB::SdPageObjsTransferable::DragFinished( sal_Int8 nDropAction )
155 {
156 	mrParent.OnDragFinished( nDropAction );
157     SdTransferable::DragFinished(nDropAction);
158 }
159 
160 // -----------------------------------------------------------------------------
161 
162 ::sd::DrawDocShell& SdPageObjsTLB::SdPageObjsTransferable::GetDocShell() const
163 {
164     return mrDocShell;
165 }
166 
167 // -----------------------------------------------------------------------------
168 
169 NavigatorDragType SdPageObjsTLB::SdPageObjsTransferable::GetDragType() const
170 {
171     return meDragType;
172 }
173 
174 // -----------------------------------------------------------------------------
175 
176 sal_Int64 SAL_CALL SdPageObjsTLB::SdPageObjsTransferable::getSomething( const ::com::sun::star::uno::Sequence< sal_Int8 >& rId ) throw( ::com::sun::star::uno::RuntimeException )
177 {
178     sal_Int64 nRet;
179 
180     if( ( rId.getLength() == 16 ) &&
181         ( 0 == rtl_compareMemory( getUnoTunnelId().getConstArray(), rId.getConstArray(), 16 ) ) )
182     {
183         nRet = (sal_Int64)(sal_IntPtr)this;
184     }
185     else
186         nRet = SdTransferable::getSomething(rId);
187 
188 	return nRet;
189 }
190 
191 // -----------------------------------------------------------------------------
192 
193 const ::com::sun::star::uno::Sequence< sal_Int8 >& SdPageObjsTLB::SdPageObjsTransferable::getUnoTunnelId()
194 {
195     static ::com::sun::star::uno::Sequence< sal_Int8 > aSeq;
196 
197 	if( !aSeq.getLength() )
198 	{
199 		static osl::Mutex   aCreateMutex;
200     	osl::MutexGuard     aGuard( aCreateMutex );
201 
202 		aSeq.realloc( 16 );
203     	rtl_createUuid( reinterpret_cast< sal_uInt8* >( aSeq.getArray() ), 0, sal_True );
204 	}
205 
206     return aSeq;
207 }
208 
209 // -----------------------------------------------------------------------------
210 
211 SdPageObjsTLB::SdPageObjsTransferable* SdPageObjsTLB::SdPageObjsTransferable::getImplementation( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& rxData )
212     throw()
213 {
214     try
215     {
216 	    ::com::sun::star::uno::Reference< ::com::sun::star::lang::XUnoTunnel > xUnoTunnel( rxData, ::com::sun::star::uno::UNO_QUERY_THROW );
217 
218 		return reinterpret_cast<SdPageObjsTLB::SdPageObjsTransferable*>(
219 				sal::static_int_cast<sal_uIntPtr>(
220 					xUnoTunnel->getSomething( SdPageObjsTLB::SdPageObjsTransferable::getUnoTunnelId()) ) );
221     }
222     catch( const ::com::sun::star::uno::Exception& )
223 	{
224 	}
225 	return 0;
226 }
227 
228 
229 sal_uInt32 SdPageObjsTLB::SdPageObjsTransferable::GetListBoxDropFormatId (void)
230 {
231     if (mnListBoxDropFormatId == SAL_MAX_UINT32)
232         mnListBoxDropFormatId = SotExchange::RegisterFormatMimeType(
233             ::rtl::OUString::createFromAscii(
234                 "application/x-openoffice-treelistbox-moveonly;"
235                     "windows_formatname=\"SV_LBOX_DD_FORMAT_MOVE\""));
236     return mnListBoxDropFormatId;
237 }
238 
239 
240 
241 
242 /*************************************************************************
243 |*
244 |* Ctor1 SdPageObjsTLB
245 |*
246 \************************************************************************/
247 
248 SdPageObjsTLB::SdPageObjsTLB( Window* pParentWin, const SdResId& rSdResId )
249 :	SvTreeListBox       ( pParentWin, rSdResId )
250 ,   bisInSdNavigatorWin  ( sal_False )
251 ,	mpParent 		    ( pParentWin )
252 ,	mpDoc			    ( NULL )
253 ,	mpBookmarkDoc	    ( NULL )
254 ,	mpMedium 	    	( NULL )
255 ,	mpOwnMedium		    ( NULL )
256 ,	maImgOle             ( BitmapEx( SdResId( BMP_OLE ) ) )
257 ,	maImgGraphic         ( BitmapEx( SdResId( BMP_GRAPHIC ) ) )
258 ,	maImgOleH            ( BitmapEx( SdResId( BMP_OLE_H ) ) )
259 ,	maImgGraphicH        ( BitmapEx( SdResId( BMP_GRAPHIC_H ) ) )
260 ,	mbLinkableSelected  ( sal_False )
261 ,	mpDropNavWin		( NULL )
262 ,   mbShowAllShapes     ( false )
263 ,   mbShowAllPages      ( false )
264 {
265 	// Tree-ListBox mit Linien versehen
266 	SetStyle( GetStyle() | WB_TABSTOP | WB_BORDER | WB_HASLINES |
267 						   WB_HASBUTTONS | // WB_HASLINESATROOT |
268 						   WB_HSCROLL | // #31562#
269 						   WB_HASBUTTONSATROOT |
270                            WB_QUICK_SEARCH /* i31275 */ );
271 	SetNodeBitmaps( Bitmap( SdResId( BMP_EXPAND ) ),
272 					Bitmap( SdResId( BMP_COLLAPSE ) ) );
273 
274 	SetNodeBitmaps( Bitmap( SdResId( BMP_EXPAND_H ) ),
275 					Bitmap( SdResId( BMP_COLLAPSE_H ) ),
276 					BMP_COLOR_HIGHCONTRAST );
277 
278     SetDragDropMode(
279  		SV_DRAGDROP_CTRL_MOVE | SV_DRAGDROP_CTRL_COPY |
280             SV_DRAGDROP_APP_MOVE  | SV_DRAGDROP_APP_COPY  | SV_DRAGDROP_APP_DROP );
281 }
282 
283 /*************************************************************************
284 |*
285 |* Dtor SdPageObjsTLB
286 |*
287 \************************************************************************/
288 
289 SdPageObjsTLB::~SdPageObjsTLB()
290 {
291     if ( mpBookmarkDoc )
292         CloseBookmarkDoc();
293     else
294         // no document was created from mpMedium, so this object is still the owner of it
295         delete mpMedium;
296 }
297 
298 //IAccessibility2 Implementation 2009-----
299 // helper function for 	GetEntryAltText and GetEntryLongDescription
300 String SdPageObjsTLB::getAltLongDescText( SvLBoxEntry* pEntry , sal_Bool isAltText) const
301 {
302 	sal_uInt16 maxPages = mpDoc->GetPageCount();
303 	sal_uInt16 pageNo;
304 	SdrObject*	 pObj = NULL;
305 	SdPage* pPage = NULL;
306 
307 
308 	String ParentName = GetEntryText( GetRootLevelParent( pEntry ) );
309 
310 	for( pageNo = 0;  pageNo < maxPages; pageNo++ )
311 	{
312 		pPage = (SdPage*) mpDoc->GetPage( pageNo );
313 		if( pPage->GetPageKind() != PK_STANDARD ) continue;
314 		if( pPage->GetName() !=  ParentName ) continue;
315 		SdrObjListIter aIter( *pPage, IM_FLAT );
316 		while( aIter.IsMore() )
317 		{
318 			pObj = aIter.Next();
319 			if( GetEntryText(pEntry) ==  GetObjectName( pObj )  )
320 			{
321 				if( isAltText )
322 					return pObj->GetTitle();
323 				else
324 					return pObj->GetDescription();
325 			}
326 		}
327 	}
328 	return String();
329 
330 }
331 
332 String SdPageObjsTLB::GetEntryAltText( SvLBoxEntry* pEntry ) const
333 {
334 	return getAltLongDescText( pEntry, sal_True );
335 }
336 
337 String SdPageObjsTLB::GetEntryLongDescription( SvLBoxEntry* pEntry ) const
338 {
339 	return getAltLongDescText( pEntry, sal_False);
340 }
341 
342 void  SdPageObjsTLB::MarkCurEntry( const String& rName )
343 {
344 
345 	if( rName.Len() )
346 	{
347 		SvLBoxEntry* pCurEntry =GetCurEntry();
348 		SvLBoxEntry* pEntry =NULL;
349 		String aTmp1;
350 		String aTmp2;
351 
352 	       if( GetParent(pCurEntry)==NULL )
353 	       {
354 	              aTmp1 = GetEntryText( pCurEntry );
355 		       for( pEntry = First(); pEntry ; pEntry = Next( pEntry ) )
356 			{
357 			       if(GetParent( pEntry )==NULL)
358 				   	     continue;
359 				aTmp2 = GetEntryText( GetParent( pEntry ));
360 				if( aTmp1 != aTmp2)
361 				{
362 					// IA2 CWS. MT: Removed in SvLBoxEntry for now - only used in Sw/Sd/ScContentLBoxString, they should decide if they need this
363 					pEntry->SetMarked(sal_False);
364 				}
365 			}
366 
367 	       }
368               else
369               {
370 	              for( pEntry = First(); pEntry ; pEntry = Next( pEntry ) )
371 			{
372 				aTmp2 = GetEntryText( pEntry );
373 				if( aTmp2 == rName)
374 				{
375 					pEntry->SetMarked(sal_True);
376 				}
377 				else
378 				{
379 				        pEntry->SetMarked(sal_False);
380 				}
381 			}
382               }
383 	}
384 	Invalidate();
385 }
386 
387 void  SdPageObjsTLB:: FreshCurEntry()
388 {
389        SvLBoxEntry* pEntry =NULL;
390        for( pEntry = First(); pEntry ; pEntry = Next( pEntry ) )
391 	{
392 		        pEntry->SetMarked(sal_False);
393 	}
394 	Invalidate();
395 }
396 
397 class SdContentLBoxString : public SvLBoxString
398 {
399 public:
400 	SdContentLBoxString( SvLBoxEntry* pEntry, sal_uInt16 nFlags,
401 		const String& rStr ) : SvLBoxString(pEntry,nFlags,rStr)	{}
402 
403 	virtual void Paint( const Point& rPos, SvLBox& rDev, sal_uInt16 nFlags,
404 		SvLBoxEntry* pEntry);
405 };
406 
407 void SdPageObjsTLB::InitEntry(SvLBoxEntry* pEntry,
408 		const XubString& rStr ,const Image& rImg1,const Image& rImg2,SvLBoxButtonKind eButtonKind)
409 {
410 	sal_uInt16 nColToHilite = 1; //0==Bitmap;1=="Spalte1";2=="Spalte2"
411 	SvTreeListBox::InitEntry( pEntry, rStr, rImg1, rImg2, eButtonKind );
412 	SvLBoxString* pCol = (SvLBoxString*)pEntry->GetItem( nColToHilite );
413 	SdContentLBoxString* pStr = new SdContentLBoxString( pEntry, 0, pCol->GetText() );
414 	pEntry->ReplaceItem( pStr, nColToHilite );
415 }
416 
417 void SdContentLBoxString::Paint( const Point& rPos, SvLBox& rDev, sal_uInt16 nFlags,
418 	SvLBoxEntry* pEntry )
419 {
420 	// IA2 CWS. MT: Removed for now (also in SvLBoxEntry) - only used in Sw/Sd/ScContentLBoxString, they should decide if they need this
421 	/*
422 	if (pEntry->IsMarked())
423 	{
424 			rDev.DrawText( rPos, GetText() );
425 			XubString str;
426 			str = XubString::CreateFromAscii("*");
427 			Point rPosStar(rPos.X()-6,rPos.Y());
428 			Font aOldFont( rDev.GetFont());
429 			Font aFont(aOldFont);
430 			Color aCol( aOldFont.GetColor() );
431 			aCol.DecreaseLuminance( 200 );
432 			aFont.SetColor( aCol );
433 			rDev.SetFont( aFont );
434 			rDev.DrawText( rPosStar, str);
435 			rDev.SetFont( aOldFont );
436 	}
437 	else
438 	*/
439 		SvLBoxString::Paint( rPos, rDev, nFlags, pEntry);
440 
441 }
442 
443 void SdPageObjsTLB::SaveExpandedTreeItemState(SvLBoxEntry* pEntry, vector<String>& vectTreeItem)
444 {
445 	if (pEntry)
446 	{
447 		SvLBoxEntry* pListEntry = pEntry;
448 		while (pListEntry)
449 		{
450 			if (pListEntry->HasChilds())
451 			{
452 				if (IsExpanded(pListEntry))
453 					vectTreeItem.push_back(GetEntryText(pListEntry));
454 				SvLBoxEntry* pChildEntry = FirstChild(pListEntry);
455 				SaveExpandedTreeItemState(pChildEntry, vectTreeItem);
456 			}
457 			pListEntry = NextSibling(pListEntry);
458 		}
459 	}
460 }
461 void SdPageObjsTLB::Clear()
462 {
463 	//Save the expanded tree item
464 	if (mbSaveTreeItemState)
465 	{
466 		maSelectionEntryText = String();
467 		maTreeItem.clear();
468 		if (GetCurEntry())
469 			maSelectionEntryText = GetSelectEntry();
470 		SvLBoxEntry* pEntry = FirstChild(NULL);
471 		SaveExpandedTreeItemState(pEntry, maTreeItem);
472 	}
473 	return SvTreeListBox::Clear();
474 }
475 //-----IAccessibility2 Implementation 2009
476 /*************************************************************************
477 |*
478 |* return name of object
479 |*
480 \************************************************************************/
481 
482 String SdPageObjsTLB::GetObjectName(
483     const SdrObject* pObject,
484     const bool bCreate) const
485 {
486     String aRet;
487 
488     if ( pObject )
489     {
490         aRet = pObject->GetName();
491 
492         if( !aRet.Len() && pObject->ISA( SdrOle2Obj ) )
493             aRet = static_cast< const SdrOle2Obj* >( pObject )->GetPersistName();
494     }
495 
496     if (bCreate
497         && mbShowAllShapes
498         && aRet.Len() == 0
499         && pObject!=NULL)
500     {
501         aRet = SdResId(STR_NAVIGATOR_SHAPE_BASE_NAME);
502         aRet.SearchAndReplaceAscii("%1", String::CreateFromInt32(pObject->GetOrdNum() + 1));
503     }
504 
505     return aRet;
506 }
507 
508 /*************************************************************************
509 |*
510 |* In TreeLB Eintrag selektieren
511 |*
512 \************************************************************************/
513 
514 sal_Bool SdPageObjsTLB::SelectEntry( const String& rName )
515 {
516 	sal_Bool bFound = sal_False;
517 
518 	if( rName.Len() )
519 	{
520 		SvLBoxEntry* pEntry = NULL;
521 		String aTmp;
522 
523 		for( pEntry = First(); pEntry && !bFound; pEntry = Next( pEntry ) )
524 		{
525 			aTmp = GetEntryText( pEntry );
526 			if( aTmp == rName )
527 			{
528 				bFound = sal_True;
529 				SetCurEntry( pEntry );
530 			}
531 		}
532 	}
533 	return( bFound );
534 }
535 
536 /*************************************************************************
537 |*
538 |* Gibt zurueck, ob Childs des uebergebenen Strings selektiert sind
539 |*
540 \************************************************************************/
541 
542 sal_Bool SdPageObjsTLB::HasSelectedChilds( const String& rName )
543 {
544 	sal_Bool bFound  = sal_False;
545 	sal_Bool bChilds = sal_False;
546 
547 	if( rName.Len() )
548 	{
549 		SvLBoxEntry* pEntry = NULL;
550 		String aTmp;
551 
552 		for( pEntry = First(); pEntry && !bFound; pEntry = Next( pEntry ) )
553 		{
554 			aTmp = GetEntryText( pEntry );
555 			if( aTmp == rName )
556 			{
557 				bFound = sal_True;
558 				sal_Bool bExpanded = IsExpanded( pEntry );
559 				long nCount = GetChildSelectionCount( pEntry );
560 				if( bExpanded && nCount > 0 )
561 					bChilds = sal_True;
562 			}
563 		}
564 	}
565 	return( bChilds );
566 }
567 
568 
569 /*************************************************************************
570 |*
571 |* TreeLB mit Seiten und Objekten fuellen
572 |*
573 \************************************************************************/
574 
575 void SdPageObjsTLB::Fill( const SdDrawDocument* pInDoc, sal_Bool bAllPages,
576 						  const String& rDocName)
577 {
578 	String aSelection;
579 	if( GetSelectionCount() > 0 )
580 	{
581 		aSelection = GetSelectEntry();
582 		Clear();
583 	}
584 
585 	mpDoc = pInDoc;
586 	maDocName = rDocName;
587     mbShowAllPages = (bAllPages == sal_True);
588 	mpMedium = NULL;
589 
590 	SdPage* 	 pPage = NULL;
591 
592     IconProvider aIconProvider;
593 
594 	// first insert all pages including objects
595 	sal_uInt16 nPage = 0;
596 	const sal_uInt16 nMaxPages = mpDoc->GetPageCount();
597 
598 	while( nPage < nMaxPages )
599 	{
600 		pPage = (SdPage*) mpDoc->GetPage( nPage );
601 		if(  (mbShowAllPages || pPage->GetPageKind() == PK_STANDARD)
602 		     && !(pPage->GetPageKind()==PK_HANDOUT)   ) //#94954# never list the normal handout page ( handout-masterpage is used instead )
603 		{
604 			sal_Bool bPageExluded = pPage->IsExcluded();
605 
606             bool bPageBelongsToShow = PageBelongsToCurrentShow (pPage);
607             bPageExluded |= !bPageBelongsToShow;
608 
609             AddShapeList(*pPage, NULL, pPage->GetName(), bPageExluded, NULL, aIconProvider);
610 		}
611 		nPage++;
612 	}
613 
614 	// dann alle MasterPages incl. Objekte einfuegen
615 	if( mbShowAllPages )
616 	{
617 		nPage = 0;
618 		const sal_uInt16 nMaxMasterPages = mpDoc->GetMasterPageCount();
619 
620 		while( nPage < nMaxMasterPages )
621 		{
622 			pPage = (SdPage*) mpDoc->GetMasterPage( nPage );
623             AddShapeList(*pPage, NULL, pPage->GetName(), false, NULL, aIconProvider);
624 			nPage++;
625 		}
626 	}
627 	if( aSelection.Len() )
628 		SelectEntry( aSelection );
629 	else if (mbSaveTreeItemState && maSelectionEntryText.Len())
630 	{
631 		SelectEntry(maSelectionEntryText);
632 	}
633 }
634 
635 /*************************************************************************
636 |*
637 |* Es wird nur der erste Eintrag eingefuegt. Childs werden OnDemand erzeugt
638 |*
639 \************************************************************************/
640 
641 void SdPageObjsTLB::Fill( const SdDrawDocument* pInDoc, SfxMedium* pInMedium,
642 						  const String& rDocName )
643 {
644 	mpDoc = pInDoc;
645 
646     // this object now owns the Medium
647 	mpMedium = pInMedium;
648 	maDocName = rDocName;
649 
650 	Image aImgDocOpen=Image( BitmapEx( SdResId( BMP_DOC_OPEN ) ) );
651 	Image aImgDocClosed=Image( BitmapEx( SdResId( BMP_DOC_CLOSED ) ) );
652 	Image aImgDocOpenH=Image( BitmapEx( SdResId( BMP_DOC_OPEN_H ) ) );
653 	Image aImgDocClosedH=Image( BitmapEx( SdResId( BMP_DOC_CLOSED_H ) ) );
654 
655 	// Dokumentnamen einfuegen
656 	SvLBoxEntry* pFileEntry = InsertEntry( maDocName,
657 	                          aImgDocOpen,
658 	                          aImgDocClosed,
659 	                          NULL,
660 	                          sal_True,
661 							  LIST_APPEND,
662 							  reinterpret_cast< void* >( 1 ) );
663 
664 	SetExpandedEntryBmp( pFileEntry, aImgDocOpenH, BMP_COLOR_HIGHCONTRAST );
665 	SetCollapsedEntryBmp( pFileEntry, aImgDocClosedH, BMP_COLOR_HIGHCONTRAST );
666 }
667 
668 
669 
670 
671 void SdPageObjsTLB::AddShapeList (
672     const SdrObjList& rList,
673     SdrObject* pShape,
674     const ::rtl::OUString& rsName,
675     const bool bIsExcluded,
676     SvLBoxEntry* pParentEntry,
677     const IconProvider& rIconProvider)
678 {
679     Image aIcon (rIconProvider.maImgPage);
680     if (bIsExcluded)
681         aIcon = rIconProvider.maImgPageExcl;
682     else if (pShape != NULL)
683         aIcon = rIconProvider.maImgGroup;
684 
685     void* pUserData (reinterpret_cast<void*>(1));
686     if (pShape != NULL)
687         pUserData = pShape;
688 
689 	SvLBoxEntry* pEntry = InsertEntry(
690         rsName,
691         aIcon,
692         aIcon,
693         pParentEntry,
694         sal_False,
695         LIST_APPEND,
696         pUserData);
697 
698     SetExpandedEntryBmp(
699         pEntry,
700         bIsExcluded ? rIconProvider.maImgPageExclH : rIconProvider.maImgPageH,
701         BMP_COLOR_HIGHCONTRAST );
702     SetCollapsedEntryBmp(
703         pEntry,
704         bIsExcluded ? rIconProvider.maImgPageExclH : rIconProvider.maImgPageH,
705         BMP_COLOR_HIGHCONTRAST );
706 
707     SdrObjListIter aIter(
708         rList,
709         !rList.HasObjectNavigationOrder() /* use navigation order, if available */,
710         IM_FLAT,
711         sal_False /*not reverse*/);
712 
713 	//IAccessibility2 Implementation 2009-----
714 	sal_Bool  bMarked=sal_False;
715 	if(bisInSdNavigatorWin)
716 	{
717 		Window* pWindow=NULL;
718 		SdNavigatorWin* pSdNavigatorWin=NULL;
719 		sd::DrawDocShell* pSdDrawDocShell = NULL;
720 		if(pEntry)
721 			pWindow=(Window*)GetParent(pEntry);
722 		if(pWindow)
723 			pSdNavigatorWin = (SdNavigatorWin*)pWindow;
724 		if( pSdNavigatorWin )
725 			pSdDrawDocShell = pSdNavigatorWin->GetDrawDocShell(mpDoc);
726 		if(pSdDrawDocShell)
727 			bMarked=pSdDrawDocShell->IsMarked(pShape);
728 		if(pEntry)
729 		{
730 			if(bMarked)
731 				pEntry->SetMarked(sal_True);
732 			else
733 				pEntry->SetMarked( sal_False );
734 		}
735 	}
736 	//-----IAccessibility2 Implementation 2009
737     while( aIter.IsMore() )
738     {
739         SdrObject* pObj = aIter.Next();
740         OSL_ASSERT(pObj!=NULL);
741 
742         // Get the shape name.
743         String aStr (GetObjectName( pObj ) );
744 
745         if( aStr.Len() )
746         {
747             if( pObj->GetObjInventor() == SdrInventor && pObj->GetObjIdentifier() == OBJ_OLE2 )
748             {
749                 SvLBoxEntry* pNewEntry = InsertEntry( aStr, maImgOle, maImgOle, pEntry,
750                     sal_False, LIST_APPEND, pObj);
751 				//IAccessibility2 Implementation 2009-----
752 				if(bisInSdNavigatorWin)
753 				{
754 					Window* pWindow=NULL;
755 					SdNavigatorWin* pSdNavigatorWin=NULL;
756 					sd::DrawDocShell* pSdDrawDocShell = NULL;
757 					if(pNewEntry)
758 						pWindow=(Window*)GetParent(pNewEntry);
759 					if(pWindow)
760 						pSdNavigatorWin = (SdNavigatorWin*)pWindow;
761 					if( pSdNavigatorWin )
762 						pSdDrawDocShell = pSdNavigatorWin->GetDrawDocShell(mpDoc);
763 					if(pSdDrawDocShell)
764 						bMarked=pSdDrawDocShell->IsMarked((SdrObject*)pObj);
765 					if(pNewEntry)
766 					{
767 						if(bMarked)
768 							pNewEntry->SetMarked(sal_True);
769 						else
770 							pNewEntry->SetMarked( sal_False );
771 					}
772 				}
773 				//-----IAccessibility2 Implementation 2009
774                 SetExpandedEntryBmp( pNewEntry, maImgOleH, BMP_COLOR_HIGHCONTRAST );
775                 SetCollapsedEntryBmp( pNewEntry, maImgOleH, BMP_COLOR_HIGHCONTRAST );
776             }
777             else if( pObj->GetObjInventor() == SdrInventor && pObj->GetObjIdentifier() == OBJ_GRAF )
778             {
779                 SvLBoxEntry* pNewEntry = InsertEntry( aStr, maImgGraphic, maImgGraphic, pEntry,
780                     sal_False, LIST_APPEND, pObj );
781 				//IAccessibility2 Implementation 2009-----
782 				if(bisInSdNavigatorWin)
783 				{
784 					Window* pWindow=NULL;
785 					SdNavigatorWin* pSdNavigatorWin=NULL;
786 					sd::DrawDocShell* pSdDrawDocShell = NULL;
787 					if(pNewEntry)
788 						pWindow=(Window*)GetParent(pNewEntry);
789 					if(pWindow)
790 						pSdNavigatorWin = (SdNavigatorWin*)pWindow;
791 					if( pSdNavigatorWin )
792 						pSdDrawDocShell = pSdNavigatorWin->GetDrawDocShell(mpDoc);
793 					if(pSdDrawDocShell)
794 						bMarked=pSdDrawDocShell->IsMarked((SdrObject*)pObj);
795 					if(pNewEntry)
796 					{
797 						if(bMarked)
798 						{
799 							pNewEntry->SetMarked(sal_True);
800 						}
801 						else
802 						{
803 							pNewEntry->SetMarked( sal_False );
804 						}
805 					}
806 				}
807 				//-----IAccessibility2 Implementation 2009
808                 SetExpandedEntryBmp( pNewEntry, maImgGraphicH, BMP_COLOR_HIGHCONTRAST );
809                 SetCollapsedEntryBmp( pNewEntry, maImgGraphicH, BMP_COLOR_HIGHCONTRAST );
810             }
811             else if (pObj->IsGroupObject())
812             {
813                 AddShapeList(
814                     *pObj->GetSubList(),
815                     pObj,
816                     aStr,
817                     false,
818                     pEntry,
819                     rIconProvider);
820             }
821             else
822             {
823                 SvLBoxEntry* pNewEntry = InsertEntry( aStr, rIconProvider.maImgObjects, rIconProvider.maImgObjects, pEntry,
824                     sal_False, LIST_APPEND, pObj );
825 				//IAccessibility2 Implementation 2009-----
826 				if(bisInSdNavigatorWin)
827 				{
828 					Window* pWindow=NULL;
829 					SdNavigatorWin* pSdNavigatorWin=NULL;
830 					sd::DrawDocShell* pSdDrawDocShell = NULL;
831 					if(pNewEntry)
832 						pWindow=(Window*)GetParent(pNewEntry);
833 					if(pWindow)
834 						pSdNavigatorWin = (SdNavigatorWin*)pWindow;
835 					if( pSdNavigatorWin )
836 						pSdDrawDocShell = pSdNavigatorWin->GetDrawDocShell(mpDoc);
837 					if(pSdDrawDocShell)
838 						bMarked=pSdDrawDocShell->IsMarked((SdrObject*)pObj);
839 					if(pNewEntry)
840 					{
841 						if(bMarked)
842 						{
843 							pNewEntry->SetMarked(sal_True);
844 						}
845 						else
846 						{
847 							pNewEntry->SetMarked( sal_False );
848 						}
849 					}
850 				}
851 				//-----IAccessibility2 Implementation 2009
852                 SetExpandedEntryBmp( pNewEntry, rIconProvider.maImgObjectsH, BMP_COLOR_HIGHCONTRAST );
853                 SetCollapsedEntryBmp( pNewEntry, rIconProvider.maImgObjectsH, BMP_COLOR_HIGHCONTRAST );
854             }
855         }
856     }
857 
858     if( pEntry->HasChilds() )
859     {
860         SetExpandedEntryBmp(
861             pEntry,
862             bIsExcluded ? rIconProvider.maImgPageObjsExcl : rIconProvider.maImgPageObjs);
863         SetCollapsedEntryBmp(
864             pEntry,
865             bIsExcluded ? rIconProvider.maImgPageObjsExcl : rIconProvider.maImgPageObjs);
866         SetExpandedEntryBmp(
867             pEntry,
868             bIsExcluded ? rIconProvider.maImgPageObjsExclH : rIconProvider.maImgPageObjsH,
869             BMP_COLOR_HIGHCONTRAST);
870         SetCollapsedEntryBmp(
871             pEntry,
872             bIsExcluded ? rIconProvider.maImgPageObjsExclH : rIconProvider.maImgPageObjsH,
873             BMP_COLOR_HIGHCONTRAST);
874 		//IAccessibility2 Implementation 2009-----
875 		if (mbSaveTreeItemState)
876 		{
877 			vector<String>:: iterator iteStart = maTreeItem.begin();
878 			while (iteStart != maTreeItem.end())
879 			{
880 				String strEntry = GetEntryText(pEntry);
881 				if (*iteStart == strEntry)
882 				{
883 					Expand( pEntry );
884 					break;
885 				}
886 				++iteStart;
887 			}
888 		}
889 		else
890 			Expand( pEntry );
891 		//-----IAccessibility2 Implementation 2009
892     }
893 }
894 
895 
896 
897 
898 void SdPageObjsTLB::SetShowAllShapes (
899     const bool bShowAllShapes,
900     const bool bFillList)
901 {
902     mbShowAllShapes = bShowAllShapes;
903     if (bFillList)
904     {
905         if (mpMedium == NULL)
906             Fill(mpDoc, mbShowAllPages, maDocName);
907         else
908             Fill(mpDoc, mpMedium, maDocName);
909     }
910 }
911 
912 
913 
914 
915 bool SdPageObjsTLB::GetShowAllShapes (void) const
916 {
917     return mbShowAllShapes;
918 }
919 
920 
921 
922 
923 /*************************************************************************
924 |*
925 |* Prueft, ob die Seiten (PK_STANDARD) und die darauf befindlichen Objekte
926 |* des Docs und der TreeLB identisch sind.
927 |* Wird ein Doc uebergeben, wird dieses zum aktuellem Doc (Wichtig bei
928 |* mehreren Documenten).
929 |*
930 \************************************************************************/
931 
932 sal_Bool SdPageObjsTLB::IsEqualToDoc( const SdDrawDocument* pInDoc )
933 {
934 	if( pInDoc )
935 		mpDoc = pInDoc;
936 
937 	if( !mpDoc )
938 		return( sal_False );
939 
940 	SdrObject*	 pObj = NULL;
941 	SdPage* 	 pPage = NULL;
942 	SvLBoxEntry* pEntry = First();
943 	String		 aName;
944 
945 	// Alle Pages incl. Objekte vergleichen
946 	sal_uInt16 nPage = 0;
947 	const sal_uInt16 nMaxPages = mpDoc->GetPageCount();
948 
949 	while( nPage < nMaxPages )
950 	{
951 		pPage = (SdPage*) mpDoc->GetPage( nPage );
952 		if( pPage->GetPageKind() == PK_STANDARD )
953 		{
954 			if( !pEntry )
955 				return( sal_False );
956 			aName = GetEntryText( pEntry );
957 
958 			if( pPage->GetName() != aName )
959 				return( sal_False );
960 
961 			pEntry = Next( pEntry );
962 
963 			SdrObjListIter aIter(
964                 *pPage,
965                 !pPage->HasObjectNavigationOrder() /* use navigation order, if available */,
966                 IM_DEEPWITHGROUPS );
967 
968 			while( aIter.IsMore() )
969 			{
970 				pObj = aIter.Next();
971 
972                 const String aObjectName( GetObjectName( pObj ) );
973 
974 				if( aObjectName.Len() )
975 				{
976 					if( !pEntry )
977 						return( sal_False );
978 
979                 	aName = GetEntryText( pEntry );
980 
981 					if( aObjectName != aName )
982 						return( sal_False );
983 
984 					pEntry = Next( pEntry );
985 				}
986 			}
987 		}
988 		nPage++;
989 	}
990 	// Wenn noch Eintraege in der Listbox vorhanden sind, wurden
991 	// Objekte (mit Namen) oder Seiten geloescht
992 	return( !pEntry );
993 }
994 
995 /*************************************************************************
996 |*
997 |* Selectierten String zurueckgeben
998 |*
999 \************************************************************************/
1000 
1001 String SdPageObjsTLB::GetSelectEntry()
1002 {
1003 	return( GetEntryText( GetCurEntry() ) );
1004 }
1005 
1006 /*************************************************************************
1007 |*
1008 |* Selektierte Eintrage zurueckgeben
1009 |* nDepth == 0 -> Seiten
1010 |* nDepth == 1 -> Objekte
1011 |*
1012 \************************************************************************/
1013 
1014 List* SdPageObjsTLB::GetSelectEntryList( sal_uInt16 nDepth )
1015 {
1016 	List*		 pList	= NULL;
1017 	SvLBoxEntry* pEntry = FirstSelected();
1018 
1019 	while( pEntry )
1020 	{
1021 		sal_uInt16 nListDepth = GetModel()->GetDepth( pEntry );
1022 		if( nListDepth == nDepth )
1023 		{
1024 			if( !pList )
1025 				pList = new List();
1026 
1027 			const String aEntryText( GetEntryText( pEntry ) );
1028 			pList->Insert( new String( aEntryText ), LIST_APPEND );
1029 		}
1030 		pEntry = NextSelected( pEntry );
1031 	}
1032 
1033 	return( pList );
1034 }
1035 
1036 /*************************************************************************
1037 |*
1038 |* Eintraege werden erst auf Anforderung (Doppelklick) eingefuegt
1039 |*
1040 \************************************************************************/
1041 
1042 void SdPageObjsTLB::RequestingChilds( SvLBoxEntry* pFileEntry )
1043 {
1044 	if( !pFileEntry->HasChilds() )
1045 	{
1046 		if( GetBookmarkDoc() )
1047 		{
1048 			SdrObject*	 pObj = NULL;
1049 			SdPage* 	 pPage = NULL;
1050 			SvLBoxEntry* pPageEntry = NULL;
1051 
1052 			Image aImgPage=Image( BitmapEx( SdResId( BMP_PAGE ) ) );
1053 			Image aImgPageObjs=Image( BitmapEx( SdResId( BMP_PAGEOBJS ) ) );
1054 			Image aImgObjects=Image( BitmapEx( SdResId( BMP_OBJECTS ) ) );
1055 			Image aImgPageH=Image( BitmapEx( SdResId( BMP_PAGE_H ) ) );
1056 			Image aImgPageObjsH=Image( BitmapEx( SdResId( BMP_PAGEOBJS_H ) ) );
1057 			Image aImgObjectsH=Image( BitmapEx( SdResId( BMP_OBJECTS_H ) ) );
1058 
1059 			// document name already inserted
1060 
1061 			// only insert all "normal" ? slides with objects
1062 			sal_uInt16 nPage = 0;
1063 			const sal_uInt16 nMaxPages = mpBookmarkDoc->GetPageCount();
1064 
1065 			while( nPage < nMaxPages )
1066 			{
1067 				pPage = (SdPage*) mpBookmarkDoc->GetPage( nPage );
1068 				if( pPage->GetPageKind() == PK_STANDARD )
1069 				{
1070 					pPageEntry = InsertEntry( pPage->GetName(),
1071 					                          aImgPage,
1072 					                          aImgPage,
1073 					                          pFileEntry,
1074 							                  sal_False,
1075 								              LIST_APPEND,
1076 								              reinterpret_cast< void* >( 1 ) );
1077 
1078 					SetExpandedEntryBmp( pPageEntry, aImgPageH, BMP_COLOR_HIGHCONTRAST );
1079 					SetCollapsedEntryBmp( pPageEntry, aImgPageH, BMP_COLOR_HIGHCONTRAST );
1080 
1081 					SdrObjListIter aIter( *pPage, IM_DEEPWITHGROUPS );
1082 
1083 					while( aIter.IsMore() )
1084 					{
1085 						pObj = aIter.Next();
1086 						String aStr( GetObjectName( pObj ) );
1087 						if( aStr.Len() )
1088 						{
1089 							if( pObj->GetObjInventor() == SdrInventor && pObj->GetObjIdentifier() == OBJ_OLE2 )
1090 							{
1091 								SvLBoxEntry* pNewEntry = InsertEntry(aStr, maImgOle, maImgOle, pPageEntry);
1092 
1093 
1094 								SetExpandedEntryBmp( pNewEntry, maImgOleH, BMP_COLOR_HIGHCONTRAST );
1095 								SetCollapsedEntryBmp( pNewEntry, maImgOleH, BMP_COLOR_HIGHCONTRAST );
1096 							}
1097 							else if( pObj->GetObjInventor() == SdrInventor && pObj->GetObjIdentifier() == OBJ_GRAF )
1098 							{
1099 								SvLBoxEntry* pNewEntry = InsertEntry(aStr, maImgGraphic, maImgGraphic, pPageEntry);
1100 
1101 								SetExpandedEntryBmp( pNewEntry, maImgGraphicH, BMP_COLOR_HIGHCONTRAST );
1102 								SetCollapsedEntryBmp( pNewEntry, maImgGraphicH, BMP_COLOR_HIGHCONTRAST );
1103 							}
1104 							else
1105 							{
1106 								SvLBoxEntry* pNewEntry = InsertEntry(aStr, aImgObjects, aImgObjects, pPageEntry);
1107 
1108 								SetExpandedEntryBmp( pNewEntry, aImgObjectsH, BMP_COLOR_HIGHCONTRAST );
1109 								SetCollapsedEntryBmp( pNewEntry, aImgObjectsH, BMP_COLOR_HIGHCONTRAST );
1110 							}
1111 						}
1112 					}
1113 					if( pPageEntry->HasChilds() )
1114 					{
1115 						SetExpandedEntryBmp( pPageEntry, aImgPageObjs );
1116 						SetCollapsedEntryBmp( pPageEntry, aImgPageObjs );
1117 						SetExpandedEntryBmp( pPageEntry, aImgPageObjsH, BMP_COLOR_HIGHCONTRAST );
1118 						SetCollapsedEntryBmp( pPageEntry, aImgPageObjsH, BMP_COLOR_HIGHCONTRAST );
1119 					}
1120 				}
1121 				nPage++;
1122 			}
1123 		}
1124 	}
1125 	else
1126 		SvTreeListBox::RequestingChilds( pFileEntry );
1127 }
1128 
1129 /*************************************************************************
1130 |*
1131 |*	Prueft, ob es sich um eine Draw-Datei handelt und oeffnet anhand des
1132 |*	uebergebenen Docs das BookmarkDoc
1133 |*
1134 \************************************************************************/
1135 
1136 SdDrawDocument* SdPageObjsTLB::GetBookmarkDoc(SfxMedium* pMed)
1137 {
1138 	if (
1139        !mpBookmarkDoc ||
1140 		 (pMed && (!mpOwnMedium || mpOwnMedium->GetName() != pMed->GetName()))
1141       )
1142 	{
1143         // create a new BookmarkDoc if now one exists or if a new Medium is provided
1144         if (mpOwnMedium != pMed)
1145 		{
1146 			CloseBookmarkDoc();
1147 		}
1148 
1149 		if (pMed)
1150 		{
1151             // it looks that it is undefined if a Medium was set by Fill() allready
1152             DBG_ASSERT( !mpMedium, "SfxMedium confusion!" );
1153             delete mpMedium;
1154             mpMedium = NULL;
1155 
1156             // take over this Medium (currently used only be Navigator)
1157 			mpOwnMedium = pMed;
1158         }
1159 
1160         DBG_ASSERT( mpMedium || pMed, "No SfxMedium provided!" );
1161 
1162         if( pMed )
1163         {
1164             // in this mode the document is also owned and controlled by this instance
1165             mxBookmarkDocShRef = new ::sd::DrawDocShell(SFX_CREATE_MODE_STANDARD, sal_True);
1166             if (mxBookmarkDocShRef->DoLoad(pMed))
1167                 mpBookmarkDoc = mxBookmarkDocShRef->GetDoc();
1168             else
1169                 mpBookmarkDoc = NULL;
1170         }
1171         else if ( mpMedium )
1172             // in this mode the document is owned and controlled by the SdDrawDocument
1173             // it can be released by calling the corresponding CloseBookmarkDoc method
1174             // successfull creation of a document makes this the owner of the medium
1175             mpBookmarkDoc = ((SdDrawDocument*) mpDoc)->OpenBookmarkDoc(*mpMedium);
1176 
1177         if ( !mpBookmarkDoc )
1178 		{
1179 			ErrorBox aErrorBox( this, WB_OK, String( SdResId( STR_READ_DATA_ERROR ) ) );
1180 			aErrorBox.Execute();
1181             mpMedium = 0; //On failure the SfxMedium is invalid
1182 		}
1183 	}
1184 
1185 	return( mpBookmarkDoc );
1186 }
1187 
1188 /*************************************************************************
1189 |*
1190 |* Bookmark-Dokument schlie�en und loeschen
1191 |*
1192 \************************************************************************/
1193 
1194 void SdPageObjsTLB::CloseBookmarkDoc()
1195 {
1196 	if (mxBookmarkDocShRef.Is())
1197 	{
1198 		mxBookmarkDocShRef->DoClose();
1199         mxBookmarkDocShRef.Clear();
1200 
1201         // Medium is owned by document, so it's destroyed already
1202         mpOwnMedium = 0;
1203 	}
1204     else if ( mpBookmarkDoc )
1205 	{
1206         DBG_ASSERT( !mpOwnMedium, "SfxMedium confusion!" );
1207         if ( mpDoc )
1208         {
1209             // The document owns the Medium, so the Medium will be invalid after closing the document
1210 			((SdDrawDocument*) mpDoc)->CloseBookmarkDoc();
1211             mpMedium = 0;
1212         }
1213 	}
1214     else
1215     {
1216         // perhaps mpOwnMedium provided, but no successfull creation of BookmarkDoc
1217         delete mpOwnMedium;
1218         mpOwnMedium = NULL;
1219     }
1220 
1221 	mpBookmarkDoc = NULL;
1222 }
1223 
1224 /*************************************************************************
1225 |*
1226 |*
1227 |*
1228 \************************************************************************/
1229 
1230 void SdPageObjsTLB::SelectHdl()
1231 {
1232 	SvLBoxEntry* pEntry = FirstSelected();
1233 
1234 	mbLinkableSelected = sal_True;
1235 
1236 	while( pEntry && mbLinkableSelected )
1237 	{
1238 	    if( NULL == pEntry->GetUserData() )
1239 	        mbLinkableSelected = sal_False;
1240 
1241 		pEntry = NextSelected( pEntry );
1242 	}
1243 
1244 	SvTreeListBox::SelectHdl();
1245 }
1246 
1247 /*************************************************************************
1248 |*
1249 |* Ueberlaedt RETURN mit der Funktionsweise von DoubleClick
1250 |*
1251 \************************************************************************/
1252 
1253 void SdPageObjsTLB::KeyInput( const KeyEvent& rKEvt )
1254 {
1255 	if( rKEvt.GetKeyCode().GetCode() == KEY_RETURN )
1256 	{
1257 		// Auskommentierter Code aus svtools/source/contnr/svimpbox.cxx
1258 		SvLBoxEntry* pCursor = GetCurEntry();
1259 		if( pCursor->HasChilds() || pCursor->HasChildsOnDemand() )
1260 		{
1261 			if( IsExpanded( pCursor ) )
1262 				Collapse( pCursor );
1263 			else
1264 				Expand( pCursor );
1265 		}
1266 
1267 		DoubleClickHdl();
1268 	}
1269 //IAccessibility2 Implementation 2009-----
1270 	else if (rKEvt.GetKeyCode().GetCode() == KEY_SPACE)
1271 	{
1272 	   if(bisInSdNavigatorWin)
1273 	   {
1274 		   sal_Bool bMarked=sal_False;
1275 		   SvLBoxEntry* pNewEntry = GetCurEntry();
1276 		   if( GetParent(pNewEntry) == NULL )
1277 			   return;
1278 		   String  aStr=GetSelectEntry();
1279 		   Window* pWindow=NULL;
1280 		   SdNavigatorWin* pSdNavigatorWin=NULL;
1281 		   sd::DrawDocShell* pSdDrawDocShell = NULL;
1282 		   if(pNewEntry)
1283 			   pWindow=(Window*)GetParent(pNewEntry);
1284 		   if(pWindow)
1285 			   pSdNavigatorWin = (SdNavigatorWin*)pWindow;
1286 		   if( pSdNavigatorWin )
1287 			   pSdDrawDocShell = pSdNavigatorWin->GetDrawDocShell(mpDoc);
1288 		   if(pSdDrawDocShell)
1289 		   {
1290 			   pSdDrawDocShell->GotoTreeBookmark(aStr);
1291 			   bMarked=pSdDrawDocShell->GetObjectIsmarked(aStr);
1292 		   }
1293 		   //Removed by yanjun for sym2_6385
1294 		   //The symphony2.0 can support morn than one level tree list, also support to select tow or more items in different level.
1295 		   /*
1296 		   SvLBoxEntry* pBeginEntry = First();
1297 		   if( pBeginEntry )
1298 		   {
1299 			   if( GetParent(pBeginEntry) !=  GetParent(pNewEntry) )
1300 				   pBeginEntry->SetMarked( sal_False );
1301 			   SvLBoxEntry* pNextEntry = Next( pBeginEntry );
1302 			   while( pNextEntry )
1303 			   {
1304 				   if( GetParent(pNextEntry) !=  GetParent(pNewEntry) )
1305 					   pNextEntry->SetMarked( sal_False );
1306 				   pNextEntry =  Next( pNextEntry );
1307 			   }
1308 		   }
1309 		   End*/
1310 		   if(pNewEntry)
1311 		   {
1312 			   if(bMarked)
1313 			   {
1314 				   pNewEntry->SetMarked(sal_True);
1315 			   }
1316 			   else
1317 			   {
1318 				   pNewEntry->SetMarked( sal_False );
1319 			   }
1320 		   }
1321 		   Invalidate();
1322 	   }
1323 	}
1324 //-----IAccessibility2 Implementation 2009
1325 	else
1326 		SvTreeListBox::KeyInput( rKEvt );
1327 }
1328 
1329 /*************************************************************************
1330 |*
1331 |* StartDrag-Request
1332 |*
1333 \************************************************************************/
1334 
1335 void SdPageObjsTLB::StartDrag( sal_Int8 nAction, const Point& rPosPixel)
1336 {
1337     (void)nAction;
1338     (void)rPosPixel;
1339 
1340 	SdNavigatorWin* pNavWin = NULL;
1341     SvLBoxEntry* pEntry = GetEntry(rPosPixel);
1342 
1343 	if( mpFrame->HasChildWindow( SID_NAVIGATOR ) )
1344 		pNavWin = (SdNavigatorWin*) ( mpFrame->GetChildWindow( SID_NAVIGATOR )->GetContextWindow( SD_MOD() ) );
1345 
1346 	if (pEntry != NULL
1347         && pNavWin !=NULL
1348         && pNavWin == mpParent
1349         && pNavWin->GetNavigatorDragType() != NAVIGATOR_DRAGTYPE_NONE )
1350 	{
1351         // Mark only the children of the page under the mouse as drop
1352         // targets.  This prevents moving shapes from one page to another.
1353 
1354         // Select all entries and disable them as drop targets.
1355         SetSelectionMode(MULTIPLE_SELECTION);
1356         SetCursor(NULL, sal_False);
1357         SelectAll(sal_True, sal_False);
1358         EnableSelectionAsDropTarget(sal_False, sal_True);
1359 
1360         // Enable only the entries as drop targets that are children of the
1361         // page under the mouse.
1362         SvLBoxEntry* pParent = GetRootLevelParent(pEntry);
1363         if (pParent != NULL)
1364         {
1365             SelectAll(sal_False, sal_False);
1366             Select(pParent, sal_True);
1367             //            for (SvLBoxEntry*pChild=FirstChild(pParent); pChild!=NULL; pChild=NextSibling(pChild))
1368             //                Select(pChild, sal_True);
1369             EnableSelectionAsDropTarget(sal_True, sal_True);//sal_False);
1370         }
1371 
1372         // Set selection back to the entry under the mouse.
1373         SelectAll(sal_False,sal_False);
1374         SetSelectionMode(SINGLE_SELECTION);
1375         Select(pEntry, sal_True);
1376 
1377 		//  Aus dem ExecuteDrag heraus kann der Navigator geloescht werden
1378 		//  (beim Umschalten auf einen anderen Dokument-Typ), das wuerde aber
1379 		//  den StarView MouseMove-Handler, der Command() aufruft, umbringen.
1380 		//  Deshalb Drag&Drop asynchron:
1381         Application::PostUserEvent( STATIC_LINK( this, SdPageObjsTLB, ExecDragHdl ) );
1382 	}
1383 }
1384 
1385 /*************************************************************************
1386 |*
1387 |* Begin drag
1388 |*
1389 \************************************************************************/
1390 
1391 void SdPageObjsTLB::DoDrag()
1392 {
1393 	mpDropNavWin = ( mpFrame->HasChildWindow( SID_NAVIGATOR ) ) ?
1394 				  (SdNavigatorWin*)( mpFrame->GetChildWindow( SID_NAVIGATOR )->GetContextWindow( SD_MOD() ) ) :
1395 				  NULL;
1396 
1397 	if( mpDropNavWin )
1398 	{
1399 		::sd::DrawDocShell* pDocShell = mpDoc->GetDocSh();
1400         String aURL = INetURLObject( pDocShell->GetMedium()->GetPhysicalName(), INET_PROT_FILE ).GetMainURL( INetURLObject::NO_DECODE );
1401 		NavigatorDragType	eDragType = mpDropNavWin->GetNavigatorDragType();
1402 
1403 		aURL.Append( '#' );
1404 		aURL.Append( GetSelectEntry() );
1405 
1406 		INetBookmark	aBookmark( aURL, GetSelectEntry() );
1407 		sal_Int8		nDNDActions = DND_ACTION_COPYMOVE;
1408 
1409 		if( eDragType == NAVIGATOR_DRAGTYPE_LINK )
1410 			nDNDActions = DND_ACTION_LINK;	// #93240# Either COPY *or* LINK, never both!
1411         else if (mpDoc->GetSdPageCount(PK_STANDARD) == 1)
1412         {
1413             // Can not move away the last slide in a document.
1414             nDNDActions = DND_ACTION_COPY;
1415         }
1416 
1417 		SvTreeListBox::ReleaseMouse();
1418 
1419 		bIsInDrag = sal_True;
1420 
1421         SvLBoxDDInfo aDDInfo;
1422         memset(&aDDInfo,0,sizeof(SvLBoxDDInfo));
1423         aDDInfo.pApp = GetpApp();
1424         aDDInfo.pSource = this;
1425         //            aDDInfo.pDDStartEntry = pEntry;
1426 		::com::sun::star::uno::Sequence<sal_Int8> aSequence (sizeof(SvLBoxDDInfo));
1427 		memcpy(aSequence.getArray(), (sal_Char*)&aDDInfo, sizeof(SvLBoxDDInfo));
1428 		::com::sun::star::uno::Any aTreeListBoxData (aSequence);
1429 
1430 		// object is destroyed by internal reference mechanism
1431 		SdTransferable* pTransferable = new SdPageObjsTLB::SdPageObjsTransferable(
1432             *this, aBookmark, *pDocShell, eDragType, aTreeListBoxData);
1433 
1434         // Get the view.
1435         ::sd::ViewShell* pViewShell = GetViewShellForDocShell(*pDocShell);
1436         if (pViewShell == NULL)
1437         {
1438             OSL_ASSERT(pViewShell!=NULL);
1439             return;
1440         }
1441         sd::View* pView = pViewShell->GetView();
1442         if (pView == NULL)
1443         {
1444             OSL_ASSERT(pView!=NULL);
1445             return;
1446         }
1447 
1448         SdrObject* pObject = NULL;
1449         void* pUserData = GetCurEntry()->GetUserData();
1450         if (pUserData != NULL && pUserData != (void*)1)
1451             pObject = reinterpret_cast<SdrObject*>(pUserData);
1452         if (pObject != NULL)
1453         {
1454             // For shapes without a user supplied name (the automatically
1455             // created name does not count), a different drag and drop technique
1456             // is used.
1457             if (GetObjectName(pObject, false).Len() == 0)
1458             {
1459                 AddShapeToTransferable(*pTransferable, *pObject);
1460                 pTransferable->SetView(pView);
1461                 SD_MOD()->pTransferDrag = pTransferable;
1462             }
1463 
1464             // Unnamed shapes have to be selected to be recognized by the
1465             // current drop implementation.  In order to have a consistent
1466             // behaviour for all shapes, every shape that is to be dragged is
1467             // selected first.
1468             SdrPageView* pPageView = pView->GetSdrPageView();
1469             pView->UnmarkAllObj(pPageView);
1470             pView->MarkObj(pObject, pPageView);
1471         }
1472         else
1473         {
1474             pTransferable->SetView(pView);
1475             SD_MOD()->pTransferDrag = pTransferable;
1476         }
1477 
1478         pTransferable->StartDrag( this, nDNDActions );
1479 	}
1480 }
1481 
1482 /*************************************************************************
1483 |*
1484 |* Drag finished
1485 |*
1486 \************************************************************************/
1487 
1488 void SdPageObjsTLB::OnDragFinished( sal_uInt8 )
1489 {
1490 	if( mpFrame->HasChildWindow( SID_NAVIGATOR ) )
1491 	{
1492 		SdNavigatorWin* pNewNavWin = (SdNavigatorWin*) ( mpFrame->GetChildWindow( SID_NAVIGATOR )->GetContextWindow( SD_MOD() ) );
1493 
1494 		if( mpDropNavWin == pNewNavWin)
1495 		{
1496 			MouseEvent aMEvt( mpDropNavWin->GetPointerPosPixel() );
1497 			SvTreeListBox::MouseButtonUp( aMEvt );
1498 		}
1499 	}
1500 
1501 	mpDropNavWin = NULL;
1502 	bIsInDrag = sal_False;
1503 }
1504 
1505 /*************************************************************************
1506 |*
1507 |* AcceptDrop-Event
1508 |*
1509 \************************************************************************/
1510 
1511 sal_Int8 SdPageObjsTLB::AcceptDrop (const AcceptDropEvent& rEvent)
1512 {
1513     sal_Int8 nResult (DND_ACTION_NONE);
1514 
1515 	if ( !bIsInDrag && IsDropFormatSupported( FORMAT_FILE ) )
1516     {
1517         nResult = rEvent.mnAction;
1518     }
1519     else
1520     {
1521         SvLBoxEntry* pEntry = GetDropTarget(rEvent.maPosPixel);
1522         if (rEvent.mbLeaving || !CheckDragAndDropMode( this, rEvent.mnAction ))
1523         {
1524             ImplShowTargetEmphasis( pTargetEntry, sal_False );
1525         }
1526         else if( !nDragDropMode )
1527         {
1528             DBG_ERRORFILE( "SdPageObjsTLB::AcceptDrop(): no target" );
1529         }
1530         else if (IsDropAllowed(pEntry))
1531         {
1532             nResult = DND_ACTION_MOVE;
1533 
1534             // Draw emphasis.
1535             if (pEntry != pTargetEntry || !(nImpFlags & SVLBOX_TARGEMPH_VIS))
1536             {
1537                 ImplShowTargetEmphasis( pTargetEntry, sal_False );
1538                 pTargetEntry = pEntry;
1539                 ImplShowTargetEmphasis( pTargetEntry, sal_True );
1540             }
1541         }
1542     }
1543 
1544     // Hide emphasis when there is no valid drop action.
1545     if (nResult == DND_ACTION_NONE)
1546         ImplShowTargetEmphasis(pTargetEntry, sal_False);
1547 
1548     return nResult;
1549 }
1550 
1551 /*************************************************************************
1552 |*
1553 |* ExecuteDrop-Event
1554 |*
1555 \************************************************************************/
1556 
1557 sal_Int8 SdPageObjsTLB::ExecuteDrop( const ExecuteDropEvent& rEvt )
1558 {
1559 	sal_Int8 nRet = DND_ACTION_NONE;
1560 
1561     try
1562     {
1563         if( !bIsInDrag )
1564         {
1565             SdNavigatorWin* pNavWin = NULL;
1566             sal_uInt16			nId = SID_NAVIGATOR;
1567 
1568             if( mpFrame->HasChildWindow( nId ) )
1569                 pNavWin = (SdNavigatorWin*)( mpFrame->GetChildWindow( nId )->GetContextWindow( SD_MOD() ) );
1570 
1571             if( pNavWin && ( pNavWin == mpParent ) )
1572             {
1573                 TransferableDataHelper	aDataHelper( rEvt.maDropEvent.Transferable );
1574                 String					aFile;
1575 
1576                 if( aDataHelper.GetString( FORMAT_FILE, aFile ) &&
1577                     ( (SdNavigatorWin*) mpParent)->InsertFile( aFile ) )
1578                 {
1579                     nRet = rEvt.mnAction;
1580                 }
1581             }
1582         }
1583     }
1584     catch (com::sun::star::uno::Exception&)
1585     {
1586         DBG_UNHANDLED_EXCEPTION();
1587     }
1588 
1589     if (nRet == DND_ACTION_NONE)
1590         SvTreeListBox::ExecuteDrop(rEvt, this);
1591 
1592 
1593 	return nRet;
1594 }
1595 
1596 /*************************************************************************
1597 |*
1598 |* Handler fuers Dragging
1599 |*
1600 \************************************************************************/
1601 
1602 IMPL_STATIC_LINK(SdPageObjsTLB, ExecDragHdl, void*, EMPTYARG)
1603 {
1604 	//	als Link, damit asynchron ohne ImpMouseMoveMsg auf dem Stack auch der
1605 	//	Navigator geloescht werden darf
1606 	pThis->DoDrag();
1607 	return 0;
1608 }
1609 
1610 
1611 bool SdPageObjsTLB::PageBelongsToCurrentShow (const SdPage* pPage) const
1612 {
1613     // Return <TRUE/> as default when there is no custom show or when none
1614     // is used.  The page does then belong to the standard show.
1615     bool bBelongsToShow = true;
1616 
1617     if (mpDoc->getPresentationSettings().mbCustomShow)
1618     {
1619         // Get the current custom show.
1620         SdCustomShow* pCustomShow = NULL;
1621         List* pShowList = const_cast<SdDrawDocument*>(mpDoc)->GetCustomShowList();
1622         if (pShowList != NULL)
1623         {
1624             sal_uLong nCurrentShowIndex = pShowList->GetCurPos();
1625             void* pObject = pShowList->GetObject(nCurrentShowIndex);
1626             pCustomShow = static_cast<SdCustomShow*>(pObject);
1627         }
1628 
1629         // Check whether the given page is part of that custom show.
1630         if (pCustomShow != NULL)
1631         {
1632             bBelongsToShow = false;
1633             sal_uLong nPageCount = pCustomShow->Count();
1634             for (sal_uInt16 i=0; i<nPageCount && !bBelongsToShow; i++)
1635                 if (pPage == static_cast<SdPage*>(pCustomShow->GetObject (i)))
1636                     bBelongsToShow = true;
1637         }
1638     }
1639 
1640     return bBelongsToShow;
1641 }
1642 
1643 
1644 
1645 
1646 sal_Bool SdPageObjsTLB::NotifyMoving(
1647     SvLBoxEntry* pTarget,
1648     SvLBoxEntry* pEntry,
1649     SvLBoxEntry*& rpNewParent,
1650     sal_uLong& rNewChildPos)
1651 {
1652     SvLBoxEntry* pDestination = pTarget;
1653     while (GetParent(pDestination) != NULL && GetParent(GetParent(pDestination)) != NULL)
1654         pDestination = GetParent(pDestination);
1655 
1656     SdrObject* pTargetObject = reinterpret_cast<SdrObject*>(pDestination->GetUserData());
1657     SdrObject* pSourceObject = reinterpret_cast<SdrObject*>(pEntry->GetUserData());
1658     if (pSourceObject == reinterpret_cast<SdrObject*>(1))
1659         pSourceObject = NULL;
1660 
1661     if (pTargetObject != NULL && pSourceObject != NULL)
1662     {
1663         SdrPage* pObjectList = pSourceObject->GetPage();
1664         if (pObjectList != NULL)
1665         {
1666             sal_uInt32 nNewPosition;
1667             if (pTargetObject == reinterpret_cast<SdrObject*>(1))
1668                 nNewPosition = 0;
1669             else
1670                 nNewPosition = pTargetObject->GetNavigationPosition() + 1;
1671             pObjectList->SetObjectNavigationPosition(*pSourceObject, nNewPosition);
1672         }
1673 
1674         // Update the tree list.
1675         if (pTarget == NULL)
1676         {
1677             rpNewParent = 0;
1678             rNewChildPos = 0;
1679             return sal_True;
1680         }
1681         else if (GetParent(pDestination) == NULL)
1682         {
1683             rpNewParent = pDestination;
1684             rNewChildPos = 0;
1685         }
1686         else
1687         {
1688             rpNewParent = GetParent(pDestination);
1689             rNewChildPos = pModel->GetRelPos(pDestination) + 1;
1690             rNewChildPos += nCurEntrySelPos;
1691             nCurEntrySelPos++;
1692         }
1693         return sal_True;
1694     }
1695     else
1696         return sal_False;
1697 }
1698 
1699 
1700 
1701 
1702 SvLBoxEntry* SdPageObjsTLB::GetDropTarget (const Point& rLocation)
1703 {
1704     SvLBoxEntry* pEntry = SvTreeListBox::GetDropTarget(rLocation);
1705     if (pEntry == NULL)
1706         return NULL;
1707 
1708     if (GetParent(pEntry) == NULL)
1709     {
1710         // Use page entry as insertion position.
1711     }
1712     else
1713     {
1714         // Go to second hierarchy level, i.e. top level shapes,
1715         // i.e. children of pages.
1716         while (GetParent(pEntry) != NULL && GetParent(GetParent(pEntry)) != NULL)
1717             pEntry = GetParent(pEntry);
1718 
1719         // Advance to next sibling.
1720         SvLBoxEntry* pNext;
1721         sal_uInt16 nDepth (0);
1722         while (pEntry != NULL)
1723         {
1724             pNext = dynamic_cast<SvLBoxEntry*>(NextVisible(pEntry, &nDepth));
1725             if (pNext != NULL && nDepth > 0 && nDepth!=0xffff)
1726                 pEntry = pNext;
1727             else
1728                 break;
1729         }
1730     }
1731 
1732     return pEntry;
1733 }
1734 
1735 
1736 
1737 
1738 bool SdPageObjsTLB::IsDropAllowed (SvLBoxEntry* pEntry)
1739 {
1740     if (pEntry == NULL)
1741         return false;
1742 
1743     if ( ! IsDropFormatSupported(SdPageObjsTransferable::GetListBoxDropFormatId()))
1744         return false;
1745 
1746     if ((pEntry->GetFlags() & SV_ENTRYFLAG_DISABLE_DROP) != 0)
1747         return false;
1748 
1749     return true;
1750 }
1751 
1752 
1753 
1754 
1755 void SdPageObjsTLB::AddShapeToTransferable (
1756     SdTransferable& rTransferable,
1757     SdrObject& rObject) const
1758 {
1759 	TransferableObjectDescriptor aObjectDescriptor;
1760     bool bIsDescriptorFillingPending (true);
1761 
1762     const SdrOle2Obj* pOleObject = dynamic_cast<const SdrOle2Obj*>(&rObject);
1763     if (pOleObject != NULL && pOleObject->GetObjRef().is())
1764     {
1765         // If object has no persistence it must be copied as part of the document
1766         try
1767         {
1768             uno::Reference< embed::XEmbedPersist > xPersObj (pOleObject->GetObjRef(), uno::UNO_QUERY );
1769             if (xPersObj.is() && xPersObj->hasEntry())
1770             {
1771                 SvEmbedTransferHelper::FillTransferableObjectDescriptor(
1772                     aObjectDescriptor,
1773                     pOleObject->GetObjRef(),
1774                     pOleObject->GetGraphic(),
1775                     pOleObject->GetAspect());
1776                 bIsDescriptorFillingPending = false;
1777             }
1778         }
1779         catch( uno::Exception& )
1780         {
1781         }
1782 	}
1783 
1784     ::sd::DrawDocShell* pDocShell = mpDoc->GetDocSh();
1785 	if (bIsDescriptorFillingPending && pDocShell!=NULL)
1786     {
1787         bIsDescriptorFillingPending = false;
1788         pDocShell->FillTransferableObjectDescriptor(aObjectDescriptor);
1789     }
1790 
1791     Point aDragPos (rObject.GetCurrentBoundRect().Center());
1792     //Point aDragPos (0,0);
1793 	aObjectDescriptor.maDragStartPos = aDragPos;
1794     //	aObjectDescriptor.maSize = GetAllMarkedRect().GetSize();
1795     if (pDocShell != NULL)
1796         aObjectDescriptor.maDisplayName = pDocShell->GetMedium()->GetURLObject().GetURLNoPass();
1797     else
1798         aObjectDescriptor.maDisplayName = String();
1799 	aObjectDescriptor.mbCanLink = sal_False;
1800 
1801 	rTransferable.SetStartPos(aDragPos);
1802 	rTransferable.SetObjectDescriptor( aObjectDescriptor );
1803 }
1804 
1805 
1806 
1807 
1808 ::sd::ViewShell* SdPageObjsTLB::GetViewShellForDocShell (::sd::DrawDocShell& rDocShell)
1809 {
1810     {
1811         ::sd::ViewShell* pViewShell = rDocShell.GetViewShell();
1812         if (pViewShell != NULL)
1813             return pViewShell;
1814     }
1815 
1816     try
1817     {
1818         // Get a component enumeration from the desktop and search it for documents.
1819         uno::Reference<lang::XMultiServiceFactory> xFactory (
1820             ::comphelper::getProcessServiceFactory ());
1821         if ( ! xFactory.is())
1822             return NULL;
1823 
1824         uno::Reference<frame::XDesktop> xDesktop (xFactory->createInstance (
1825                 ::rtl::OUString::createFromAscii("com.sun.star.frame.Desktop")), uno::UNO_QUERY);
1826         if ( ! xDesktop.is())
1827             return NULL;
1828 
1829         uno::Reference<frame::XFramesSupplier> xFrameSupplier (xDesktop, uno::UNO_QUERY);
1830         if ( ! xFrameSupplier.is())
1831             return NULL;
1832 
1833         uno::Reference<container::XIndexAccess> xFrameAccess (xFrameSupplier->getFrames(), uno::UNO_QUERY);
1834         if ( ! xFrameAccess.is())
1835             return NULL;
1836 
1837         for (sal_Int32 nIndex=0,nCount=xFrameAccess->getCount(); nIndex<nCount; ++nIndex)
1838         {
1839             uno::Reference<frame::XFrame> xFrame;
1840             if ( ! (xFrameAccess->getByIndex(nIndex) >>= xFrame))
1841                 continue;
1842 
1843             ::sd::DrawController* pController = dynamic_cast<sd::DrawController*>(xFrame->getController().get());
1844             if (pController == NULL)
1845                 continue;
1846             ::sd::ViewShellBase* pBase = pController->GetViewShellBase();
1847             if (pBase == NULL)
1848                 continue;
1849             if (pBase->GetDocShell() != &rDocShell)
1850                 continue;
1851 
1852             const ::boost::shared_ptr<sd::ViewShell> pViewShell (pBase->GetMainViewShell());
1853             if (pViewShell)
1854                 return pViewShell.get();
1855         }
1856     }
1857     catch (uno::Exception e)
1858     {
1859         // When there is an exception then simply use the default value of
1860         // bIsEnabled and disable the controls.
1861     }
1862     return NULL;
1863 }
1864 
1865 
1866 
1867 
1868 //===== IconProvider ==========================================================
1869 
1870 SdPageObjsTLB::IconProvider::IconProvider (void)
1871     : maImgPage( BitmapEx( SdResId( BMP_PAGE ) ) ),
1872       maImgPageExcl( BitmapEx( SdResId( BMP_PAGE_EXCLUDED ) ) ),
1873       maImgPageObjsExcl( BitmapEx( SdResId( BMP_PAGEOBJS_EXCLUDED ) ) ),
1874       maImgPageObjs( BitmapEx( SdResId( BMP_PAGEOBJS ) ) ),
1875       maImgObjects( BitmapEx( SdResId( BMP_OBJECTS ) ) ),
1876       maImgGroup( BitmapEx( SdResId( BMP_GROUP ) ) ),
1877 
1878       maImgPageH( BitmapEx( SdResId( BMP_PAGE_H ) ) ),
1879       maImgPageExclH( BitmapEx( SdResId( BMP_PAGE_EXCLUDED_H ) ) ),
1880       maImgPageObjsExclH( BitmapEx( SdResId( BMP_PAGEOBJS_EXCLUDED_H ) ) ),
1881       maImgPageObjsH( BitmapEx( SdResId( BMP_PAGEOBJS_H ) ) ),
1882       maImgObjectsH( BitmapEx( SdResId( BMP_OBJECTS_H ) ) ),
1883       maImgGroupH( BitmapEx( SdResId( BMP_GROUP_H ) ) )
1884 {
1885 }
1886