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 <vcl/svapp.hxx>
22 : #include <sfx2/viewfrm.hxx>
23 : #include <sfx2/dispatch.hxx>
24 : #include <avmedia/mediaplayer.hxx>
25 : #include "helpid.hrc"
26 : #include "galbrws2.hxx"
27 : #include "svx/galtheme.hxx"
28 : #include "svx/galmisc.hxx"
29 : #include "svx/galctrl.hxx"
30 : #include "editeng/AccessibleStringWrap.hxx"
31 : #include <editeng/svxfont.hxx>
32 : #include "galobj.hxx"
33 : #include <avmedia/mediawindow.hxx>
34 : #include "gallery.hrc"
35 : #include <vcl/graphicfilter.hxx>
36 : #include <vcl/settings.hxx>
37 :
38 : #define GALLERY_BRWBOX_TITLE 1
39 :
40 0 : GalleryPreview::GalleryPreview(vcl::Window* pParent, WinBits nStyle, GalleryTheme* pTheme)
41 : : Window(pParent, nStyle)
42 : , DropTargetHelper(this)
43 : , DragSourceHelper(this)
44 0 : , mpTheme(pTheme)
45 : {
46 0 : SetHelpId( HID_GALLERY_WINDOW );
47 0 : InitSettings();
48 0 : }
49 :
50 0 : extern "C" SAL_DLLPUBLIC_EXPORT vcl::Window* SAL_CALL makeGalleryPreview(vcl::Window *pParent,
51 : VclBuilder::stringmap &rMap)
52 : {
53 0 : WinBits nWinBits = WB_TABSTOP;
54 0 : OString sBorder = VclBuilder::extractCustomProperty(rMap);
55 0 : if (!sBorder.isEmpty())
56 0 : nWinBits |= WB_BORDER;
57 0 : return new GalleryPreview(pParent, nWinBits);
58 : }
59 :
60 0 : Size GalleryPreview::GetOptimalSize() const
61 : {
62 0 : return LogicToPixel(Size(70, 88), MAP_APPFONT);
63 : }
64 :
65 0 : bool GalleryPreview::SetGraphic( const INetURLObject& _aURL )
66 : {
67 0 : bool bRet = true;
68 0 : Graphic aGraphic;
69 0 : if( ::avmedia::MediaWindow::isMediaURL( _aURL.GetMainURL( INetURLObject::DECODE_UNAMBIGUOUS ), "" ) )
70 : {
71 0 : aGraphic = BitmapEx( GAL_RES( RID_SVXBMP_GALLERY_MEDIA ) );
72 : }
73 : else
74 : {
75 0 : GraphicFilter& rFilter = GraphicFilter::GetGraphicFilter();
76 0 : GalleryProgress aProgress( &rFilter );
77 0 : if( rFilter.ImportGraphic( aGraphic, _aURL, GRFILTER_FORMAT_DONTKNOW ) )
78 0 : bRet = false;
79 : }
80 :
81 0 : SetGraphic( aGraphic );
82 0 : Invalidate();
83 0 : return bRet;
84 : }
85 :
86 0 : void GalleryPreview::InitSettings()
87 : {
88 0 : SetBackground( Wallpaper( GALLERY_BG_COLOR ) );
89 0 : SetControlBackground( GALLERY_BG_COLOR );
90 0 : SetControlForeground( GALLERY_FG_COLOR );
91 0 : }
92 :
93 0 : void GalleryPreview::DataChanged( const DataChangedEvent& rDCEvt )
94 : {
95 0 : if ( ( rDCEvt.GetType() == DATACHANGED_SETTINGS ) && ( rDCEvt.GetFlags() & SETTINGS_STYLE ) )
96 0 : InitSettings();
97 : else
98 0 : Window::DataChanged( rDCEvt );
99 0 : }
100 :
101 0 : bool GalleryPreview::ImplGetGraphicCenterRect( const Graphic& rGraphic, Rectangle& rResultRect ) const
102 : {
103 0 : const Size aWinSize( GetOutputSizePixel() );
104 0 : Size aNewSize( LogicToPixel( rGraphic.GetPrefSize(), rGraphic.GetPrefMapMode() ) );
105 0 : bool bRet = false;
106 :
107 0 : if( aNewSize.Width() && aNewSize.Height() )
108 : {
109 : // scale to fit window
110 0 : const double fGrfWH = (double) aNewSize.Width() / aNewSize.Height();
111 0 : const double fWinWH = (double) aWinSize.Width() / aWinSize.Height();
112 :
113 0 : if ( fGrfWH < fWinWH )
114 : {
115 0 : aNewSize.Width() = (long) ( aWinSize.Height() * fGrfWH );
116 0 : aNewSize.Height()= aWinSize.Height();
117 : }
118 : else
119 : {
120 0 : aNewSize.Width() = aWinSize.Width();
121 0 : aNewSize.Height()= (long) ( aWinSize.Width() / fGrfWH);
122 : }
123 :
124 0 : const Point aNewPos( ( aWinSize.Width() - aNewSize.Width() ) >> 1,
125 0 : ( aWinSize.Height() - aNewSize.Height() ) >> 1 );
126 :
127 0 : rResultRect = Rectangle( aNewPos, aNewSize );
128 0 : bRet = true;
129 : }
130 :
131 0 : return bRet;
132 : }
133 :
134 0 : void GalleryPreview::Paint( const Rectangle& rRect )
135 : {
136 0 : Window::Paint( rRect );
137 :
138 0 : if( ImplGetGraphicCenterRect( aGraphicObj.GetGraphic(), aPreviewRect ) )
139 : {
140 0 : const Point aPos( aPreviewRect.TopLeft() );
141 0 : const Size aSize( aPreviewRect.GetSize() );
142 :
143 0 : if( aGraphicObj.IsAnimated() )
144 0 : aGraphicObj.StartAnimation( this, aPos, aSize );
145 : else
146 0 : aGraphicObj.Draw( this, aPos, aSize );
147 : }
148 0 : }
149 :
150 0 : void GalleryPreview::MouseButtonDown( const MouseEvent& rMEvt )
151 : {
152 0 : if( mpTheme && ( rMEvt.GetClicks() == 2 ) )
153 0 : static_cast<GalleryBrowser2*>( GetParent() )->TogglePreview( this );
154 0 : }
155 :
156 0 : void GalleryPreview::Command(const CommandEvent& rCEvt )
157 : {
158 0 : Window::Command( rCEvt );
159 :
160 0 : if( mpTheme && ( rCEvt.GetCommand() == COMMAND_CONTEXTMENU ) )
161 0 : static_cast<GalleryBrowser2*>( GetParent() )->ShowContextMenu( this,
162 0 : ( rCEvt.IsMouseEvent() ? &rCEvt.GetMousePosPixel() : NULL ) );
163 0 : }
164 :
165 0 : void GalleryPreview::KeyInput( const KeyEvent& rKEvt )
166 : {
167 0 : if( mpTheme )
168 : {
169 0 : GalleryBrowser2* pBrowser = static_cast< GalleryBrowser2* >( GetParent() );
170 :
171 0 : switch( rKEvt.GetKeyCode().GetCode() )
172 : {
173 : case( KEY_BACKSPACE ):
174 0 : pBrowser->TogglePreview( this );
175 0 : break;
176 :
177 : case( KEY_HOME ):
178 0 : pBrowser->Travel( GALLERYBROWSERTRAVEL_FIRST );
179 0 : break;
180 :
181 : case( KEY_END ):
182 0 : pBrowser->Travel( GALLERYBROWSERTRAVEL_LAST );
183 0 : break;
184 :
185 : case( KEY_LEFT ):
186 : case( KEY_UP ):
187 0 : pBrowser->Travel( GALLERYBROWSERTRAVEL_PREVIOUS );
188 0 : break;
189 :
190 : case( KEY_RIGHT ):
191 : case( KEY_DOWN ):
192 0 : pBrowser->Travel( GALLERYBROWSERTRAVEL_NEXT );
193 0 : break;
194 :
195 : default:
196 : {
197 0 : if( !pBrowser->KeyInput( rKEvt, this ) )
198 0 : Window::KeyInput( rKEvt );
199 : }
200 0 : break;
201 : }
202 : }
203 : else
204 0 : Window::KeyInput( rKEvt );
205 0 : }
206 :
207 0 : sal_Int8 GalleryPreview::AcceptDrop( const AcceptDropEvent& rEvt )
208 : {
209 : sal_Int8 nRet;
210 :
211 0 : if( mpTheme )
212 0 : nRet = static_cast<GalleryBrowser2*>( GetParent() )->AcceptDrop( *this, rEvt );
213 : else
214 0 : nRet = DND_ACTION_NONE;
215 :
216 0 : return nRet;
217 : }
218 :
219 0 : sal_Int8 GalleryPreview::ExecuteDrop( const ExecuteDropEvent& rEvt )
220 : {
221 : sal_Int8 nRet;
222 :
223 0 : if( mpTheme )
224 0 : nRet = static_cast<GalleryBrowser2*>( GetParent() )->ExecuteDrop( *this, rEvt );
225 : else
226 0 : nRet = DND_ACTION_NONE;
227 :
228 0 : return nRet;
229 : }
230 :
231 0 : void GalleryPreview::StartDrag( sal_Int8, const Point& )
232 : {
233 0 : if( mpTheme )
234 0 : static_cast<GalleryBrowser2*>( GetParent() )->StartDrag( this );
235 0 : }
236 :
237 0 : void GalleryPreview::PreviewMedia( const INetURLObject& rURL )
238 : {
239 0 : if( rURL.GetProtocol() != INET_PROT_NOT_VALID )
240 : {
241 0 : ::avmedia::MediaFloater* pFloater = avmedia::getMediaFloater();
242 :
243 0 : if( !pFloater )
244 : {
245 0 : SfxViewFrame::Current()->GetBindings().GetDispatcher()->Execute( SID_AVMEDIA_PLAYER, SfxCallMode::SYNCHRON );
246 0 : pFloater = avmedia::getMediaFloater();
247 : }
248 :
249 0 : if( pFloater )
250 0 : pFloater->setURL( rURL.GetMainURL( INetURLObject::DECODE_UNAMBIGUOUS ), "", true );
251 : }
252 0 : }
253 :
254 0 : void drawTransparenceBackground(OutputDevice& rOut, const Point& rPos, const Size& rSize)
255 : {
256 0 : const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings();
257 :
258 0 : if(rStyleSettings.GetPreviewUsesCheckeredBackground())
259 : {
260 : // draw checkered background
261 : static const sal_uInt32 nLen(8);
262 0 : static const Color aW(COL_WHITE);
263 0 : static const Color aG(0xef, 0xef, 0xef);
264 :
265 0 : rOut.DrawCheckered(rPos, rSize, nLen, aW, aG);
266 : }
267 : else
268 : {
269 0 : rOut.SetLineColor();
270 0 : rOut.SetFillColor(rStyleSettings.GetFieldColor());
271 0 : rOut.DrawRect(Rectangle(rPos, rSize));
272 : }
273 0 : }
274 :
275 :
276 0 : GalleryIconView::GalleryIconView( GalleryBrowser2* pParent, GalleryTheme* pTheme ) :
277 : ValueSet( pParent, WB_TABSTOP | WB_3DLOOK | WB_BORDER | WB_ITEMBORDER | WB_DOUBLEBORDER | WB_VSCROLL | WB_FLATVALUESET ),
278 : DropTargetHelper( this ),
279 : DragSourceHelper( this ),
280 0 : mpTheme ( pTheme )
281 : {
282 :
283 0 : EnableFullItemMode( false );
284 :
285 0 : SetHelpId( HID_GALLERY_WINDOW );
286 0 : InitSettings();
287 0 : SetExtraSpacing( 2 );
288 0 : SetItemWidth( S_THUMB + 6 );
289 0 : SetItemHeight( S_THUMB + 6 );
290 0 : }
291 :
292 0 : GalleryIconView::~GalleryIconView()
293 : {
294 0 : }
295 :
296 0 : void GalleryIconView::InitSettings()
297 : {
298 0 : SetBackground( Wallpaper( GALLERY_BG_COLOR ) );
299 0 : SetControlBackground( GALLERY_BG_COLOR );
300 0 : SetControlForeground( GALLERY_FG_COLOR );
301 0 : SetColor( GALLERY_BG_COLOR );
302 0 : }
303 :
304 0 : void GalleryIconView::DataChanged( const DataChangedEvent& rDCEvt )
305 : {
306 0 : if ( ( rDCEvt.GetType() == DATACHANGED_SETTINGS ) && ( rDCEvt.GetFlags() & SETTINGS_STYLE ) )
307 0 : InitSettings();
308 : else
309 0 : ValueSet::DataChanged( rDCEvt );
310 0 : }
311 :
312 0 : void GalleryIconView::UserDraw( const UserDrawEvent& rUDEvt )
313 : {
314 0 : const sal_uInt16 nId = rUDEvt.GetItemId();
315 :
316 0 : if( nId && mpTheme )
317 : {
318 0 : const Rectangle& rRect = rUDEvt.GetRect();
319 0 : const Size aSize(rRect.GetWidth(), rRect.GetHeight());
320 0 : BitmapEx aBitmapEx;
321 0 : Size aPreparedSize;
322 0 : OUString aItemTextTitle;
323 0 : OUString aItemTextPath;
324 :
325 0 : mpTheme->GetPreviewBitmapExAndStrings(nId - 1, aBitmapEx, aPreparedSize, aItemTextTitle, aItemTextPath);
326 :
327 0 : bool bNeedToCreate(aBitmapEx.IsEmpty());
328 :
329 0 : if(!bNeedToCreate && aItemTextTitle.isEmpty())
330 : {
331 0 : bNeedToCreate = true;
332 : }
333 :
334 0 : if(!bNeedToCreate && aPreparedSize != aSize)
335 : {
336 0 : bNeedToCreate = true;
337 : }
338 :
339 0 : if(bNeedToCreate)
340 : {
341 0 : SgaObject* pObj = mpTheme->AcquireObject(nId - 1);
342 :
343 0 : if(pObj)
344 : {
345 0 : aBitmapEx = pObj->createPreviewBitmapEx(aSize);
346 0 : aItemTextTitle = GalleryBrowser2::GetItemText(*mpTheme, *pObj, GALLERY_ITEM_TITLE);
347 :
348 0 : mpTheme->SetPreviewBitmapExAndStrings(nId - 1, aBitmapEx, aSize, aItemTextTitle, aItemTextPath);
349 0 : mpTheme->ReleaseObject(pObj);
350 : }
351 : }
352 :
353 0 : if(!aBitmapEx.IsEmpty())
354 : {
355 0 : const Size aBitmapExSizePixel(aBitmapEx.GetSizePixel());
356 : const Point aPos(
357 0 : ((aSize.Width() - aBitmapExSizePixel.Width()) >> 1) + rRect.Left(),
358 0 : ((aSize.Height() - aBitmapExSizePixel.Height()) >> 1) + rRect.Top());
359 0 : OutputDevice* pDev = rUDEvt.GetDevice();
360 :
361 0 : if(aBitmapEx.IsTransparent())
362 : {
363 : // draw checkered background for full rectangle.
364 0 : drawTransparenceBackground(*pDev, rRect.TopLeft(), rRect.GetSize());
365 : }
366 :
367 0 : pDev->DrawBitmapEx(aPos, aBitmapEx);
368 : }
369 :
370 0 : SetItemText(nId, aItemTextTitle);
371 : }
372 0 : }
373 :
374 0 : void GalleryIconView::MouseButtonDown( const MouseEvent& rMEvt )
375 : {
376 0 : ValueSet::MouseButtonDown( rMEvt );
377 :
378 0 : if( rMEvt.GetClicks() == 2 )
379 0 : static_cast<GalleryBrowser2*>( GetParent() )->TogglePreview( this, &rMEvt.GetPosPixel() );
380 0 : }
381 :
382 0 : void GalleryIconView::Command( const CommandEvent& rCEvt )
383 : {
384 0 : ValueSet::Command( rCEvt );
385 :
386 0 : if( rCEvt.GetCommand() == COMMAND_CONTEXTMENU )
387 : {
388 0 : static_cast<GalleryBrowser2*>( GetParent() )->ShowContextMenu( this,
389 0 : ( rCEvt.IsMouseEvent() ? &rCEvt.GetMousePosPixel() : NULL ) );
390 : }
391 0 : }
392 :
393 0 : void GalleryIconView::KeyInput( const KeyEvent& rKEvt )
394 : {
395 0 : if( !mpTheme || !static_cast< GalleryBrowser2* >( GetParent() )->KeyInput( rKEvt, this ) )
396 0 : ValueSet::KeyInput( rKEvt );
397 0 : }
398 :
399 0 : sal_Int8 GalleryIconView::AcceptDrop( const AcceptDropEvent& rEvt )
400 : {
401 0 : return( static_cast< GalleryBrowser2* >( GetParent() )->AcceptDrop( *this, rEvt ) );
402 : }
403 :
404 0 : sal_Int8 GalleryIconView::ExecuteDrop( const ExecuteDropEvent& rEvt )
405 : {
406 0 : return( static_cast< GalleryBrowser2* >( GetParent() )->ExecuteDrop( *this, rEvt ) );
407 : }
408 :
409 0 : void GalleryIconView::StartDrag( sal_Int8, const Point& )
410 : {
411 0 : const CommandEvent aEvt( GetPointerPosPixel(), COMMAND_STARTDRAG, true );
412 0 : vcl::Region aRegion;
413 :
414 : // call this to initiate dragging for ValueSet
415 0 : ValueSet::StartDrag( aEvt, aRegion );
416 0 : static_cast< GalleryBrowser2* >( GetParent() )->StartDrag( this );
417 0 : }
418 :
419 :
420 0 : GalleryListView::GalleryListView( GalleryBrowser2* pParent, GalleryTheme* pTheme ) :
421 : BrowseBox( pParent, WB_TABSTOP | WB_3DLOOK | WB_BORDER ),
422 : mpTheme( pTheme ),
423 0 : mnCurRow( 0 )
424 : {
425 :
426 0 : SetHelpId( HID_GALLERY_WINDOW );
427 :
428 0 : InitSettings();
429 :
430 0 : SetMode( BROWSER_AUTO_VSCROLL | BROWSER_AUTOSIZE_LASTCOL | BROWSER_AUTO_HSCROLL );
431 0 : SetDataRowHeight( 28 );
432 0 : InsertDataColumn( GALLERY_BRWBOX_TITLE, GAL_RESSTR(RID_SVXSTR_GALLERY_TITLE), 256 );
433 0 : }
434 :
435 0 : GalleryListView::~GalleryListView()
436 : {
437 0 : }
438 :
439 0 : void GalleryListView::InitSettings()
440 : {
441 0 : SetBackground( Wallpaper( GALLERY_BG_COLOR ) );
442 0 : SetControlBackground( GALLERY_BG_COLOR );
443 0 : SetControlForeground( GALLERY_FG_COLOR );
444 0 : }
445 :
446 0 : void GalleryListView::DataChanged( const DataChangedEvent& rDCEvt )
447 : {
448 0 : if ( ( rDCEvt.GetType() == DATACHANGED_SETTINGS ) && ( rDCEvt.GetFlags() & SETTINGS_STYLE ) )
449 0 : InitSettings();
450 : else
451 0 : BrowseBox::DataChanged( rDCEvt );
452 0 : }
453 :
454 0 : bool GalleryListView::SeekRow( long nRow )
455 : {
456 0 : mnCurRow = nRow;
457 0 : return true;
458 : }
459 :
460 0 : OUString GalleryListView::GetCellText(long _nRow, sal_uInt16 /*nColumnId*/) const
461 : {
462 0 : OUString sRet;
463 0 : if( mpTheme && ( _nRow < static_cast< long >( mpTheme->GetObjectCount() ) ) )
464 : {
465 0 : SgaObject* pObj = mpTheme->AcquireObject( _nRow );
466 :
467 0 : if( pObj )
468 : {
469 0 : sRet = GalleryBrowser2::GetItemText( *mpTheme, *pObj, GALLERY_ITEM_TITLE );
470 0 : mpTheme->ReleaseObject( pObj );
471 : }
472 : }
473 :
474 0 : return sRet;
475 : }
476 :
477 0 : Rectangle GalleryListView::GetFieldCharacterBounds(sal_Int32 _nRow,sal_Int32 _nColumnPos,sal_Int32 nIndex)
478 : {
479 : DBG_ASSERT(_nColumnPos >= 0 && _nColumnPos <= USHRT_MAX, "GalleryListView::GetFieldCharacterBounds: _nColumnId overflow");
480 0 : Rectangle aRect;
481 0 : if ( SeekRow(_nRow) )
482 : {
483 0 : SvxFont aFont( GetFont() );
484 0 : AccessibleStringWrap aStringWrap( *this, aFont, GetCellText(_nRow, sal::static_int_cast<sal_uInt16>( GetColumnId( sal::static_int_cast<sal_uInt16>(_nColumnPos) ) ) ) );
485 :
486 : // get the bounds inside the string
487 0 : aStringWrap.GetCharacterBounds(nIndex, aRect);
488 :
489 : // offset to
490 : }
491 0 : return aRect;
492 : }
493 :
494 0 : sal_Int32 GalleryListView::GetFieldIndexAtPoint(sal_Int32 _nRow,sal_Int32 _nColumnPos,const Point& _rPoint)
495 : {
496 : DBG_ASSERT(_nColumnPos >= 0 && _nColumnPos <= USHRT_MAX, "GalleryListView::GetFieldIndexAtPoint: _nColumnId overflow");
497 0 : sal_Int32 nRet = -1;
498 0 : if ( SeekRow(_nRow) )
499 : {
500 0 : SvxFont aFont( GetFont() );
501 0 : AccessibleStringWrap aStringWrap( *this, aFont, GetCellText(_nRow, sal::static_int_cast<sal_uInt16>(GetColumnId(sal::static_int_cast<sal_uInt16>(_nColumnPos)))) );
502 0 : nRet = aStringWrap.GetIndexAtPoint(_rPoint);
503 : }
504 0 : return nRet;
505 : }
506 :
507 0 : void GalleryListView::PaintField( OutputDevice& rDev, const Rectangle& rRect, sal_uInt16 /*nColumnId*/ ) const
508 : {
509 0 : rDev.Push( PushFlags::CLIPREGION );
510 0 : rDev.IntersectClipRegion( rRect );
511 :
512 0 : if( mpTheme && ( mnCurRow < mpTheme->GetObjectCount() ) )
513 : {
514 0 : const Size aSize(rRect.GetHeight(), rRect.GetHeight());
515 0 : BitmapEx aBitmapEx;
516 0 : Size aPreparedSize;
517 0 : OUString aItemTextTitle;
518 0 : OUString aItemTextPath;
519 :
520 0 : mpTheme->GetPreviewBitmapExAndStrings(mnCurRow, aBitmapEx, aPreparedSize, aItemTextTitle, aItemTextPath);
521 :
522 0 : bool bNeedToCreate(aBitmapEx.IsEmpty());
523 :
524 0 : if(!bNeedToCreate && (aItemTextTitle.isEmpty() || aPreparedSize != aSize))
525 0 : bNeedToCreate = true;
526 :
527 0 : if(bNeedToCreate)
528 : {
529 0 : SgaObject* pObj = mpTheme->AcquireObject(mnCurRow);
530 :
531 0 : if(pObj)
532 : {
533 0 : aBitmapEx = pObj->createPreviewBitmapEx(aSize);
534 0 : aItemTextTitle = GalleryBrowser2::GetItemText(*mpTheme, *pObj, GALLERY_ITEM_TITLE);
535 0 : aItemTextPath = GalleryBrowser2::GetItemText(*mpTheme, *pObj, GALLERY_ITEM_PATH);
536 :
537 0 : mpTheme->SetPreviewBitmapExAndStrings(mnCurRow, aBitmapEx, aSize, aItemTextTitle, aItemTextPath);
538 0 : mpTheme->ReleaseObject(pObj);
539 : }
540 : }
541 :
542 0 : const long nTextPosY(rRect.Top() + ((rRect.GetHeight() - rDev.GetTextHeight()) >> 1));
543 :
544 0 : if(!aBitmapEx.IsEmpty())
545 : {
546 0 : const Size aBitmapExSizePixel(aBitmapEx.GetSizePixel());
547 : const Point aPos(
548 0 : ((aSize.Width() - aBitmapExSizePixel.Width()) >> 1) + rRect.Left(),
549 0 : ((aSize.Height() - aBitmapExSizePixel.Height()) >> 1) + rRect.Top());
550 :
551 0 : if(aBitmapEx.IsTransparent())
552 : {
553 : // draw checkered background
554 0 : drawTransparenceBackground(rDev, aPos, aBitmapExSizePixel);
555 : }
556 :
557 0 : rDev.DrawBitmapEx(aPos, aBitmapEx);
558 : }
559 :
560 0 : rDev.DrawText(Point(rRect.Left() + rRect.GetHeight() + 6, nTextPosY), aItemTextTitle);
561 : }
562 :
563 0 : rDev.Pop();
564 0 : }
565 :
566 0 : void GalleryListView::Command( const CommandEvent& rCEvt )
567 : {
568 0 : BrowseBox::Command( rCEvt );
569 :
570 0 : if( rCEvt.GetCommand() == COMMAND_CONTEXTMENU )
571 : {
572 0 : const Point* pPos = NULL;
573 :
574 0 : if( rCEvt.IsMouseEvent() && ( GetRowAtYPosPixel( rCEvt.GetMousePosPixel().Y() ) != BROWSER_ENDOFSELECTION ) )
575 0 : pPos = &rCEvt.GetMousePosPixel();
576 :
577 0 : static_cast<GalleryBrowser2*>( GetParent() )->ShowContextMenu( this, pPos );
578 : }
579 0 : }
580 :
581 0 : void GalleryListView::KeyInput( const KeyEvent& rKEvt )
582 : {
583 0 : if( !mpTheme || !static_cast< GalleryBrowser2* >( GetParent() )->KeyInput( rKEvt, this ) )
584 0 : BrowseBox::KeyInput( rKEvt );
585 0 : }
586 :
587 0 : void GalleryListView::DoubleClick( const BrowserMouseEvent& rEvt )
588 : {
589 0 : BrowseBox::DoubleClick( rEvt );
590 :
591 0 : if( rEvt.GetRow() != BROWSER_ENDOFSELECTION )
592 0 : static_cast<GalleryBrowser2*>( GetParent() )->TogglePreview( this, &rEvt.GetPosPixel() );
593 0 : }
594 :
595 0 : void GalleryListView::Select()
596 : {
597 0 : if( maSelectHdl.IsSet() )
598 0 : maSelectHdl.Call( this );
599 0 : }
600 :
601 0 : sal_Int8 GalleryListView::AcceptDrop( const BrowserAcceptDropEvent& )
602 : {
603 0 : sal_Int8 nRet = DND_ACTION_NONE;
604 :
605 0 : if( mpTheme && !mpTheme->IsReadOnly() )
606 0 : nRet = DND_ACTION_COPY;
607 :
608 0 : return nRet;
609 : }
610 :
611 0 : sal_Int8 GalleryListView::ExecuteDrop( const BrowserExecuteDropEvent& rEvt )
612 : {
613 0 : ExecuteDropEvent aEvt( rEvt );
614 :
615 0 : aEvt.maPosPixel.Y() += GetTitleHeight();
616 :
617 0 : return( static_cast<GalleryBrowser2*>( GetParent() )->ExecuteDrop( *this, aEvt ) );
618 : }
619 :
620 0 : void GalleryListView::StartDrag( sal_Int8, const Point& rPosPixel )
621 : {
622 0 : static_cast<GalleryBrowser2*>( GetParent() )->StartDrag( this, &rPosPixel );
623 651 : }
624 :
625 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|