diff options
Diffstat (limited to 'svx/source/unodraw/unoprov.cxx')
-rw-r--r-- | svx/source/unodraw/unoprov.cxx | 175 |
1 files changed, 101 insertions, 74 deletions
diff --git a/svx/source/unodraw/unoprov.cxx b/svx/source/unodraw/unoprov.cxx index 3c87712a30..a0d59f1402 100644 --- a/svx/source/unodraw/unoprov.cxx +++ b/svx/source/unodraw/unoprov.cxx @@ -1,3 +1,4 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /************************************************************************* * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -28,6 +29,8 @@ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_svx.hxx" +#include <sal/macros.h> + #define _SVX_USE_UNOGLOBALS_ #include <com/sun/star/table/XTable.hpp> @@ -41,7 +44,7 @@ #include <com/sun/star/beans/PropertyAttribute.hpp> #include <tools/fldunit.hxx> #include <tools/shl.hxx> -#include <vos/mutex.hxx> +#include <osl/mutex.hxx> #include <vcl/svapp.hxx> #include <comphelper/propertysetinfo.hxx> #include <svx/dialmgr.hxx> @@ -818,7 +821,6 @@ comphelper::PropertyMapEntry* ImplGetSvxDrawingDefaultsPropertyMap() return aSvxDrawingDefaultsPropertyMap_Impl; } -// OD 13.10.2003 #i18732# comphelper::PropertyMapEntry* ImplGetAdditionalWriterDrawingDefaultsPropertyMap() { static comphelper::PropertyMapEntry aSvxAdditionalDefaultsPropertyMap_Impl[] = @@ -831,92 +833,104 @@ comphelper::PropertyMapEntry* ImplGetAdditionalWriterDrawingDefaultsPropertyMap( return aSvxAdditionalDefaultsPropertyMap_Impl; } -// --------------------------------------------------------------------- - -SvxUnoPropertyMapProvider aSvxMapProvider; - -UHashMapEntry pSdrShapeIdentifierMap[] = -{ - UHashMapEntry (RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.RectangleShape"), OBJ_RECT ), - UHashMapEntry (RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.EllipseShape"), OBJ_CIRC ), - UHashMapEntry (RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.ControlShape"), OBJ_UNO ), - UHashMapEntry (RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.ConnectorShape"), OBJ_EDGE ), - UHashMapEntry (RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.MeasureShape"), OBJ_MEASURE ), - UHashMapEntry (RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.LineShape"), OBJ_LINE ), - UHashMapEntry (RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.PolyPolygonShape"), OBJ_POLY ), - UHashMapEntry (RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.PolyLineShape"), OBJ_PLIN ), - UHashMapEntry (RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.OpenBezierShape"), OBJ_PATHLINE ), - UHashMapEntry (RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.ClosedBezierShape"), OBJ_PATHFILL ), - UHashMapEntry (RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.OpenFreeHandShape"), OBJ_FREELINE ), - UHashMapEntry (RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.ClosedFreeHandShape"), OBJ_FREEFILL ), - UHashMapEntry (RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.PolyPolygonPathShape"), OBJ_PATHPOLY ), - UHashMapEntry (RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.PolyLinePathShape"), OBJ_PATHPLIN ), - UHashMapEntry (RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.GraphicObjectShape"), OBJ_GRAF ), - UHashMapEntry (RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.GroupShape"), OBJ_GRUP ), - UHashMapEntry (RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.TextShape"), OBJ_TEXT ), - UHashMapEntry (RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.OLE2Shape"), OBJ_OLE2 ), - UHashMapEntry (RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.PageShape"), OBJ_PAGE ), - UHashMapEntry (RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.CaptionShape"), OBJ_CAPTION ), - UHashMapEntry (RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.FrameShape"), OBJ_FRAME ), - UHashMapEntry (RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.PluginShape"), OBJ_OLE2_PLUGIN ), - UHashMapEntry (RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.AppletShape"), OBJ_OLE2_APPLET ), - UHashMapEntry (RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.CustomShape"), OBJ_CUSTOMSHAPE ), - UHashMapEntry (RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.MediaShape"), OBJ_MEDIA ), - - UHashMapEntry (RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.Shape3DSceneObject"), E3D_POLYSCENE_ID | E3D_INVENTOR_FLAG ), - UHashMapEntry (RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.Shape3DCubeObject"), E3D_CUBEOBJ_ID | E3D_INVENTOR_FLAG ), - UHashMapEntry (RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.Shape3DSphereObject"), E3D_SPHEREOBJ_ID | E3D_INVENTOR_FLAG ), - UHashMapEntry (RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.Shape3DLatheObject"), E3D_LATHEOBJ_ID | E3D_INVENTOR_FLAG ), - UHashMapEntry (RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.Shape3DExtrudeObject"), E3D_EXTRUDEOBJ_ID | E3D_INVENTOR_FLAG ), - UHashMapEntry (RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.Shape3DPolygonObject"), E3D_POLYGONOBJ_ID | E3D_INVENTOR_FLAG ), - UHashMapEntry (RTL_CONSTASCII_STRINGPARAM(""), 0 ) -}; - -// --------------------------------------------------------------------- - -UHashMap aSdrShapeIdentifierMap( pSdrShapeIdentifierMap ); - /*********************************************************************** * class UHashMap * ***********************************************************************/ -UHashMap::UHashMap( UHashMapEntry* pMap ) +typedef ::std::hash_map< rtl::OUString, sal_uInt32, rtl::OUStringHash > UHashMapImpl; + +namespace { + static const UHashMapImpl &GetUHashImpl() + { + static UHashMapImpl aImpl(63); + static bool bInited = false; + if (!bInited) { + struct { const char *name; sal_Int32 length; sal_uInt32 id; } aInit[] = { + { RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.RectangleShape"), OBJ_RECT }, + { RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.EllipseShape"), OBJ_CIRC }, + { RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.ControlShape"), OBJ_UNO }, + { RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.ConnectorShape"), OBJ_EDGE }, + { RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.MeasureShape"), OBJ_MEASURE }, + { RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.LineShape"), OBJ_LINE }, + { RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.PolyPolygonShape"), OBJ_POLY }, + { RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.PolyLineShape"), OBJ_PLIN }, + { RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.OpenBezierShape"), OBJ_PATHLINE }, + { RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.ClosedBezierShape"), OBJ_PATHFILL }, + { RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.OpenFreeHandShape"), OBJ_FREELINE }, + { RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.ClosedFreeHandShape"), OBJ_FREEFILL }, + { RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.PolyPolygonPathShape"), OBJ_PATHPOLY }, + { RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.PolyLinePathShape"), OBJ_PATHPLIN }, + { RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.GraphicObjectShape"), OBJ_GRAF }, + { RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.GroupShape"), OBJ_GRUP }, + { RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.TextShape"), OBJ_TEXT }, + { RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.OLE2Shape"), OBJ_OLE2 }, + { RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.PageShape"), OBJ_PAGE }, + { RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.CaptionShape"), OBJ_CAPTION }, + { RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.FrameShape"), OBJ_FRAME }, + { RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.PluginShape"), OBJ_OLE2_PLUGIN }, + { RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.AppletShape"), OBJ_OLE2_APPLET }, + { RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.CustomShape"), OBJ_CUSTOMSHAPE }, + { RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.MediaShape"), OBJ_MEDIA }, + + { RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.Shape3DSceneObject"), E3D_POLYSCENE_ID | E3D_INVENTOR_FLAG }, + { RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.Shape3DCubeObject"), E3D_CUBEOBJ_ID | E3D_INVENTOR_FLAG }, + { RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.Shape3DSphereObject"), E3D_SPHEREOBJ_ID | E3D_INVENTOR_FLAG }, + { RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.Shape3DLatheObject"), E3D_LATHEOBJ_ID | E3D_INVENTOR_FLAG }, + { RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.Shape3DExtrudeObject"), E3D_EXTRUDEOBJ_ID | E3D_INVENTOR_FLAG }, + { RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.Shape3DPolygonObject"), E3D_POLYGONOBJ_ID | E3D_INVENTOR_FLAG }, + }; + for (sal_uInt32 i = 0; i < SAL_N_ELEMENTS(aInit); i++) + aImpl[rtl::OUString( aInit[i].name, aInit[i].length, RTL_TEXTENCODING_ASCII_US ) ] = aInit[i].id; + bInited = true; + } + return aImpl; + } +} + +//---------------------------------------------------------------------- +rtl::OUString UHashMap::getNameFromId(sal_uInt32 nId) { - while( pMap->aIdentifier.getLength() ) - { - OUString aStr( pMap->aIdentifier ); - size_t nHash = aStr.hashCode() & (HASHARRAYSIZE-1); + const UHashMapImpl &rMap = GetUHashImpl(); - m_aHashList[nHash].Insert(pMap); - pMap++; + for (UHashMapImpl::const_iterator it = rMap.begin(); it != rMap.end(); it++) + { + if (it->second == nId) + return it->first; } + DBG_ERROR("[CL] unknown SdrObjekt identifier"); + return rtl::OUString(); } -// --------------------------------------------------------------------- - -UINT32 UHashMap::getId( const OUString& rCompareString ) +uno::Sequence< OUString > UHashMap::getServiceNames() { - size_t nHash = rCompareString.hashCode() & (HASHARRAYSIZE-1); + const UHashMapImpl &rMap = GetUHashImpl(); - UHashMapEntryList& rList = m_aHashList[nHash]; + int i = 0; + uno::Sequence< OUString > aSeq( rMap.size() ); + OUString* pStrings = aSeq.getArray(); - UHashMapEntry * pMap = rList.First(); + for (UHashMapImpl::const_iterator it = rMap.begin(); it != rMap.end(); it++) + pStrings[i++] = it->first; - while(pMap) - { - if( rCompareString == pMap->aIdentifier ) - return pMap->nId; - - pMap = rList.Next(); - } + return aSeq; +} - return UHASHMAP_NOTFOUND; +UINT32 UHashMap::getId( const OUString& rCompareString ) +{ + const UHashMapImpl &rMap = GetUHashImpl(); + UHashMapImpl::const_iterator it = rMap.find( rCompareString ); + if( it == rMap.end() ) + return UHASHMAP_NOTFOUND; + else + return it->second; } /*********************************************************************** * class SvxUnoPropertyMapProvider * ***********************************************************************/ +SvxUnoPropertyMapProvider aSvxMapProvider; + EXTERN_C #if defined( PM2 ) && (!defined( CSET ) && !defined ( MTW ) && !defined( WTC )) int _stdcall @@ -1233,7 +1247,7 @@ bool SvxUnoConvertResourceString( int nSourceResIds, int nDestResIds, int nCount return FALSE; } -static USHORT __READONLY_DATA SvxUnoColorNameDefResId[] = +static USHORT const SvxUnoColorNameDefResId[] = { RID_SVXSTR_BLUEGREY_DEF, RID_SVXSTR_BLACK_DEF, @@ -1264,7 +1278,7 @@ static USHORT __READONLY_DATA SvxUnoColorNameDefResId[] = RID_SVXSTR_COLOR_CHART_DEF }; -static USHORT __READONLY_DATA SvxUnoColorNameResId[] = +static USHORT const SvxUnoColorNameResId[] = { RID_SVXSTR_BLUEGREY, RID_SVXSTR_BLACK, @@ -1297,12 +1311,24 @@ static USHORT __READONLY_DATA SvxUnoColorNameResId[] = bool SvxUnoConvertResourceString( USHORT* pSourceResIds, USHORT* pDestResIds, int nCount, String& rString ) throw() { - int i = 0; + //We replace e.g. "Gray 10%" with the translation of Gray, but we shouldn't + //replace "Red Hat 1" with the translation of Red :-) + rtl::OUString sStr(rString); + const sal_Unicode *pStr = sStr.getStr(); + sal_Int32 nLength = sStr.getLength(); + while( nLength > 0 ) + { + const sal_Unicode nChar = pStr[nLength-1]; + if (nChar != '%' && (nChar < '0' || nChar > '9')) + break; + nLength--; + } + sStr = rtl::OUString(pStr, nLength).trim(); - for( i = 0; i < nCount; i++ ) + for(int i = 0; i < nCount; ++i ) { String aStrDefName = SVX_RESSTR( pSourceResIds[i] ); - if( rString.Search( aStrDefName ) == 0 ) + if( sStr.equals( aStrDefName ) ) { String aReplace = SVX_RESSTR( pDestResIds[i] ); rString.Replace( 0, aStrDefName.Len(), aReplace ); @@ -1391,7 +1417,7 @@ void SvxUnogetInternalNameForItem( const sal_Int16 nWhich, const rtl::OUString& comphelper::PropertySetInfo* SvxPropertySetInfoPool::getOrCreate( sal_Int32 nServiceId ) throw() { - vos::OGuard aGuard( Application::GetSolarMutex() ); + SolarMutexGuard aGuard; if( nServiceId > SVXUNO_SERVICEID_LASTID ) { @@ -1426,3 +1452,4 @@ comphelper::PropertySetInfo* SvxPropertySetInfoPool::getOrCreate( sal_Int32 nSer comphelper::PropertySetInfo* SvxPropertySetInfoPool::mpInfos[SVXUNO_SERVICEID_LASTID+1] = { NULL }; +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |