xref: /aoo42x/main/svx/source/gallery2/galbrws2.cxx (revision 02c50d82)
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_svx.hxx"
26 
27 
28 #include <sot/formats.hxx>
29 #include <vcl/msgbox.hxx>
30 #include <svtools/valueset.hxx>
31 #include <svl/urlbmk.hxx>
32 #include <svl/stritem.hxx>
33 #include <svl/intitem.hxx>
34 #include <svl/eitem.hxx>
35 #include <svtools/transfer.hxx>
36 #include <sfx2/bindings.hxx>
37 #include <sfx2/dispatch.hxx>
38 #include <sfx2/viewfrm.hxx>
39 #include <sfx2/sfxsids.hrc>
40 #include "svtools/filter.hxx"
41 #include <editeng/brshitem.hxx>
42 #include "helpid.hrc"
43 #include "svx/gallery.hxx"
44 #include "galobj.hxx"
45 #include "svx/gallery1.hxx"
46 #include "svx/galtheme.hxx"
47 #include "svx/galctrl.hxx"
48 #include "svx/galmisc.hxx"
49 #include "galbrws2.hxx"
50 #include "gallery.hrc"
51 #include <vcl/svapp.hxx>
52 #include <svx/fmmodel.hxx>
53 #include <svx/dialmgr.hxx>
54 #include <svx/svxdlg.hxx>
55 #include <svx/dialogs.hrc>
56 
57 // -----------
58 // - Defines -
59 // -----------
60 
61 #undef GALLERY_USE_CLIPBOARD
62 
63 #define TBX_ID_ICON 1
64 #define TBX_ID_LIST 2
65 
66 // -----------
67 // - statics -
68 // -----------
69 
70 GalleryBrowserMode GalleryBrowser2::meInitMode = GALLERYBROWSERMODE_ICON;
71 
72 // --------------------------
73 // - GalleryBackgroundPopup -
74 // --------------------------
75 
76 class GalleryBackgroundPopup : public PopupMenu, public SfxControllerItem
77 {
78 	const GalleryTheme* mpTheme;
79 	sal_uIntPtr				mnObjectPos;
80 
81 	virtual void		Select();
82 	virtual void		StateChanged( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState );
83 
84 public:
85 
86 					GalleryBackgroundPopup( const GalleryTheme* pTheme, sal_uIntPtr nObjectPos );
87 					~GalleryBackgroundPopup();
88 };
89 
90 // ------------------------------------------------------------------------
91 DBG_NAME(GalleryBackgroundPopup)
92 
93 GalleryBackgroundPopup::GalleryBackgroundPopup( const GalleryTheme* pTheme, sal_uIntPtr nObjectPos ) :
94 			SfxControllerItem	( SID_GALLERY_BG_BRUSH, SfxViewFrame::Current()->GetBindings() ),
95 			mpTheme				( pTheme ),
96 			mnObjectPos			( nObjectPos )
97 {
98     DBG_CTOR(GalleryBackgroundPopup,NULL);
99 
100 	SfxViewFrame::Current()->GetBindings().Update( SID_GALLERY_BG_BRUSH );
101 	RemoveDisabledEntries();
102 }
103 
104 // ------------------------------------------------------------------------
105 
106 GalleryBackgroundPopup::~GalleryBackgroundPopup()
107 {
108 
109     DBG_DTOR(GalleryBackgroundPopup,NULL);
110 }
111 
112 // ------------------------------------------------------------------------
113 
114 void GalleryBackgroundPopup::StateChanged( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pItem )
115 {
116 	if ( ( nSID == SID_GALLERY_BG_BRUSH ) && pItem && ( eState != SFX_ITEM_DISABLED ) )
117 	{
118 		SfxStringListItem*	pStrLstItem;
119 		SfxStringItem*		pStrItem;
120 
121 		PopupMenu::Clear();
122 
123 		if( ( pStrLstItem = PTR_CAST( SfxStringListItem, pItem ) ) != NULL )
124 		{
125 			List* pList = pStrLstItem->GetList();
126 
127 			if( pList )
128 				for ( sal_uIntPtr i = 0, nCount = pList->Count(); i < nCount; i++ )
129 					InsertItem( (sal_uInt16) i + 1, *(String*) pList->GetObject( i ) );
130 		}
131 		else if( ( pStrItem = PTR_CAST( SfxStringItem, pItem ) ) != NULL )
132 			InsertItem( 1, pStrItem->GetValue() );
133 		else
134 		{
135 			DBG_ERROR( "SgaBGPopup::StateChanged(...): Wrong item type!" );
136 		}
137 	}
138 }
139 
140 // ------------------------------------------------------------------------
141 
142 void GalleryBackgroundPopup::Select()
143 {
144 	Menu::Select();
145 
146 	const INetURLObject	aURL( mpTheme->GetObjectURL( mnObjectPos ) );
147 	const SvxBrushItem	aBrushItem( aURL.GetMainURL( INetURLObject::NO_DECODE ), String(), GPOS_TILED, SID_GALLERY_BG_BRUSH );
148 	const SfxUInt16Item aPosItem( SID_GALLERY_BG_POS, GetCurItemId() - 1 );
149 	const SfxStringItem	aPathItem( SID_FILE_NAME, aURL.GetMainURL( INetURLObject::NO_DECODE ) );
150 
151 	SfxViewFrame::Current()->GetBindings().GetDispatcher()->Execute( SID_GALLERY_BG_BRUSH,
152 							  SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD,
153 							  &aBrushItem, &aPosItem, &aPathItem, 0L );
154 }
155 
156 // ---------------------
157 // - GalleryThemePopup -
158 // ---------------------
159 
160 class GalleryThemePopup : public PopupMenu, public SfxControllerItem
161 {
162 	GalleryBackgroundPopup	maBackgroundPopup;
163 	const GalleryTheme*		mpTheme;
164 	sal_uIntPtr					mnObjectPos;
165 	sal_Bool					mbPreview;
166 
167 	virtual void			StateChanged( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState );
168 
169 public:
170 
171 							GalleryThemePopup( const GalleryTheme* pTheme, sal_uIntPtr nObjectPos, sal_Bool bPreview );
172 							~GalleryThemePopup();
173 };
174 
175 // ------------------------------------------------------------------------
176 DBG_NAME(GalleryThemePopup)
177 
178 GalleryThemePopup::GalleryThemePopup( const GalleryTheme* pTheme, sal_uIntPtr nObjectPos, sal_Bool bPreview ) :
179 	PopupMenu			( GAL_RESID( RID_SVXMN_GALLERY2 ) ),
180 	SfxControllerItem	( SID_GALLERY_ENABLE_ADDCOPY, SfxViewFrame::Current()->GetBindings() ),
181 	maBackgroundPopup	( pTheme, nObjectPos ),
182 	mpTheme				( pTheme ),
183 	mnObjectPos			( nObjectPos ),
184 	mbPreview			( bPreview )
185 {
186     DBG_CTOR(GalleryThemePopup,NULL);
187 
188 	const SgaObjKind	eObjKind = mpTheme->GetObjectKind( mnObjectPos );
189 	PopupMenu*			pAddMenu = GetPopupMenu( MN_ADDMENU );
190 	SfxBindings&		rBindings = SfxViewFrame::Current()->GetBindings();
191     INetURLObject       aURL;
192 
193     const_cast< GalleryTheme* >( mpTheme )->GetURL( mnObjectPos, aURL );
194     const sal_Bool bValidURL = ( aURL.GetProtocol() != INET_PROT_NOT_VALID );
195 
196 	pAddMenu->EnableItem( MN_ADD, bValidURL && SGA_OBJ_SOUND != eObjKind );
197 	pAddMenu->EnableItem( MN_ADD_LINK, bValidURL && SGA_OBJ_SVDRAW != eObjKind );
198 
199     EnableItem( MN_ADDMENU, pAddMenu->IsItemEnabled( MN_ADD ) || pAddMenu->IsItemEnabled( MN_ADD_LINK ) );
200     EnableItem( MN_PREVIEW, bValidURL );
201 
202     CheckItem( MN_PREVIEW, mbPreview );
203 
204 	if( mpTheme->IsReadOnly() || !mpTheme->GetObjectCount() )
205 	{
206 		EnableItem( MN_DELETE, sal_False );
207 		EnableItem( MN_TITLE, sal_False );
208 
209 		if( mpTheme->IsReadOnly() )
210 			EnableItem( MN_PASTECLIPBOARD, sal_False );
211 
212 		if( !mpTheme->GetObjectCount() )
213 			EnableItem( MN_COPYCLIPBOARD, sal_False );
214 	}
215 	else
216 	{
217 		EnableItem( MN_DELETE, !bPreview );
218 		EnableItem( MN_TITLE, sal_True );
219 		EnableItem( MN_COPYCLIPBOARD, sal_True );
220 		EnableItem( MN_PASTECLIPBOARD, sal_True );
221 	}
222 
223 #ifdef GALLERY_USE_CLIPBOARD
224 	if( IsItemEnabled( MN_PASTECLIPBOARD ) )
225     {
226     	TransferableDataHelper	aDataHelper( TransferableDataHelper::CreateFromSystemClipboard( this ) );
227     	sal_Bool					bEnable = sal_False;
228 
229 	    if( aDataHelper.GetFormatCount() )
230 	    {
231 		    if( aDataHelper.HasFormat( SOT_FORMATSTR_ID_DRAWING ) ||
232 			    aDataHelper.HasFormat( SOT_FORMAT_FILE_LIST ) ||
233 			    aDataHelper.HasFormat( FORMAT_FILE ) ||
234 			    aDataHelper.HasFormat( SOT_FORMATSTR_ID_SVXB ) ||
235 			    aDataHelper.HasFormat( FORMAT_GDIMETAFILE ) ||
236 			    aDataHelper.HasFormat( FORMAT_BITMAP ) )
237 		    {
238 			    bEnable = sal_True;
239 		    }
240 	    }
241 
242         if( !bEnable )
243     		EnableItem( MN_PASTECLIPBOARD, sal_False );
244     }
245 #else
246 	EnableItem( MN_COPYCLIPBOARD, sal_False );
247 	EnableItem( MN_PASTECLIPBOARD, sal_False );
248 #endif
249 
250 	if( !maBackgroundPopup.GetItemCount() || ( eObjKind == SGA_OBJ_SVDRAW ) || ( eObjKind == SGA_OBJ_SOUND ) )
251 		pAddMenu->EnableItem( MN_BACKGROUND, sal_False );
252 	else
253 	{
254 		pAddMenu->EnableItem( MN_BACKGROUND, sal_True );
255 		pAddMenu->SetPopupMenu( MN_BACKGROUND, &maBackgroundPopup );
256 	}
257 
258 	rBindings.Update( SID_GALLERY_ENABLE_ADDCOPY );
259 	RemoveDisabledEntries();
260 }
261 
262 // ------------------------------------------------------------------------
263 
264 GalleryThemePopup::~GalleryThemePopup()
265 {
266 
267     DBG_DTOR(GalleryThemePopup,NULL);
268 }
269 
270 // ------------------------------------------------------------------------
271 
272 void GalleryThemePopup::StateChanged( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pItem )
273 {
274 	if( ( nSID == SID_GALLERY_ENABLE_ADDCOPY ) && pItem && ( eState != SFX_ITEM_DISABLED ) )
275 	{
276 		SfxBoolItem*        pBoolItem = PTR_CAST( SfxBoolItem, pItem );
277     	const SgaObjKind	eObjKind = mpTheme->GetObjectKind( mnObjectPos );
278 
279         DBG_ASSERT( pBoolItem || pBoolItem == 0, "SfxBoolItem erwartet!");
280 
281         GetPopupMenu( MN_ADDMENU )->EnableItem( MN_ADD, pBoolItem->GetValue() && ( eObjKind != SGA_OBJ_SOUND ) );
282 	}
283 }
284 
285 // ------------------
286 // - GalleryToolBox -
287 // ------------------
288 DBG_NAME(GalleryToolBox)
289 
290 GalleryToolBox::GalleryToolBox( GalleryBrowser2* pParent ) :
291     ToolBox( pParent, WB_TABSTOP )
292 {
293     DBG_CTOR(GalleryToolBox,NULL);
294 
295 }
296 
297 // ------------------------------------------------------------------------
298 
299 GalleryToolBox::~GalleryToolBox()
300 {
301 
302     DBG_DTOR(GalleryToolBox,NULL);
303 }
304 
305 // ------------------------------------------------------------------------
306 
307 void GalleryToolBox::KeyInput( const KeyEvent& rKEvt )
308 {
309     if( !static_cast< GalleryBrowser2* >( GetParent() )->KeyInput( rKEvt, this ) )
310         ToolBox::KeyInput( rKEvt );
311 }
312 
313 // -------------------
314 // - GalleryBrowser2 -
315 // -------------------
316 DBG_NAME(GalleryBrowser2)
317 
318 GalleryBrowser2::GalleryBrowser2( Window* pParent, const ResId& rResId, Gallery* pGallery ) :
319 	Control				( pParent, rResId ),
320 	mpGallery			( pGallery ),
321 	mpCurTheme			( NULL ),
322 	mpIconView          ( new GalleryIconView( this, NULL ) ),
323     mpListView          ( new GalleryListView( this, NULL ) ),
324 	mpPreview           ( new GalleryPreview( this, NULL ) ),
325     maViewBox           ( this ),
326     maSeparator         ( this, WB_VERT ),
327 	maInfoBar			( this, WB_LEFT | WB_VCENTER ),
328 	mnCurActionPos		( 0xffffffff ),
329     meMode              ( GALLERYBROWSERMODE_NONE ),
330     meLastMode          ( GALLERYBROWSERMODE_NONE ),
331 	mbCurActionIsLinkage( sal_False )
332 {
333     DBG_CTOR(GalleryBrowser2,NULL);
334 
335     Image       aDummyImage;
336     const Link  aSelectHdl( LINK( this, GalleryBrowser2, SelectObjectHdl ) );
337     Font        aInfoFont( maInfoBar.GetControlFont() );
338 
339 	maMiscOptions.AddListenerLink( LINK( this, GalleryBrowser2, MiscHdl ) );
340 
341     maViewBox.InsertItem( TBX_ID_ICON, aDummyImage );
342     maViewBox.SetItemBits( TBX_ID_ICON, TIB_RADIOCHECK | TIB_AUTOCHECK );
343     maViewBox.SetHelpId( TBX_ID_ICON, HID_GALLERY_ICONVIEW );
344     maViewBox.SetQuickHelpText( TBX_ID_ICON, String( GAL_RESID( RID_SVXSTR_GALLERY_ICONVIEW ) ) );
345 
346     maViewBox.InsertItem( TBX_ID_LIST, aDummyImage );
347     maViewBox.SetItemBits( TBX_ID_LIST, TIB_RADIOCHECK | TIB_AUTOCHECK );
348     maViewBox.SetHelpId( TBX_ID_LIST, HID_GALLERY_LISTVIEW );
349     maViewBox.SetQuickHelpText( TBX_ID_LIST, String( GAL_RESID( RID_SVXSTR_GALLERY_LISTVIEW ) ) );
350 
351     maViewBox.SetBorder( 0, 1 );
352     MiscHdl( NULL );
353     maViewBox.SetSelectHdl( LINK( this, GalleryBrowser2, SelectTbxHdl ) );
354     maViewBox.Show();
355 
356 	mpIconView->SetAccessibleName(String( SVX_RES( RID_SVXSTR_GALLERY_THEMEITEMS ) ));
357 	mpListView->SetAccessibleName(String( SVX_RES( RID_SVXSTR_GALLERY_THEMEITEMS ) ));
358 
359 	maInfoBar.Show();
360     maSeparator.Show();
361 
362 	mpIconView->SetSelectHdl( aSelectHdl );
363 	mpListView->SetSelectHdl( aSelectHdl );
364 
365     InitSettings();
366 
367     SetMode( ( GALLERYBROWSERMODE_PREVIEW != GalleryBrowser2::meInitMode ) ? GalleryBrowser2::meInitMode : GALLERYBROWSERMODE_ICON );
368 
369 	if(maInfoBar.GetText().Len() == 0)
370 		mpIconView->SetAccessibleRelationLabeledBy(mpIconView);
371 	else
372 		mpIconView->SetAccessibleRelationLabeledBy(&maInfoBar);
373 	mpIconView->SetAccessibleRelationMemberOf(mpIconView);
374 }
375 
376 // -----------------------------------------------------------------------------
377 
378 GalleryBrowser2::~GalleryBrowser2()
379 {
380     maMiscOptions.RemoveListenerLink( LINK( this, GalleryBrowser2, MiscHdl ) );
381 
382 	delete mpPreview;
383     delete mpListView;
384 	delete mpIconView;
385 
386 	if( mpCurTheme )
387 		mpGallery->ReleaseTheme( mpCurTheme, *this );
388 
389     DBG_DTOR(GalleryBrowser2,NULL);
390 }
391 
392 // -----------------------------------------------------------------------------
393 
394 void GalleryBrowser2::InitSettings()
395 {
396     Font  aInfoFont( maInfoBar.GetControlFont() );
397 
398     aInfoFont.SetWeight( WEIGHT_BOLD );
399     aInfoFont.SetColor( GALLERY_FG_COLOR );
400     maInfoBar.SetControlFont( aInfoFont );
401 
402     maInfoBar.SetBackground( Wallpaper( GALLERY_DLG_COLOR ) );
403 	maInfoBar.SetControlBackground( GALLERY_DLG_COLOR );
404 
405 	maSeparator.SetBackground( Wallpaper( GALLERY_BG_COLOR ) );
406 	maSeparator.SetControlBackground( GALLERY_BG_COLOR );
407 	maSeparator.SetControlForeground( GALLERY_FG_COLOR );
408 }
409 
410 // -----------------------------------------------------------------------------
411 
412 void GalleryBrowser2::DataChanged( const DataChangedEvent& rDCEvt )
413 {
414 	if ( ( rDCEvt.GetType() == DATACHANGED_SETTINGS ) && ( rDCEvt.GetFlags() & SETTINGS_STYLE ) )
415         InitSettings();
416     else
417         Control::DataChanged( rDCEvt );
418 }
419 
420 // -----------------------------------------------------------------------------
421 
422 void GalleryBrowser2::Resize()
423 {
424 	Control::Resize();
425 
426 	mpIconView->Hide();
427     mpListView->Hide();
428     mpPreview->Hide();
429 
430 	const Size	aOutSize( GetOutputSizePixel() );
431     const Size  aBoxSize( maViewBox.GetOutputSizePixel() );
432     const long  nOffset = 2, nSepWidth = 2;
433     const long  nInfoBarX = aBoxSize.Width() + ( nOffset * 3 ) + nSepWidth;
434 	const Point	aPt( 0, aBoxSize.Height() + 3 );
435 	const Size	aSz( aOutSize.Width(), aOutSize.Height() - aPt.Y() );
436 
437     maSeparator.SetPosSizePixel( Point( aBoxSize.Width() + nOffset, 0 ), Size( nSepWidth, aBoxSize.Height() ) );
438     maInfoBar.SetPosSizePixel( Point( nInfoBarX, 0 ), Size( aOutSize.Width() - nInfoBarX, aBoxSize.Height() ) );
439 
440     mpIconView->SetPosSizePixel( aPt, aSz );
441     mpListView->SetPosSizePixel( aPt, aSz );
442 	mpPreview->SetPosSizePixel( aPt, aSz );
443 
444     switch( GetMode() )
445     {
446         case( GALLERYBROWSERMODE_ICON ): mpIconView->Show(); break;
447         case( GALLERYBROWSERMODE_LIST ): mpListView->Show(); break;
448         case( GALLERYBROWSERMODE_PREVIEW ): mpPreview->Show(); break;
449 
450         default:
451         break;
452     }
453 }
454 
455 // -----------------------------------------------------------------------------
456 
457 void GalleryBrowser2::Notify( SfxBroadcaster&, const SfxHint& rHint )
458 {
459 	const GalleryHint& rGalleryHint = (const GalleryHint&) rHint;
460 
461 	switch( rGalleryHint.GetType() )
462 	{
463 		case( GALLERY_HINT_THEME_UPDATEVIEW ):
464 		{
465             if( GALLERYBROWSERMODE_PREVIEW == GetMode() )
466                 SetMode( meLastMode );
467 
468 			ImplUpdateViews( (sal_uInt16) rGalleryHint.GetData1() + 1 );
469 		}
470 		break;
471 
472 		default:
473 		break;
474 	}
475 }
476 
477 // -----------------------------------------------------------------------------
478 
479 sal_Int8 GalleryBrowser2::AcceptDrop( DropTargetHelper& rTarget, const AcceptDropEvent& )
480 {
481 	sal_Int8 nRet = DND_ACTION_NONE;
482 
483 	if( mpCurTheme && !mpCurTheme->IsReadOnly() && !mpCurTheme ->IsImported() )
484 	{
485 		if( !mpCurTheme->IsDragging() )
486 		{
487 			if( rTarget.IsDropFormatSupported( SOT_FORMATSTR_ID_DRAWING ) ||
488 				rTarget.IsDropFormatSupported( SOT_FORMAT_FILE_LIST ) ||
489 				rTarget.IsDropFormatSupported( FORMAT_FILE ) ||
490 				rTarget.IsDropFormatSupported( SOT_FORMATSTR_ID_SVXB ) ||
491 				rTarget.IsDropFormatSupported( FORMAT_GDIMETAFILE ) ||
492 				rTarget.IsDropFormatSupported( FORMAT_BITMAP ) )
493 			{
494 				nRet = DND_ACTION_COPY;
495 			}
496 		}
497 		else
498 			nRet = DND_ACTION_COPY;
499 	}
500 
501 	return nRet;
502 }
503 
504 // -----------------------------------------------------------------------------
505 
506 sal_Int8 GalleryBrowser2::ExecuteDrop( DropTargetHelper&, const ExecuteDropEvent& rEvt )
507 {
508 	sal_Int8 nRet = DND_ACTION_NONE;
509 
510 	if( mpCurTheme )
511 	{
512 		Point		aSelPos;
513 		const sal_uIntPtr nItemId = ImplGetSelectedItemId( &rEvt.maPosPixel, aSelPos );
514 		const sal_uIntPtr	nInsertPos = ( nItemId ? ( nItemId - 1 ) : LIST_APPEND );
515 
516 		if( mpCurTheme->IsDragging() )
517 			mpCurTheme->ChangeObjectPos( mpCurTheme->GetDragPos(), nInsertPos );
518 		else
519 			nRet = mpCurTheme->InsertTransferable( rEvt.maDropEvent.Transferable, nInsertPos );
520 	}
521 
522 	return nRet;
523 }
524 
525 // -----------------------------------------------------------------------------
526 
527 void GalleryBrowser2::StartDrag( Window*, const Point* pDragPoint )
528 {
529 	if( mpCurTheme )
530 	{
531 	    Point		aSelPos;
532 		const sal_uIntPtr nItemId = ImplGetSelectedItemId( pDragPoint, aSelPos );
533 
534         if( nItemId )
535 			mpCurTheme->StartDrag( this, nItemId - 1 );
536 	}
537 }
538 
539 // -----------------------------------------------------------------------------
540 
541 void GalleryBrowser2::TogglePreview( Window*, const Point* )
542 {
543     SetMode( ( GALLERYBROWSERMODE_PREVIEW != GetMode() ) ? GALLERYBROWSERMODE_PREVIEW : meLastMode );
544 	GetViewWindow()->GrabFocus();
545 }
546 
547 // -----------------------------------------------------------------------------
548 
549 void GalleryBrowser2::ShowContextMenu( Window*, const Point* pContextPoint )
550 {
551     Point		aSelPos;
552 	const sal_uIntPtr nItemId = ImplGetSelectedItemId( pContextPoint, aSelPos );
553 
554 	if( mpCurTheme && nItemId && ( nItemId <= mpCurTheme->GetObjectCount() ) )
555 	{
556         ImplSelectItemId( nItemId );
557 
558 		SfxViewFrame* pCurrentViewFrame = SfxViewFrame::Current();
559 		if ( pCurrentViewFrame )
560 		{
561 			SfxBindings& rBindings = pCurrentViewFrame->GetBindings();
562 			rBindings.ENTERREGISTRATIONS();
563 			GalleryThemePopup aMenu( mpCurTheme, nItemId - 1, GALLERYBROWSERMODE_PREVIEW == GetMode() );
564 			rBindings.LEAVEREGISTRATIONS();
565 			aMenu.SetSelectHdl( LINK( this, GalleryBrowser2, MenuSelectHdl ) );
566 			aMenu.Execute( this, aSelPos  );
567 		}
568 	}
569 }
570 
571 // -----------------------------------------------------------------------------
572 
573 sal_Bool GalleryBrowser2::KeyInput( const KeyEvent& rKEvt, Window* pWindow )
574 {
575     Point		aSelPos;
576 	const sal_uIntPtr	nItemId = ImplGetSelectedItemId( NULL, aSelPos );
577     sal_Bool        bRet = static_cast< GalleryBrowser* >( GetParent() )->KeyInput( rKEvt, pWindow );
578 
579     if( !bRet && !maViewBox.HasFocus() && nItemId && mpCurTheme )
580     {
581         sal_uInt16              nExecuteId = 0;
582 	    const SgaObjKind	eObjKind = mpCurTheme->GetObjectKind( nItemId - 1 );
583         INetURLObject       aURL;
584 
585         const_cast< GalleryTheme* >( mpCurTheme )->GetURL( nItemId - 1, aURL );
586 
587         const sal_Bool  bValidURL = ( aURL.GetProtocol() != INET_PROT_NOT_VALID );
588         sal_Bool        bPreview = bValidURL;
589         sal_Bool        bAdd = bValidURL;
590         sal_Bool        bAddLink = ( bValidURL && SGA_OBJ_SVDRAW != eObjKind );
591         sal_Bool        bDelete = sal_False;
592         sal_Bool        bTitle = sal_False;
593 
594 	    if( !mpCurTheme->IsReadOnly() && mpCurTheme->GetObjectCount() )
595 	    {
596             bDelete = ( GALLERYBROWSERMODE_PREVIEW != GetMode() );
597             bTitle = sal_True;
598 	    }
599 
600         switch( rKEvt.GetKeyCode().GetCode() )
601         {
602             case( KEY_SPACE ):
603             case( KEY_RETURN ):
604             case( KEY_P ):
605             {
606                 if( bPreview )
607                 {
608                     TogglePreview( pWindow );
609                     bRet = sal_True;
610                 }
611             }
612             break;
613 
614             case( KEY_INSERT ):
615             case( KEY_I ):
616             {
617                 if( bAddLink && rKEvt.GetKeyCode().IsShift() && rKEvt.GetKeyCode().IsMod1() )
618                     nExecuteId = MN_ADD_LINK;
619                 else if( bAdd )
620                     nExecuteId = MN_ADD;
621             }
622             break;
623 
624             case( KEY_DELETE ):
625             case( KEY_D ):
626             {
627                 if( bDelete )
628                     nExecuteId = MN_DELETE;
629             }
630             break;
631 
632             case( KEY_T ):
633             {
634                 if( bTitle )
635                     nExecuteId = MN_TITLE;
636             }
637             break;
638 
639             default:
640             break;
641         }
642 
643         if( nExecuteId )
644         {
645             ImplExecute( nExecuteId );
646             bRet = sal_True;
647         }
648     }
649 
650     return bRet;
651 }
652 
653 // -----------------------------------------------------------------------------
654 
655 void GalleryBrowser2::SelectTheme( const String& rThemeName )
656 {
657 	delete mpIconView, mpIconView = NULL;
658     delete mpListView, mpListView = NULL;
659 	delete mpPreview, mpPreview = NULL;
660 
661 	if( mpCurTheme )
662 		mpGallery->ReleaseTheme( mpCurTheme, *this );
663 
664 	mpCurTheme = mpGallery->AcquireTheme( rThemeName, *this );
665 
666 	mpIconView = new GalleryIconView( this, mpCurTheme );
667     mpListView = new GalleryListView( this, mpCurTheme );
668 	mpPreview = new GalleryPreview( this, mpCurTheme );
669 
670 	mpIconView->SetAccessibleName(String( SVX_RES( RID_SVXSTR_GALLERY_THEMEITEMS ) ));
671 	mpListView->SetAccessibleName(String( SVX_RES( RID_SVXSTR_GALLERY_THEMEITEMS ) ));
672 	mpPreview->SetAccessibleName(String( SVX_RES( RID_SVXSTR_GALLERY_PREVIEW ) ));
673 
674     const Link aSelectHdl( LINK( this, GalleryBrowser2, SelectObjectHdl ) );
675 
676 	mpIconView->SetSelectHdl( aSelectHdl );
677 	mpListView->SetSelectHdl( aSelectHdl );
678 
679     if( GALLERYBROWSERMODE_PREVIEW == GetMode() )
680         meMode = meLastMode;
681 
682 	Resize();
683     ImplUpdateViews( 1 );
684 
685     maViewBox.EnableItem( TBX_ID_ICON, sal_True );
686     maViewBox.EnableItem( TBX_ID_LIST, sal_True );
687     maViewBox.CheckItem( ( GALLERYBROWSERMODE_ICON == GetMode() ) ? TBX_ID_ICON : TBX_ID_LIST, sal_True );
688 
689 	if(maInfoBar.GetText().Len() == 0)
690 		mpIconView->SetAccessibleRelationLabeledBy(mpIconView);
691 	else
692 		mpIconView->SetAccessibleRelationLabeledBy(&maInfoBar);
693 	mpIconView->SetAccessibleRelationMemberOf(mpIconView);
694 }
695 
696 // -----------------------------------------------------------------------------
697 
698 void GalleryBrowser2::SetMode( GalleryBrowserMode eMode )
699 {
700     if( GetMode() != eMode )
701     {
702         meLastMode = GetMode();
703 
704         switch( eMode )
705         {
706             case( GALLERYBROWSERMODE_ICON ):
707             {
708 			    mpListView->Hide();
709 
710 			    mpPreview->Hide();
711     			mpPreview->SetGraphic( Graphic() );
712 	    		mpPreview->PreviewMedia( INetURLObject() );
713 
714                 mpIconView->Show();
715 
716                 maViewBox.EnableItem( TBX_ID_ICON, sal_True );
717                 maViewBox.EnableItem( TBX_ID_LIST, sal_True );
718 
719                 maViewBox.CheckItem( TBX_ID_ICON, sal_True );
720                 maViewBox.CheckItem( TBX_ID_LIST, sal_False );
721             }
722             break;
723 
724             case( GALLERYBROWSERMODE_LIST ):
725             {
726 			    mpIconView->Hide();
727 
728 			    mpPreview->Hide();
729     			mpPreview->SetGraphic( Graphic() );
730 	    		mpPreview->PreviewMedia( INetURLObject() );
731 
732                 mpListView->Show();
733 
734                 maViewBox.EnableItem( TBX_ID_ICON, sal_True );
735                 maViewBox.EnableItem( TBX_ID_LIST, sal_True );
736 
737                 maViewBox.CheckItem( TBX_ID_ICON, sal_False );
738                 maViewBox.CheckItem( TBX_ID_LIST, sal_True );
739             }
740             break;
741 
742             case( GALLERYBROWSERMODE_PREVIEW ):
743             {
744     			Graphic		aGraphic;
745 			    Point		aSelPos;
746 	    		const sal_uIntPtr	nItemId = ImplGetSelectedItemId( NULL, aSelPos );
747 
748                 if( nItemId )
749                 {
750                     const sal_uIntPtr nPos = nItemId - 1;
751 
752    			        mpIconView->Hide();
753                     mpListView->Hide();
754 
755                     if( mpCurTheme )
756     			        mpCurTheme->GetGraphic( nPos, aGraphic );
757 
758                     mpPreview->SetGraphic( aGraphic );
759  					mpPreview->Show();
760 
761 			        if( mpCurTheme && mpCurTheme->GetObjectKind( nPos ) == SGA_OBJ_SOUND )
762 				        mpPreview->PreviewMedia( mpCurTheme->GetObjectURL( nPos ) );
763 
764                     maViewBox.EnableItem( TBX_ID_ICON, sal_False );
765                     maViewBox.EnableItem( TBX_ID_LIST, sal_False );
766                 }
767             }
768             break;
769 
770 			default:
771 				break;
772         }
773 
774         GalleryBrowser2::meInitMode = meMode = eMode;
775     }
776 }
777 
778 // -----------------------------------------------------------------------------
779 
780 Window* GalleryBrowser2::GetViewWindow() const
781 {
782     Window* pRet;
783 
784     switch( GetMode() )
785     {
786         case( GALLERYBROWSERMODE_LIST ): pRet = mpListView; break;
787         case( GALLERYBROWSERMODE_PREVIEW ): pRet = mpPreview; break;
788 
789         default:
790             pRet = mpIconView;
791         break;
792     }
793 
794     return pRet;
795 }
796 
797 // -----------------------------------------------------------------------------
798 
799 void GalleryBrowser2::Travel( GalleryBrowserTravel eTravel )
800 {
801     if( mpCurTheme )
802     {
803 		Point		aSelPos;
804         const sal_uIntPtr nItemId = ImplGetSelectedItemId( NULL, aSelPos );
805 
806         if( nItemId )
807         {
808             sal_uIntPtr nNewItemId = nItemId;
809 
810             switch( eTravel )
811             {
812                 case( GALLERYBROWSERTRAVEL_FIRST ):     nNewItemId = 1; break;
813                 case( GALLERYBROWSERTRAVEL_LAST ):      nNewItemId = mpCurTheme->GetObjectCount(); break;
814                 case( GALLERYBROWSERTRAVEL_PREVIOUS ):  nNewItemId--; break;
815                 case( GALLERYBROWSERTRAVEL_NEXT ):      nNewItemId++; break;
816 				default:
817 					break;
818             }
819 
820             if( nNewItemId < 1 )
821                 nNewItemId = 1;
822             else if( nNewItemId > mpCurTheme->GetObjectCount() )
823                 nNewItemId = mpCurTheme->GetObjectCount();
824 
825             if( nNewItemId != nItemId )
826             {
827                 ImplSelectItemId( nNewItemId );
828             	ImplUpdateInfoBar();
829 
830                 if( GALLERYBROWSERMODE_PREVIEW == GetMode() )
831                 {
832     			    Graphic		aGraphic;
833                     const sal_uIntPtr nPos = nNewItemId - 1;
834 
835                     mpCurTheme->GetGraphic( nPos, aGraphic );
836                     mpPreview->SetGraphic( aGraphic );
837 
838 			        if( SGA_OBJ_SOUND == mpCurTheme->GetObjectKind( nPos ) )
839 				        mpPreview->PreviewMedia( mpCurTheme->GetObjectURL( nPos ) );
840 
841                     mpPreview->Invalidate();
842                 }
843             }
844         }
845     }
846 }
847 
848 // -----------------------------------------------------------------------------
849 
850 void GalleryBrowser2::ImplUpdateViews( sal_uInt16 nSelectionId )
851 {
852 	mpIconView->Hide();
853     mpListView->Hide();
854     mpPreview->Hide();
855 
856 	mpIconView->Clear();
857     mpListView->Clear();
858 
859 	if( mpCurTheme )
860 	{
861 		for( sal_uIntPtr i = 0, nCount = mpCurTheme->GetObjectCount(); i < nCount; )
862         {
863             mpListView->RowInserted( i++ );
864 			mpIconView->InsertItem( (sal_uInt16) i );
865         }
866 
867         ImplSelectItemId( ( ( nSelectionId > mpCurTheme->GetObjectCount() ) ? mpCurTheme->GetObjectCount() : nSelectionId ) );
868 	}
869 
870     switch( GetMode() )
871     {
872         case( GALLERYBROWSERMODE_ICON ): mpIconView->Show(); break;
873         case( GALLERYBROWSERMODE_LIST ): mpListView->Show(); break;
874         case( GALLERYBROWSERMODE_PREVIEW ): mpPreview->Show(); break;
875 
876         default:
877         break;
878     }
879 
880 	ImplUpdateInfoBar();
881 }
882 
883 // -----------------------------------------------------------------------------
884 
885 void GalleryBrowser2::ImplUpdateInfoBar()
886 {
887 	String aInfoText;
888 
889 	if( mpCurTheme )
890 	{
891 	    Point		aSelPos;
892 		const sal_uIntPtr nItemId = ImplGetSelectedItemId( NULL, aSelPos );
893 
894         if( nItemId )
895         {
896             const sal_uIntPtr nPos = nItemId - 1;
897 
898 		    aInfoText = mpCurTheme->GetName();
899 
900 		    if( nPos < mpCurTheme->GetObjectCount() )
901 		    {
902 			    SgaObject* pObj = mpCurTheme->AcquireObject( nPos );
903 
904 			    if( pObj )
905 			    {
906 				    aInfoText = GetItemText( *mpCurTheme, *pObj, GALLERY_ITEM_THEMENAME | GALLERY_ITEM_TITLE | GALLERY_ITEM_PATH );
907 				    mpCurTheme->ReleaseObject( pObj );
908 			    }
909 		    }
910         }
911 	}
912 
913 	maInfoBar.SetText( aInfoText );
914 }
915 
916 // -----------------------------------------------------------------------------
917 
918 sal_uIntPtr GalleryBrowser2::ImplGetSelectedItemId( const Point* pSelPos, Point& rSelPos )
919 {
920 	const Size  aOutputSizePixel( GetOutputSizePixel() );
921     sal_uIntPtr       nRet = 0;
922 
923     if( GALLERYBROWSERMODE_PREVIEW == GetMode() )
924     {
925         nRet = ( ( GALLERYBROWSERMODE_ICON == meLastMode ) ? mpIconView->GetSelectItemId() : ( mpListView->FirstSelectedRow() + 1 ) );
926 
927 	    if( pSelPos )
928 	        rSelPos = GetPointerPosPixel();
929 	    else
930     	    rSelPos = Point( aOutputSizePixel.Width() >> 1, aOutputSizePixel.Height() >> 1 );
931     }
932     else if( GALLERYBROWSERMODE_ICON == GetMode() )
933 	{
934 	    if( pSelPos )
935 	    {
936             nRet = mpIconView->GetItemId( *pSelPos );
937 		    rSelPos = GetPointerPosPixel();
938 	    }
939 	    else
940 	    {
941             nRet = mpIconView->GetSelectItemId();
942 	    	rSelPos = mpIconView->GetItemRect( (sal_uInt16) nRet ).Center();
943 	    }
944 	}
945     else
946 	{
947 	    if( pSelPos )
948 	    {
949             nRet = mpListView->GetRowAtYPosPixel( pSelPos->Y() ) + 1;
950 	    	rSelPos = GetPointerPosPixel();
951 	    }
952 	    else
953 	    {
954             nRet = mpListView->FirstSelectedRow() + 1;
955 	    	rSelPos = mpListView->GetFieldRectPixel( (sal_uInt16) nRet, 1 ).Center();
956 	    }
957 	}
958 
959 	rSelPos.X() = Max( Min( rSelPos.X(), aOutputSizePixel.Width() - 1L ), 0L );
960 	rSelPos.Y() = Max( Min( rSelPos.Y(), aOutputSizePixel.Height() - 1L ), 0L );
961 
962     if( nRet && ( !mpCurTheme || ( nRet > mpCurTheme->GetObjectCount() ) ) )
963     {
964         nRet = 0;
965     }
966 
967     return nRet;
968 }
969 
970 // -----------------------------------------------------------------------------
971 
972 void GalleryBrowser2::ImplSelectItemId( sal_uIntPtr nItemId )
973 {
974     if( nItemId )
975     {
976 
977         mpIconView->SelectItem( (sal_uInt16) nItemId );
978         mpListView->SelectRow( nItemId - 1 );
979     }
980 }
981 
982 // -----------------------------------------------------------------------------
983 
984 void GalleryBrowser2::ImplExecute( sal_uInt16 nId )
985 {
986     Point		aSelPos;
987 	const sal_uIntPtr nItemId = ImplGetSelectedItemId( NULL, aSelPos );
988 
989     if( mpCurTheme && nItemId )
990     {
991         mnCurActionPos = nItemId - 1;
992 
993 		switch( nId )
994 		{
995 			case( MN_ADD ):
996 			case( MN_ADD_LINK ):
997 			{
998 				sal_uInt32 nFormat = 0;
999 
1000 				mbCurActionIsLinkage = ( MN_ADD_LINK == nId );
1001 
1002 				switch( mpCurTheme->GetObjectKind( mnCurActionPos ) )
1003 				{
1004 					case( SGA_OBJ_BMP ):
1005 					case( SGA_OBJ_ANIM ):
1006 					case( SGA_OBJ_INET ):
1007 						nFormat = SGA_FORMAT_GRAPHIC | SGA_FORMAT_STRING;
1008 					break;
1009 
1010 					case ( SGA_OBJ_SOUND ) :
1011 						nFormat = SGA_FORMAT_SOUND | SGA_FORMAT_STRING;
1012 					break;
1013 
1014 					case( SGA_OBJ_SVDRAW ):
1015 						nFormat = SGA_FORMAT_GRAPHIC | SGA_FORMAT_SVDRAW | SGA_FORMAT_STRING;
1016 					break;
1017 
1018 					default :
1019 					break;
1020 				}
1021 
1022 				const SfxUInt32Item aItem( SID_GALLERY_FORMATS, nFormat );
1023 				SfxViewFrame::Current()->GetBindings().GetDispatcher()->Execute(
1024 					SID_GALLERY_FORMATS, SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD, &aItem, 0L );
1025 			}
1026 			break;
1027 
1028 			case( MN_PREVIEW ):
1029                 SetMode( ( GALLERYBROWSERMODE_PREVIEW != GetMode() ) ? GALLERYBROWSERMODE_PREVIEW : meLastMode );
1030 			break;
1031 
1032 			case( MN_DELETE ):
1033 			{
1034 				if( !mpCurTheme->IsReadOnly() &&
1035 					QueryBox( NULL, WB_YES_NO, String( GAL_RESID( RID_SVXSTR_GALLERY_DELETEOBJ ) ) ).Execute() == RET_YES )
1036 				{
1037 					mpCurTheme->RemoveObject( mnCurActionPos );
1038 				}
1039 			}
1040 			break;
1041 
1042 			case( MN_TITLE ):
1043 			{
1044 				SgaObject* pObj = mpCurTheme->AcquireObject( mnCurActionPos );
1045 
1046 				if( pObj )
1047 				{
1048                     const String    aOldTitle( GetItemText( *mpCurTheme, *pObj, GALLERY_ITEM_TITLE ) );
1049 					//CHINA001 TitleDialog	    aDlg( this, aOldTitle );
1050 					SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
1051 					if(pFact)
1052 					{
1053 						AbstractTitleDialog* aDlg = pFact->CreateTitleDialog( this, aOldTitle );
1054 						DBG_ASSERT(aDlg, "Dialogdiet fail!");//CHINA001
1055 						if( aDlg->Execute() == RET_OK )//CHINA001 if( aDlg.Execute() == RET_OK )
1056 						{
1057 							String aNewTitle( aDlg->GetTitle() );//CHINA001 String aNewTitle( aDlg.GetTitle() );
1058 
1059 							if( ( !aNewTitle.Len() && pObj->GetTitle().Len() ) || ( aNewTitle != aOldTitle ) )
1060 							{
1061 								if( !aNewTitle.Len() )
1062 									aNewTitle = String( RTL_CONSTASCII_USTRINGPARAM( "__<empty>__" ) );
1063 
1064 								pObj->SetTitle( aNewTitle );
1065 								mpCurTheme->InsertObject( *pObj );
1066 							}
1067 						}
1068 
1069 						mpCurTheme->ReleaseObject( pObj );
1070 						delete aDlg; //add CHINA001
1071 					}
1072 				}
1073 			}
1074 			break;
1075 
1076 			case( MN_COPYCLIPBOARD ):
1077 			{
1078                 Window* pWindow;
1079 
1080                 switch( GetMode() )
1081                 {
1082                     case( GALLERYBROWSERMODE_ICON ): pWindow = (Window*) mpIconView; break;
1083                     case( GALLERYBROWSERMODE_LIST ): pWindow = (Window*) mpListView; break;
1084                     case( GALLERYBROWSERMODE_PREVIEW ): pWindow = (Window*) mpPreview; break;
1085 
1086                     default:
1087                         pWindow = NULL;
1088                     break;
1089                 }
1090 
1091 				mpCurTheme->CopyToClipboard( pWindow, mnCurActionPos );
1092 			}
1093 			break;
1094 
1095 			case( MN_PASTECLIPBOARD ):
1096 			{
1097 				if( !mpCurTheme->IsReadOnly() )
1098 				{
1099 					TransferableDataHelper aDataHelper( TransferableDataHelper::CreateFromSystemClipboard( this ) );
1100 					mpCurTheme->InsertTransferable( aDataHelper.GetTransferable(), mnCurActionPos );
1101 				}
1102 			}
1103 			break;
1104 
1105 			default:
1106 			break;
1107 		}
1108     }
1109 }
1110 
1111 // -----------------------------------------------------------------------------
1112 
1113 String GalleryBrowser2::GetItemText( const GalleryTheme& rTheme, const SgaObject& rObj, sal_uIntPtr nItemTextFlags )
1114 {
1115 	INetURLObject   aURL;
1116     String          aRet;
1117 
1118     if( rTheme.IsImported() )
1119 	{
1120 		aURL = rTheme.GetParent()->GetImportURL( rTheme.GetName() );
1121 
1122 		aURL.removeSegment();
1123 		aURL.Append( rObj.GetURL().GetName() );
1124 	}
1125     else
1126         aURL = rObj.GetURL();
1127 
1128     if( nItemTextFlags & GALLERY_ITEM_THEMENAME )
1129     {
1130         aRet += rTheme.GetName();
1131         aRet += String( RTL_CONSTASCII_USTRINGPARAM( " - " ) );
1132     }
1133 
1134     if( nItemTextFlags & GALLERY_ITEM_TITLE )
1135     {
1136 		String aTitle( rObj.GetTitle() );
1137 
1138         if( !aTitle.Len() )
1139             aTitle = aURL.getBase( INetURLObject::LAST_SEGMENT, true, INetURLObject::DECODE_UNAMBIGUOUS );
1140 
1141         if( !aTitle.Len() )
1142         {
1143             aTitle = aURL.GetMainURL( INetURLObject::DECODE_UNAMBIGUOUS );
1144             aTitle = aTitle.GetToken( aTitle.GetTokenCount( '/' ) - 1, '/' );
1145         }
1146 
1147         aRet += aTitle;
1148     }
1149 
1150     if( nItemTextFlags & GALLERY_ITEM_PATH )
1151     {
1152         const String aPath( aURL.getFSysPath( INetURLObject::FSYS_DETECT ) );
1153 
1154         if( aPath.Len() && ( nItemTextFlags & GALLERY_ITEM_TITLE ) )
1155             aRet += String( RTL_CONSTASCII_USTRINGPARAM( " (" ) );
1156 
1157         aRet += String(aURL.getFSysPath( INetURLObject::FSYS_DETECT ));
1158 
1159         if( aPath.Len() && ( nItemTextFlags & GALLERY_ITEM_TITLE ) )
1160             aRet += ')';
1161     }
1162 
1163 	return aRet;
1164 }
1165 
1166 // -----------------------------------------------------------------------------
1167 
1168 INetURLObject GalleryBrowser2::GetURL() const
1169 {
1170 	INetURLObject aURL;
1171 
1172 	if( mpCurTheme && mnCurActionPos != 0xffffffff )
1173 		aURL = mpCurTheme->GetObjectURL( mnCurActionPos );
1174 
1175 	return aURL;
1176 }
1177 
1178 // -----------------------------------------------------------------------------
1179 
1180 String GalleryBrowser2::GetFilterName() const
1181 {
1182 	String aFilterName;
1183 
1184 	if( mpCurTheme && mnCurActionPos != 0xffffffff )
1185 	{
1186 		const SgaObjKind eObjKind = mpCurTheme->GetObjectKind( mnCurActionPos );
1187 
1188 		if( ( SGA_OBJ_BMP == eObjKind ) || ( SGA_OBJ_ANIM == eObjKind ) )
1189 		{
1190 			GraphicFilter*		pFilter = GraphicFilter::GetGraphicFilter();
1191 			INetURLObject		aURL; mpCurTheme->GetURL( mnCurActionPos, aURL );
1192 			sal_uInt16			nFilter = pFilter->GetImportFormatNumberForShortName( aURL.GetExtension() );
1193 
1194 			if( GRFILTER_FORMAT_DONTKNOW != nFilter )
1195 				aFilterName = pFilter->GetImportFormatName( nFilter );
1196 		}
1197 	}
1198 
1199 	return aFilterName;
1200 }
1201 
1202 // -----------------------------------------------------------------------------
1203 
1204 Graphic GalleryBrowser2::GetGraphic() const
1205 {
1206 	Graphic aGraphic;
1207 
1208 	if( mpCurTheme && mnCurActionPos != 0xffffffff )
1209 		mpCurTheme->GetGraphic(	mnCurActionPos, aGraphic );
1210 
1211 	return aGraphic;
1212 }
1213 
1214 // -----------------------------------------------------------------------------
1215 
1216 sal_Bool GalleryBrowser2::GetVCDrawModel( FmFormModel& rModel ) const
1217 {
1218 	sal_Bool bRet = sal_False;
1219 
1220 	if( mpCurTheme && mnCurActionPos != 0xffffffff )
1221 		bRet = mpCurTheme->GetModel( mnCurActionPos, rModel );
1222 
1223 	return bRet;
1224 }
1225 
1226 // -----------------------------------------------------------------------------
1227 
1228 sal_Bool GalleryBrowser2::IsLinkage() const
1229 {
1230 	return mbCurActionIsLinkage;
1231 }
1232 
1233 // -----------------------------------------------------------------------------
1234 
1235 IMPL_LINK( GalleryBrowser2, MenuSelectHdl, Menu*, pMenu )
1236 {
1237 	if( pMenu )
1238         ImplExecute( pMenu->GetCurItemId() );
1239 
1240 	return 0;
1241 }
1242 
1243 // -----------------------------------------------------------------------------
1244 
1245 IMPL_LINK( GalleryBrowser2, SelectObjectHdl, void*, EMPTYARG )
1246 {
1247 	ImplUpdateInfoBar();
1248 	return 0L;
1249 }
1250 
1251 // -----------------------------------------------------------------------------
1252 
1253 IMPL_LINK( GalleryBrowser2, SelectTbxHdl, ToolBox*, pBox )
1254 {
1255     if( pBox->GetCurItemId() == TBX_ID_ICON )
1256         SetMode( GALLERYBROWSERMODE_ICON );
1257     else if( pBox->GetCurItemId() == TBX_ID_LIST )
1258         SetMode( GALLERYBROWSERMODE_LIST );
1259 
1260 	return 0L;
1261 }
1262 
1263 // -----------------------------------------------------------------------------
1264 
1265 IMPL_LINK( GalleryBrowser2, MiscHdl, void*, EMPTYARG )
1266 {
1267 	const sal_Bool  bHC = maViewBox.GetSettings().GetStyleSettings().GetHighContrastMode();
1268 
1269     maViewBox.SetOutStyle( maMiscOptions.GetToolboxStyle() );
1270 
1271 	BitmapEx aIconBmpEx = BitmapEx( Image( GAL_RESID( bHC? RID_SVXIMG_GALLERY_VIEW_ICON_HC : RID_SVXIMG_GALLERY_VIEW_ICON ) ).GetBitmapEx() );
1272 	BitmapEx aListBmpEx = BitmapEx( Image( GAL_RESID( bHC? RID_SVXIMG_GALLERY_VIEW_LIST_HC : RID_SVXIMG_GALLERY_VIEW_LIST ) ).GetBitmapEx() );
1273 
1274 	if( maMiscOptions.AreCurrentSymbolsLarge() )
1275 	{
1276 		const Size aLargeSize( 24, 24);
1277 
1278 		aIconBmpEx.Scale( aLargeSize );
1279 		aListBmpEx.Scale( aLargeSize );
1280 	}
1281 
1282     maViewBox.SetItemImage( TBX_ID_ICON, aIconBmpEx );
1283     maViewBox.SetItemImage( TBX_ID_LIST, aListBmpEx );
1284     maViewBox.SetSizePixel( maViewBox.CalcWindowSizePixel() );
1285 
1286 	Resize();
1287 
1288     return 0L;
1289 }
1290