blob: 130fed5221ed9d70fc93e7b127071212a441d108 [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_sfx2.hxx"
// INCLUDE ---------------------------------------------------------------
#ifndef GCC
#endif
#include <sfx2/styfitem.hxx>
#include <svtools/localresaccess.hxx>
#include <tools/debug.hxx>
// -----------------------------------------------------------------------
class SfxStyleFamilyItem_Impl
{
Bitmap aBitmap;
Image aImage;
};
// -----------------------------------------------------------------------
// Implementierung des Resource-Konstruktors
SfxStyleFamilyItem::SfxStyleFamilyItem( const ResId &rResId ) :
Resource( rResId.SetRT( RSC_SFX_STYLE_FAMILY_ITEM ) )
{
sal_uIntPtr nMask = ReadLongRes();
if(nMask & RSC_SFX_STYLE_ITEM_LIST)
{
sal_uIntPtr nCount = ReadLongRes();
for( sal_uIntPtr i = 0; i < nCount; i++ )
{
SfxFilterTupel *pTupel = new SfxFilterTupel;
pTupel->aName = ReadStringRes();
long lFlags = ReadLongRes();
pTupel->nFlags = (sal_uInt16)lFlags;
aFilterList.Insert(pTupel, LIST_APPEND);
}
}
if(nMask & RSC_SFX_STYLE_ITEM_BITMAP)
{
aBitmap = Bitmap(ResId((RSHEADER_TYPE *)GetClassRes(),*rResId.GetResMgr()));
IncrementRes( GetObjSizeRes( (RSHEADER_TYPE *)GetClassRes() ) );
}
if(nMask & RSC_SFX_STYLE_ITEM_TEXT)
{
aText = ReadStringRes();
}
if(nMask & RSC_SFX_STYLE_ITEM_HELPTEXT)
{
aHelpText = ReadStringRes();
}
if(nMask & RSC_SFX_STYLE_ITEM_STYLEFAMILY)
{
nFamily = (sal_uInt16)ReadLongRes();
}
else
nFamily = SFX_STYLE_FAMILY_PARA;
if(nMask & RSC_SFX_STYLE_ITEM_IMAGE)
{
aImage = Image(ResId((RSHEADER_TYPE *)GetClassRes(),*rResId.GetResMgr()));
IncrementRes( GetObjSizeRes( (RSHEADER_TYPE *)GetClassRes() ) );
}
else
aImage = Image(aBitmap);
}
// -----------------------------------------------------------------------
// Destruktor; gibt interne Daten frei
SfxStyleFamilyItem::~SfxStyleFamilyItem()
{
SfxFilterTupel *pTupel = aFilterList.First();
while(pTupel)
{
delete pTupel;
pTupel = aFilterList.Next();
}
}
// -----------------------------------------------------------------------
// Implementierung des Resource-Konstruktors
SfxStyleFamilies::SfxStyleFamilies( const ResId& rResId ) :
Resource( rResId.SetRT( RSC_SFX_STYLE_FAMILIES ).SetAutoRelease( sal_False ) ),
aEntryList( 4, 1 )
{
sal_uIntPtr nCount = ReadLongRes();
for( sal_uIntPtr i = 0; i < nCount; i++ )
{
const ResId aResId((RSHEADER_TYPE *)GetClassRes(), *rResId.GetResMgr());
SfxStyleFamilyItem *pItem = new SfxStyleFamilyItem(aResId);
IncrementRes( GetObjSizeRes( (RSHEADER_TYPE *)GetClassRes() ) );
aEntryList.Insert(pItem, LIST_APPEND);
}
FreeResource();
updateImages( rResId, BMP_COLOR_NORMAL );
}
// -----------------------------------------------------------------------
// Destruktor; gibt interne Daten frei
SfxStyleFamilies::~SfxStyleFamilies()
{
SfxStyleFamilyItem *pItem = aEntryList.First();
while(pItem)
{
delete pItem;
pItem = aEntryList.Next();
}
}
// -----------------------------------------------------------------------
sal_Bool SfxStyleFamilies::updateImages( const ResId& _rId, const BmpColorMode _eMode )
{
sal_Bool bSuccess = sal_False;
{
::svt::OLocalResourceAccess aLocalRes( _rId );
// check if the image list is present
ResId aImageListId( (sal_uInt16)_eMode + 1, *_rId.GetResMgr() );
aImageListId.SetRT( RSC_IMAGELIST );
if ( aLocalRes.IsAvailableRes( aImageListId ) )
{ // there is such a list
ImageList aImages( aImageListId );
// number of styles items/images
sal_uInt16 nCount = aImages.GetImageCount( );
DBG_ASSERT( Count() == nCount, "SfxStyleFamilies::updateImages: found the image list, but missing some bitmaps!" );
if ( nCount > Count() )
nCount = Count();
// set the images on the items
for ( sal_uInt16 i = 0; i < nCount; ++i )
{
SfxStyleFamilyItem* pItem = static_cast< SfxStyleFamilyItem* >( aEntryList.GetObject( i ) );
pItem->SetImage( aImages.GetImage( aImages.GetImageId( i ) ) );
}
bSuccess = sal_True;
}
}
return bSuccess;
}