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

Generated by: LCOV version 1.10