LCOV - code coverage report
Current view: top level - svx/source/gallery2 - galctrl.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 1 309 0.3 %
Date: 2015-06-13 12:38:46 Functions: 2 43 4.7 %
Legend: Lines: hit not hit

          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             : #include <vcl/builderfactory.hxx>
      38             : 
      39             : #define GALLERY_BRWBOX_TITLE    1
      40             : 
      41           0 : GalleryPreview::GalleryPreview(vcl::Window* pParent, WinBits nStyle, GalleryTheme* pTheme)
      42             :     : Window(pParent, nStyle)
      43             :     , DropTargetHelper(this)
      44             :     , DragSourceHelper(this)
      45           0 :     , mpTheme(pTheme)
      46             : {
      47           0 :     SetHelpId( HID_GALLERY_WINDOW );
      48           0 :     InitSettings();
      49           0 : }
      50             : 
      51           0 : VCL_BUILDER_DECL_FACTORY(GalleryPreview)
      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 :     rRet = VclPtr<GalleryPreview>::Create(pParent, nWinBits);
      58           0 : }
      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() == DataChangedEventType::SETTINGS ) && ( rDCEvt.GetFlags() & AllSettingsFlags::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(vcl::RenderContext& rRenderContext, const Rectangle& rRect)
     135             : {
     136           0 :     Window::Paint(rRenderContext, 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(&rRenderContext, aPos, aSize);
     145             :         else
     146           0 :             aGraphicObj.Draw(&rRenderContext, 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() == CommandEventId::ContextMenu))
     161             :     {
     162           0 :         GalleryBrowser2* pGalleryBrowser = static_cast<GalleryBrowser2*>(GetParent());
     163           0 :         pGalleryBrowser->ShowContextMenu(this, (rCEvt.IsMouseEvent() ? &rCEvt.GetMousePosPixel() : NULL));
     164             :     }
     165           0 : }
     166             : 
     167           0 : void GalleryPreview::KeyInput(const KeyEvent& rKEvt)
     168             : {
     169           0 :     if(mpTheme)
     170             :     {
     171           0 :         GalleryBrowser2* pBrowser = static_cast< GalleryBrowser2* >( GetParent() );
     172             : 
     173           0 :         switch( rKEvt.GetKeyCode().GetCode() )
     174             :         {
     175             :             case( KEY_BACKSPACE ):
     176           0 :                 pBrowser->TogglePreview( this );
     177           0 :             break;
     178             : 
     179             :             case( KEY_HOME ):
     180           0 :                 pBrowser->Travel( GALLERYBROWSERTRAVEL_FIRST );
     181           0 :             break;
     182             : 
     183             :             case( KEY_END ):
     184           0 :                 pBrowser->Travel( GALLERYBROWSERTRAVEL_LAST );
     185           0 :             break;
     186             : 
     187             :             case( KEY_LEFT ):
     188             :             case( KEY_UP ):
     189           0 :                 pBrowser->Travel( GALLERYBROWSERTRAVEL_PREVIOUS );
     190           0 :             break;
     191             : 
     192             :             case( KEY_RIGHT ):
     193             :             case( KEY_DOWN ):
     194           0 :                 pBrowser->Travel( GALLERYBROWSERTRAVEL_NEXT );
     195           0 :             break;
     196             : 
     197             :             default:
     198             :             {
     199           0 :                 if (!pBrowser->KeyInput(rKEvt, this))
     200           0 :                     Window::KeyInput(rKEvt);
     201             :             }
     202           0 :             break;
     203             :         }
     204             :     }
     205             :     else
     206             :     {
     207           0 :         Window::KeyInput(rKEvt);
     208             :     }
     209           0 : }
     210             : 
     211           0 : sal_Int8 GalleryPreview::AcceptDrop( const AcceptDropEvent& rEvt )
     212             : {
     213             :     sal_Int8 nRet;
     214             : 
     215           0 :     if (mpTheme)
     216           0 :         nRet = static_cast<GalleryBrowser2*>(GetParent())->AcceptDrop(*this, rEvt);
     217             :     else
     218           0 :         nRet = DND_ACTION_NONE;
     219             : 
     220           0 :     return nRet;
     221             : }
     222             : 
     223           0 : sal_Int8 GalleryPreview::ExecuteDrop( const ExecuteDropEvent& rEvt )
     224             : {
     225             :     sal_Int8 nRet;
     226             : 
     227           0 :     if (mpTheme)
     228           0 :         nRet = static_cast<GalleryBrowser2*>(GetParent())->ExecuteDrop(*this, rEvt);
     229             :     else
     230           0 :         nRet = DND_ACTION_NONE;
     231             : 
     232           0 :     return nRet;
     233             : }
     234             : 
     235           0 : void GalleryPreview::StartDrag( sal_Int8, const Point& )
     236             : {
     237           0 :     if(mpTheme)
     238           0 :         static_cast<GalleryBrowser2*>(GetParent())->StartDrag(this);
     239           0 : }
     240             : 
     241           0 : void GalleryPreview::PreviewMedia( const INetURLObject& rURL )
     242             : {
     243           0 :     if (rURL.GetProtocol() != INetProtocol::NotValid)
     244             :     {
     245           0 :         ::avmedia::MediaFloater* pFloater = avmedia::getMediaFloater();
     246             : 
     247           0 :         if (!pFloater)
     248             :         {
     249           0 :             SfxViewFrame::Current()->GetBindings().GetDispatcher()->Execute( SID_AVMEDIA_PLAYER, SfxCallMode::SYNCHRON );
     250           0 :             pFloater = avmedia::getMediaFloater();
     251             :         }
     252             : 
     253           0 :         if (pFloater)
     254           0 :             pFloater->setURL( rURL.GetMainURL( INetURLObject::DECODE_UNAMBIGUOUS ), "", true );
     255             :     }
     256           0 : }
     257             : 
     258           0 : void drawTransparenceBackground(vcl::RenderContext& rOut, const Point& rPos, const Size& rSize)
     259             : {
     260           0 :     const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings();
     261             : 
     262           0 :     if (rStyleSettings.GetPreviewUsesCheckeredBackground())
     263             :     {
     264             :         // draw checkered background
     265             :         static const sal_uInt32 nLen(8);
     266           0 :         static const Color aW(COL_WHITE);
     267           0 :         static const Color aG(0xef, 0xef, 0xef);
     268             : 
     269           0 :         rOut.DrawCheckered(rPos, rSize, nLen, aW, aG);
     270             :     }
     271             :     else
     272             :     {
     273           0 :         rOut.SetLineColor();
     274           0 :         rOut.SetFillColor(rStyleSettings.GetFieldColor());
     275           0 :         rOut.DrawRect(Rectangle(rPos, rSize));
     276             :     }
     277           0 : }
     278             : 
     279           0 : GalleryIconView::GalleryIconView( GalleryBrowser2* pParent, GalleryTheme* pTheme ) :
     280             :         ValueSet( pParent, WB_TABSTOP | WB_3DLOOK | WB_BORDER | WB_ITEMBORDER | WB_DOUBLEBORDER | WB_VSCROLL | WB_FLATVALUESET ),
     281             :         DropTargetHelper( this ),
     282             :         DragSourceHelper( this ),
     283           0 :         mpTheme ( pTheme )
     284             : {
     285             : 
     286           0 :     EnableFullItemMode( false );
     287             : 
     288           0 :     SetHelpId( HID_GALLERY_WINDOW );
     289           0 :     InitSettings();
     290           0 :     SetExtraSpacing( 2 );
     291           0 :     SetItemWidth( S_THUMB + 6 );
     292           0 :     SetItemHeight( S_THUMB + 6 );
     293           0 : }
     294             : 
     295           0 : void GalleryIconView::InitSettings()
     296             : {
     297           0 :     SetBackground( Wallpaper( GALLERY_BG_COLOR ) );
     298           0 :     SetControlBackground( GALLERY_BG_COLOR );
     299           0 :     SetControlForeground( GALLERY_FG_COLOR );
     300           0 :     SetColor( GALLERY_BG_COLOR );
     301           0 : }
     302             : 
     303           0 : void GalleryIconView::DataChanged( const DataChangedEvent& rDCEvt )
     304             : {
     305           0 :     if ( ( rDCEvt.GetType() == DataChangedEventType::SETTINGS ) && ( rDCEvt.GetFlags() & AllSettingsFlags::STYLE ) )
     306           0 :         InitSettings();
     307             :     else
     308           0 :         ValueSet::DataChanged( rDCEvt );
     309           0 : }
     310             : 
     311           0 : void GalleryIconView::UserDraw(const UserDrawEvent& rUDEvt)
     312             : {
     313           0 :     const sal_uInt16 nId = rUDEvt.GetItemId();
     314             : 
     315           0 :     if (nId && mpTheme)
     316             :     {
     317           0 :         const Rectangle& rRect = rUDEvt.GetRect();
     318           0 :         const Size aSize(rRect.GetWidth(), rRect.GetHeight());
     319           0 :         BitmapEx aBitmapEx;
     320           0 :         Size aPreparedSize;
     321           0 :         OUString aItemTextTitle;
     322           0 :         OUString aItemTextPath;
     323             : 
     324           0 :         mpTheme->GetPreviewBitmapExAndStrings(nId - 1, aBitmapEx, aPreparedSize, aItemTextTitle, aItemTextPath);
     325             : 
     326           0 :         bool bNeedToCreate(aBitmapEx.IsEmpty());
     327             : 
     328           0 :         if (!bNeedToCreate && aItemTextTitle.isEmpty())
     329             :         {
     330           0 :             bNeedToCreate = true;
     331             :         }
     332             : 
     333           0 :         if (!bNeedToCreate && aPreparedSize != aSize)
     334             :         {
     335           0 :             bNeedToCreate = true;
     336             :         }
     337             : 
     338           0 :         if (bNeedToCreate)
     339             :         {
     340           0 :             SgaObject* pObj = mpTheme->AcquireObject(nId - 1);
     341             : 
     342           0 :             if(pObj)
     343             :             {
     344           0 :                 aBitmapEx = pObj->createPreviewBitmapEx(aSize);
     345           0 :                 aItemTextTitle = GalleryBrowser2::GetItemText(*mpTheme, *pObj, GALLERY_ITEM_TITLE);
     346             : 
     347           0 :                 mpTheme->SetPreviewBitmapExAndStrings(nId - 1, aBitmapEx, aSize, aItemTextTitle, aItemTextPath);
     348           0 :                 GalleryTheme::ReleaseObject(pObj);
     349             :             }
     350             :         }
     351             : 
     352           0 :         if (!aBitmapEx.IsEmpty())
     353             :         {
     354           0 :             const Size aBitmapExSizePixel(aBitmapEx.GetSizePixel());
     355             :             const Point aPos(
     356           0 :                 ((aSize.Width() - aBitmapExSizePixel.Width()) >> 1) + rRect.Left(),
     357           0 :                 ((aSize.Height() - aBitmapExSizePixel.Height()) >> 1) + rRect.Top());
     358           0 :             OutputDevice* pDev = rUDEvt.GetDevice();
     359             : 
     360           0 :             if(aBitmapEx.IsTransparent())
     361             :             {
     362             :                 // draw checkered background for full rectangle.
     363           0 :                 drawTransparenceBackground(*pDev, rRect.TopLeft(), rRect.GetSize());
     364             :             }
     365             : 
     366           0 :             pDev->DrawBitmapEx(aPos, aBitmapEx);
     367             :         }
     368             : 
     369           0 :         SetItemText(nId, aItemTextTitle);
     370             :     }
     371           0 : }
     372             : 
     373           0 : void GalleryIconView::MouseButtonDown(const MouseEvent& rMEvt)
     374             : {
     375           0 :     ValueSet::MouseButtonDown(rMEvt);
     376             : 
     377           0 :     if (rMEvt.GetClicks() == 2)
     378           0 :         static_cast<GalleryBrowser2*>(GetParent())->TogglePreview(this, &rMEvt.GetPosPixel());
     379           0 : }
     380             : 
     381           0 : void GalleryIconView::Command(const CommandEvent& rCEvt)
     382             : {
     383           0 :     ValueSet::Command(rCEvt);
     384             : 
     385           0 :     if (rCEvt.GetCommand() == CommandEventId::ContextMenu)
     386             :     {
     387           0 :         GalleryBrowser2* pGalleryBrowser = static_cast<GalleryBrowser2*>(GetParent());
     388           0 :         pGalleryBrowser->ShowContextMenu(this, (rCEvt.IsMouseEvent() ? &rCEvt.GetMousePosPixel() : nullptr));
     389             :     }
     390           0 : }
     391             : 
     392           0 : void GalleryIconView::KeyInput(const KeyEvent& rKEvt)
     393             : {
     394           0 :     if (!mpTheme || !static_cast<GalleryBrowser2*>(GetParent())->KeyInput(rKEvt, this))
     395           0 :         ValueSet::KeyInput(rKEvt);
     396           0 : }
     397             : 
     398           0 : sal_Int8 GalleryIconView::AcceptDrop(const AcceptDropEvent& rEvt)
     399             : {
     400           0 :     return(static_cast<GalleryBrowser2*>(GetParent())->AcceptDrop(*this, rEvt));
     401             : }
     402             : 
     403           0 : sal_Int8 GalleryIconView::ExecuteDrop(const ExecuteDropEvent& rEvt)
     404             : {
     405           0 :     return(static_cast<GalleryBrowser2*>(GetParent())->ExecuteDrop(*this, rEvt));
     406             : }
     407             : 
     408           0 : void GalleryIconView::StartDrag(sal_Int8, const Point&)
     409             : {
     410           0 :     const CommandEvent aEvt(GetPointerPosPixel(), CommandEventId::StartDrag, true);
     411           0 :     vcl::Region aRegion;
     412             : 
     413             :     // call this to initiate dragging for ValueSet
     414           0 :     ValueSet::StartDrag(aEvt, aRegion);
     415           0 :     static_cast<GalleryBrowser2*>(GetParent())->StartDrag(this);
     416           0 : }
     417             : 
     418           0 : GalleryListView::GalleryListView( GalleryBrowser2* pParent, GalleryTheme* pTheme ) :
     419             :     BrowseBox( pParent, WB_TABSTOP | WB_3DLOOK | WB_BORDER ),
     420             :     mpTheme( pTheme ),
     421           0 :     mnCurRow( 0 )
     422             : {
     423             : 
     424           0 :     SetHelpId( HID_GALLERY_WINDOW );
     425             : 
     426           0 :     InitSettings();
     427             : 
     428           0 :     SetMode( BrowserMode::AUTO_VSCROLL | BrowserMode::AUTOSIZE_LASTCOL | BrowserMode::AUTO_HSCROLL );
     429           0 :     SetDataRowHeight( 28 );
     430           0 :     InsertDataColumn( GALLERY_BRWBOX_TITLE, GAL_RESSTR(RID_SVXSTR_GALLERY_TITLE), 256  );
     431           0 : }
     432             : 
     433           0 : void GalleryListView::InitSettings()
     434             : {
     435           0 :     SetBackground( Wallpaper( GALLERY_BG_COLOR ) );
     436           0 :     SetControlBackground( GALLERY_BG_COLOR );
     437           0 :     SetControlForeground( GALLERY_FG_COLOR );
     438           0 : }
     439             : 
     440           0 : void GalleryListView::DataChanged( const DataChangedEvent& rDCEvt )
     441             : {
     442           0 :     if ( ( rDCEvt.GetType() == DataChangedEventType::SETTINGS ) && ( rDCEvt.GetFlags() & AllSettingsFlags::STYLE ) )
     443           0 :         InitSettings();
     444             :     else
     445           0 :         BrowseBox::DataChanged( rDCEvt );
     446           0 : }
     447             : 
     448           0 : bool GalleryListView::SeekRow( long nRow )
     449             : {
     450           0 :     mnCurRow = nRow;
     451           0 :     return true;
     452             : }
     453             : 
     454           0 : OUString GalleryListView::GetCellText(long _nRow, sal_uInt16 /*nColumnId*/) const
     455             : {
     456           0 :     OUString sRet;
     457           0 :     if( mpTheme && ( _nRow < static_cast< long >( mpTheme->GetObjectCount() ) ) )
     458             :     {
     459           0 :         SgaObject* pObj = mpTheme->AcquireObject( _nRow );
     460             : 
     461           0 :         if( pObj )
     462             :         {
     463           0 :             sRet = GalleryBrowser2::GetItemText( *mpTheme, *pObj, GALLERY_ITEM_TITLE );
     464           0 :             GalleryTheme::ReleaseObject( pObj );
     465             :         }
     466             :     }
     467             : 
     468           0 :     return sRet;
     469             : }
     470             : 
     471           0 : Rectangle GalleryListView::GetFieldCharacterBounds(sal_Int32 _nRow,sal_Int32 _nColumnPos,sal_Int32 nIndex)
     472             : {
     473             :     DBG_ASSERT(_nColumnPos >= 0 && _nColumnPos <= USHRT_MAX, "GalleryListView::GetFieldCharacterBounds: _nColumnId overflow");
     474           0 :     Rectangle aRect;
     475           0 :     if ( SeekRow(_nRow) )
     476             :     {
     477           0 :         SvxFont aFont( GetFont() );
     478           0 :         AccessibleStringWrap aStringWrap( *this, aFont, GetCellText(_nRow, sal::static_int_cast<sal_uInt16>( GetColumnId( sal::static_int_cast<sal_uInt16>(_nColumnPos) ) ) ) );
     479             : 
     480             :         // get the bounds inside the string
     481           0 :         aStringWrap.GetCharacterBounds(nIndex, aRect);
     482             : 
     483             :         // offset to
     484             :     }
     485           0 :     return aRect;
     486             : }
     487             : 
     488           0 : sal_Int32 GalleryListView::GetFieldIndexAtPoint(sal_Int32 _nRow,sal_Int32 _nColumnPos,const Point& _rPoint)
     489             : {
     490             :     DBG_ASSERT(_nColumnPos >= 0 && _nColumnPos <= USHRT_MAX, "GalleryListView::GetFieldIndexAtPoint: _nColumnId overflow");
     491           0 :     sal_Int32 nRet = -1;
     492           0 :     if ( SeekRow(_nRow) )
     493             :     {
     494           0 :         SvxFont aFont( GetFont() );
     495           0 :         AccessibleStringWrap aStringWrap( *this, aFont, GetCellText(_nRow, sal::static_int_cast<sal_uInt16>(GetColumnId(sal::static_int_cast<sal_uInt16>(_nColumnPos)))) );
     496           0 :         nRet = aStringWrap.GetIndexAtPoint(_rPoint);
     497             :     }
     498           0 :     return nRet;
     499             : }
     500             : 
     501           0 : void GalleryListView::PaintField(vcl::RenderContext& rDev, const Rectangle& rRect, sal_uInt16 /*nColumnId*/) const
     502             : {
     503           0 :     rDev.Push( PushFlags::CLIPREGION );
     504           0 :     rDev.IntersectClipRegion( rRect );
     505             : 
     506           0 :     if( mpTheme && ( static_cast<size_t>(mnCurRow) < mpTheme->GetObjectCount() ) )
     507             :     {
     508           0 :         const Size aSize(rRect.GetHeight(), rRect.GetHeight());
     509           0 :         BitmapEx aBitmapEx;
     510           0 :         Size aPreparedSize;
     511           0 :         OUString aItemTextTitle;
     512           0 :         OUString aItemTextPath;
     513             : 
     514           0 :         mpTheme->GetPreviewBitmapExAndStrings(mnCurRow, aBitmapEx, aPreparedSize, aItemTextTitle, aItemTextPath);
     515             : 
     516           0 :         bool bNeedToCreate(aBitmapEx.IsEmpty());
     517             : 
     518           0 :         if(!bNeedToCreate && (aItemTextTitle.isEmpty() || aPreparedSize != aSize))
     519           0 :             bNeedToCreate = true;
     520             : 
     521           0 :         if(bNeedToCreate)
     522             :         {
     523           0 :             SgaObject* pObj = mpTheme->AcquireObject(mnCurRow);
     524             : 
     525           0 :             if(pObj)
     526             :             {
     527           0 :                 aBitmapEx = pObj->createPreviewBitmapEx(aSize);
     528           0 :                 aItemTextTitle = GalleryBrowser2::GetItemText(*mpTheme, *pObj, GALLERY_ITEM_TITLE);
     529           0 :                 aItemTextPath = GalleryBrowser2::GetItemText(*mpTheme, *pObj, GALLERY_ITEM_PATH);
     530             : 
     531           0 :                 mpTheme->SetPreviewBitmapExAndStrings(mnCurRow, aBitmapEx, aSize, aItemTextTitle, aItemTextPath);
     532           0 :                 GalleryTheme::ReleaseObject(pObj);
     533             :             }
     534             :         }
     535             : 
     536           0 :         const long nTextPosY(rRect.Top() + ((rRect.GetHeight() - rDev.GetTextHeight()) >> 1));
     537             : 
     538           0 :         if(!aBitmapEx.IsEmpty())
     539             :         {
     540           0 :             const Size aBitmapExSizePixel(aBitmapEx.GetSizePixel());
     541             :             const Point aPos(
     542           0 :                 ((aSize.Width() - aBitmapExSizePixel.Width()) >> 1) + rRect.Left(),
     543           0 :                 ((aSize.Height() - aBitmapExSizePixel.Height()) >> 1) + rRect.Top());
     544             : 
     545           0 :             if(aBitmapEx.IsTransparent())
     546             :             {
     547             :                 // draw checkered background
     548           0 :                 drawTransparenceBackground(rDev, aPos, aBitmapExSizePixel);
     549             :             }
     550             : 
     551           0 :             rDev.DrawBitmapEx(aPos, aBitmapEx);
     552             :         }
     553             : 
     554           0 :         rDev.DrawText(Point(rRect.Left() + rRect.GetHeight() + 6, nTextPosY), aItemTextTitle);
     555             :     }
     556             : 
     557           0 :     rDev.Pop();
     558           0 : }
     559             : 
     560           0 : void GalleryListView::Command( const CommandEvent& rCEvt )
     561             : {
     562           0 :     BrowseBox::Command( rCEvt );
     563             : 
     564           0 :     if( rCEvt.GetCommand() == CommandEventId::ContextMenu )
     565             :     {
     566           0 :         const Point* pPos = NULL;
     567             : 
     568           0 :         if( rCEvt.IsMouseEvent() && ( GetRowAtYPosPixel( rCEvt.GetMousePosPixel().Y() ) != BROWSER_ENDOFSELECTION ) )
     569           0 :             pPos = &rCEvt.GetMousePosPixel();
     570             : 
     571           0 :         static_cast<GalleryBrowser2*>( GetParent() )->ShowContextMenu( this, pPos );
     572             :     }
     573           0 : }
     574             : 
     575           0 : void GalleryListView::KeyInput( const KeyEvent& rKEvt )
     576             : {
     577           0 :     if( !mpTheme || !static_cast< GalleryBrowser2* >( GetParent() )->KeyInput( rKEvt, this ) )
     578           0 :         BrowseBox::KeyInput( rKEvt );
     579           0 : }
     580             : 
     581           0 : void GalleryListView::DoubleClick( const BrowserMouseEvent& rEvt )
     582             : {
     583           0 :     BrowseBox::DoubleClick( rEvt );
     584             : 
     585           0 :     if( rEvt.GetRow() != BROWSER_ENDOFSELECTION )
     586           0 :         static_cast<GalleryBrowser2*>( GetParent() )->TogglePreview( this, &rEvt.GetPosPixel() );
     587           0 : }
     588             : 
     589           0 : void GalleryListView::Select()
     590             : {
     591           0 :     if( maSelectHdl.IsSet() )
     592           0 :         maSelectHdl.Call( this );
     593           0 : }
     594             : 
     595           0 : sal_Int8 GalleryListView::AcceptDrop( const BrowserAcceptDropEvent& )
     596             : {
     597           0 :     sal_Int8 nRet = DND_ACTION_NONE;
     598             : 
     599           0 :     if( mpTheme && !mpTheme->IsReadOnly() )
     600           0 :         nRet = DND_ACTION_COPY;
     601             : 
     602           0 :     return nRet;
     603             : }
     604             : 
     605           0 : sal_Int8 GalleryListView::ExecuteDrop( const BrowserExecuteDropEvent& rEvt )
     606             : {
     607           0 :     ExecuteDropEvent aEvt( rEvt );
     608             : 
     609           0 :     aEvt.maPosPixel.Y() += GetTitleHeight();
     610             : 
     611           0 :     return( static_cast<GalleryBrowser2*>( GetParent() )->ExecuteDrop( *this, aEvt ) );
     612             : }
     613             : 
     614           0 : void GalleryListView::StartDrag( sal_Int8, const Point& rPosPixel )
     615             : {
     616           0 :     static_cast<GalleryBrowser2*>( GetParent() )->StartDrag( this, &rPosPixel );
     617         435 : }
     618             : 
     619             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11