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