LCOV - code coverage report
Current view: top level - svx/source/gallery2 - galctrl.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 1 312 0.3 %
Date: 2014-11-03 Functions: 2 47 4.3 %
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             : 
      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: */

Generated by: LCOV version 1.10