/************************************************************************* * * $RCSfile: galbrws2.cxx,v $ * * $Revision: 1.18 $ * * last change: $Author: ka $ $Date: 2001-06-08 13:55:20 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses * * - GNU Lesser General Public License Version 2.1 * - Sun Industry Standards Source License Version 1.1 * * Sun Microsystems Inc., October, 2000 * * GNU Lesser General Public License Version 2.1 * ============================================= * Copyright 2000 by Sun Microsystems, Inc. * 901 San Antonio Road, Palo Alto, CA 94303, USA * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License version 2.1, as published by the Free Software Foundation. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307 USA * * * Sun Industry Standards Source License Version 1.1 * ================================================= * The contents of this file are subject to the Sun Industry Standards * Source License Version 1.1 (the "License"); You may not use this file * except in compliance with the License. You may obtain a copy of the * License at http://www.openoffice.org/license.html. * * Software provided under this License is provided on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. * See the License for the specific provisions governing your rights and * obligations concerning the Software. * * The Initial Developer of the Original Code is: Sun Microsystems, Inc. * * Copyright: 2000 by Sun Microsystems, Inc. * * All Rights Reserved. * * Contributor(s): _______________________________________ * * ************************************************************************/ #define ITEMID_BRUSH 0 #include #include #include #include #include #include #include #include #include #include #include #include #include #include "impgrf.hxx" #include "brshitem.hxx" #include "helpid.hrc" #include "gallery1.hxx" #include "galtheme.hxx" #include "galmisc.hxx" #include "galdlg.hxx" #include "galbrws2.hxx" // ----------- // - Defines - // ----------- #undef GALLERY_USE_CLIPBOARD #define TBX_ID_ICON 1 #define TBX_ID_LIST 2 // ----------- // - statics - // ----------- GalleryBrowserMode GalleryBrowser2::meInitMode = GALLERYBROWSERMODE_ICON; // -------------------------- // - GalleryBackgroundPopup - // -------------------------- class GalleryBackgroundPopup : public PopupMenu, public SfxControllerItem { const GalleryTheme* mpTheme; ULONG mnObjectPos; virtual void Select(); virtual void StateChanged( USHORT nSID, SfxItemState eState, const SfxPoolItem* pState ); public: GalleryBackgroundPopup( const GalleryTheme* pTheme, ULONG nObjectPos ); ~GalleryBackgroundPopup(); }; // ------------------------------------------------------------------------ GalleryBackgroundPopup::GalleryBackgroundPopup( const GalleryTheme* pTheme, ULONG nObjectPos ) : SfxControllerItem ( SID_GALLERY_BG_BRUSH, SfxViewFrame::Current()->GetBindings() ), mpTheme ( pTheme ), mnObjectPos ( nObjectPos ) { SfxViewFrame::Current()->GetBindings().Update( SID_GALLERY_BG_BRUSH ); RemoveDisabledEntries(); } // ------------------------------------------------------------------------ GalleryBackgroundPopup::~GalleryBackgroundPopup() { } // ------------------------------------------------------------------------ void GalleryBackgroundPopup::StateChanged( USHORT nSID, SfxItemState eState, const SfxPoolItem* pItem ) { if ( ( nSID == SID_GALLERY_BG_BRUSH ) && pItem && ( eState != SFX_ITEM_DISABLED ) ) { SfxStringListItem* pStrLstItem; SfxStringItem* pStrItem; PopupMenu::Clear(); if( ( pStrLstItem = PTR_CAST( SfxStringListItem, pItem ) ) != NULL ) { List* pList = pStrLstItem->GetList(); if( pList ) for ( ULONG i = 0, nCount = pList->Count(); i < nCount; i++ ) InsertItem( (USHORT) i + 1, *(String*) pList->GetObject( i ) ); } else if( ( pStrItem = PTR_CAST( SfxStringItem, pItem ) ) != NULL ) InsertItem( 1, pStrItem->GetValue() ); else { DBG_ERROR( "SgaBGPopup::StateChanged(...): Wrong item type!" ); } } } // ------------------------------------------------------------------------ void GalleryBackgroundPopup::Select() { Menu::Select(); const INetURLObject aURL( mpTheme->GetObjectURL( mnObjectPos ) ); const SvxBrushItem aBrushItem( aURL.GetMainURL(), String(), GPOS_TILED, SID_GALLERY_BG_BRUSH ); const SfxUInt16Item aPosItem( SID_GALLERY_BG_POS, GetCurItemId() - 1 ); const SfxStringItem aPathItem( SID_FILE_NAME, aURL.GetMainURL() ); SfxViewFrame::Current()->GetBindings().GetDispatcher()->Execute( SID_GALLERY_BG_BRUSH, SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD, &aBrushItem, &aPosItem, &aPathItem, 0L ); } // --------------------- // - GalleryThemePopup - // --------------------- class GalleryThemePopup : public PopupMenu, public SfxControllerItem { GalleryBackgroundPopup maBackgroundPopup; const GalleryTheme* mpTheme; ULONG mnObjectPos; BOOL mbPreview; virtual void StateChanged( USHORT nSID, SfxItemState eState, const SfxPoolItem* pState ); public: GalleryThemePopup( const GalleryTheme* pTheme, ULONG nObjectPos, BOOL bPreview ); ~GalleryThemePopup(); }; // ------------------------------------------------------------------------ GalleryThemePopup::GalleryThemePopup( const GalleryTheme* pTheme, ULONG nObjectPos, BOOL bPreview ) : PopupMenu ( GAL_RESID( RID_SVXMN_GALLERY2 ) ), SfxControllerItem ( SID_GALLERY_ENABLE_ADDCOPY, SfxViewFrame::Current()->GetBindings() ), maBackgroundPopup ( pTheme, nObjectPos ), mpTheme ( pTheme ), mnObjectPos ( nObjectPos ), mbPreview ( bPreview ) { const SgaObjKind eObjKind = mpTheme->GetObjectKind( mnObjectPos ); PopupMenu* pAddMenu = GetPopupMenu( MN_ADDMENU ); SfxBindings& rBindings = SfxViewFrame::Current()->GetBindings(); pAddMenu->EnableItem( MN_ADD, SGA_OBJ_SOUND != eObjKind ); pAddMenu->EnableItem( MN_ADD_LINK, SGA_OBJ_SVDRAW != eObjKind && SGA_OBJ_SOUND != eObjKind ); EnableItem( MN_ADDMENU, pAddMenu->IsItemEnabled( MN_ADD ) || pAddMenu->IsItemEnabled( MN_ADD_LINK ) ); CheckItem( MN_PREVIEW, mbPreview ); if( mpTheme->IsReadOnly() || !mpTheme->GetObjectCount() ) { EnableItem( MN_DELETE, FALSE ); EnableItem( MN_TITLE, FALSE ); if( mpTheme->IsReadOnly() ) EnableItem( MN_PASTECLIPBOARD, FALSE ); if( !mpTheme->GetObjectCount() ) EnableItem( MN_COPYCLIPBOARD, FALSE ); } else { EnableItem( MN_DELETE, !bPreview ); EnableItem( MN_TITLE, TRUE ); EnableItem( MN_COPYCLIPBOARD, TRUE ); EnableItem( MN_PASTECLIPBOARD, TRUE ); } #ifdef GALLERY_USE_CLIPBOARD if( IsItemEnabled( MN_PASTECLIPBOARD ) ) { TransferableDataHelper aDataHelper( TransferableDataHelper::CreateFromSystemClipboard( this ) ); BOOL bEnable = FALSE; if( aDataHelper.GetFormatCount() ) { if( aDataHelper.HasFormat( SOT_FORMATSTR_ID_DRAWING ) || aDataHelper.HasFormat( FORMAT_FILE ) || aDataHelper.HasFormat( SOT_FORMATSTR_ID_SVXB ) || aDataHelper.HasFormat( FORMAT_GDIMETAFILE ) || aDataHelper.HasFormat( FORMAT_BITMAP ) ) { bEnable = TRUE; } } if( !bEnable ) EnableItem( MN_PASTECLIPBOARD, FALSE ); } #else EnableItem( MN_COPYCLIPBOARD, FALSE ); EnableItem( MN_PASTECLIPBOARD, FALSE ); #endif if( !maBackgroundPopup.GetItemCount() || ( eObjKind == SGA_OBJ_SVDRAW ) ) pAddMenu->EnableItem( MN_BACKGROUND, FALSE ); else { pAddMenu->EnableItem( MN_BACKGROUND, TRUE ); pAddMenu->SetPopupMenu( MN_BACKGROUND, &maBackgroundPopup ); } rBindings.Update( SID_GALLERY_ENABLE_ADDCOPY ); RemoveDisabledEntries(); } // ------------------------------------------------------------------------ GalleryThemePopup::~GalleryThemePopup() { } // ------------------------------------------------------------------------ void GalleryThemePopup::StateChanged( USHORT nSID, SfxItemState eState, const SfxPoolItem* pItem ) { if( ( nSID == SID_GALLERY_ENABLE_ADDCOPY ) && pItem && ( eState != SFX_ITEM_DISABLED ) ) { SfxBoolItem* pBoolItem = PTR_CAST( SfxBoolItem, pItem ); DBG_ASSERT( pBoolItem || pBoolItem == 0, "SfxBoolItem erwartet!"); GetPopupMenu( MN_ADDMENU )->EnableItem( MN_ADD, pBoolItem->GetValue() ); } } // ------------------- // - GalleryBrowser2 - // ------------------- GalleryBrowser2::GalleryBrowser2( GalleryBrowser* pParent, const ResId& rResId, Gallery* pGallery ) : Control ( pParent, rResId ), mpGallery ( pGallery ), mpCurTheme ( NULL ), mpIconView ( new GalleryIconView( this, NULL ) ), mpListView ( new GalleryListView( this, NULL ) ), mpPreview ( new GalleryPreview( this, NULL ) ), maViewBox ( this ), maSeparator ( this, WB_VERT ), maInfoBar ( this, WB_LEFT | WB_VCENTER ), mnCurActionPos ( 0xffffffff ), meMode ( GALLERYBROWSERMODE_NONE ), meLastMode ( GALLERYBROWSERMODE_NONE ), mbCurActionIsLinkage( FALSE ) { const Link aSelectHdl( LINK( this, GalleryBrowser2, SelectObjectHdl ) ); Font aInfoFont( maInfoBar.GetControlFont() ); maViewBox.InsertItem( TBX_ID_ICON, Image( GAL_RESID( RID_SVXIMG_GALLERY_VIEW_ICON ) ) ); maViewBox.SetItemBits( TBX_ID_ICON, TIB_RADIOCHECK | TIB_AUTOCHECK ); maViewBox.InsertItem( TBX_ID_LIST, Image( GAL_RESID( RID_SVXIMG_GALLERY_VIEW_LIST ) ) ); maViewBox.SetItemBits( TBX_ID_LIST, TIB_RADIOCHECK | TIB_AUTOCHECK ); maViewBox.SetBorder( 0, 1 ); maViewBox.SetOutStyle( TOOLBOX_STYLE_FLAT ); maViewBox.SetPosSizePixel( Point(), maViewBox.CalcWindowSizePixel() ); maViewBox.SetSelectHdl( LINK( this, GalleryBrowser2, SelectTbxHdl ) ); maViewBox.Show(); aInfoFont.SetWeight( WEIGHT_BOLD ); aInfoFont.SetColor( COL_BLACK ); maInfoBar.SetControlFont( aInfoFont ); maInfoBar.Show(); maSeparator.Show(); mpIconView->SetSelectHdl( aSelectHdl ); mpListView->SetSelectHdl( aSelectHdl ); SetMode( ( GALLERYBROWSERMODE_PREVIEW != GalleryBrowser2::meInitMode ) ? GalleryBrowser2::meInitMode : GALLERYBROWSERMODE_ICON ); } // ----------------------------------------------------------------------------- GalleryBrowser2::~GalleryBrowser2() { delete mpPreview; delete mpListView; delete mpIconView; if( mpCurTheme ) mpGallery->ReleaseTheme( mpCurTheme, *this ); } // ----------------------------------------------------------------------------- void GalleryBrowser2::Resize() { Control::Resize(); mpIconView->Hide(); mpListView->Hide(); mpPreview->Hide(); const Size aOutSize( GetOutputSizePixel() ); const Size aBoxSize( maViewBox.GetOutputSizePixel() ); const long nOffset = 2, nSepWidth = 2; const long nInfoBarX = aBoxSize.Width() + ( nOffset * 3 ) + nSepWidth; const Point aPt( 0, aBoxSize.Height() + 3 ); const Size aSz( aOutSize.Width(), aOutSize.Height() - aPt.Y() ); maSeparator.SetPosSizePixel( Point( aBoxSize.Width() + nOffset, 0 ), Size( nSepWidth, aBoxSize.Height() ) ); maInfoBar.SetPosSizePixel( Point( nInfoBarX, 0 ), Size( aOutSize.Width() - nInfoBarX, aBoxSize.Height() ) ); mpIconView->SetPosSizePixel( aPt, aSz ); mpListView->SetPosSizePixel( aPt, aSz ); mpPreview->SetPosSizePixel( aPt, aSz ); switch( GetMode() ) { case( GALLERYBROWSERMODE_ICON ): mpIconView->Show(); break; case( GALLERYBROWSERMODE_LIST ): mpListView->Show(); break; case( GALLERYBROWSERMODE_PREVIEW ): mpPreview->Show(); break; default: break; } } // ----------------------------------------------------------------------------- void GalleryBrowser2::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) { const GalleryHint& rGalleryHint = (const GalleryHint&) rHint; switch( rGalleryHint.GetType() ) { case( GALLERY_HINT_THEME_UPDATEVIEW ): { if( GALLERYBROWSERMODE_PREVIEW == GetMode() ) SetMode( meLastMode ); ImplUpdateViews( (USHORT) rGalleryHint.GetData1() + 1 ); } break; default: break; } } // ----------------------------------------------------------------------------- sal_Int8 GalleryBrowser2::AcceptDrop( DropTargetHelper& rTarget, const AcceptDropEvent& rEvt ) { sal_Int8 nRet = DND_ACTION_NONE; if( mpCurTheme && !mpCurTheme->IsReadOnly() && !mpCurTheme ->IsImported() ) { if( !mpCurTheme->IsDragging() ) { if( rTarget.IsDropFormatSupported( SOT_FORMATSTR_ID_DRAWING ) || rTarget.IsDropFormatSupported( FORMAT_FILE ) || rTarget.IsDropFormatSupported( SOT_FORMATSTR_ID_SVXB ) || rTarget.IsDropFormatSupported( FORMAT_GDIMETAFILE ) || rTarget.IsDropFormatSupported( FORMAT_BITMAP ) ) { nRet = DND_ACTION_COPY; } } else nRet = DND_ACTION_MOVE; } return nRet; } // ----------------------------------------------------------------------------- sal_Int8 GalleryBrowser2::ExecuteDrop( DropTargetHelper& rTarget, const ExecuteDropEvent& rEvt ) { sal_Int8 nRet = DND_ACTION_NONE; if( mpCurTheme ) { const ULONG nItemId = ImplGetSelectedItemId( &rEvt.maPosPixel ); const ULONG nInsertPos = ( nItemId ? ( nItemId - 1 ) : LIST_APPEND ); if( mpCurTheme->IsDragging() ) mpCurTheme->ChangeObjectPos( mpCurTheme->GetDragPos(), nInsertPos ); else nRet = mpCurTheme->InsertTransferable( rEvt.maDropEvent.Transferable, nInsertPos ); } return nRet; } // ----------------------------------------------------------------------------- void GalleryBrowser2::StartDrag( Window* pWindow, const Point* pDragPoint ) { if( mpCurTheme ) { const ULONG nItemId = ImplGetSelectedItemId( pDragPoint ); if( nItemId ) mpCurTheme->StartDrag( this, nItemId - 1 ); } } // ----------------------------------------------------------------------------- void GalleryBrowser2::TogglePreview( Window* pWindow, const Point* pPreviewPoint ) { SetMode( ( GALLERYBROWSERMODE_PREVIEW != GetMode() ) ? GALLERYBROWSERMODE_PREVIEW : meLastMode ); } // ----------------------------------------------------------------------------- void GalleryBrowser2::ShowContextMenu( Window* pWindow, const Point* pContextPoint ) { const ULONG nItemId = ImplGetSelectedItemId( pContextPoint ); if( mpCurTheme && nItemId && ( nItemId <= mpCurTheme->GetObjectCount() ) ) { ImplSelectItemId( nItemId ); SfxBindings& rBindings = SfxViewFrame::Current()->GetBindings(); rBindings.ENTERREGISTRATIONS(); GalleryThemePopup aMenu( mpCurTheme, nItemId - 1, GALLERYBROWSERMODE_PREVIEW == GetMode() ); rBindings.LEAVEREGISTRATIONS(); aMenu.SetSelectHdl( LINK( this, GalleryBrowser2, MenuSelectHdl ) ); aMenu.Execute( this, GetPointerPosPixel() ); } } // ----------------------------------------------------------------------------- void GalleryBrowser2::SelectTheme( const String& rThemeName ) { delete mpIconView, mpIconView = NULL; delete mpListView, mpListView = NULL; delete mpPreview, mpPreview = NULL; if( mpCurTheme ) mpGallery->ReleaseTheme( mpCurTheme, *this ); mpCurTheme = mpGallery->AcquireTheme( rThemeName, *this ); mpIconView = new GalleryIconView( this, mpCurTheme ); mpListView = new GalleryListView( this, mpCurTheme ); mpPreview = new GalleryPreview( this, mpCurTheme ); const Link aSelectHdl( LINK( this, GalleryBrowser2, SelectObjectHdl ) ); mpIconView->SetSelectHdl( aSelectHdl ); mpListView->SetSelectHdl( aSelectHdl ); if( GALLERYBROWSERMODE_PREVIEW == GetMode() ) meMode = meLastMode; Resize(); ImplUpdateViews( 1 ); maViewBox.EnableItem( TBX_ID_ICON, TRUE ); maViewBox.EnableItem( TBX_ID_LIST, TRUE ); maViewBox.CheckItem( ( GALLERYBROWSERMODE_ICON == GetMode() ) ? TBX_ID_ICON : TBX_ID_LIST, TRUE ); } // ----------------------------------------------------------------------------- void GalleryBrowser2::SetMode( GalleryBrowserMode eMode ) { if( GetMode() != eMode ) { meLastMode = GetMode(); switch( eMode ) { case( GALLERYBROWSERMODE_ICON ): { mpListView->Hide(); mpPreview->Hide(); mpPreview->SetGraphic( Graphic() ); mpPreview->PreviewSound( INetURLObject() ); mpIconView->Show(); mpIconView->GrabFocus(); maViewBox.EnableItem( TBX_ID_ICON, TRUE ); maViewBox.EnableItem( TBX_ID_LIST, TRUE ); maViewBox.CheckItem( TBX_ID_ICON, TRUE ); maViewBox.CheckItem( TBX_ID_LIST, FALSE ); } break; case( GALLERYBROWSERMODE_LIST ): { mpIconView->Hide(); mpPreview->Hide(); mpPreview->SetGraphic( Graphic() ); mpPreview->PreviewSound( INetURLObject() ); mpListView->Show(); mpListView->GrabFocus(); maViewBox.EnableItem( TBX_ID_ICON, TRUE ); maViewBox.EnableItem( TBX_ID_LIST, TRUE ); maViewBox.CheckItem( TBX_ID_ICON, FALSE ); maViewBox.CheckItem( TBX_ID_LIST, TRUE ); } break; case( GALLERYBROWSERMODE_PREVIEW ): { Graphic aGraphic; const ULONG nItemId = ImplGetSelectedItemId( NULL ); if( nItemId ) { const ULONG nPos = nItemId - 1; mpIconView->Hide(); mpListView->Hide(); if( mpCurTheme ) mpCurTheme->GetGraphic( nPos, aGraphic ); mpPreview->SetGraphic( aGraphic ); mpPreview->Show(); mpPreview->GrabFocus(); if( mpCurTheme && mpCurTheme->GetObjectKind( nPos ) == SGA_OBJ_SOUND ) mpPreview->PreviewSound( mpCurTheme->GetObjectURL( nPos ) ); maViewBox.EnableItem( TBX_ID_ICON, FALSE ); maViewBox.EnableItem( TBX_ID_LIST, FALSE ); } } break; } GalleryBrowser2::meInitMode = meMode = eMode; } } // ----------------------------------------------------------------------------- void GalleryBrowser2::ImplUpdateViews( USHORT nSelectionId ) { mpIconView->Hide(); mpListView->Hide(); mpPreview->Hide(); mpIconView->Clear(); mpListView->Clear(); if( mpCurTheme ) { for( ULONG i = 0, nCount = mpCurTheme->GetObjectCount(); i < nCount; ) { mpListView->RowInserted( i++ ); mpIconView->InsertItem( (USHORT) i ); } ImplSelectItemId( ( ( nSelectionId > mpCurTheme->GetObjectCount() ) ? mpCurTheme->GetObjectCount() : nSelectionId ) ); } switch( GetMode() ) { case( GALLERYBROWSERMODE_ICON ): mpIconView->Show(); break; case( GALLERYBROWSERMODE_LIST ): mpListView->Show(); break; case( GALLERYBROWSERMODE_PREVIEW ): mpPreview->Show(); break; default: break; } ImplUpdateInfoBar(); } // ----------------------------------------------------------------------------- void GalleryBrowser2::ImplUpdateInfoBar() { String aInfoText; if( mpCurTheme ) { const ULONG nItemId = ImplGetSelectedItemId( NULL ); if( nItemId ) { const ULONG nPos = nItemId - 1; aInfoText = mpCurTheme->GetName(); if( nPos < mpCurTheme->GetObjectCount() ) { SgaObject* pObj = mpCurTheme->AcquireObject( nPos ); if( pObj ) { aInfoText = GetItemText( *mpCurTheme, *pObj, GALLERY_ITEM_THEMENAME | GALLERY_ITEM_TITLE | GALLERY_ITEM_PATH ); mpCurTheme->ReleaseObject( pObj ); } } } } maInfoBar.SetText( aInfoText ); } // ----------------------------------------------------------------------------- ULONG GalleryBrowser2::ImplGetSelectedItemId( const Point* pSelPos ) { const GalleryBrowserMode eValidMode = ( ( GALLERYBROWSERMODE_PREVIEW == GetMode() ) ? meLastMode : GetMode() ); ULONG nRet = 0; if( GALLERYBROWSERMODE_ICON == eValidMode ) nRet = pSelPos ? mpIconView->GetItemId( *pSelPos ) : mpIconView->GetSelectItemId(); else nRet = ( pSelPos ? mpListView->GetRowAtYPosPixel( pSelPos->Y() ) : mpListView->FirstSelectedRow() ) + 1; return nRet; } // ----------------------------------------------------------------------------- void GalleryBrowser2::ImplSelectItemId( ULONG nItemId ) { if( nItemId ) { mpIconView->SelectItem( (USHORT) nItemId ); mpListView->SelectRow( nItemId - 1 ); } } // ----------------------------------------------------------------------------- String GalleryBrowser2::GetItemText( const GalleryTheme& rTheme, const SgaObject& rObj, ULONG nItemTextFlags ) { INetURLObject aURL; String aRet; if( rTheme.IsImported() ) { aURL = rTheme.GetParent()->GetImportURL( rTheme.GetName() ); aURL.removeSegment(); aURL.Append( rObj.GetURL().GetName() ); } else aURL = rObj.GetURL(); if( nItemTextFlags & GALLERY_ITEM_THEMENAME ) { aRet += rTheme.GetName(); aRet += String( RTL_CONSTASCII_USTRINGPARAM( " - " ) ); } if( nItemTextFlags & GALLERY_ITEM_TITLE ) { String aTitle( rObj.GetTitle() ); if( !aTitle.Len() ) aTitle = aURL.getBase( INetURLObject::LAST_SEGMENT, true, INetURLObject::DECODE_UNAMBIGUOUS ); if( !aTitle.Len() ) { aTitle = aURL.GetMainURL(); aTitle = aTitle.GetToken( aTitle.GetTokenCount( '/' ) - 1, '/' ); } aRet += aTitle; } if( nItemTextFlags & GALLERY_ITEM_PATH ) { const String aPath( aURL.getFSysPath( INetURLObject::FSYS_DETECT ) ); if( aPath.Len() && ( nItemTextFlags & GALLERY_ITEM_TITLE ) ) aRet += String( RTL_CONSTASCII_USTRINGPARAM( " (" ) ); aRet += aURL.getFSysPath( INetURLObject::FSYS_DETECT ); if( aPath.Len() && ( nItemTextFlags & GALLERY_ITEM_TITLE ) ) aRet += ')'; } return aRet; } // ----------------------------------------------------------------------------- INetURLObject GalleryBrowser2::GetURL() const { INetURLObject aURL; if( mpCurTheme && mnCurActionPos != 0xffffffff ) aURL = mpCurTheme->GetObjectURL( mnCurActionPos ); return aURL; } // ----------------------------------------------------------------------------- String GalleryBrowser2::GetFilterName() const { String aFilterName; if( mpCurTheme && mnCurActionPos != 0xffffffff ) { const SgaObjKind eObjKind = mpCurTheme->GetObjectKind( mnCurActionPos ); if( ( SGA_OBJ_BMP == eObjKind ) || ( SGA_OBJ_ANIM == eObjKind ) ) { GraphicFilter* pFilter = GetGrfFilter(); INetURLObject aURL; mpCurTheme->GetURL( mnCurActionPos, aURL ); sal_uInt16 nFilter = pFilter->GetImportFormatNumberForShortName( aURL.GetExtension() ); if( GRFILTER_FORMAT_DONTKNOW != nFilter ) aFilterName = pFilter->GetImportFormatName( nFilter ); } } return aFilterName; } // ----------------------------------------------------------------------------- Graphic GalleryBrowser2::GetGraphic() const { Graphic aGraphic; if( mpCurTheme && mnCurActionPos != 0xffffffff ) mpCurTheme->GetGraphic( mnCurActionPos, aGraphic ); return aGraphic; } // ----------------------------------------------------------------------------- BOOL GalleryBrowser2::GetVCDrawModel( FmFormModel& rModel ) const { BOOL bRet = FALSE; if( mpCurTheme && mnCurActionPos != 0xffffffff ) bRet = mpCurTheme->GetModel( mnCurActionPos, rModel ); return bRet; } // ----------------------------------------------------------------------------- BOOL GalleryBrowser2::IsLinkage() const { return mbCurActionIsLinkage; } // ----------------------------------------------------------------------------- IMPL_LINK( GalleryBrowser2, MenuSelectHdl, Menu*, pMenu ) { if( pMenu ) { const USHORT nId = pMenu->GetCurItemId(); const ULONG nItemId = ImplGetSelectedItemId( NULL ); if( mpCurTheme && nItemId ) { mnCurActionPos = nItemId - 1; switch( nId ) { case( MN_ADD ): case( MN_ADD_LINK ): { sal_uInt32 nFormat; mbCurActionIsLinkage = ( MN_ADD_LINK == nId ); switch( mpCurTheme->GetObjectKind( mnCurActionPos ) ) { case( SGA_OBJ_BMP ): case( SGA_OBJ_ANIM ): case( SGA_OBJ_INET ): nFormat = SGA_FORMAT_GRAPHIC | SGA_FORMAT_STRING; break; case ( SGA_OBJ_SOUND ) : nFormat = SGA_FORMAT_SOUND | SGA_FORMAT_STRING; break; case( SGA_OBJ_SVDRAW ): nFormat = SGA_FORMAT_GRAPHIC | SGA_FORMAT_SVDRAW | SGA_FORMAT_STRING; break; default : break; } const SfxUInt32Item aItem( SID_GALLERY_FORMATS, nFormat ); SfxViewFrame::Current()->GetBindings().GetDispatcher()->Execute( SID_GALLERY_FORMATS, SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD, &aItem, 0L ); } break; case( MN_PREVIEW ): SetMode( ( GALLERYBROWSERMODE_PREVIEW != GetMode() ) ? GALLERYBROWSERMODE_PREVIEW : meLastMode ); break; case( MN_DELETE ): { if( !mpCurTheme->IsReadOnly() && QueryBox( this, WB_YES_NO, String( GAL_RESID( RID_SVXSTR_GALLERY_DELETEOBJ ) ) ).Execute() == RET_YES ) { mpCurTheme->RemoveObject( mnCurActionPos ); } } break; case( MN_TITLE ): { SgaObject* pObj = mpCurTheme->AcquireObject( mnCurActionPos ); if( pObj ) { const String aOldTitle( GetItemText( *mpCurTheme, *pObj, GALLERY_ITEM_TITLE ) ); TitleDialog aDlg( this, aOldTitle ); if( aDlg.Execute() == RET_OK ) { String aNewTitle( aDlg.GetTitle() ); if( ( !aNewTitle.Len() && pObj->GetTitle().Len() ) || ( aNewTitle != aOldTitle ) ) { if( !aNewTitle.Len() ) aNewTitle = String( RTL_CONSTASCII_USTRINGPARAM( "____" ) ); pObj->SetTitle( aNewTitle ); mpCurTheme->InsertObject( *pObj ); } } mpCurTheme->ReleaseObject( pObj ); } } break; case( MN_COPYCLIPBOARD ): { Window* pWindow; switch( GetMode() ) { case( GALLERYBROWSERMODE_ICON ): pWindow = (Window*) mpIconView; break; case( GALLERYBROWSERMODE_LIST ): pWindow = (Window*) mpListView; break; case( GALLERYBROWSERMODE_PREVIEW ): pWindow = (Window*) mpPreview; break; default: pWindow = NULL; break; } mpCurTheme->CopyToClipboard( pWindow, mnCurActionPos ); } break; case( MN_PASTECLIPBOARD ): { if( !mpCurTheme->IsReadOnly() ) { TransferableDataHelper aDataHelper( TransferableDataHelper::CreateFromSystemClipboard( this ) ); mpCurTheme->InsertTransferable( aDataHelper.GetTransferable(), mnCurActionPos ); } } break; default: break; } } } return 0; } // ----------------------------------------------------------------------------- IMPL_LINK( GalleryBrowser2, SelectObjectHdl, void*, p ) { ImplUpdateInfoBar(); return 0L; } // ----------------------------------------------------------------------------- IMPL_LINK( GalleryBrowser2, SelectTbxHdl, ToolBox*, pBox ) { if( pBox->GetCurItemId() == TBX_ID_ICON ) SetMode( GALLERYBROWSERMODE_ICON ); else if( pBox->GetCurItemId() == TBX_ID_LIST ) SetMode( GALLERYBROWSERMODE_LIST ); return 0L; }