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