LCOV - code coverage report
Current view: top level - svx/source/gallery2 - galbrws2.cxx (source / functions) Hit Total Coverage
Test: commit 0e63ca4fde4e446f346e35849c756a30ca294aab Lines: 1 668 0.1 %
Date: 2014-04-11 Functions: 2 57 3.5 %
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 <comphelper/string.hxx>
      22             : #include <sot/formats.hxx>
      23             : #include <vcl/msgbox.hxx>
      24             : #include <svl/urlbmk.hxx>
      25             : #include <svl/stritem.hxx>
      26             : #include <svl/intitem.hxx>
      27             : #include <svl/eitem.hxx>
      28             : #include <svtools/transfer.hxx>
      29             : #include <sfx2/bindings.hxx>
      30             : #include <sfx2/dispatch.hxx>
      31             : #include <sfx2/viewfrm.hxx>
      32             : #include <sfx2/sfxsids.hrc>
      33             : #include <vcl/graphicfilter.hxx>
      34             : #include <editeng/brushitem.hxx>
      35             : #include "helpid.hrc"
      36             : #include "svx/gallery.hxx"
      37             : #include "galobj.hxx"
      38             : #include "svx/gallery1.hxx"
      39             : #include "svx/galtheme.hxx"
      40             : #include "svx/galctrl.hxx"
      41             : #include "svx/galmisc.hxx"
      42             : #include "galbrws2.hxx"
      43             : #include "gallery.hrc"
      44             : #include <vcl/svapp.hxx>
      45             : #include <vcl/settings.hxx>
      46             : #include <svx/fmmodel.hxx>
      47             : #include <svx/dialmgr.hxx>
      48             : #include <svx/svxdlg.hxx>
      49             : #include <svx/dialogs.hrc>
      50             : #include "GalleryControl.hxx"
      51             : 
      52             : #include <svx/svxcommands.h>
      53             : #include <svx/galleryitem.hxx>
      54             : #include <comphelper/processfactory.hxx>
      55             : #include <com/sun/star/frame/FrameSearchFlag.hpp>
      56             : #include <com/sun/star/gallery/GalleryItemType.hpp>
      57             : #include <com/sun/star/graphic/XGraphic.hpp>
      58             : #include <com/sun/star/style/GraphicLocation.hpp>
      59             : #include <map>
      60             : 
      61             : #undef GALLERY_USE_CLIPBOARD
      62             : 
      63             : #define TBX_ID_ICON 1
      64             : #define TBX_ID_LIST 2
      65             : 
      66             : GalleryBrowserMode GalleryBrowser2::meInitMode = GALLERYBROWSERMODE_ICON;
      67             : 
      68           0 : struct DispatchInfo
      69             : {
      70             :     css::util::URL                                  TargetURL;
      71             :     css::uno::Sequence< css::beans::PropertyValue > Arguments;
      72             :     css::uno::Reference< css::frame::XDispatch >    Dispatch;
      73             : };
      74             : 
      75           0 : IMPL_STATIC_LINK_NOINSTANCE( GalleryBrowser2, AsyncDispatch_Impl, DispatchInfo*, pDispatchInfo )
      76             : {
      77           0 :     if ( pDispatchInfo && pDispatchInfo->Dispatch.is() )
      78             :     {
      79             :         try
      80             :         {
      81           0 :             pDispatchInfo->Dispatch->dispatch( pDispatchInfo->TargetURL,
      82           0 :                                                pDispatchInfo->Arguments );
      83             :         }
      84           0 :         catch ( const css::uno::Exception& )
      85             :         {
      86             :         }
      87             :     }
      88             : 
      89           0 :     delete pDispatchInfo;
      90           0 :     return 0;
      91             : }
      92             : 
      93             : namespace
      94             : {
      95             : 
      96           0 : struct CommandInfo
      97             : {
      98             :     css::util::URL                               URL;
      99             :     css::uno::Reference< css::frame::XDispatch > Dispatch;
     100             : 
     101           0 :     CommandInfo( const OUString &rURL )
     102           0 :     {
     103           0 :         URL.Complete = rURL;
     104           0 :     }
     105             : };
     106             : 
     107             : class GalleryThemePopup : public ::cppu::WeakImplHelper1< css::frame::XStatusListener >
     108             : {
     109             : private:
     110             :     const GalleryTheme* mpTheme;
     111             :     sal_uIntPtr         mnObjectPos;
     112             :     sal_Bool            mbPreview;
     113             :     PopupMenu           maPopupMenu;
     114             :     PopupMenu           maBackgroundPopup;
     115             :     GalleryBrowser2*    mpBrowser;
     116             : 
     117             :     typedef std::map< int, CommandInfo > CommandInfoMap;
     118             :     CommandInfoMap   m_aCommandInfo;
     119             : 
     120             :     void Execute( const CommandInfo &rCmdInfo,
     121             :                   const css::uno::Sequence< css::beans::PropertyValue > &rArguments );
     122             : 
     123             :     DECL_LINK( MenuSelectHdl, Menu* pMenu );
     124             :     DECL_LINK( BackgroundMenuSelectHdl, Menu* pMenu );
     125             : public:
     126             :     GalleryThemePopup( const GalleryTheme* pTheme,
     127             :                        sal_uIntPtr nObjectPos,
     128             :                        sal_Bool bPreview,
     129             :                        GalleryBrowser2* pBrowser );
     130             :     virtual ~GalleryThemePopup();
     131             : 
     132             :     void ExecutePopup( Window *pParent, const ::Point &aPos );
     133             : 
     134             :     virtual void SAL_CALL statusChanged( const css::frame::FeatureStateEvent &rEvent) throw ( css::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
     135             :     virtual void SAL_CALL disposing( const css::lang::EventObject &rSource) throw ( css::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
     136             : };
     137             : 
     138             : 
     139           0 : GalleryThemePopup::GalleryThemePopup(
     140             :     const GalleryTheme* pTheme,
     141             :     sal_uIntPtr nObjectPos,
     142             :     sal_Bool bPreview,
     143             :     GalleryBrowser2* pBrowser )
     144             :     : mpTheme( pTheme )
     145             :     , mnObjectPos( nObjectPos )
     146             :     , mbPreview( bPreview )
     147           0 :     , maPopupMenu( GAL_RES( RID_SVXMN_GALLERY2 ) )
     148             :     , maBackgroundPopup()
     149           0 :     , mpBrowser( pBrowser )
     150             : {
     151             : 
     152             :     // SID_GALLERY_ENABLE_ADDCOPY
     153             :     m_aCommandInfo.insert(
     154             :         CommandInfoMap::value_type(
     155             :             SID_GALLERY_ENABLE_ADDCOPY,
     156           0 :             CommandInfo( OUString(CMD_SID_GALLERY_ENABLE_ADDCOPY ))));
     157             :     // SID_GALLERY_BG_BRUSH
     158             :     m_aCommandInfo.insert(
     159             :         CommandInfoMap::value_type(
     160             :             SID_GALLERY_BG_BRUSH,
     161           0 :             CommandInfo(OUString(CMD_SID_GALLERY_BG_BRUSH ))));
     162             :     // SID_GALLERY_FORMATS
     163             :     m_aCommandInfo.insert(
     164             :         CommandInfoMap::value_type(
     165             :             SID_GALLERY_FORMATS,
     166           0 :             CommandInfo(OUString(CMD_SID_GALLERY_FORMATS ))));
     167             : 
     168           0 : }
     169             : 
     170           0 : GalleryThemePopup::~GalleryThemePopup()
     171             : {
     172           0 : }
     173             : 
     174           0 : void SAL_CALL GalleryThemePopup::statusChanged(
     175             :     const css::frame::FeatureStateEvent &rEvent )
     176             : throw ( css::uno::RuntimeException, std::exception )
     177             : {
     178           0 :     const OUString &rURL = rEvent.FeatureURL.Complete;
     179           0 :     if ( rURL == CMD_SID_GALLERY_ENABLE_ADDCOPY )
     180             :     {
     181           0 :         if ( !rEvent.IsEnabled )
     182             :         {
     183           0 :             maPopupMenu.EnableItem( MN_ADD, false );
     184             :         }
     185             :     }
     186           0 :     else if ( rURL == CMD_SID_GALLERY_BG_BRUSH )
     187             :     {
     188           0 :         maBackgroundPopup.Clear();
     189           0 :         if ( rEvent.IsEnabled )
     190             :         {
     191           0 :             OUString sItem;
     192           0 :             css::uno::Sequence< OUString > sItems;
     193           0 :             if ( ( rEvent.State >>= sItem ) && sItem.getLength() )
     194             :             {
     195           0 :                 maBackgroundPopup.InsertItem( 1, sItem );
     196             :             }
     197           0 :             else if ( ( rEvent.State >>= sItems ) && sItems.getLength() )
     198             :             {
     199           0 :                 const OUString *pStr = sItems.getConstArray();
     200           0 :                 const OUString *pEnd = pStr + sItems.getLength();
     201           0 :                 for ( sal_uInt16 nId = 1; pStr != pEnd; pStr++, nId++ )
     202             :                 {
     203           0 :                     maBackgroundPopup.InsertItem( nId, *pStr );
     204             :                 }
     205           0 :             }
     206             :         }
     207             :     }
     208           0 : }
     209             : 
     210           0 : void SAL_CALL GalleryThemePopup::disposing(
     211             :     const css::lang::EventObject &/*rSource*/)
     212             : throw ( css::uno::RuntimeException, std::exception )
     213             : {
     214           0 : }
     215             : 
     216           0 : void GalleryThemePopup::Execute(
     217             :     const CommandInfo &rCmdInfo,
     218             :     const css::uno::Sequence< css::beans::PropertyValue > &rArguments )
     219             : {
     220           0 :     if ( rCmdInfo.Dispatch.is() )
     221             :     {
     222           0 :         DispatchInfo *pInfo = new DispatchInfo;
     223           0 :         pInfo->TargetURL = rCmdInfo.URL;
     224           0 :         pInfo->Arguments = rArguments;
     225           0 :         pInfo->Dispatch = rCmdInfo.Dispatch;
     226             : 
     227           0 :         if ( !Application::PostUserEvent(
     228           0 :                 STATIC_LINK( 0, GalleryBrowser2, AsyncDispatch_Impl), pInfo ) )
     229           0 :             delete pInfo;
     230             :     }
     231           0 : }
     232             : 
     233           0 : void GalleryThemePopup::ExecutePopup( Window *pWindow, const ::Point &aPos )
     234             : {
     235           0 :     css::uno::Reference< css::frame::XStatusListener > xThis( this );
     236             : 
     237           0 :     const SgaObjKind eObjKind = mpTheme->GetObjectKind( mnObjectPos );
     238           0 :     INetURLObject    aURL;
     239             : 
     240           0 :     const_cast< GalleryTheme* >( mpTheme )->GetURL( mnObjectPos, aURL );
     241           0 :     const sal_Bool bValidURL = ( aURL.GetProtocol() != INET_PROT_NOT_VALID );
     242             : 
     243           0 :     maPopupMenu.EnableItem( MN_ADD, bValidURL && SGA_OBJ_SOUND != eObjKind );
     244             : 
     245           0 :     maPopupMenu.EnableItem( MN_PREVIEW, bValidURL );
     246             : 
     247           0 :     maPopupMenu.CheckItem( MN_PREVIEW, mbPreview );
     248             : 
     249           0 :     if( mpTheme->IsReadOnly() || !mpTheme->GetObjectCount() )
     250             :     {
     251           0 :         maPopupMenu.EnableItem( MN_DELETE, false );
     252           0 :         maPopupMenu.EnableItem( MN_TITLE, false );
     253             : 
     254           0 :         if( mpTheme->IsReadOnly() )
     255           0 :             maPopupMenu.EnableItem( MN_PASTECLIPBOARD, false );
     256             : 
     257           0 :         if( !mpTheme->GetObjectCount() )
     258           0 :             maPopupMenu.EnableItem( MN_COPYCLIPBOARD, false );
     259             :     }
     260             :     else
     261             :     {
     262           0 :         maPopupMenu.EnableItem( MN_DELETE, !mbPreview );
     263           0 :         maPopupMenu.EnableItem( MN_TITLE, true );
     264           0 :         maPopupMenu.EnableItem( MN_COPYCLIPBOARD, true );
     265           0 :         maPopupMenu.EnableItem( MN_PASTECLIPBOARD, true );
     266             :     }
     267             : 
     268             : #ifdef GALLERY_USE_CLIPBOARD
     269             :     if( maPopupMenu.IsItemEnabled( MN_PASTECLIPBOARD ) )
     270             :     {
     271             :         TransferableDataHelper aDataHelper( TransferableDataHelper::CreateFromSystemClipboard( this ) );
     272             :         sal_Bool               bEnable = sal_False;
     273             : 
     274             :         if( aDataHelper.GetFormatCount() )
     275             :         {
     276             :             if( aDataHelper.HasFormat( SOT_FORMATSTR_ID_DRAWING ) ||
     277             :                 aDataHelper.HasFormat( SOT_FORMAT_FILE_LIST ) ||
     278             :                 aDataHelper.HasFormat( FORMAT_FILE ) ||
     279             :                 aDataHelper.HasFormat( SOT_FORMATSTR_ID_SVXB ) ||
     280             :                 aDataHelper.HasFormat( FORMAT_GDIMETAFILE ) ||
     281             :                 aDataHelper.HasFormat( FORMAT_BITMAP ) )
     282             :             {
     283             :                 bEnable = sal_True;
     284             :             }
     285             :         }
     286             : 
     287             :         if( !bEnable )
     288             :             maPopupMenu.EnableItem( MN_PASTECLIPBOARD, sal_False );
     289             :     }
     290             : #else
     291           0 :     maPopupMenu.EnableItem( MN_COPYCLIPBOARD, false );
     292           0 :     maPopupMenu.EnableItem( MN_PASTECLIPBOARD, false );
     293             : #endif
     294             : 
     295             :     // update status
     296             :     css::uno::Reference< css::frame::XDispatchProvider> xDispatchProvider(
     297           0 :         mpBrowser->GetFrame(), css::uno::UNO_QUERY );
     298             :     css::uno::Reference< css::util::XURLTransformer > xTransformer(
     299           0 :         mpBrowser->GetURLTransformer() );
     300           0 :     for ( CommandInfoMap::iterator it = m_aCommandInfo.begin();
     301           0 :          it != m_aCommandInfo.end(); ++it )
     302             :     {
     303             :         try
     304             :         {
     305           0 :             CommandInfo &rCmdInfo = it->second;
     306           0 :             if ( xTransformer.is() )
     307           0 :                 xTransformer->parseStrict( rCmdInfo.URL );
     308             : 
     309           0 :             if ( xDispatchProvider.is() )
     310             :             {
     311           0 :                 rCmdInfo.Dispatch = xDispatchProvider->queryDispatch(
     312             :                     rCmdInfo.URL,
     313             :                     OUString( "_self" ),
     314           0 :                     css::frame::FrameSearchFlag::SELF );
     315             :             }
     316             : 
     317           0 :             if ( rCmdInfo.Dispatch.is() )
     318             :             {
     319           0 :                 rCmdInfo.Dispatch->addStatusListener( this, rCmdInfo.URL );
     320           0 :                 rCmdInfo.Dispatch->removeStatusListener( this, rCmdInfo.URL );
     321             :             }
     322             :         }
     323           0 :         catch ( ... )
     324             :         {}
     325             :     }
     326             : 
     327           0 :     if( !maBackgroundPopup.GetItemCount() || ( eObjKind == SGA_OBJ_SVDRAW ) || ( eObjKind == SGA_OBJ_SOUND ) )
     328           0 :         maPopupMenu.EnableItem( MN_BACKGROUND, false );
     329             :     else
     330             :     {
     331           0 :         maPopupMenu.EnableItem( MN_BACKGROUND, true );
     332           0 :         maPopupMenu.SetPopupMenu( MN_BACKGROUND, &maBackgroundPopup );
     333           0 :         maBackgroundPopup.SetSelectHdl( LINK( this, GalleryThemePopup, BackgroundMenuSelectHdl ) );
     334             :     }
     335             : 
     336           0 :     maPopupMenu.RemoveDisabledEntries();
     337             : 
     338           0 :     maPopupMenu.SetSelectHdl( LINK( this, GalleryThemePopup, MenuSelectHdl ) );
     339           0 :     maPopupMenu.Execute( pWindow, aPos );
     340           0 : }
     341             : 
     342           0 : IMPL_LINK( GalleryThemePopup, MenuSelectHdl, Menu*, pMenu )
     343             : {
     344           0 :     if( !pMenu )
     345           0 :         return 0;
     346             : 
     347           0 :     sal_uInt16 nId( pMenu->GetCurItemId() );
     348           0 :     switch ( nId )
     349             :     {
     350             :         case( MN_ADD ):
     351             :         {
     352           0 :             const CommandInfoMap::const_iterator it = m_aCommandInfo.find( SID_GALLERY_FORMATS );
     353           0 :             if ( it != m_aCommandInfo.end() )
     354             :                 mpBrowser->Dispatch( nId,
     355           0 :                                      it->second.Dispatch,
     356           0 :                                      it->second.URL );
     357             :         }
     358           0 :         break;
     359             : 
     360             :         default:
     361           0 :             mpBrowser->Execute( nId );
     362             :     }
     363             : 
     364           0 :     return 0;
     365             : }
     366             : 
     367           0 : IMPL_LINK( GalleryThemePopup, BackgroundMenuSelectHdl, Menu*, pMenu )
     368             : {
     369           0 :     if( !pMenu )
     370           0 :         return 0;
     371             : 
     372           0 :     sal_uInt16 nPos( pMenu->GetCurItemId() - 1 );
     373           0 :     OUString aURL( mpBrowser->GetURL().GetMainURL( INetURLObject::NO_DECODE ) );
     374           0 :     OUString aFilterName( mpBrowser->GetFilterName() );
     375             : 
     376           0 :     css::uno::Sequence< css::beans::PropertyValue > aArgs( 6 );
     377           0 :     aArgs[0].Name = "Background.Transparent";
     378           0 :     aArgs[0].Value <<= sal_Int32( 0 ); // 0 - 100
     379           0 :     aArgs[1].Name = "Background.BackColor";
     380           0 :     aArgs[1].Value <<= sal_Int32( - 1 );
     381           0 :     aArgs[2].Name = "Background.URL";
     382           0 :     aArgs[2].Value <<= aURL;
     383           0 :     aArgs[3].Name = "Background.Filtername"; // FIXME should be FilterName
     384           0 :     aArgs[3].Value <<= aFilterName;
     385           0 :     aArgs[4].Name = "Background.Position";
     386           0 :     aArgs[4].Value <<= css::style::GraphicLocation_TILED;
     387           0 :     aArgs[5].Name = "Position";
     388           0 :     aArgs[5].Value <<= nPos;
     389             : 
     390           0 :     const CommandInfoMap::const_iterator it = m_aCommandInfo.find( SID_GALLERY_BG_BRUSH );
     391           0 :     if ( it != m_aCommandInfo.end() )
     392           0 :         Execute( it->second, aArgs );
     393             : 
     394           0 :     return 0;
     395             : }
     396             : 
     397             : } // end anonymous namespace
     398             : 
     399             : 
     400           0 : GalleryToolBox::GalleryToolBox( GalleryBrowser2* pParent ) :
     401           0 :     ToolBox( pParent, WB_TABSTOP )
     402             : {
     403           0 : }
     404             : 
     405           0 : GalleryToolBox::~GalleryToolBox()
     406             : {
     407           0 : }
     408             : 
     409           0 : void GalleryToolBox::KeyInput( const KeyEvent& rKEvt )
     410             : {
     411           0 :     if( !static_cast< GalleryBrowser2* >( GetParent() )->KeyInput( rKEvt, this ) )
     412           0 :         ToolBox::KeyInput( rKEvt );
     413           0 : }
     414             : 
     415             : 
     416           0 : GalleryBrowser2::GalleryBrowser2( Window* pParent, const ResId& rResId, Gallery* pGallery ) :
     417             :     Control             ( pParent, rResId ),
     418             :     mpGallery           ( pGallery ),
     419             :     mpCurTheme          ( NULL ),
     420           0 :     mpIconView          ( new GalleryIconView( this, NULL ) ),
     421           0 :     mpListView          ( new GalleryListView( this, NULL ) ),
     422           0 :     mpPreview           ( new GalleryPreview(this) ),
     423             :     maViewBox           ( this ),
     424             :     maSeparator         ( this, WB_VERT ),
     425             :     maInfoBar           ( this, WB_LEFT | WB_VCENTER ),
     426             :     mnCurActionPos      ( 0xffffffff ),
     427             :     meMode              ( GALLERYBROWSERMODE_NONE ),
     428           0 :     meLastMode          ( GALLERYBROWSERMODE_NONE )
     429             : {
     430             : 
     431           0 :     m_xContext.set( ::comphelper::getProcessComponentContext() );
     432             : 
     433             :     m_xTransformer.set(
     434           0 :         m_xContext->getServiceManager()->createInstanceWithContext(
     435           0 :             OUString( "com.sun.star.util.URLTransformer" ), m_xContext ),
     436           0 :                     css::uno::UNO_QUERY );
     437             : 
     438           0 :     Image       aDummyImage;
     439           0 :     const Link  aSelectHdl( LINK( this, GalleryBrowser2, SelectObjectHdl ) );
     440           0 :     Font        aInfoFont( maInfoBar.GetControlFont() );
     441             : 
     442           0 :     maMiscOptions.AddListenerLink( LINK( this, GalleryBrowser2, MiscHdl ) );
     443             : 
     444           0 :     maViewBox.InsertItem( TBX_ID_ICON, aDummyImage );
     445           0 :     maViewBox.SetItemBits( TBX_ID_ICON, TIB_RADIOCHECK | TIB_AUTOCHECK );
     446           0 :     maViewBox.SetHelpId( TBX_ID_ICON, HID_GALLERY_ICONVIEW );
     447           0 :     maViewBox.SetQuickHelpText( TBX_ID_ICON, GAL_RESSTR(RID_SVXSTR_GALLERY_ICONVIEW) );
     448             : 
     449           0 :     maViewBox.InsertItem( TBX_ID_LIST, aDummyImage );
     450           0 :     maViewBox.SetItemBits( TBX_ID_LIST, TIB_RADIOCHECK | TIB_AUTOCHECK );
     451           0 :     maViewBox.SetHelpId( TBX_ID_LIST, HID_GALLERY_LISTVIEW );
     452           0 :     maViewBox.SetQuickHelpText( TBX_ID_LIST, GAL_RESSTR(RID_SVXSTR_GALLERY_LISTVIEW) );
     453             : 
     454           0 :     MiscHdl( NULL );
     455           0 :     maViewBox.SetSelectHdl( LINK( this, GalleryBrowser2, SelectTbxHdl ) );
     456           0 :     maViewBox.Show();
     457             : 
     458           0 :     mpIconView->SetAccessibleName(SVX_RESSTR(RID_SVXSTR_GALLERY_THEMEITEMS));
     459           0 :     mpListView->SetAccessibleName(SVX_RESSTR(RID_SVXSTR_GALLERY_THEMEITEMS));
     460             : 
     461           0 :     maInfoBar.Show();
     462           0 :     maSeparator.Show();
     463             : 
     464           0 :     mpIconView->SetSelectHdl( aSelectHdl );
     465           0 :     mpListView->SetSelectHdl( aSelectHdl );
     466             : 
     467           0 :     InitSettings();
     468             : 
     469           0 :     SetMode( ( GALLERYBROWSERMODE_PREVIEW != GalleryBrowser2::meInitMode ) ? GalleryBrowser2::meInitMode : GALLERYBROWSERMODE_ICON );
     470             : 
     471           0 :     if(maInfoBar.GetText().isEmpty())
     472           0 :         mpIconView->SetAccessibleRelationLabeledBy(mpIconView);
     473             :     else
     474           0 :         mpIconView->SetAccessibleRelationLabeledBy(&maInfoBar);
     475           0 :     mpIconView->SetAccessibleRelationMemberOf(mpIconView);
     476           0 : }
     477             : 
     478           0 : GalleryBrowser2::~GalleryBrowser2()
     479             : {
     480           0 :     maMiscOptions.RemoveListenerLink( LINK( this, GalleryBrowser2, MiscHdl ) );
     481             : 
     482           0 :     delete mpPreview;
     483           0 :     delete mpListView;
     484           0 :     delete mpIconView;
     485             : 
     486           0 :     if( mpCurTheme )
     487           0 :         mpGallery->ReleaseTheme( mpCurTheme, *this );
     488             : 
     489           0 : }
     490             : 
     491           0 : void GalleryBrowser2::InitSettings()
     492             : {
     493           0 :     Font  aInfoFont( maInfoBar.GetControlFont() );
     494             : 
     495           0 :     aInfoFont.SetWeight( WEIGHT_BOLD );
     496           0 :     aInfoFont.SetColor( GALLERY_FG_COLOR );
     497           0 :     maInfoBar.SetControlFont( aInfoFont );
     498             : 
     499           0 :     maInfoBar.SetBackground( Wallpaper( GALLERY_DLG_COLOR ) );
     500           0 :     maInfoBar.SetControlBackground( GALLERY_DLG_COLOR );
     501             : 
     502           0 :     maSeparator.SetBackground( Wallpaper( GALLERY_BG_COLOR ) );
     503           0 :     maSeparator.SetControlBackground( GALLERY_BG_COLOR );
     504           0 :     maSeparator.SetControlForeground( GALLERY_FG_COLOR );
     505           0 : }
     506             : 
     507           0 : void GalleryBrowser2::DataChanged( const DataChangedEvent& rDCEvt )
     508             : {
     509           0 :     if ( ( rDCEvt.GetType() == DATACHANGED_SETTINGS ) && ( rDCEvt.GetFlags() & SETTINGS_STYLE ) )
     510           0 :         InitSettings();
     511             :     else
     512           0 :         Control::DataChanged( rDCEvt );
     513           0 : }
     514             : 
     515           0 : void GalleryBrowser2::Resize()
     516             : {
     517           0 :     Control::Resize();
     518             : 
     519           0 :     mpIconView->Hide();
     520           0 :     mpListView->Hide();
     521           0 :     mpPreview->Hide();
     522             : 
     523           0 :     const Size  aOutSize( GetOutputSizePixel() );
     524           0 :     const Size  aBoxSize( maViewBox.GetOutputSizePixel() );
     525           0 :     const long  nOffset = 2, nSepWidth = 2;
     526           0 :     const long  nInfoBarX = aBoxSize.Width() + ( nOffset * 3 ) + nSepWidth;
     527           0 :     const Point aPt( 0, aBoxSize.Height() + 3 );
     528           0 :     const Size  aSz( aOutSize.Width(), aOutSize.Height() - aPt.Y() );
     529             : 
     530           0 :     maSeparator.SetPosSizePixel( Point( aBoxSize.Width() + nOffset, 0 ), Size( nSepWidth, aBoxSize.Height() ) );
     531           0 :     maInfoBar.SetPosSizePixel( Point( nInfoBarX, 0 ), Size( aOutSize.Width() - nInfoBarX, aBoxSize.Height() ) );
     532             : 
     533           0 :     mpIconView->SetPosSizePixel( aPt, aSz );
     534           0 :     mpListView->SetPosSizePixel( aPt, aSz );
     535           0 :     mpPreview->SetPosSizePixel( aPt, aSz );
     536             : 
     537           0 :     switch( GetMode() )
     538             :     {
     539           0 :         case( GALLERYBROWSERMODE_ICON ): mpIconView->Show(); break;
     540           0 :         case( GALLERYBROWSERMODE_LIST ): mpListView->Show(); break;
     541           0 :         case( GALLERYBROWSERMODE_PREVIEW ): mpPreview->Show(); break;
     542             : 
     543             :         default:
     544           0 :         break;
     545             :     }
     546           0 : }
     547             : 
     548           0 : void GalleryBrowser2::Notify( SfxBroadcaster&, const SfxHint& rHint )
     549             : {
     550           0 :     const GalleryHint& rGalleryHint = (const GalleryHint&) rHint;
     551             : 
     552           0 :     switch( rGalleryHint.GetType() )
     553             :     {
     554             :         case( GALLERY_HINT_THEME_UPDATEVIEW ):
     555             :         {
     556           0 :             if( GALLERYBROWSERMODE_PREVIEW == GetMode() )
     557           0 :                 SetMode( meLastMode );
     558             : 
     559           0 :             ImplUpdateViews( (sal_uInt16) rGalleryHint.GetData1() + 1 );
     560             :         }
     561           0 :         break;
     562             : 
     563             :         default:
     564           0 :         break;
     565             :     }
     566           0 : }
     567             : 
     568           0 : sal_Int8 GalleryBrowser2::AcceptDrop( DropTargetHelper& rTarget, const AcceptDropEvent& )
     569             : {
     570           0 :     sal_Int8 nRet = DND_ACTION_NONE;
     571             : 
     572           0 :     if( mpCurTheme && !mpCurTheme->IsReadOnly() )
     573             :     {
     574           0 :         if( !mpCurTheme->IsDragging() )
     575             :         {
     576           0 :             if( rTarget.IsDropFormatSupported( SOT_FORMATSTR_ID_DRAWING ) ||
     577           0 :                 rTarget.IsDropFormatSupported( SOT_FORMAT_FILE_LIST ) ||
     578           0 :                 rTarget.IsDropFormatSupported( FORMAT_FILE ) ||
     579           0 :                 rTarget.IsDropFormatSupported( SOT_FORMATSTR_ID_SVXB ) ||
     580           0 :                 rTarget.IsDropFormatSupported( FORMAT_GDIMETAFILE ) ||
     581           0 :                 rTarget.IsDropFormatSupported( FORMAT_BITMAP ) )
     582             :             {
     583           0 :                 nRet = DND_ACTION_COPY;
     584             :             }
     585             :         }
     586             :         else
     587           0 :             nRet = DND_ACTION_COPY;
     588             :     }
     589             : 
     590           0 :     return nRet;
     591             : }
     592             : 
     593           0 : sal_Int8 GalleryBrowser2::ExecuteDrop( DropTargetHelper&, const ExecuteDropEvent& rEvt )
     594             : {
     595           0 :     sal_Int8 nRet = DND_ACTION_NONE;
     596             : 
     597           0 :     if( mpCurTheme )
     598             :     {
     599           0 :         Point       aSelPos;
     600           0 :         const sal_uIntPtr nItemId = ImplGetSelectedItemId( &rEvt.maPosPixel, aSelPos );
     601           0 :         const sal_uIntPtr nInsertPos = (nItemId ? (nItemId - 1) : mpCurTheme->GetObjectCount());
     602             : 
     603           0 :         if( mpCurTheme->IsDragging() )
     604           0 :             mpCurTheme->ChangeObjectPos( mpCurTheme->GetDragPos(), nInsertPos );
     605             :         else
     606           0 :             nRet = mpCurTheme->InsertTransferable( rEvt.maDropEvent.Transferable, nInsertPos ) ? 1 : 0;
     607             :     }
     608             : 
     609           0 :     return nRet;
     610             : }
     611             : 
     612           0 : void GalleryBrowser2::StartDrag( Window*, const Point* pDragPoint )
     613             : {
     614           0 :     if( mpCurTheme )
     615             :     {
     616           0 :         Point       aSelPos;
     617           0 :         const sal_uIntPtr nItemId = ImplGetSelectedItemId( pDragPoint, aSelPos );
     618             : 
     619           0 :         if( nItemId )
     620           0 :             mpCurTheme->StartDrag( this, nItemId - 1 );
     621             :     }
     622           0 : }
     623             : 
     624           0 : void GalleryBrowser2::TogglePreview( Window*, const Point* )
     625             : {
     626           0 :     SetMode( ( GALLERYBROWSERMODE_PREVIEW != GetMode() ) ? GALLERYBROWSERMODE_PREVIEW : meLastMode );
     627           0 :     GetViewWindow()->GrabFocus();
     628           0 : }
     629             : 
     630           0 : void GalleryBrowser2::ShowContextMenu( Window*, const Point* pContextPoint )
     631             : {
     632           0 :     Point aSelPos;
     633           0 :     const sal_uIntPtr nItemId = ImplGetSelectedItemId( pContextPoint, aSelPos );
     634             : 
     635           0 :     if( mpCurTheme && nItemId && ( nItemId <= mpCurTheme->GetObjectCount() ) )
     636             :     {
     637           0 :         ImplSelectItemId( nItemId );
     638             : 
     639           0 :         css::uno::Reference< css::frame::XFrame > xFrame( GetFrame() );
     640           0 :         if ( xFrame.is() )
     641             :         {
     642           0 :             mnCurActionPos = nItemId - 1;
     643             :             rtl::Reference< GalleryThemePopup > rPopup(
     644             :                 new GalleryThemePopup(
     645             :                     mpCurTheme,
     646             :                     mnCurActionPos,
     647           0 :                     GALLERYBROWSERMODE_PREVIEW == GetMode(),
     648           0 :                     this ) );
     649           0 :             rPopup->ExecutePopup( this, aSelPos  );
     650           0 :         }
     651             :     }
     652           0 : }
     653             : 
     654           0 : sal_Bool GalleryBrowser2::KeyInput( const KeyEvent& rKEvt, Window* pWindow )
     655             : {
     656           0 :     Point       aSelPos;
     657           0 :     const sal_uIntPtr   nItemId = ImplGetSelectedItemId( NULL, aSelPos );
     658           0 :     GalleryBrowser* pParentBrowser = dynamic_cast<GalleryBrowser*>(GetParent());
     659           0 :     sal_Bool bRet = sal_False;
     660           0 :     if (pParentBrowser != NULL)
     661           0 :         bRet = pParentBrowser->KeyInput( rKEvt, pWindow );
     662             :     else
     663             :     {
     664           0 :         svx::sidebar::GalleryControl* pParentControl = dynamic_cast<svx::sidebar::GalleryControl*>(GetParent());
     665           0 :         if (pParentControl != NULL)
     666           0 :             bRet = pParentControl->GalleryKeyInput(rKEvt, pWindow);
     667             :     }
     668             : 
     669           0 :     if( !bRet && !maViewBox.HasFocus() && nItemId && mpCurTheme )
     670             :     {
     671           0 :         sal_uInt16          nExecuteId = 0;
     672           0 :         INetURLObject       aURL;
     673             : 
     674           0 :         const_cast< GalleryTheme* >( mpCurTheme )->GetURL( nItemId - 1, aURL );
     675             : 
     676           0 :         const sal_Bool  bValidURL = ( aURL.GetProtocol() != INET_PROT_NOT_VALID );
     677           0 :         sal_Bool        bPreview = bValidURL;
     678           0 :         sal_Bool        bDelete = sal_False;
     679           0 :         sal_Bool        bTitle = sal_False;
     680             : 
     681           0 :         if( !mpCurTheme->IsReadOnly() && mpCurTheme->GetObjectCount() )
     682             :         {
     683           0 :             bDelete = ( GALLERYBROWSERMODE_PREVIEW != GetMode() );
     684           0 :             bTitle = sal_True;
     685             :         }
     686             : 
     687           0 :         switch( rKEvt.GetKeyCode().GetCode() )
     688             :         {
     689             :             case( KEY_SPACE ):
     690             :             case( KEY_RETURN ):
     691             :             case( KEY_P ):
     692             :             {
     693           0 :                 if( bPreview )
     694             :                 {
     695           0 :                     TogglePreview( pWindow );
     696           0 :                     bRet = sal_True;
     697             :                 }
     698             :             }
     699           0 :             break;
     700             : 
     701             :             case( KEY_INSERT ):
     702             :             case( KEY_I ):
     703             :             {
     704             :                 // Inserting a gallery item in the document must be dispatched
     705           0 :                 if( bValidURL )
     706             :                 {
     707           0 :                     Dispatch( MN_ADD );
     708           0 :                     return sal_True;
     709             :                 }
     710             :             }
     711           0 :             break;
     712             : 
     713             :             case( KEY_DELETE ):
     714             :             case( KEY_D ):
     715             :             {
     716           0 :                 if( bDelete )
     717           0 :                     nExecuteId = MN_DELETE;
     718             :             }
     719           0 :             break;
     720             : 
     721             :             case( KEY_T ):
     722             :             {
     723           0 :                 if( bTitle )
     724           0 :                     nExecuteId = MN_TITLE;
     725             :             }
     726           0 :             break;
     727             : 
     728             :             default:
     729           0 :             break;
     730             :         }
     731             : 
     732           0 :         if( nExecuteId )
     733             :         {
     734           0 :             Execute( nExecuteId );
     735           0 :             bRet = sal_True;
     736           0 :         }
     737             :     }
     738             : 
     739           0 :     return bRet;
     740             : }
     741             : 
     742           0 : void GalleryBrowser2::SelectTheme( const OUString& rThemeName )
     743             : {
     744           0 :     delete mpIconView, mpIconView = NULL;
     745           0 :     delete mpListView, mpListView = NULL;
     746           0 :     delete mpPreview, mpPreview = NULL;
     747             : 
     748           0 :     if( mpCurTheme )
     749           0 :         mpGallery->ReleaseTheme( mpCurTheme, *this );
     750             : 
     751           0 :     mpCurTheme = mpGallery->AcquireTheme( rThemeName, *this );
     752             : 
     753           0 :     mpIconView = new GalleryIconView( this, mpCurTheme );
     754           0 :     mpListView = new GalleryListView( this, mpCurTheme );
     755           0 :     mpPreview = new GalleryPreview( this, WB_TABSTOP | WB_BORDER, mpCurTheme );
     756             : 
     757           0 :     mpIconView->SetAccessibleName(SVX_RESSTR(RID_SVXSTR_GALLERY_THEMEITEMS));
     758           0 :     mpListView->SetAccessibleName(SVX_RESSTR(RID_SVXSTR_GALLERY_THEMEITEMS));
     759           0 :     mpPreview->SetAccessibleName(SVX_RESSTR(RID_SVXSTR_GALLERY_PREVIEW));
     760             : 
     761           0 :     const Link aSelectHdl( LINK( this, GalleryBrowser2, SelectObjectHdl ) );
     762             : 
     763           0 :     mpIconView->SetSelectHdl( aSelectHdl );
     764           0 :     mpListView->SetSelectHdl( aSelectHdl );
     765             : 
     766           0 :     if( GALLERYBROWSERMODE_PREVIEW == GetMode() )
     767           0 :         meMode = meLastMode;
     768             : 
     769           0 :     Resize();
     770           0 :     ImplUpdateViews( 1 );
     771             : 
     772           0 :     maViewBox.EnableItem( TBX_ID_ICON, true );
     773           0 :     maViewBox.EnableItem( TBX_ID_LIST, true );
     774           0 :     maViewBox.CheckItem( ( GALLERYBROWSERMODE_ICON == GetMode() ) ? TBX_ID_ICON : TBX_ID_LIST, true );
     775             : 
     776           0 :     if(maInfoBar.GetText().isEmpty())
     777           0 :         mpIconView->SetAccessibleRelationLabeledBy(mpIconView);
     778             :     else
     779           0 :         mpIconView->SetAccessibleRelationLabeledBy(&maInfoBar);
     780           0 :     mpIconView->SetAccessibleRelationMemberOf(mpIconView);
     781           0 : }
     782             : 
     783           0 : void GalleryBrowser2::SetMode( GalleryBrowserMode eMode )
     784             : {
     785           0 :     if( GetMode() != eMode )
     786             :     {
     787           0 :         meLastMode = GetMode();
     788             : 
     789           0 :         switch( eMode )
     790             :         {
     791             :             case( GALLERYBROWSERMODE_ICON ):
     792             :             {
     793           0 :                 mpListView->Hide();
     794             : 
     795           0 :                 mpPreview->Hide();
     796           0 :                 mpPreview->SetGraphic( Graphic() );
     797           0 :                 mpPreview->PreviewMedia( INetURLObject() );
     798             : 
     799           0 :                 mpIconView->Show();
     800             : 
     801           0 :                 maViewBox.EnableItem( TBX_ID_ICON, true );
     802           0 :                 maViewBox.EnableItem( TBX_ID_LIST, true );
     803             : 
     804           0 :                 maViewBox.CheckItem( TBX_ID_ICON, true );
     805           0 :                 maViewBox.CheckItem( TBX_ID_LIST, false );
     806             :             }
     807           0 :             break;
     808             : 
     809             :             case( GALLERYBROWSERMODE_LIST ):
     810             :             {
     811           0 :                 mpIconView->Hide();
     812             : 
     813           0 :                 mpPreview->Hide();
     814           0 :                 mpPreview->SetGraphic( Graphic() );
     815           0 :                 mpPreview->PreviewMedia( INetURLObject() );
     816             : 
     817           0 :                 mpListView->Show();
     818             : 
     819           0 :                 maViewBox.EnableItem( TBX_ID_ICON, true );
     820           0 :                 maViewBox.EnableItem( TBX_ID_LIST, true );
     821             : 
     822           0 :                 maViewBox.CheckItem( TBX_ID_ICON, false );
     823           0 :                 maViewBox.CheckItem( TBX_ID_LIST, true );
     824             :             }
     825           0 :             break;
     826             : 
     827             :             case( GALLERYBROWSERMODE_PREVIEW ):
     828             :             {
     829           0 :                 Graphic     aGraphic;
     830           0 :                 Point       aSelPos;
     831           0 :                 const sal_uIntPtr   nItemId = ImplGetSelectedItemId( NULL, aSelPos );
     832             : 
     833           0 :                 if( nItemId )
     834             :                 {
     835           0 :                     const sal_uIntPtr nPos = nItemId - 1;
     836             : 
     837           0 :                        mpIconView->Hide();
     838           0 :                     mpListView->Hide();
     839             : 
     840           0 :                     if( mpCurTheme )
     841           0 :                         mpCurTheme->GetGraphic( nPos, aGraphic );
     842             : 
     843           0 :                     mpPreview->SetGraphic( aGraphic );
     844           0 :                      mpPreview->Show();
     845             : 
     846           0 :                     if( mpCurTheme && mpCurTheme->GetObjectKind( nPos ) == SGA_OBJ_SOUND )
     847           0 :                         mpPreview->PreviewMedia( mpCurTheme->GetObjectURL( nPos ) );
     848             : 
     849           0 :                     maViewBox.EnableItem( TBX_ID_ICON, false );
     850           0 :                     maViewBox.EnableItem( TBX_ID_LIST, false );
     851           0 :                 }
     852             :             }
     853           0 :             break;
     854             : 
     855             :             default:
     856           0 :                 break;
     857             :         }
     858             : 
     859           0 :         GalleryBrowser2::meInitMode = meMode = eMode;
     860             :     }
     861           0 : }
     862             : 
     863           0 : Window* GalleryBrowser2::GetViewWindow() const
     864             : {
     865             :     Window* pRet;
     866             : 
     867           0 :     switch( GetMode() )
     868             :     {
     869           0 :         case( GALLERYBROWSERMODE_LIST ): pRet = mpListView; break;
     870           0 :         case( GALLERYBROWSERMODE_PREVIEW ): pRet = mpPreview; break;
     871             : 
     872             :         default:
     873           0 :             pRet = mpIconView;
     874           0 :         break;
     875             :     }
     876             : 
     877           0 :     return pRet;
     878             : }
     879             : 
     880           0 : void GalleryBrowser2::Travel( GalleryBrowserTravel eTravel )
     881             : {
     882           0 :     if( mpCurTheme )
     883             :     {
     884           0 :         Point       aSelPos;
     885           0 :         const sal_uIntPtr nItemId = ImplGetSelectedItemId( NULL, aSelPos );
     886             : 
     887           0 :         if( nItemId )
     888             :         {
     889           0 :             sal_uIntPtr nNewItemId = nItemId;
     890             : 
     891           0 :             switch( eTravel )
     892             :             {
     893           0 :                 case( GALLERYBROWSERTRAVEL_FIRST ):     nNewItemId = 1; break;
     894           0 :                 case( GALLERYBROWSERTRAVEL_LAST ):      nNewItemId = mpCurTheme->GetObjectCount(); break;
     895           0 :                 case( GALLERYBROWSERTRAVEL_PREVIOUS ):  nNewItemId--; break;
     896           0 :                 case( GALLERYBROWSERTRAVEL_NEXT ):      nNewItemId++; break;
     897             :                 default:
     898           0 :                     break;
     899             :             }
     900             : 
     901           0 :             if( nNewItemId < 1 )
     902           0 :                 nNewItemId = 1;
     903           0 :             else if( nNewItemId > mpCurTheme->GetObjectCount() )
     904           0 :                 nNewItemId = mpCurTheme->GetObjectCount();
     905             : 
     906           0 :             if( nNewItemId != nItemId )
     907             :             {
     908           0 :                 ImplSelectItemId( nNewItemId );
     909           0 :                 ImplUpdateInfoBar();
     910             : 
     911           0 :                 if( GALLERYBROWSERMODE_PREVIEW == GetMode() )
     912             :                 {
     913           0 :                     Graphic     aGraphic;
     914           0 :                     const sal_uIntPtr nPos = nNewItemId - 1;
     915             : 
     916           0 :                     mpCurTheme->GetGraphic( nPos, aGraphic );
     917           0 :                     mpPreview->SetGraphic( aGraphic );
     918             : 
     919           0 :                     if( SGA_OBJ_SOUND == mpCurTheme->GetObjectKind( nPos ) )
     920           0 :                         mpPreview->PreviewMedia( mpCurTheme->GetObjectURL( nPos ) );
     921             : 
     922           0 :                     mpPreview->Invalidate();
     923             :                 }
     924             :             }
     925             :         }
     926             :     }
     927           0 : }
     928             : 
     929           0 : void GalleryBrowser2::ImplUpdateViews( sal_uInt16 nSelectionId )
     930             : {
     931           0 :     mpIconView->Hide();
     932           0 :     mpListView->Hide();
     933           0 :     mpPreview->Hide();
     934             : 
     935           0 :     mpIconView->Clear();
     936           0 :     mpListView->Clear();
     937             : 
     938           0 :     if( mpCurTheme )
     939             :     {
     940           0 :         for( sal_uIntPtr i = 0, nCount = mpCurTheme->GetObjectCount(); i < nCount; )
     941             :         {
     942           0 :             mpListView->RowInserted( i++ );
     943           0 :             mpIconView->InsertItem( (sal_uInt16) i );
     944             :         }
     945             : 
     946           0 :         ImplSelectItemId( ( ( nSelectionId > mpCurTheme->GetObjectCount() ) ? mpCurTheme->GetObjectCount() : nSelectionId ) );
     947             :     }
     948             : 
     949           0 :     switch( GetMode() )
     950             :     {
     951           0 :         case( GALLERYBROWSERMODE_ICON ): mpIconView->Show(); break;
     952           0 :         case( GALLERYBROWSERMODE_LIST ): mpListView->Show(); break;
     953           0 :         case( GALLERYBROWSERMODE_PREVIEW ): mpPreview->Show(); break;
     954             : 
     955             :         default:
     956           0 :         break;
     957             :     }
     958             : 
     959           0 :     ImplUpdateInfoBar();
     960           0 : }
     961             : 
     962           0 : void GalleryBrowser2::ImplUpdateInfoBar()
     963             : {
     964           0 :     OUString aInfoText;
     965             : 
     966           0 :     if( mpCurTheme )
     967             :     {
     968           0 :         Point       aSelPos;
     969           0 :         const sal_uIntPtr nItemId = ImplGetSelectedItemId( NULL, aSelPos );
     970             : 
     971           0 :         if( nItemId )
     972             :         {
     973           0 :             const sal_uIntPtr nPos = nItemId - 1;
     974             : 
     975           0 :             aInfoText = mpCurTheme->GetName();
     976             : 
     977           0 :             if( nPos < mpCurTheme->GetObjectCount() )
     978             :             {
     979           0 :                 SgaObject* pObj = mpCurTheme->AcquireObject( nPos );
     980             : 
     981           0 :                 if( pObj )
     982             :                 {
     983           0 :                     aInfoText = GetItemText( *mpCurTheme, *pObj, GALLERY_ITEM_THEMENAME | GALLERY_ITEM_TITLE | GALLERY_ITEM_PATH );
     984           0 :                     mpCurTheme->ReleaseObject( pObj );
     985             :                 }
     986             :             }
     987             :         }
     988             :     }
     989             : 
     990           0 :     maInfoBar.SetText( aInfoText );
     991           0 : }
     992             : 
     993           0 : sal_uIntPtr GalleryBrowser2::ImplGetSelectedItemId( const Point* pSelPos, Point& rSelPos )
     994             : {
     995           0 :     const Size  aOutputSizePixel( GetOutputSizePixel() );
     996           0 :     sal_uIntPtr       nRet = 0;
     997             : 
     998           0 :     if( GALLERYBROWSERMODE_PREVIEW == GetMode() )
     999             :     {
    1000           0 :         nRet = ( ( GALLERYBROWSERMODE_ICON == meLastMode ) ? mpIconView->GetSelectItemId() : ( mpListView->FirstSelectedRow() + 1 ) );
    1001             : 
    1002           0 :         if( pSelPos )
    1003           0 :             rSelPos = GetPointerPosPixel();
    1004             :         else
    1005           0 :             rSelPos = Point( aOutputSizePixel.Width() >> 1, aOutputSizePixel.Height() >> 1 );
    1006             :     }
    1007           0 :     else if( GALLERYBROWSERMODE_ICON == GetMode() )
    1008             :     {
    1009           0 :         if( pSelPos )
    1010             :         {
    1011           0 :             nRet = mpIconView->GetItemId( *pSelPos );
    1012           0 :             rSelPos = GetPointerPosPixel();
    1013             :         }
    1014             :         else
    1015             :         {
    1016           0 :             nRet = mpIconView->GetSelectItemId();
    1017           0 :             rSelPos = mpIconView->GetItemRect( (sal_uInt16) nRet ).Center();
    1018             :         }
    1019             :     }
    1020             :     else
    1021             :     {
    1022           0 :         if( pSelPos )
    1023             :         {
    1024           0 :             nRet = mpListView->GetRowAtYPosPixel( pSelPos->Y() ) + 1;
    1025           0 :             rSelPos = GetPointerPosPixel();
    1026             :         }
    1027             :         else
    1028             :         {
    1029           0 :             nRet = mpListView->FirstSelectedRow() + 1;
    1030           0 :             rSelPos = mpListView->GetFieldRectPixel( (sal_uInt16) nRet, 1 ).Center();
    1031             :         }
    1032             :     }
    1033             : 
    1034           0 :     rSelPos.X() = std::max( std::min( rSelPos.X(), aOutputSizePixel.Width() - 1L ), 0L );
    1035           0 :     rSelPos.Y() = std::max( std::min( rSelPos.Y(), aOutputSizePixel.Height() - 1L ), 0L );
    1036             : 
    1037           0 :     if( nRet && ( !mpCurTheme || ( nRet > mpCurTheme->GetObjectCount() ) ) )
    1038             :     {
    1039           0 :         nRet = 0;
    1040             :     }
    1041             : 
    1042           0 :     return nRet;
    1043             : }
    1044             : 
    1045           0 : void GalleryBrowser2::ImplSelectItemId( sal_uIntPtr nItemId )
    1046             : {
    1047           0 :     if( nItemId )
    1048             :     {
    1049             : 
    1050           0 :         mpIconView->SelectItem( (sal_uInt16) nItemId );
    1051           0 :         mpListView->SelectRow( nItemId - 1 );
    1052             :     }
    1053           0 : }
    1054             : 
    1055             : css::uno::Reference< css::frame::XFrame >
    1056           0 : GalleryBrowser2::GetFrame() const
    1057             : {
    1058           0 :     css::uno::Reference< css::frame::XFrame > xFrame;
    1059           0 :     SfxViewFrame* pCurrentViewFrame = SfxViewFrame::Current();
    1060           0 :     if ( pCurrentViewFrame )
    1061             :     {
    1062           0 :         SfxBindings& rBindings = pCurrentViewFrame->GetBindings();
    1063           0 :         xFrame.set( rBindings.GetActiveFrame() );
    1064             :     }
    1065             : 
    1066           0 :     return xFrame;
    1067             : }
    1068             : 
    1069           0 : void GalleryBrowser2::Dispatch(
    1070             :      sal_uInt16 nId,
    1071             :     const css::uno::Reference< css::frame::XDispatch > &rxDispatch,
    1072             :     const css::util::URL &rURL )
    1073             : {
    1074           0 :     Point aSelPos;
    1075           0 :     const sal_uIntPtr nItemId = ImplGetSelectedItemId( NULL, aSelPos );
    1076             : 
    1077           0 :     if( !mpCurTheme || !nItemId )
    1078           0 :         return;
    1079             : 
    1080           0 :     mnCurActionPos = nItemId - 1;
    1081             : 
    1082           0 :     switch( nId )
    1083             :     {
    1084             :         case( MN_ADD ):
    1085             :         {
    1086           0 :             css::uno::Reference< css::frame::XDispatch > xDispatch( rxDispatch );
    1087           0 :             css::util::URL aURL = rURL;
    1088             : 
    1089           0 :             if ( !xDispatch.is() )
    1090             :             {
    1091             :                 css::uno::Reference< css::frame::XDispatchProvider > xDispatchProvider(
    1092           0 :                     GetFrame(), css::uno::UNO_QUERY );
    1093           0 :                 if ( !xDispatchProvider.is() || !m_xTransformer.is() )
    1094           0 :                     return;
    1095             : 
    1096           0 :                 aURL.Complete = CMD_SID_GALLERY_FORMATS;
    1097           0 :                 m_xTransformer->parseStrict( aURL );
    1098           0 :                 xDispatch = xDispatchProvider->queryDispatch(
    1099             :                     aURL,
    1100             :                     OUString( "_self" ),
    1101           0 :                     css::frame::FrameSearchFlag::SELF );
    1102             :             }
    1103             : 
    1104           0 :             if ( !xDispatch.is() )
    1105           0 :                 return;
    1106             : 
    1107           0 :             sal_Int8 nType = 0;
    1108           0 :             OUString aFileURL, aFilterName;
    1109           0 :             css::uno::Reference< css::lang::XComponent > xDrawing;
    1110           0 :             css::uno::Reference< css::graphic::XGraphic > xGraphic;
    1111             : 
    1112           0 :             aFilterName = GetFilterName();
    1113             : 
    1114           0 :             switch( mpCurTheme->GetObjectKind( mnCurActionPos ) )
    1115             :             {
    1116             :                 case( SGA_OBJ_BMP ):
    1117             :                 case( SGA_OBJ_ANIM ):
    1118             :                 case( SGA_OBJ_INET ):
    1119             :                 // TODO drawing objects are inserted as drawings only via drag&drop
    1120             :                 case( SGA_OBJ_SVDRAW ):
    1121           0 :                     nType = css::gallery::GalleryItemType::GRAPHIC;
    1122           0 :                 break;
    1123             : 
    1124             :                 case ( SGA_OBJ_SOUND ) :
    1125           0 :                     nType = css::gallery::GalleryItemType::MEDIA;
    1126           0 :                 break;
    1127             : 
    1128             :                 default:
    1129           0 :                     nType = css::gallery::GalleryItemType::EMPTY;
    1130           0 :                 break;
    1131             :             }
    1132             : 
    1133           0 :             Graphic aGraphic;
    1134           0 :             sal_Bool bGraphic = mpCurTheme->GetGraphic( mnCurActionPos, aGraphic );
    1135           0 :             if ( bGraphic && !!aGraphic )
    1136           0 :                 xGraphic.set( aGraphic.GetXGraphic() );
    1137             :             OSL_ENSURE( xGraphic.is(), "gallery item is graphic, but the reference is invalid!" );
    1138             : 
    1139           0 :             css::uno::Sequence< css::beans::PropertyValue > aSeq( SVXGALLERYITEM_PARAMS );
    1140             : 
    1141           0 :             aSeq[0].Name = SVXGALLERYITEM_TYPE;
    1142           0 :             aSeq[0].Value <<= nType;
    1143           0 :             aSeq[1].Name = SVXGALLERYITEM_URL;
    1144           0 :             aSeq[1].Value <<= aFileURL;
    1145           0 :             aSeq[2].Name = SVXGALLERYITEM_FILTER;
    1146           0 :             aSeq[2].Value <<= aFilterName;
    1147           0 :             aSeq[3].Name = SVXGALLERYITEM_DRAWING;
    1148           0 :             aSeq[3].Value <<= xDrawing;
    1149           0 :             aSeq[4].Name = SVXGALLERYITEM_GRAPHIC;
    1150           0 :             aSeq[4].Value <<= xGraphic;
    1151             : 
    1152           0 :             css::uno::Sequence< css::beans::PropertyValue > aArgs( 1 );
    1153           0 :             aArgs[0].Name = SVXGALLERYITEM_ARGNAME;
    1154           0 :             aArgs[0].Value <<= aSeq;
    1155             : 
    1156           0 :             DispatchInfo *pInfo = new DispatchInfo;
    1157           0 :             pInfo->TargetURL = aURL;
    1158           0 :             pInfo->Arguments = aArgs;
    1159           0 :             pInfo->Dispatch = xDispatch;
    1160             : 
    1161           0 :             if ( !Application::PostUserEvent(
    1162           0 :                     STATIC_LINK( 0, GalleryBrowser2, AsyncDispatch_Impl), pInfo ) )
    1163           0 :                 delete pInfo;
    1164             :         }
    1165           0 :         break;
    1166             : 
    1167             :         default:
    1168           0 :         break;
    1169             :     }
    1170             : }
    1171             : 
    1172           0 : void GalleryBrowser2::Execute( sal_uInt16 nId )
    1173             : {
    1174           0 :     Point       aSelPos;
    1175           0 :     const sal_uIntPtr nItemId = ImplGetSelectedItemId( NULL, aSelPos );
    1176             : 
    1177           0 :     if( mpCurTheme && nItemId )
    1178             :     {
    1179           0 :         mnCurActionPos = nItemId - 1;
    1180             : 
    1181           0 :         switch( nId )
    1182             :         {
    1183             :             case( MN_PREVIEW ):
    1184           0 :                 SetMode( ( GALLERYBROWSERMODE_PREVIEW != GetMode() ) ? GALLERYBROWSERMODE_PREVIEW : meLastMode );
    1185           0 :             break;
    1186             : 
    1187             :             case( MN_DELETE ):
    1188             :             {
    1189           0 :                 if( !mpCurTheme->IsReadOnly() &&
    1190           0 :                     MessageDialog(NULL, "QueryDeleteObjectDialog","svx/ui/querydeleteobjectdialog.ui").Execute() == RET_YES )
    1191             :                 {
    1192           0 :                     mpCurTheme->RemoveObject( mnCurActionPos );
    1193             :                 }
    1194             :             }
    1195           0 :             break;
    1196             : 
    1197             :             case( MN_TITLE ):
    1198             :             {
    1199           0 :                 SgaObject* pObj = mpCurTheme->AcquireObject( mnCurActionPos );
    1200             : 
    1201           0 :                 if( pObj )
    1202             :                 {
    1203           0 :                     const OUString  aOldTitle( GetItemText( *mpCurTheme, *pObj, GALLERY_ITEM_TITLE ) );
    1204             : 
    1205           0 :                     SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
    1206           0 :                     if(pFact)
    1207             :                     {
    1208           0 :                         AbstractTitleDialog* aDlg = pFact->CreateTitleDialog( this, aOldTitle );
    1209             :                         DBG_ASSERT(aDlg, "Dialogdiet fail!");
    1210           0 :                         if( aDlg->Execute() == RET_OK )
    1211             :                         {
    1212           0 :                             OUString aNewTitle( aDlg->GetTitle() );
    1213             : 
    1214           0 :                             if( ( aNewTitle.isEmpty() && !pObj->GetTitle().isEmpty() ) || ( aNewTitle != aOldTitle ) )
    1215             :                             {
    1216           0 :                                 if( aNewTitle.isEmpty() )
    1217           0 :                                     aNewTitle = "__<empty>__";
    1218             : 
    1219           0 :                                 pObj->SetTitle( aNewTitle );
    1220           0 :                                 mpCurTheme->InsertObject( *pObj );
    1221           0 :                             }
    1222             :                         }
    1223             : 
    1224           0 :                         mpCurTheme->ReleaseObject( pObj );
    1225           0 :                         delete aDlg;
    1226           0 :                     }
    1227             :                 }
    1228             :             }
    1229           0 :             break;
    1230             : 
    1231             :             case( MN_COPYCLIPBOARD ):
    1232             :             {
    1233             :                 Window* pWindow;
    1234             : 
    1235           0 :                 switch( GetMode() )
    1236             :                 {
    1237           0 :                     case( GALLERYBROWSERMODE_ICON ): pWindow = (Window*) mpIconView; break;
    1238           0 :                     case( GALLERYBROWSERMODE_LIST ): pWindow = (Window*) mpListView; break;
    1239           0 :                     case( GALLERYBROWSERMODE_PREVIEW ): pWindow = (Window*) mpPreview; break;
    1240             : 
    1241             :                     default:
    1242           0 :                         pWindow = NULL;
    1243           0 :                     break;
    1244             :                 }
    1245             : 
    1246           0 :                 mpCurTheme->CopyToClipboard( pWindow, mnCurActionPos );
    1247             :             }
    1248           0 :             break;
    1249             : 
    1250             :             case( MN_PASTECLIPBOARD ):
    1251             :             {
    1252           0 :                 if( !mpCurTheme->IsReadOnly() )
    1253             :                 {
    1254           0 :                     TransferableDataHelper aDataHelper( TransferableDataHelper::CreateFromSystemClipboard( this ) );
    1255           0 :                     mpCurTheme->InsertTransferable( aDataHelper.GetTransferable(), mnCurActionPos );
    1256             :                 }
    1257             :             }
    1258           0 :             break;
    1259             : 
    1260             :             default:
    1261           0 :             break;
    1262             :         }
    1263             :     }
    1264           0 : }
    1265             : 
    1266           0 : OUString GalleryBrowser2::GetItemText( const GalleryTheme& rTheme, const SgaObject& rObj, sal_uIntPtr nItemTextFlags )
    1267             : {
    1268           0 :     OUString          aRet;
    1269             : 
    1270           0 :     INetURLObject aURL(rObj.GetURL());
    1271             : 
    1272           0 :     if( nItemTextFlags & GALLERY_ITEM_THEMENAME )
    1273             :     {
    1274           0 :         aRet += rTheme.GetName();
    1275           0 :         aRet += " - ";
    1276             :     }
    1277             : 
    1278           0 :     if( nItemTextFlags & GALLERY_ITEM_TITLE )
    1279             :     {
    1280           0 :         OUString aTitle( rObj.GetTitle() );
    1281             : 
    1282           0 :         if( aTitle.isEmpty() )
    1283           0 :             aTitle = aURL.getBase( INetURLObject::LAST_SEGMENT, true, INetURLObject::DECODE_UNAMBIGUOUS );
    1284             : 
    1285           0 :         if( aTitle.isEmpty() )
    1286             :         {
    1287           0 :             aTitle = aURL.GetMainURL( INetURLObject::DECODE_UNAMBIGUOUS );
    1288           0 :             aTitle = aTitle.getToken( comphelper::string::getTokenCount(aTitle, '/') - 1, '/' );
    1289             :         }
    1290             : 
    1291           0 :         aRet += aTitle;
    1292             :     }
    1293             : 
    1294           0 :     if( nItemTextFlags & GALLERY_ITEM_PATH )
    1295             :     {
    1296           0 :         const OUString aPath( aURL.getFSysPath( INetURLObject::FSYS_DETECT ) );
    1297             : 
    1298           0 :         if( !aPath.isEmpty() && ( nItemTextFlags & GALLERY_ITEM_TITLE ) )
    1299           0 :             aRet += " (";
    1300             : 
    1301           0 :         aRet += aURL.getFSysPath( INetURLObject::FSYS_DETECT );
    1302             : 
    1303           0 :         if( !aPath.isEmpty() && ( nItemTextFlags & GALLERY_ITEM_TITLE ) )
    1304           0 :             aRet += ")";
    1305             :     }
    1306             : 
    1307           0 :     return aRet;
    1308             : }
    1309             : 
    1310           0 : INetURLObject GalleryBrowser2::GetURL() const
    1311             : {
    1312           0 :     INetURLObject aURL;
    1313             : 
    1314           0 :     if( mpCurTheme && mnCurActionPos != 0xffffffff )
    1315           0 :         aURL = mpCurTheme->GetObjectURL( mnCurActionPos );
    1316             : 
    1317           0 :     return aURL;
    1318             : }
    1319             : 
    1320           0 : OUString GalleryBrowser2::GetFilterName() const
    1321             : {
    1322           0 :     OUString aFilterName;
    1323             : 
    1324           0 :     if( mpCurTheme && mnCurActionPos != 0xffffffff )
    1325             :     {
    1326           0 :         const SgaObjKind eObjKind = mpCurTheme->GetObjectKind( mnCurActionPos );
    1327             : 
    1328           0 :         if( ( SGA_OBJ_BMP == eObjKind ) || ( SGA_OBJ_ANIM == eObjKind ) )
    1329             :         {
    1330           0 :             GraphicFilter& rFilter = GraphicFilter::GetGraphicFilter();
    1331           0 :             INetURLObject       aURL;
    1332           0 :             mpCurTheme->GetURL( mnCurActionPos, aURL );
    1333           0 :             sal_uInt16          nFilter = rFilter.GetImportFormatNumberForShortName( aURL.GetExtension() );
    1334             : 
    1335           0 :             if( GRFILTER_FORMAT_DONTKNOW != nFilter )
    1336           0 :                 aFilterName = rFilter.GetImportFormatName( nFilter );
    1337             :         }
    1338             :     }
    1339             : 
    1340           0 :     return aFilterName;
    1341             : }
    1342             : 
    1343           0 : Graphic GalleryBrowser2::GetGraphic() const
    1344             : {
    1345           0 :     Graphic aGraphic;
    1346             : 
    1347           0 :     if( mpCurTheme && mnCurActionPos != 0xffffffff )
    1348           0 :         mpCurTheme->GetGraphic( mnCurActionPos, aGraphic );
    1349             : 
    1350           0 :     return aGraphic;
    1351             : }
    1352             : 
    1353           0 : IMPL_LINK_NOARG(GalleryBrowser2, SelectObjectHdl)
    1354             : {
    1355           0 :     ImplUpdateInfoBar();
    1356           0 :     return 0L;
    1357             : }
    1358             : 
    1359           0 : IMPL_LINK( GalleryBrowser2, SelectTbxHdl, ToolBox*, pBox )
    1360             : {
    1361           0 :     if( pBox->GetCurItemId() == TBX_ID_ICON )
    1362           0 :         SetMode( GALLERYBROWSERMODE_ICON );
    1363           0 :     else if( pBox->GetCurItemId() == TBX_ID_LIST )
    1364           0 :         SetMode( GALLERYBROWSERMODE_LIST );
    1365             : 
    1366           0 :     return 0L;
    1367             : }
    1368             : 
    1369           0 : IMPL_LINK_NOARG(GalleryBrowser2, MiscHdl)
    1370             : {
    1371           0 :     maViewBox.SetOutStyle( maMiscOptions.GetToolboxStyle() );
    1372             : 
    1373           0 :     BitmapEx aIconBmpEx = BitmapEx( Image( GAL_RES( RID_SVXIMG_GALLERY_VIEW_ICON ) ).GetBitmapEx() );
    1374           0 :     BitmapEx aListBmpEx = BitmapEx( Image( GAL_RES( RID_SVXIMG_GALLERY_VIEW_LIST ) ).GetBitmapEx() );
    1375             : 
    1376           0 :     if( maMiscOptions.AreCurrentSymbolsLarge() )
    1377             :     {
    1378           0 :         const Size aLargeSize( 24, 24);
    1379             : 
    1380           0 :         aIconBmpEx.Scale( aLargeSize );
    1381           0 :         aListBmpEx.Scale( aLargeSize );
    1382             :     }
    1383             : 
    1384           0 :     maViewBox.SetItemImage(TBX_ID_ICON, Image(aIconBmpEx));
    1385           0 :     maViewBox.SetItemImage(TBX_ID_LIST, Image(aListBmpEx));
    1386           0 :     maViewBox.SetSizePixel( maViewBox.CalcWindowSizePixel() );
    1387             : 
    1388           0 :     Resize();
    1389             : 
    1390           0 :     return 0L;
    1391         297 : }
    1392             : 
    1393             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10