blob: b9fc17b9c671054f51f0315768e67e43bce707f1 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_svx.hxx"
#include <sot/formats.hxx>
#include <vcl/msgbox.hxx>
#include <svtools/valueset.hxx>
#include <svl/urlbmk.hxx>
#include <svl/stritem.hxx>
#include <svl/intitem.hxx>
#include <svl/eitem.hxx>
#include <svtools/transfer.hxx>
#include <sfx2/bindings.hxx>
#include <sfx2/dispatch.hxx>
#include <sfx2/viewfrm.hxx>
#include <sfx2/sfxsids.hrc>
#include "svtools/filter.hxx"
#include <editeng/brshitem.hxx>
#include "helpid.hrc"
#include "svx/gallery.hxx"
#include "galobj.hxx"
#include "svx/gallery1.hxx"
#include "svx/galtheme.hxx"
#include "svx/galctrl.hxx"
#include "svx/galmisc.hxx"
#include "galbrws2.hxx"
#include "gallery.hrc"
#include <vcl/svapp.hxx>
#include <svx/fmmodel.hxx>
#include <svx/dialmgr.hxx>
#include <svx/svxdlg.hxx>
#include <svx/dialogs.hrc>
#include "GalleryControl.hxx"
#include <svx/svxcommands.h>
#include <svx/galleryitem.hxx>
#include <comphelper/processfactory.hxx>
#include <com/sun/star/frame/FrameSearchFlag.hpp>
#include <com/sun/star/gallery/GalleryItemType.hpp>
#include <com/sun/star/graphic/XGraphic.hpp>
#include <com/sun/star/style/GraphicLocation.hpp>
#include <map>
// -----------
// - Defines -
// -----------
#undef GALLERY_USE_CLIPBOARD
#define TBX_ID_ICON 1
#define TBX_ID_LIST 2
#define C2U( cstr ) (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(cstr)))
namespace css = ::com::sun::star;
using rtl::OUString;
// -----------
// - statics -
// -----------
GalleryBrowserMode GalleryBrowser2::meInitMode = GALLERYBROWSERMODE_ICON;
struct DispatchInfo
{
css::util::URL TargetURL;
css::uno::Sequence< css::beans::PropertyValue > Arguments;
css::uno::Reference< css::frame::XDispatch > Dispatch;
};
IMPL_STATIC_LINK_NOINSTANCE( GalleryBrowser2, AsyncDispatch_Impl, DispatchInfo*, pDispatchInfo )
{
if ( pDispatchInfo && pDispatchInfo->Dispatch.is() )
{
try
{
pDispatchInfo->Dispatch->dispatch( pDispatchInfo->TargetURL,
pDispatchInfo->Arguments );
}
catch ( const css::uno::Exception& )
{
}
}
delete pDispatchInfo;
return 0;
}
namespace
{
struct CommandInfo
{
css::util::URL URL;
css::uno::Reference< css::frame::XDispatch > Dispatch;
CommandInfo( const OUString &rURL )
{
URL.Complete = rURL;
}
};
class GalleryThemePopup : public ::cppu::WeakImplHelper1< css::frame::XStatusListener >
{
private:
const GalleryTheme* mpTheme;
sal_uIntPtr mnObjectPos;
sal_Bool mbPreview;
PopupMenu maPopupMenu;
PopupMenu maBackgroundPopup;
GalleryBrowser2* mpBrowser;
typedef std::map< int, CommandInfo > CommandInfoMap;
CommandInfoMap m_aCommandInfo;
void Execute( const CommandInfo &rCmdInfo,
const css::uno::Sequence< css::beans::PropertyValue > &rArguments );
DECL_LINK( MenuSelectHdl, Menu* pMenu );
DECL_LINK( BackgroundMenuSelectHdl, Menu* pMenu );
public:
GalleryThemePopup( const GalleryTheme* pTheme,
sal_uIntPtr nObjectPos,
sal_Bool bPreview,
GalleryBrowser2* pBrowser );
~GalleryThemePopup();
void ExecutePopup( Window *pParent, const ::Point &aPos );
virtual void SAL_CALL statusChanged( const css::frame::FeatureStateEvent &rEvent) throw ( css::uno::RuntimeException );
virtual void SAL_CALL disposing( const css::lang::EventObject &rSource) throw ( css::uno::RuntimeException );
};
DBG_NAME(GalleryThemePopup)
GalleryThemePopup::GalleryThemePopup(
const GalleryTheme* pTheme,
sal_uIntPtr nObjectPos,
sal_Bool bPreview,
GalleryBrowser2* pBrowser )
: mpTheme( pTheme )
, mnObjectPos( nObjectPos )
, mbPreview( bPreview )
, maPopupMenu( GAL_RESID( RID_SVXMN_GALLERY2 ) )
, maBackgroundPopup()
, mpBrowser( pBrowser )
{
DBG_CTOR(GalleryThemePopup,NULL);
// SID_GALLERY_ENABLE_ADDCOPY
m_aCommandInfo.insert(
CommandInfoMap::value_type(
SID_GALLERY_ENABLE_ADDCOPY,
CommandInfo( C2U(CMD_SID_GALLERY_ENABLE_ADDCOPY ))));
// SID_GALLERY_BG_BRUSH
m_aCommandInfo.insert(
CommandInfoMap::value_type(
SID_GALLERY_BG_BRUSH,
CommandInfo(C2U(CMD_SID_GALLERY_BG_BRUSH ))));
// SID_GALLERY_FORMATS
m_aCommandInfo.insert(
CommandInfoMap::value_type(
SID_GALLERY_FORMATS,
CommandInfo(C2U(CMD_SID_GALLERY_FORMATS ))));
}
GalleryThemePopup::~GalleryThemePopup()
{
DBG_DTOR(GalleryThemePopup,NULL);
}
void SAL_CALL GalleryThemePopup::statusChanged(
const css::frame::FeatureStateEvent &rEvent )
throw ( css::uno::RuntimeException )
{
const OUString &rURL = rEvent.FeatureURL.Complete;
if ( rURL.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( CMD_SID_GALLERY_ENABLE_ADDCOPY ) ) )
{
if ( !rEvent.IsEnabled )
{
PopupMenu *pAddMenu = maPopupMenu.GetPopupMenu( MN_ADDMENU );
pAddMenu->EnableItem( MN_ADD, sal_False );
pAddMenu->EnableItem( MN_ADD_LINK, sal_False );
}
}
else if ( rURL.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( CMD_SID_GALLERY_BG_BRUSH ) ) )
{
maBackgroundPopup.Clear();
if ( rEvent.IsEnabled )
{
OUString sItem;
css::uno::Sequence< OUString > sItems;
if ( ( rEvent.State >>= sItem ) && sItem.getLength() )
{
maBackgroundPopup.InsertItem( 1, sItem );
}
else if ( ( rEvent.State >>= sItems ) && sItems.getLength() )
{
const OUString *pStr = sItems.getConstArray();
const OUString *pEnd = pStr + sItems.getLength();
for ( sal_uInt16 nId = 1; pStr != pEnd; pStr++, nId++ )
{
maBackgroundPopup.InsertItem( nId, *pStr );
}
}
}
}
}
void SAL_CALL GalleryThemePopup::disposing(
const css::lang::EventObject &/*rSource*/)
throw ( css::uno::RuntimeException )
{
}
void GalleryThemePopup::Execute(
const CommandInfo &rCmdInfo,
const css::uno::Sequence< css::beans::PropertyValue > &rArguments )
{
if ( rCmdInfo.Dispatch.is() )
{
DispatchInfo *pInfo = new DispatchInfo;
pInfo->TargetURL = rCmdInfo.URL;
pInfo->Arguments = rArguments;
pInfo->Dispatch = rCmdInfo.Dispatch;
if ( !Application::PostUserEvent(
STATIC_LINK( 0, GalleryBrowser2, AsyncDispatch_Impl), pInfo ) )
delete pInfo;
}
}
void GalleryThemePopup::ExecutePopup( Window *pWindow, const ::Point &aPos )
{
css::uno::Reference< css::frame::XStatusListener > xThis( this );
const SgaObjKind eObjKind = mpTheme->GetObjectKind( mnObjectPos );
PopupMenu* pAddMenu = maPopupMenu.GetPopupMenu( MN_ADDMENU );
INetURLObject aURL;
const_cast< GalleryTheme* >( mpTheme )->GetURL( mnObjectPos, aURL );
const sal_Bool bValidURL = ( aURL.GetProtocol() != INET_PROT_NOT_VALID );
pAddMenu->EnableItem( MN_ADD, bValidURL && SGA_OBJ_SOUND != eObjKind );
pAddMenu->EnableItem( MN_ADD_LINK, bValidURL && SGA_OBJ_SVDRAW != eObjKind );
maPopupMenu.EnableItem( MN_ADDMENU, pAddMenu->IsItemEnabled( MN_ADD ) || pAddMenu->IsItemEnabled( MN_ADD_LINK ) );
maPopupMenu.EnableItem( MN_PREVIEW, bValidURL );
maPopupMenu.CheckItem( MN_PREVIEW, mbPreview );
if( mpTheme->IsReadOnly() || !mpTheme->GetObjectCount() )
{
maPopupMenu.EnableItem( MN_DELETE, sal_False );
maPopupMenu.EnableItem( MN_TITLE, sal_False );
if( mpTheme->IsReadOnly() )
maPopupMenu.EnableItem( MN_PASTECLIPBOARD, sal_False );
if( !mpTheme->GetObjectCount() )
maPopupMenu.EnableItem( MN_COPYCLIPBOARD, sal_False );
}
else
{
maPopupMenu.EnableItem( MN_DELETE, !mbPreview );
maPopupMenu.EnableItem( MN_TITLE, sal_True );
maPopupMenu.EnableItem( MN_COPYCLIPBOARD, sal_True );
maPopupMenu.EnableItem( MN_PASTECLIPBOARD, sal_True );
}
#ifdef GALLERY_USE_CLIPBOARD
if( maPopupMenu.IsItemEnabled( MN_PASTECLIPBOARD ) )
{
TransferableDataHelper aDataHelper( TransferableDataHelper::CreateFromSystemClipboard( this ) );
sal_Bool bEnable = sal_False;
if( aDataHelper.GetFormatCount() )
{
if( aDataHelper.HasFormat( SOT_FORMATSTR_ID_DRAWING ) ||
aDataHelper.HasFormat( SOT_FORMAT_FILE_LIST ) ||
aDataHelper.HasFormat( FORMAT_FILE ) ||
aDataHelper.HasFormat( SOT_FORMATSTR_ID_SVXB ) ||
aDataHelper.HasFormat( FORMAT_GDIMETAFILE ) ||
aDataHelper.HasFormat( FORMAT_BITMAP ) )
{
bEnable = sal_True;
}
}
if( !bEnable )
maPopupMenu.EnableItem( MN_PASTECLIPBOARD, sal_False );
}
#else
maPopupMenu.EnableItem( MN_COPYCLIPBOARD, sal_False );
maPopupMenu.EnableItem( MN_PASTECLIPBOARD, sal_False );
#endif
// update status
css::uno::Reference< css::frame::XDispatchProvider> xDispatchProvider(
mpBrowser->GetFrame(), css::uno::UNO_QUERY );
css::uno::Reference< css::util::XURLTransformer > xTransformer(
mpBrowser->GetURLTransformer() );
for ( CommandInfoMap::iterator it = m_aCommandInfo.begin();
it != m_aCommandInfo.end(); it++ )
{
try
{
CommandInfo &rCmdInfo = it->second;
if ( xTransformer.is() )
xTransformer->parseStrict( rCmdInfo.URL );
if ( xDispatchProvider.is() )
{
rCmdInfo.Dispatch = xDispatchProvider->queryDispatch(
rCmdInfo.URL,
C2U( "_self" ),
css::frame::FrameSearchFlag::SELF );
}
if ( rCmdInfo.Dispatch.is() )
{
rCmdInfo.Dispatch->addStatusListener( this, rCmdInfo.URL );
rCmdInfo.Dispatch->removeStatusListener( this, rCmdInfo.URL );
}
}
catch ( ... )
{}
}
if( !maBackgroundPopup.GetItemCount() || ( eObjKind == SGA_OBJ_SVDRAW ) || ( eObjKind == SGA_OBJ_SOUND ) )
pAddMenu->EnableItem( MN_BACKGROUND, sal_False );
else
{
pAddMenu->EnableItem( MN_BACKGROUND, sal_True );
pAddMenu->SetPopupMenu( MN_BACKGROUND, &maBackgroundPopup );
maBackgroundPopup.SetSelectHdl( LINK( this, GalleryThemePopup, BackgroundMenuSelectHdl ) );
}
pAddMenu->RemoveDisabledEntries();
if ( !pAddMenu->GetItemCount() )
maPopupMenu.EnableItem( MN_ADDMENU, sal_False );
maPopupMenu.RemoveDisabledEntries();
maPopupMenu.SetSelectHdl( LINK( this, GalleryThemePopup, MenuSelectHdl ) );
maPopupMenu.Execute( pWindow, aPos );
}
IMPL_LINK( GalleryThemePopup, MenuSelectHdl, Menu*, pMenu )
{
if( !pMenu )
return 0;
sal_uInt16 nId( pMenu->GetCurItemId() );
switch ( nId )
{
case( MN_ADD ):
case( MN_ADD_LINK ):
{
const CommandInfoMap::const_iterator it = m_aCommandInfo.find( SID_GALLERY_FORMATS );
if ( it != m_aCommandInfo.end() )
mpBrowser->Dispatch( nId,
it->second.Dispatch,
it->second.URL );
}
break;
default:
mpBrowser->Execute( nId );
}
return 0;
}
IMPL_LINK( GalleryThemePopup, BackgroundMenuSelectHdl, Menu*, pMenu )
{
if( !pMenu )
return 0;
sal_uInt16 nPos( pMenu->GetCurItemId() - 1 );
OUString aURL( mpBrowser->GetURL().GetMainURL( INetURLObject::NO_DECODE ) );
OUString aFilterName( mpBrowser->GetFilterName() );
css::uno::Sequence< css::beans::PropertyValue > aArgs( 6 );
aArgs[0].Name = C2U( "Background.Transparent" );
aArgs[0].Value <<= sal_Int32( 0 ); // 0 - 100
aArgs[1].Name = C2U( "Background.BackColor" );
aArgs[1].Value <<= sal_Int32( - 1 );
aArgs[2].Name = C2U( "Background.URL" );
aArgs[2].Value <<= aURL;
aArgs[3].Name = C2U( "Background.Filtername" ); // FIXME should be FilterName
aArgs[3].Value <<= aFilterName;
aArgs[4].Name = C2U( "Background.Position" );
aArgs[4].Value <<= css::style::GraphicLocation_TILED;
aArgs[5].Name = C2U( "Position" );
aArgs[5].Value <<= nPos;
const CommandInfoMap::const_iterator it = m_aCommandInfo.find( SID_GALLERY_BG_BRUSH );
if ( it != m_aCommandInfo.end() )
Execute( it->second, aArgs );
return 0;
}
} // end anonymous namespace
// ------------------
// - GalleryToolBox -
// ------------------
DBG_NAME(GalleryToolBox)
GalleryToolBox::GalleryToolBox( GalleryBrowser2* pParent ) :
ToolBox( pParent, WB_TABSTOP )
{
DBG_CTOR(GalleryToolBox,NULL);
}
// ------------------------------------------------------------------------
GalleryToolBox::~GalleryToolBox()
{
DBG_DTOR(GalleryToolBox,NULL);
}
// ------------------------------------------------------------------------
void GalleryToolBox::KeyInput( const KeyEvent& rKEvt )
{
if( !static_cast< GalleryBrowser2* >( GetParent() )->KeyInput( rKEvt, this ) )
ToolBox::KeyInput( rKEvt );
}
// -------------------
// - GalleryBrowser2 -
// -------------------
DBG_NAME(GalleryBrowser2)
GalleryBrowser2::GalleryBrowser2( Window* 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 )
{
DBG_CTOR(GalleryBrowser2,NULL);
m_xContext.set( ::comphelper::getProcessComponentContext() );
m_xTransformer.set(
m_xContext->getServiceManager()->createInstanceWithContext(
C2U( "com.sun.star.util.URLTransformer" ), m_xContext ),
css::uno::UNO_QUERY );
Image aDummyImage;
const Link aSelectHdl( LINK( this, GalleryBrowser2, SelectObjectHdl ) );
Font aInfoFont( maInfoBar.GetControlFont() );
maMiscOptions.AddListenerLink( LINK( this, GalleryBrowser2, MiscHdl ) );
maViewBox.InsertItem( TBX_ID_ICON, aDummyImage );
maViewBox.SetItemBits( TBX_ID_ICON, TIB_RADIOCHECK | TIB_AUTOCHECK );
maViewBox.SetHelpId( TBX_ID_ICON, HID_GALLERY_ICONVIEW );
maViewBox.SetQuickHelpText( TBX_ID_ICON, String( GAL_RESID( RID_SVXSTR_GALLERY_ICONVIEW ) ) );
maViewBox.InsertItem( TBX_ID_LIST, aDummyImage );
maViewBox.SetItemBits( TBX_ID_LIST, TIB_RADIOCHECK | TIB_AUTOCHECK );
maViewBox.SetHelpId( TBX_ID_LIST, HID_GALLERY_LISTVIEW );
maViewBox.SetQuickHelpText( TBX_ID_LIST, String( GAL_RESID( RID_SVXSTR_GALLERY_LISTVIEW ) ) );
maViewBox.SetBorder( 0, 1 );
MiscHdl( NULL );
maViewBox.SetSelectHdl( LINK( this, GalleryBrowser2, SelectTbxHdl ) );
maViewBox.Show();
mpIconView->SetAccessibleName(String( SVX_RES( RID_SVXSTR_GALLERY_THEMEITEMS ) ));
mpListView->SetAccessibleName(String( SVX_RES( RID_SVXSTR_GALLERY_THEMEITEMS ) ));
maInfoBar.Show();
maSeparator.Show();
mpIconView->SetSelectHdl( aSelectHdl );
mpListView->SetSelectHdl( aSelectHdl );
InitSettings();
SetMode( ( GALLERYBROWSERMODE_PREVIEW != GalleryBrowser2::meInitMode ) ? GalleryBrowser2::meInitMode : GALLERYBROWSERMODE_ICON );
if(maInfoBar.GetText().Len() == 0)
mpIconView->SetAccessibleRelationLabeledBy(mpIconView);
else
mpIconView->SetAccessibleRelationLabeledBy(&maInfoBar);
mpIconView->SetAccessibleRelationMemberOf(mpIconView);
}
// -----------------------------------------------------------------------------
GalleryBrowser2::~GalleryBrowser2()
{
maMiscOptions.RemoveListenerLink( LINK( this, GalleryBrowser2, MiscHdl ) );
delete mpPreview;
delete mpListView;
delete mpIconView;
if( mpCurTheme )
mpGallery->ReleaseTheme( mpCurTheme, *this );
DBG_DTOR(GalleryBrowser2,NULL);
}
// -----------------------------------------------------------------------------
void GalleryBrowser2::InitSettings()
{
Font aInfoFont( maInfoBar.GetControlFont() );
aInfoFont.SetWeight( WEIGHT_BOLD );
aInfoFont.SetColor( GALLERY_FG_COLOR );
maInfoBar.SetControlFont( aInfoFont );
maInfoBar.SetBackground( Wallpaper( GALLERY_DLG_COLOR ) );
maInfoBar.SetControlBackground( GALLERY_DLG_COLOR );
maSeparator.SetBackground( Wallpaper( GALLERY_BG_COLOR ) );
maSeparator.SetControlBackground( GALLERY_BG_COLOR );
maSeparator.SetControlForeground( GALLERY_FG_COLOR );
}
// -----------------------------------------------------------------------------
void GalleryBrowser2::DataChanged( const DataChangedEvent& rDCEvt )
{
if ( ( rDCEvt.GetType() == DATACHANGED_SETTINGS ) && ( rDCEvt.GetFlags() & SETTINGS_STYLE ) )
InitSettings();
else
Control::DataChanged( rDCEvt );
}
// -----------------------------------------------------------------------------
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&, const SfxHint& rHint )
{
const GalleryHint& rGalleryHint = (const GalleryHint&) rHint;
switch( rGalleryHint.GetType() )
{
case( GALLERY_HINT_THEME_UPDATEVIEW ):
{
if( GALLERYBROWSERMODE_PREVIEW == GetMode() )
SetMode( meLastMode );
ImplUpdateViews( (sal_uInt16) rGalleryHint.GetData1() + 1 );
}
break;
default:
break;
}
}
// -----------------------------------------------------------------------------
sal_Int8 GalleryBrowser2::AcceptDrop( DropTargetHelper& rTarget, const AcceptDropEvent& )
{
sal_Int8 nRet = DND_ACTION_NONE;
if( mpCurTheme && !mpCurTheme->IsReadOnly() && !mpCurTheme ->IsImported() )
{
if( !mpCurTheme->IsDragging() )
{
if( rTarget.IsDropFormatSupported( SOT_FORMATSTR_ID_DRAWING ) ||
rTarget.IsDropFormatSupported( SOT_FORMAT_FILE_LIST ) ||
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_COPY;
}
return nRet;
}
// -----------------------------------------------------------------------------
sal_Int8 GalleryBrowser2::ExecuteDrop( DropTargetHelper&, const ExecuteDropEvent& rEvt )
{
sal_Int8 nRet = DND_ACTION_NONE;
if( mpCurTheme )
{
Point aSelPos;
const sal_uIntPtr nItemId = ImplGetSelectedItemId( &rEvt.maPosPixel, aSelPos );
const sal_uIntPtr 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*, const Point* pDragPoint )
{
if( mpCurTheme )
{
Point aSelPos;
const sal_uIntPtr nItemId = ImplGetSelectedItemId( pDragPoint, aSelPos );
if( nItemId )
mpCurTheme->StartDrag( this, nItemId - 1 );
}
}
// -----------------------------------------------------------------------------
void GalleryBrowser2::TogglePreview( Window*, const Point* )
{
SetMode( ( GALLERYBROWSERMODE_PREVIEW != GetMode() ) ? GALLERYBROWSERMODE_PREVIEW : meLastMode );
GetViewWindow()->GrabFocus();
}
// -----------------------------------------------------------------------------
void GalleryBrowser2::ShowContextMenu( Window*, const Point* pContextPoint )
{
Point aSelPos;
const sal_uIntPtr nItemId = ImplGetSelectedItemId( pContextPoint, aSelPos );
if( mpCurTheme && nItemId && ( nItemId <= mpCurTheme->GetObjectCount() ) )
{
ImplSelectItemId( nItemId );
css::uno::Reference< css::frame::XFrame > xFrame( GetFrame() );
if ( xFrame.is() )
{
mnCurActionPos = nItemId - 1;
rtl::Reference< GalleryThemePopup > rPopup(
new GalleryThemePopup(
mpCurTheme,
mnCurActionPos,
GALLERYBROWSERMODE_PREVIEW == GetMode(),
this ) );
rPopup->ExecutePopup( this, aSelPos );
}
}
}
// -----------------------------------------------------------------------------
sal_Bool GalleryBrowser2::KeyInput( const KeyEvent& rKEvt, Window* pWindow )
{
Point aSelPos;
const sal_uIntPtr nItemId = ImplGetSelectedItemId( NULL, aSelPos );
GalleryBrowser* pParentBrowser = dynamic_cast<GalleryBrowser*>(GetParent());
sal_Bool bRet = sal_False;
if (pParentBrowser != NULL)
bRet = pParentBrowser->KeyInput( rKEvt, pWindow );
else
{
svx::sidebar::GalleryControl* pParentControl = dynamic_cast<svx::sidebar::GalleryControl*>(GetParent());
if (pParentControl != NULL)
bRet = pParentControl->KeyInput(rKEvt, pWindow);
}
if( !bRet && !maViewBox.HasFocus() && nItemId && mpCurTheme )
{
sal_uInt16 nExecuteId = 0;
const SgaObjKind eObjKind = mpCurTheme->GetObjectKind( nItemId - 1 );
INetURLObject aURL;
const_cast< GalleryTheme* >( mpCurTheme )->GetURL( nItemId - 1, aURL );
const sal_Bool bValidURL = ( aURL.GetProtocol() != INET_PROT_NOT_VALID );
sal_Bool bPreview = bValidURL;
sal_Bool bAdd = bValidURL;
sal_Bool bAddLink = ( bValidURL && SGA_OBJ_SVDRAW != eObjKind );
sal_Bool bDelete = sal_False;
sal_Bool bTitle = sal_False;
if( !mpCurTheme->IsReadOnly() && mpCurTheme->GetObjectCount() )
{
bDelete = ( GALLERYBROWSERMODE_PREVIEW != GetMode() );
bTitle = sal_True;
}
switch( rKEvt.GetKeyCode().GetCode() )
{
case( KEY_SPACE ):
case( KEY_RETURN ):
case( KEY_P ):
{
if( bPreview )
{
TogglePreview( pWindow );
bRet = sal_True;
}
}
break;
case( KEY_INSERT ):
case( KEY_I ):
{
// Inserting a gallery item in the document must be dispatched
if( bAddLink && rKEvt.GetKeyCode().IsShift() && rKEvt.GetKeyCode().IsMod1() )
nExecuteId = MN_ADD_LINK;
else if( bAdd )
nExecuteId = MN_ADD;
if( nExecuteId )
{
Dispatch( nExecuteId );
return sal_True;
}
}
break;
case( KEY_DELETE ):
case( KEY_D ):
{
if( bDelete )
nExecuteId = MN_DELETE;
}
break;
case( KEY_T ):
{
if( bTitle )
nExecuteId = MN_TITLE;
}
break;
default:
break;
}
if( nExecuteId )
{
Execute( nExecuteId );
bRet = sal_True;
}
}
return bRet;
}
// -----------------------------------------------------------------------------
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 );
mpIconView->SetAccessibleName(String( SVX_RES( RID_SVXSTR_GALLERY_THEMEITEMS ) ));
mpListView->SetAccessibleName(String( SVX_RES( RID_SVXSTR_GALLERY_THEMEITEMS ) ));
mpPreview->SetAccessibleName(String( SVX_RES( RID_SVXSTR_GALLERY_PREVIEW ) ));
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, sal_True );
maViewBox.EnableItem( TBX_ID_LIST, sal_True );
maViewBox.CheckItem( ( GALLERYBROWSERMODE_ICON == GetMode() ) ? TBX_ID_ICON : TBX_ID_LIST, sal_True );
if(maInfoBar.GetText().Len() == 0)
mpIconView->SetAccessibleRelationLabeledBy(mpIconView);
else
mpIconView->SetAccessibleRelationLabeledBy(&maInfoBar);
mpIconView->SetAccessibleRelationMemberOf(mpIconView);
}
// -----------------------------------------------------------------------------
void GalleryBrowser2::SetMode( GalleryBrowserMode eMode )
{
if( GetMode() != eMode )
{
meLastMode = GetMode();
switch( eMode )
{
case( GALLERYBROWSERMODE_ICON ):
{
mpListView->Hide();
mpPreview->Hide();
mpPreview->SetGraphic( Graphic() );
mpPreview->PreviewMedia( INetURLObject() );
mpIconView->Show();
maViewBox.EnableItem( TBX_ID_ICON, sal_True );
maViewBox.EnableItem( TBX_ID_LIST, sal_True );
maViewBox.CheckItem( TBX_ID_ICON, sal_True );
maViewBox.CheckItem( TBX_ID_LIST, sal_False );
}
break;
case( GALLERYBROWSERMODE_LIST ):
{
mpIconView->Hide();
mpPreview->Hide();
mpPreview->SetGraphic( Graphic() );
mpPreview->PreviewMedia( INetURLObject() );
mpListView->Show();
maViewBox.EnableItem( TBX_ID_ICON, sal_True );
maViewBox.EnableItem( TBX_ID_LIST, sal_True );
maViewBox.CheckItem( TBX_ID_ICON, sal_False );
maViewBox.CheckItem( TBX_ID_LIST, sal_True );
}
break;
case( GALLERYBROWSERMODE_PREVIEW ):
{
Graphic aGraphic;
Point aSelPos;
const sal_uIntPtr nItemId = ImplGetSelectedItemId( NULL, aSelPos );
if( nItemId )
{
const sal_uIntPtr nPos = nItemId - 1;
mpIconView->Hide();
mpListView->Hide();
if( mpCurTheme )
mpCurTheme->GetGraphic( nPos, aGraphic );
mpPreview->SetGraphic( aGraphic );
mpPreview->Show();
if( mpCurTheme && mpCurTheme->GetObjectKind( nPos ) == SGA_OBJ_SOUND )
mpPreview->PreviewMedia( mpCurTheme->GetObjectURL( nPos ) );
maViewBox.EnableItem( TBX_ID_ICON, sal_False );
maViewBox.EnableItem( TBX_ID_LIST, sal_False );
}
}
break;
default:
break;
}
GalleryBrowser2::meInitMode = meMode = eMode;
}
}
// -----------------------------------------------------------------------------
Window* GalleryBrowser2::GetViewWindow() const
{
Window* pRet;
switch( GetMode() )
{
case( GALLERYBROWSERMODE_LIST ): pRet = mpListView; break;
case( GALLERYBROWSERMODE_PREVIEW ): pRet = mpPreview; break;
default:
pRet = mpIconView;
break;
}
return pRet;
}
// -----------------------------------------------------------------------------
void GalleryBrowser2::Travel( GalleryBrowserTravel eTravel )
{
if( mpCurTheme )
{
Point aSelPos;
const sal_uIntPtr nItemId = ImplGetSelectedItemId( NULL, aSelPos );
if( nItemId )
{
sal_uIntPtr nNewItemId = nItemId;
switch( eTravel )
{
case( GALLERYBROWSERTRAVEL_FIRST ): nNewItemId = 1; break;
case( GALLERYBROWSERTRAVEL_LAST ): nNewItemId = mpCurTheme->GetObjectCount(); break;
case( GALLERYBROWSERTRAVEL_PREVIOUS ): nNewItemId--; break;
case( GALLERYBROWSERTRAVEL_NEXT ): nNewItemId++; break;
default:
break;
}
if( nNewItemId < 1 )
nNewItemId = 1;
else if( nNewItemId > mpCurTheme->GetObjectCount() )
nNewItemId = mpCurTheme->GetObjectCount();
if( nNewItemId != nItemId )
{
ImplSelectItemId( nNewItemId );
ImplUpdateInfoBar();
if( GALLERYBROWSERMODE_PREVIEW == GetMode() )
{
Graphic aGraphic;
const sal_uIntPtr nPos = nNewItemId - 1;
mpCurTheme->GetGraphic( nPos, aGraphic );
mpPreview->SetGraphic( aGraphic );
if( SGA_OBJ_SOUND == mpCurTheme->GetObjectKind( nPos ) )
mpPreview->PreviewMedia( mpCurTheme->GetObjectURL( nPos ) );
mpPreview->Invalidate();
}
}
}
}
}
// -----------------------------------------------------------------------------
void GalleryBrowser2::ImplUpdateViews( sal_uInt16 nSelectionId )
{
mpIconView->Hide();
mpListView->Hide();
mpPreview->Hide();
mpIconView->Clear();
mpListView->Clear();
if( mpCurTheme )
{
for( sal_uIntPtr i = 0, nCount = mpCurTheme->GetObjectCount(); i < nCount; )
{
mpListView->RowInserted( i++ );
mpIconView->InsertItem( (sal_uInt16) 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 )
{
Point aSelPos;
const sal_uIntPtr nItemId = ImplGetSelectedItemId( NULL, aSelPos );
if( nItemId )
{
const sal_uIntPtr 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 );
}
// -----------------------------------------------------------------------------
sal_uIntPtr GalleryBrowser2::ImplGetSelectedItemId( const Point* pSelPos, Point& rSelPos )
{
const Size aOutputSizePixel( GetOutputSizePixel() );
sal_uIntPtr nRet = 0;
if( GALLERYBROWSERMODE_PREVIEW == GetMode() )
{
nRet = ( ( GALLERYBROWSERMODE_ICON == meLastMode ) ? mpIconView->GetSelectItemId() : ( mpListView->FirstSelectedRow() + 1 ) );
if( pSelPos )
rSelPos = GetPointerPosPixel();
else
rSelPos = Point( aOutputSizePixel.Width() >> 1, aOutputSizePixel.Height() >> 1 );
}
else if( GALLERYBROWSERMODE_ICON == GetMode() )
{
if( pSelPos )
{
nRet = mpIconView->GetItemId( *pSelPos );
rSelPos = GetPointerPosPixel();
}
else
{
nRet = mpIconView->GetSelectItemId();
rSelPos = mpIconView->GetItemRect( (sal_uInt16) nRet ).Center();
}
}
else
{
if( pSelPos )
{
nRet = mpListView->GetRowAtYPosPixel( pSelPos->Y() ) + 1;
rSelPos = GetPointerPosPixel();
}
else
{
nRet = mpListView->FirstSelectedRow() + 1;
rSelPos = mpListView->GetFieldRectPixel( (sal_uInt16) nRet, 1 ).Center();
}
}
rSelPos.X() = Max( Min( rSelPos.X(), aOutputSizePixel.Width() - 1L ), 0L );
rSelPos.Y() = Max( Min( rSelPos.Y(), aOutputSizePixel.Height() - 1L ), 0L );
if( nRet && ( !mpCurTheme || ( nRet > mpCurTheme->GetObjectCount() ) ) )
{
nRet = 0;
}
return nRet;
}
// -----------------------------------------------------------------------------
void GalleryBrowser2::ImplSelectItemId( sal_uIntPtr nItemId )
{
if( nItemId )
{
mpIconView->SelectItem( (sal_uInt16) nItemId );
mpListView->SelectRow( nItemId - 1 );
}
}
// -----------------------------------------------------------------------------
css::uno::Reference< css::frame::XFrame >
GalleryBrowser2::GetFrame() const
{
css::uno::Reference< css::frame::XFrame > xFrame;
SfxViewFrame* pCurrentViewFrame = SfxViewFrame::Current();
if ( pCurrentViewFrame )
{
SfxBindings& rBindings = pCurrentViewFrame->GetBindings();
xFrame.set( rBindings.GetActiveFrame() );
}
return xFrame;
}
void GalleryBrowser2::Dispatch(
sal_uInt16 nId,
const css::uno::Reference< css::frame::XDispatch > &rxDispatch,
const css::util::URL &rURL )
{
Point aSelPos;
const sal_uIntPtr nItemId = ImplGetSelectedItemId( NULL, aSelPos );
if( !mpCurTheme || !nItemId )
return;
mnCurActionPos = nItemId - 1;
switch( nId )
{
case( MN_ADD ):
case( MN_ADD_LINK ):
{
css::uno::Reference< css::frame::XDispatch > xDispatch( rxDispatch );
css::util::URL aURL = rURL;
if ( !xDispatch.is() )
{
css::uno::Reference< css::frame::XDispatchProvider > xDispatchProvider(
GetFrame(), css::uno::UNO_QUERY );
if ( !xDispatchProvider.is() || !m_xTransformer.is() )
return;
aURL.Complete = C2U( CMD_SID_GALLERY_FORMATS );
m_xTransformer->parseStrict( aURL );
xDispatch = xDispatchProvider->queryDispatch(
aURL,
C2U( "_self" ),
css::frame::FrameSearchFlag::SELF );
}
if ( !xDispatch.is() )
return;
sal_Int8 nType = 0;
sal_Bool bIsLink( MN_ADD_LINK == nId );
OUString aFileURL, aFilterName;
css::uno::Reference< css::lang::XComponent > xDrawing;
css::uno::Reference< css::graphic::XGraphic > xGraphic;
aFilterName = GetFilterName();
switch( mpCurTheme->GetObjectKind( mnCurActionPos ) )
{
case( SGA_OBJ_BMP ):
case( SGA_OBJ_ANIM ):
case( SGA_OBJ_INET ):
// TODO drawing objects are inserted as drawings only via drag&drop
case( SGA_OBJ_SVDRAW ):
nType = css::gallery::GalleryItemType::GRAPHIC;
break;
case ( SGA_OBJ_SOUND ) :
nType = css::gallery::GalleryItemType::MEDIA;
break;
default:
nType = css::gallery::GalleryItemType::EMPTY;
break;
}
if ( bIsLink )
{
aFileURL = mpCurTheme->GetObjectURL( mnCurActionPos ).GetMainURL( INetURLObject::NO_DECODE );
OSL_ENSURE( aFileURL.getLength(), "gallery item is link but no URL!" );
}
Graphic aGraphic;
sal_Bool bGraphic = mpCurTheme->GetGraphic( mnCurActionPos, aGraphic );
if ( bGraphic && !!aGraphic )
xGraphic.set( aGraphic.GetXGraphic() );
OSL_ENSURE( xGraphic.is(), "gallery item is graphic, but the reference is invalid!" );
css::uno::Sequence< css::beans::PropertyValue > aSeq( SVXGALLERYITEM_PARAMS );
aSeq[0].Name = C2U( SVXGALLERYITEM_TYPE );
aSeq[0].Value <<= nType;
aSeq[1].Name = C2U( SVXGALLERYITEM_LINK );
aSeq[1].Value <<= bIsLink;
aSeq[2].Name = C2U( SVXGALLERYITEM_URL );
aSeq[2].Value <<= aFileURL;
aSeq[3].Name = C2U( SVXGALLERYITEM_FILTER );
aSeq[3].Value <<= aFilterName;
aSeq[4].Name = C2U( SVXGALLERYITEM_DRAWING );
aSeq[4].Value <<= xDrawing;
aSeq[5].Name = C2U( SVXGALLERYITEM_GRAPHIC );
aSeq[5].Value <<= xGraphic;
css::uno::Sequence< css::beans::PropertyValue > aArgs( 1 );
aArgs[0].Name = C2U( SVXGALLERYITEM_ARGNAME );
aArgs[0].Value <<= aSeq;
DispatchInfo *pInfo = new DispatchInfo;
pInfo->TargetURL = aURL;
pInfo->Arguments = aArgs;
pInfo->Dispatch = xDispatch;
if ( !Application::PostUserEvent(
STATIC_LINK( 0, GalleryBrowser2, AsyncDispatch_Impl), pInfo ) )
delete pInfo;
}
break;
default:
break;
}
}
void GalleryBrowser2::Execute( sal_uInt16 nId )
{
Point aSelPos;
const sal_uIntPtr nItemId = ImplGetSelectedItemId( NULL, aSelPos );
if( mpCurTheme && nItemId )
{
mnCurActionPos = nItemId - 1;
switch( nId )
{
case( MN_PREVIEW ):
SetMode( ( GALLERYBROWSERMODE_PREVIEW != GetMode() ) ? GALLERYBROWSERMODE_PREVIEW : meLastMode );
break;
case( MN_DELETE ):
{
if( !mpCurTheme->IsReadOnly() &&
QueryBox( NULL, 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 ) );
//CHINA001 TitleDialog aDlg( this, aOldTitle );
SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
if(pFact)
{
AbstractTitleDialog* aDlg = pFact->CreateTitleDialog( this, aOldTitle );
DBG_ASSERT(aDlg, "Dialogdiet fail!");//CHINA001
if( aDlg->Execute() == RET_OK )//CHINA001 if( aDlg.Execute() == RET_OK )
{
String aNewTitle( aDlg->GetTitle() );//CHINA001 String aNewTitle( aDlg.GetTitle() );
if( ( !aNewTitle.Len() && pObj->GetTitle().Len() ) || ( aNewTitle != aOldTitle ) )
{
if( !aNewTitle.Len() )
aNewTitle = String( RTL_CONSTASCII_USTRINGPARAM( "__<empty>__" ) );
pObj->SetTitle( aNewTitle );
mpCurTheme->InsertObject( *pObj );
}
}
mpCurTheme->ReleaseObject( pObj );
delete aDlg; //add CHINA001
}
}
}
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;
}
}
}
// -----------------------------------------------------------------------------
String GalleryBrowser2::GetItemText( const GalleryTheme& rTheme, const SgaObject& rObj, sal_uIntPtr 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( INetURLObject::DECODE_UNAMBIGUOUS );
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 += String(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 = GraphicFilter::GetGraphicFilter();
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;
}
// -----------------------------------------------------------------------------
sal_Bool GalleryBrowser2::GetVCDrawModel( FmFormModel& rModel ) const
{
sal_Bool bRet = sal_False;
if( mpCurTheme && mnCurActionPos != 0xffffffff )
bRet = mpCurTheme->GetModel( mnCurActionPos, rModel );
return bRet;
}
// -----------------------------------------------------------------------------
IMPL_LINK( GalleryBrowser2, SelectObjectHdl, void*, EMPTYARG )
{
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;
}
// -----------------------------------------------------------------------------
IMPL_LINK( GalleryBrowser2, MiscHdl, void*, EMPTYARG )
{
const sal_Bool bHC = maViewBox.GetSettings().GetStyleSettings().GetHighContrastMode();
maViewBox.SetOutStyle( maMiscOptions.GetToolboxStyle() );
BitmapEx aIconBmpEx = BitmapEx( Image( GAL_RESID( bHC? RID_SVXIMG_GALLERY_VIEW_ICON_HC : RID_SVXIMG_GALLERY_VIEW_ICON ) ).GetBitmapEx() );
BitmapEx aListBmpEx = BitmapEx( Image( GAL_RESID( bHC? RID_SVXIMG_GALLERY_VIEW_LIST_HC : RID_SVXIMG_GALLERY_VIEW_LIST ) ).GetBitmapEx() );
if( maMiscOptions.AreCurrentSymbolsLarge() )
{
const Size aLargeSize( 24, 24);
aIconBmpEx.Scale( aLargeSize );
aListBmpEx.Scale( aLargeSize );
}
maViewBox.SetItemImage( TBX_ID_ICON, aIconBmpEx );
maViewBox.SetItemImage( TBX_ID_LIST, aListBmpEx );
maViewBox.SetSizePixel( maViewBox.CalcWindowSizePixel() );
Resize();
return 0L;
}