/************************************************************** * * 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 #include #define GLOBALOVERFLOW // Vergleichsstrings sal_Unicode __FAR_DATA pszStandard[] = { 's', 't', 'a', 'n', 'd', 'a', 'r', 'd', 0 }; // Konvertiert in echte RGB-Farben, damit in den Listboxen // endlich mal richtig selektiert werden kann. Color RGB_Color( ColorData nColorName ) { Color aColor( nColorName ); Color aRGBColor( aColor.GetRed(), aColor.GetGreen(), aColor.GetBlue() ); return aRGBColor; } // --------------------- // class XPropertyTable // --------------------- /************************************************************************* |* |* XPropertyTable::XPropertyTable() |* *************************************************************************/ XPropertyTable::XPropertyTable( const String& rPath, XOutdevItemPool* pInPool, sal_uInt16 nInitSize, sal_uInt16 nReSize ) : aName ( pszStandard, 8 ), aPath ( rPath ), pXPool ( pInPool ), aTable ( nInitSize, nReSize ), pBmpTable ( NULL ), bTableDirty ( sal_True ), bBitmapsDirty ( sal_True ), bOwnPool ( sal_False ) { if( !pXPool ) { bOwnPool = sal_True; pXPool = new XOutdevItemPool; DBG_ASSERT( pXPool, "XOutPool konnte nicht erzeugt werden!" ); } } /************************************************************************* |* |* XPropertyTable::XPropertyTable( SvStraem& ) |* *************************************************************************/ XPropertyTable::XPropertyTable( SvStream& /*rIn*/) : pBmpTable ( NULL ) { } /************************************************************************* |* |* XPropertyTable::~XPropertyTable() |* *************************************************************************/ XPropertyTable::~XPropertyTable() { XPropertyEntry* pEntry = (XPropertyEntry*)aTable.First(); Bitmap* pBitmap = NULL; for (sal_uIntPtr nIndex = 0; nIndex < aTable.Count(); nIndex++) { delete pEntry; pEntry = (XPropertyEntry*)aTable.Next(); } // Hier wird die Bitmaptabelle geloescht if( pBmpTable ) { pBitmap = (Bitmap*) pBmpTable->First(); for( sal_uIntPtr nIndex = 0; nIndex < pBmpTable->Count(); nIndex++ ) { delete pBitmap; pBitmap = (Bitmap*) pBmpTable->Next(); } delete pBmpTable; pBmpTable = NULL; } // Eigener Pool wird geloescht if( bOwnPool && pXPool ) { SfxItemPool::Free(pXPool); } } /************************************************************************* |* |* XPropertyTable::Clear() |* *************************************************************************/ void XPropertyTable::Clear() { aTable.Clear(); if( pBmpTable ) pBmpTable->Clear(); } /************************************************************************/ long XPropertyTable::Count() const { if( bTableDirty ) { // ( (XPropertyTable*) this )->bTableDirty = sal_False; <- im Load() if( !( (XPropertyTable*) this )->Load() ) ( (XPropertyTable*) this )->Create(); } return( aTable.Count() ); } /************************************************************************* |* |* XPropertyEntry* XPropertyTable::Get() |* *************************************************************************/ XPropertyEntry* XPropertyTable::Get( long nIndex, sal_uInt16 /*nDummy*/) const { if( bTableDirty ) { // ( (XPropertyTable*) this )->bTableDirty = sal_False; <- im Load() if( !( (XPropertyTable*) this )->Load() ) ( (XPropertyTable*) this )->Create(); } return (XPropertyEntry*) aTable.GetObject( (sal_uIntPtr) nIndex ); } /************************************************************************* |* |* long XPropertyTable::Get(const String& rName) |* *************************************************************************/ long XPropertyTable::Get(const XubString& rName) { if( bTableDirty ) { // bTableDirty = sal_False; if( !Load() ) Create(); } long nPos = 0; XPropertyEntry* pEntry = (XPropertyEntry*)aTable.First(); while (pEntry && pEntry->GetName() != rName) { nPos++; pEntry = (XPropertyEntry*)aTable.Next(); } if (!pEntry) nPos = -1; return nPos; } /************************************************************************* |* |* Bitmap* XPropertyTable::GetBitmap() |* *************************************************************************/ Bitmap* XPropertyTable::GetBitmap( long nIndex ) const { if( pBmpTable ) { if( bBitmapsDirty ) { ( (XPropertyTable*) this )->bBitmapsDirty = sal_False; ( (XPropertyTable*) this )->CreateBitmapsForUI(); } if( pBmpTable->Count() >= (sal_uIntPtr) nIndex ) return (Bitmap*) pBmpTable->GetObject( (sal_uIntPtr) nIndex ); } return( NULL ); } /************************************************************************* |* |* void XPropertyTable::Insert() |* *************************************************************************/ sal_Bool XPropertyTable::Insert( long nIndex, XPropertyEntry* pEntry ) { sal_Bool bReturn = aTable.Insert( (sal_uIntPtr) nIndex, pEntry ); if( pBmpTable && !bBitmapsDirty ) { Bitmap* pBmp = CreateBitmapForUI( (sal_uIntPtr) nIndex ); pBmpTable->Insert( (sal_uIntPtr) nIndex, pBmp ); } return bReturn; } /************************************************************************* |* |* void XPropertyTable::Replace() |* *************************************************************************/ XPropertyEntry* XPropertyTable::Replace( long nIndex, XPropertyEntry* pEntry ) { XPropertyEntry* pOldEntry = (XPropertyEntry*) aTable.Replace( (sal_uIntPtr) nIndex, pEntry ); if( pBmpTable && !bBitmapsDirty ) { Bitmap* pBmp = CreateBitmapForUI( (sal_uIntPtr) nIndex ); Bitmap* pOldBmp = (Bitmap*) pBmpTable->Replace( (sal_uIntPtr) nIndex, pBmp ); if( pOldBmp ) delete pOldBmp; } return pOldEntry; } /************************************************************************* |* |* void XPropertyTable::Remove() |* *************************************************************************/ XPropertyEntry* XPropertyTable::Remove( long nIndex, sal_uInt16 /*nDummy*/) { if( pBmpTable && !bBitmapsDirty ) { Bitmap* pOldBmp = (Bitmap*) pBmpTable->Remove( (sal_uIntPtr) nIndex ); if( pOldBmp ) delete pOldBmp; } return (XPropertyEntry*) aTable.Remove((sal_uIntPtr)nIndex); } /************************************************************************/ void XPropertyTable::SetName( const String& rString ) { if(rString.Len()) { aName = rString; } } // -------------------- // class XPropertyList // -------------------- /************************************************************************* |* |* XPropertyList::XPropertyList() |* *************************************************************************/ XPropertyList::XPropertyList( const String& rPath, XOutdevItemPool* pInPool, sal_uInt16 nInitSize, sal_uInt16 nReSize ) : aName ( pszStandard, 8 ), aPath ( rPath ), pXPool ( pInPool ), aList ( nInitSize, nReSize ), pBmpList ( NULL ), bListDirty ( sal_True ), bBitmapsDirty ( sal_True ), bOwnPool ( sal_False ) { if( !pXPool ) { bOwnPool = sal_True; pXPool = new XOutdevItemPool; DBG_ASSERT( pXPool, "XOutPool konnte nicht erzeugt werden!" ); } } /************************************************************************* |* |* XPropertyList::XPropertyList( SvStraem& ) |* *************************************************************************/ XPropertyList::XPropertyList( SvStream& /*rIn*/) : pBmpList ( NULL ) { } /************************************************************************* |* |* XPropertyList::~XPropertyList() |* *************************************************************************/ XPropertyList::~XPropertyList() { XPropertyEntry* pEntry = (XPropertyEntry*)aList.First(); Bitmap* pBitmap = NULL; for( sal_uIntPtr nIndex = 0; nIndex < aList.Count(); nIndex++ ) { delete pEntry; pEntry = (XPropertyEntry*)aList.Next(); } if( pBmpList ) { pBitmap = (Bitmap*) pBmpList->First(); for( sal_uIntPtr nIndex = 0; nIndex < pBmpList->Count(); nIndex++ ) { delete pBitmap; pBitmap = (Bitmap*) pBmpList->Next(); } delete pBmpList; pBmpList = NULL; } if( bOwnPool && pXPool ) { SfxItemPool::Free(pXPool); } } /************************************************************************* |* |* XPropertyList::Clear() |* *************************************************************************/ void XPropertyList::Clear() { aList.Clear(); if( pBmpList ) pBmpList->Clear(); } /************************************************************************/ long XPropertyList::Count() const { if( bListDirty ) { // ( (XPropertyList*) this )->bListDirty = sal_False; <- im Load() if( !( (XPropertyList*) this )->Load() ) ( (XPropertyList*) this )->Create(); } return( aList.Count() ); } /************************************************************************* |* |* XPropertyEntry* XPropertyList::Get() |* *************************************************************************/ XPropertyEntry* XPropertyList::Get( long nIndex, sal_uInt16 /*nDummy*/) const { if( bListDirty ) { // ( (XPropertyList*) this )->bListDirty = sal_False; <- im Load() if( !( (XPropertyList*) this )->Load() ) ( (XPropertyList*) this )->Create(); } return (XPropertyEntry*) aList.GetObject( (sal_uIntPtr) nIndex ); } /************************************************************************* |* |* XPropertyList::Get() |* *************************************************************************/ long XPropertyList::Get(const XubString& rName) { if( bListDirty ) { //bListDirty = sal_False; if( !Load() ) Create(); } long nPos = 0; XPropertyEntry* pEntry = (XPropertyEntry*)aList.First(); while (pEntry && pEntry->GetName() != rName) { nPos++; pEntry = (XPropertyEntry*)aList.Next(); } if (!pEntry) nPos = -1; return nPos; } /************************************************************************* |* |* Bitmap* XPropertyList::GetBitmap() |* *************************************************************************/ Bitmap* XPropertyList::GetBitmap( long nIndex ) const { if( pBmpList ) { if( bBitmapsDirty ) { ( (XPropertyList*) this )->bBitmapsDirty = sal_False; ( (XPropertyList*) this )->CreateBitmapsForUI(); } if( pBmpList->Count() >= (sal_uIntPtr) nIndex ) return (Bitmap*) pBmpList->GetObject( (sal_uIntPtr) nIndex ); } return( NULL ); } /************************************************************************* |* |* void XPropertyList::Insert() |* *************************************************************************/ void XPropertyList::Insert( XPropertyEntry* pEntry, long nIndex ) { aList.Insert( pEntry, (sal_uIntPtr) nIndex ); if( pBmpList && !bBitmapsDirty ) { Bitmap* pBmp = CreateBitmapForUI( (sal_uIntPtr) nIndex < aList.Count() ? nIndex : aList.Count() - 1 ); pBmpList->Insert( pBmp, (sal_uIntPtr) nIndex ); } } /************************************************************************* |* |* void XPropertyList::Replace() |* *************************************************************************/ XPropertyEntry* XPropertyList::Replace( XPropertyEntry* pEntry, long nIndex ) { XPropertyEntry* pOldEntry = (XPropertyEntry*) aList.Replace( pEntry, (sal_uIntPtr) nIndex ); if( pBmpList && !bBitmapsDirty ) { Bitmap* pBmp = CreateBitmapForUI( (sal_uIntPtr) nIndex ); Bitmap* pOldBmp = (Bitmap*) pBmpList->Replace( pBmp, (sal_uIntPtr) nIndex ); if( pOldBmp ) delete pOldBmp; } return pOldEntry; } /************************************************************************* |* |* void XPropertyList::Remove() |* *************************************************************************/ XPropertyEntry* XPropertyList::Remove( long nIndex, sal_uInt16 /*nDummy*/) { if( pBmpList && !bBitmapsDirty ) { Bitmap* pOldBmp = (Bitmap*) pBmpList->Remove( (sal_uIntPtr) nIndex ); if( pOldBmp ) delete pOldBmp; } return (XPropertyEntry*) aList.Remove( (sal_uIntPtr) nIndex ); } /************************************************************************/ void XPropertyList::SetName( const String& rString ) { if(rString.Len()) { aName = rString; } }