#88107# convert StarMath/StarBats<->StarSymbol in binary file format
This commit is contained in:
parent
35f8f7efad
commit
5bcff42d2a
11 changed files with 304 additions and 75 deletions
|
@ -2,9 +2,9 @@
|
|||
*
|
||||
* $RCSfile: attarray.hxx,v $
|
||||
*
|
||||
* $Revision: 1.1.1.1 $
|
||||
* $Revision: 1.2 $
|
||||
*
|
||||
* last change: $Author: hr $ $Date: 2000-09-18 16:44:47 $
|
||||
* last change: $Author: er $ $Date: 2001-08-10 18:01:16 $
|
||||
*
|
||||
* The Contents of this file are made available subject to the terms of
|
||||
* either of the following licenses
|
||||
|
@ -211,6 +211,7 @@ public:
|
|||
|
||||
void Save( SvStream& rStream ) const;
|
||||
void Load( SvStream& rStream );
|
||||
void ConvertFontsAfterLoad(); // old binary file format
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -2,9 +2,9 @@
|
|||
*
|
||||
* $RCSfile: cell.hxx,v $
|
||||
*
|
||||
* $Revision: 1.5 $
|
||||
* $Revision: 1.6 $
|
||||
*
|
||||
* last change: $Author: sab $ $Date: 2001-06-15 17:21:10 $
|
||||
* last change: $Author: er $ $Date: 2001-08-10 18:01:16 $
|
||||
*
|
||||
* The Contents of this file are made available subject to the terms of
|
||||
* either of the following licenses
|
||||
|
@ -81,6 +81,10 @@
|
|||
#include <rtl/ustrbuf.hxx>
|
||||
#endif
|
||||
|
||||
#ifndef _SV_FONTCVT_HXX
|
||||
#include <vcl/fontcvt.hxx>
|
||||
#endif
|
||||
|
||||
#define USE_MEMPOOL
|
||||
#define TEXTWIDTH_DIRTY 0xffff
|
||||
|
||||
|
@ -206,7 +210,9 @@ public:
|
|||
void SetString( const String& rString );
|
||||
void GetString( String& rString ) const;
|
||||
|
||||
void Save( SvStream& rStream ) const;
|
||||
void Save( SvStream& rStream, FontToSubsFontConverter hConv = 0 ) const;
|
||||
// convert symbol font after loading binary format
|
||||
void ConvertFont( FontToSubsFontConverter hConv );
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -2,9 +2,9 @@
|
|||
*
|
||||
* $RCSfile: document.hxx,v $
|
||||
*
|
||||
* $Revision: 1.45 $
|
||||
* $Revision: 1.46 $
|
||||
*
|
||||
* last change: $Author: nn $ $Date: 2001-08-02 18:14:42 $
|
||||
* last change: $Author: er $ $Date: 2001-08-10 18:01:16 $
|
||||
*
|
||||
* The Contents of this file are made available subject to the terms of
|
||||
* either of the following licenses
|
||||
|
@ -116,9 +116,11 @@ class SvxSearchItem;
|
|||
class SvxShadowItem;
|
||||
class Window;
|
||||
class XColorTable;
|
||||
class List;
|
||||
|
||||
class ScAutoFormatData;
|
||||
class ScBaseCell;
|
||||
class ScStringCell;
|
||||
class ScBroadcastAreaSlotMachine;
|
||||
class ScChangeViewSettings;
|
||||
class ScChartCollection;
|
||||
|
@ -303,6 +305,14 @@ struct ScCopyBlockFromClipParams
|
|||
#define ROWINFO_MAX 1024
|
||||
|
||||
|
||||
// for loading of binary file format symbol string cells which need font conversion
|
||||
struct ScSymbolStringCellEntry
|
||||
{
|
||||
ScStringCell* pCell;
|
||||
USHORT nRow;
|
||||
};
|
||||
|
||||
|
||||
// Spezialwert fuer Recalc-Alwyas-Zellen
|
||||
|
||||
#define BCA_BRDCST_ALWAYS ScAddress( 0, 32767, 0 )
|
||||
|
@ -379,6 +389,8 @@ private:
|
|||
ScExtDocOptions* pExtDocOptions; // fuer Import etc.
|
||||
ScConsolidateParam* pConsolidateDlgData;
|
||||
|
||||
List* pLoadedSymbolStringCellList; // binary file format import of symbol font string cells
|
||||
|
||||
ScRange aClipRange;
|
||||
ScRange aEmbedRange;
|
||||
ScAddress aCurTextWidthCalcPos;
|
||||
|
@ -1514,6 +1526,11 @@ public:
|
|||
ScRefreshTimerControl * const * GetRefreshTimerControlAddress() const
|
||||
{ return &pRefreshTimerControl; }
|
||||
|
||||
/// if symbol string cells of old binary file format are in list
|
||||
BOOL SymbolStringCellsPending() const;
|
||||
/// get list of ScSymbolStringCellEntry, create if necessary
|
||||
List& GetLoadedSymbolStringCellsList();
|
||||
|
||||
private: // CLOOK-Impl-Methoden
|
||||
void ImplLoadDocOptions( SvStream& rStream );
|
||||
void ImplLoadViewOptions( SvStream& rStream );
|
||||
|
|
|
@ -2,9 +2,9 @@
|
|||
*
|
||||
* $RCSfile: patattr.hxx,v $
|
||||
*
|
||||
* $Revision: 1.2 $
|
||||
* $Revision: 1.3 $
|
||||
*
|
||||
* last change: $Author: nn $ $Date: 2000-11-23 20:17:08 $
|
||||
* last change: $Author: er $ $Date: 2001-08-10 18:01:16 $
|
||||
*
|
||||
* The Contents of this file are made available subject to the terms of
|
||||
* either of the following licenses
|
||||
|
@ -70,6 +70,10 @@
|
|||
#include <svtools/itemset.hxx>
|
||||
#endif
|
||||
|
||||
#ifndef _SV_FONTCVT_HXX
|
||||
#include <vcl/fontcvt.hxx>
|
||||
#endif
|
||||
|
||||
|
||||
class Font;
|
||||
class OutputDevice;
|
||||
|
@ -128,8 +132,24 @@ public:
|
|||
|
||||
BOOL IsVisible() const;
|
||||
BOOL IsVisibleEqual( const ScPatternAttr& rOther ) const;
|
||||
|
||||
/** If font is an old symbol font StarBats/StarMath
|
||||
with text encoding RTL_TEXTENC_SYMBOL */
|
||||
BOOL IsSymbolFont() const;
|
||||
|
||||
/** Create a FontToSubsFontConverter if needed for
|
||||
this pattern, else return 0.
|
||||
|
||||
@param nFlags is the bit mask which shall be
|
||||
used for CreateFontToSubsFontConverter().
|
||||
|
||||
The converter must be destroyed by the caller
|
||||
using DestroyFontToSubsFontConverter() which
|
||||
should be accomplished using the
|
||||
ScFontToSubsFontConverter_AutoPtr
|
||||
*/
|
||||
FontToSubsFontConverter GetSubsFontConverter( ULONG nFlags ) const;
|
||||
|
||||
ULONG GetNumberFormat( SvNumberFormatter* ) const;
|
||||
ULONG GetNumberFormat( SvNumberFormatter* pFormatter,
|
||||
const SfxItemSet* pCondSet ) const;
|
||||
|
@ -138,4 +158,40 @@ public:
|
|||
BYTE GetRotateDir( const SfxItemSet* pCondSet ) const;
|
||||
};
|
||||
|
||||
|
||||
class ScFontToSubsFontConverter_AutoPtr
|
||||
{
|
||||
FontToSubsFontConverter h;
|
||||
|
||||
void release()
|
||||
{
|
||||
if ( h )
|
||||
DestroyFontToSubsFontConverter( h );
|
||||
}
|
||||
|
||||
// prevent usage
|
||||
ScFontToSubsFontConverter_AutoPtr( const ScFontToSubsFontConverter_AutoPtr& );
|
||||
ScFontToSubsFontConverter_AutoPtr& operator=( const ScFontToSubsFontConverter_AutoPtr& );
|
||||
|
||||
public:
|
||||
ScFontToSubsFontConverter_AutoPtr()
|
||||
: h(0)
|
||||
{}
|
||||
~ScFontToSubsFontConverter_AutoPtr()
|
||||
{
|
||||
release();
|
||||
}
|
||||
|
||||
ScFontToSubsFontConverter_AutoPtr& operator=( FontToSubsFontConverter hN )
|
||||
{
|
||||
release();
|
||||
h = hN;
|
||||
return *this;
|
||||
}
|
||||
|
||||
operator FontToSubsFontConverter() const
|
||||
{ return h; }
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
|
|
|
@ -2,9 +2,9 @@
|
|||
*
|
||||
* $RCSfile: stlpool.hxx,v $
|
||||
*
|
||||
* $Revision: 1.1.1.1 $
|
||||
* $Revision: 1.2 $
|
||||
*
|
||||
* last change: $Author: hr $ $Date: 2000-09-18 16:44:50 $
|
||||
* last change: $Author: er $ $Date: 2001-08-10 18:01:16 $
|
||||
*
|
||||
* The Contents of this file are made available subject to the terms of
|
||||
* either of the following licenses
|
||||
|
@ -103,6 +103,8 @@ public:
|
|||
virtual SfxStyleSheetBase& Make( const String&, SfxStyleFamily eFam,
|
||||
USHORT nMask = 0xffff, USHORT nPos = 0xffff );
|
||||
|
||||
void ConvertFontsAfterLoad(); // old binary file format
|
||||
|
||||
protected:
|
||||
virtual SfxStyleSheetBase* Create( const String& rName,
|
||||
SfxStyleFamily eFamily,
|
||||
|
|
|
@ -2,9 +2,9 @@
|
|||
*
|
||||
* $RCSfile: attarray.cxx,v $
|
||||
*
|
||||
* $Revision: 1.3 $
|
||||
* $Revision: 1.4 $
|
||||
*
|
||||
* last change: $Author: nn $ $Date: 2001-07-02 19:36:20 $
|
||||
* last change: $Author: er $ $Date: 2001-08-10 18:02:39 $
|
||||
*
|
||||
* The Contents of this file are made available subject to the terms of
|
||||
* either of the following licenses
|
||||
|
@ -73,6 +73,13 @@
|
|||
#include <svx/shaditem.hxx>
|
||||
#include <svtools/poolcach.hxx>
|
||||
|
||||
#ifndef _SVX_FONTITEM_HXX
|
||||
#include <svx/fontitem.hxx>
|
||||
#endif
|
||||
#ifndef _SV_FONTCVT_HXX
|
||||
#include <vcl/fontcvt.hxx>
|
||||
#endif
|
||||
|
||||
#include "attarray.hxx"
|
||||
#include "global.hxx"
|
||||
#include "document.hxx"
|
||||
|
@ -2439,6 +2446,40 @@ void ScAttrArray::Load( SvStream& rStream )
|
|||
}
|
||||
|
||||
|
||||
void ScAttrArray::ConvertFontsAfterLoad()
|
||||
{
|
||||
ScFontToSubsFontConverter_AutoPtr xFontConverter;
|
||||
const ULONG nFlags = FONTTOSUBSFONT_IMPORT | FONTTOSUBSFONT_ONLYOLDSOSYMBOLFONTS;
|
||||
short nIndex = 0;
|
||||
USHORT nThisRow = 0;
|
||||
|
||||
|
||||
while ( nThisRow <= MAXROW )
|
||||
{
|
||||
const ScPatternAttr* pOldPattern = pData[nIndex].pPattern;
|
||||
const SfxPoolItem* pItem;
|
||||
if( pOldPattern->GetItemSet().GetItemState( ATTR_FONT, FALSE, &pItem ) == SFX_ITEM_SET )
|
||||
{
|
||||
const SvxFontItem* pFontItem = (const SvxFontItem*) pItem;
|
||||
const String& rOldName = pFontItem->GetFamilyName();
|
||||
xFontConverter = CreateFontToSubsFontConverter( rOldName, nFlags );
|
||||
if ( xFontConverter )
|
||||
{
|
||||
String aNewName( GetFontToSubsFontName( xFontConverter ) );
|
||||
if ( aNewName != rOldName )
|
||||
{
|
||||
USHORT nAttrRow = pData[nIndex].nRow;
|
||||
SvxFontItem aNewItem( pFontItem->GetFamily(), aNewName,
|
||||
pFontItem->GetStyleName(), pFontItem->GetPitch(),
|
||||
RTL_TEXTENCODING_DONTKNOW, ATTR_FONT );
|
||||
ScPatternAttr aNewPattern( *pOldPattern );
|
||||
aNewPattern.GetItemSet().Put( aNewItem );
|
||||
SetPatternArea( nThisRow, nAttrRow, &aNewPattern, TRUE );
|
||||
Search( nThisRow, nIndex ); //! data changed
|
||||
}
|
||||
}
|
||||
}
|
||||
++nIndex;
|
||||
nThisRow = pData[nIndex-1].nRow+1;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,9 +2,9 @@
|
|||
*
|
||||
* $RCSfile: cell2.cxx,v $
|
||||
*
|
||||
* $Revision: 1.9 $
|
||||
* $Revision: 1.10 $
|
||||
*
|
||||
* last change: $Author: sab $ $Date: 2001-06-15 17:22:45 $
|
||||
* last change: $Author: er $ $Date: 2001-08-10 18:02:39 $
|
||||
*
|
||||
* The Contents of this file are made available subject to the terms of
|
||||
* either of the following licenses
|
||||
|
@ -1511,10 +1511,37 @@ ScStringCell::ScStringCell( SvStream& rStream, USHORT nVer ) :
|
|||
rStream.ReadByteString( aString, rStream.GetStreamCharSet() );
|
||||
}
|
||||
|
||||
void ScStringCell::Save( SvStream& rStream ) const
|
||||
void ScStringCell::Save( SvStream& rStream, FontToSubsFontConverter hConv ) const
|
||||
{
|
||||
rStream << (BYTE) 0x00;
|
||||
rStream.WriteByteString( aString, rStream.GetStreamCharSet() );
|
||||
if ( !hConv )
|
||||
rStream.WriteByteString( aString, rStream.GetStreamCharSet() );
|
||||
else
|
||||
{
|
||||
String aTmp( aString );
|
||||
sal_Unicode* p = aTmp.GetBufferAccess();
|
||||
sal_Unicode const * const pStop = p + aTmp.Len();
|
||||
for ( ; p < pStop; ++p )
|
||||
{
|
||||
*p = ConvertFontToSubsFontChar( hConv, *p );
|
||||
}
|
||||
aTmp.ReleaseBufferAccess();
|
||||
rStream.WriteByteString( aTmp, rStream.GetStreamCharSet() );
|
||||
}
|
||||
}
|
||||
|
||||
void ScStringCell::ConvertFont( FontToSubsFontConverter hConv )
|
||||
{
|
||||
if ( hConv )
|
||||
{
|
||||
sal_Unicode* p = aString.GetBufferAccess();
|
||||
sal_Unicode const * const pStop = p + aString.Len();
|
||||
for ( ; p < pStop; ++p )
|
||||
{
|
||||
*p = ConvertFontToSubsFontChar( hConv, *p );
|
||||
}
|
||||
aString.ReleaseBufferAccess();
|
||||
}
|
||||
}
|
||||
|
||||
ScNoteCell::ScNoteCell( SvStream& rStream, USHORT nVer ) :
|
||||
|
|
|
@ -2,9 +2,9 @@
|
|||
*
|
||||
* $RCSfile: column2.cxx,v $
|
||||
*
|
||||
* $Revision: 1.7 $
|
||||
* $Revision: 1.8 $
|
||||
*
|
||||
* last change: $Author: nn $ $Date: 2001-06-25 20:37:39 $
|
||||
* last change: $Author: er $ $Date: 2001-08-10 18:02:39 $
|
||||
*
|
||||
* The Contents of this file are made available subject to the terms of
|
||||
* either of the following licenses
|
||||
|
@ -199,51 +199,21 @@ void ScColumn::LoadData( SvStream& rStream )
|
|||
{
|
||||
ScStringCell* pCell = new ScStringCell( rStream, nVer );
|
||||
Append( nNewRow, pCell );
|
||||
|
||||
// special handling for non-convertable characters is no longer needed here
|
||||
//! handle non-convertable characters when saving to file?
|
||||
#if 0
|
||||
// #68427# manually convert CharSet so non-convertable characters
|
||||
// can be stored in an EditEngine cell
|
||||
|
||||
CharSet eSystemCharSet = ::GetSystemCharSet();
|
||||
CharSet eSourceCharSet = pDocument->GetSrcCharSet();
|
||||
String aSourceString = lcl_ReadOriginalStringCell( rStream, nVer, eSystemCharSet );
|
||||
|
||||
ScBaseCell* pCell = NULL;
|
||||
String aCellString = aSourceString;
|
||||
if ( eSourceCharSet != eSystemCharSet )
|
||||
{
|
||||
// bReplace = FALSE: null characters for non-convertable
|
||||
aCellString.Convert( eSourceCharSet, eSystemCharSet, FALSE );
|
||||
if ( aCellString.Search( (char)0 ) != STRING_NOTFOUND )
|
||||
{
|
||||
// contains non-convertable characters -> use EditEngine
|
||||
|
||||
EditEngine& rEngine = pDocument->GetEditEngine();
|
||||
rEngine.SetText( aSourceString, eSourceCharSet );
|
||||
EditTextObject* pObj = rEngine.CreateTextObject();
|
||||
pCell = new ScEditCell( pObj, pDocument, rEngine.GetEditTextObjectPool() );
|
||||
delete pObj;
|
||||
}
|
||||
// else use aCellString
|
||||
}
|
||||
|
||||
// create string cell if no edit cell is needed
|
||||
if ( !pCell )
|
||||
pCell = new ScStringCell( aCellString );
|
||||
Append( nNewRow, pCell );
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
case CELLTYPE_SYMBOLS:
|
||||
{
|
||||
//! CharSet eOld = rStream.GetStreamCharSet();
|
||||
//! // convert into true symbol characters
|
||||
//! rStream.SetStreamCharSet( RTL_TEXTENCODING_SYMBOL );
|
||||
CharSet eOld = rStream.GetStreamCharSet();
|
||||
// convert into true symbol characters
|
||||
rStream.SetStreamCharSet( RTL_TEXTENCODING_SYMBOL );
|
||||
ScStringCell* pCell = new ScStringCell( rStream, nVer );
|
||||
Append( nNewRow, pCell );
|
||||
//! rStream.SetStreamCharSet( eOld );
|
||||
rStream.SetStreamCharSet( eOld );
|
||||
ScSymbolStringCellEntry * pEntry = new ScSymbolStringCellEntry;
|
||||
pEntry->pCell = pCell;
|
||||
pEntry->nRow = nNewRow;
|
||||
pDocument->GetLoadedSymbolStringCellsList().Insert(
|
||||
pEntry, LIST_APPEND );
|
||||
}
|
||||
break;
|
||||
case CELLTYPE_EDIT:
|
||||
|
@ -327,6 +297,8 @@ void ScColumn::SaveData( SvStream& rStream ) const
|
|||
CellType eCellType;
|
||||
ScBaseCell* pCell;
|
||||
USHORT i;
|
||||
ScFontToSubsFontConverter_AutoPtr xFontConverter;
|
||||
const ULONG nFontConverterFlags = FONTTOSUBSFONT_EXPORT | FONTTOSUBSFONT_ONLYOLDSOSYMBOLFONTS;
|
||||
|
||||
ScMultipleWriteHeader aHdr( rStream );
|
||||
|
||||
|
@ -367,7 +339,9 @@ void ScColumn::SaveData( SvStream& rStream ) const
|
|||
{
|
||||
pAttr = aIter.Next( nStt, nEnd );
|
||||
}
|
||||
while( pAttr && !pAttr->IsSymbolFont() );
|
||||
while( pAttr && !(
|
||||
(xFontConverter = pAttr->GetSubsFontConverter( nFontConverterFlags ))
|
||||
|| pAttr->IsSymbolFont()) );
|
||||
|
||||
for (i=0; i<nSaveCount; i++) // nSaveCount: Ende auf MAXROW angepasst
|
||||
{
|
||||
|
@ -390,11 +364,15 @@ void ScColumn::SaveData( SvStream& rStream ) const
|
|||
if( pAttr )
|
||||
{
|
||||
if( nRow > nEnd )
|
||||
do
|
||||
{
|
||||
pAttr = aIter.Next( nStt, nEnd );
|
||||
do
|
||||
{
|
||||
pAttr = aIter.Next( nStt, nEnd );
|
||||
}
|
||||
while( pAttr && !(
|
||||
(xFontConverter = pAttr->GetSubsFontConverter( nFontConverterFlags ))
|
||||
|| pAttr->IsSymbolFont()) );
|
||||
}
|
||||
while( pAttr && !pAttr->IsSymbolFont() );
|
||||
if( pAttr && nRow >= nStt && nRow <= nEnd )
|
||||
eCellType = CELLTYPE_SYMBOLS;
|
||||
}
|
||||
|
@ -402,10 +380,10 @@ void ScColumn::SaveData( SvStream& rStream ) const
|
|||
if ( eCellType == CELLTYPE_SYMBOLS )
|
||||
{
|
||||
// cell string contains true symbol characters
|
||||
//! CharSet eOld = rStream.GetStreamCharSet();
|
||||
//! rStream.SetStreamCharSet( RTL_TEXTENCODING_SYMBOL );
|
||||
((ScStringCell*)pCell)->Save( rStream );
|
||||
//! rStream.SetStreamCharSet( eOld );
|
||||
CharSet eOld = rStream.GetStreamCharSet();
|
||||
rStream.SetStreamCharSet( RTL_TEXTENCODING_SYMBOL );
|
||||
((ScStringCell*)pCell)->Save( rStream, xFontConverter );
|
||||
rStream.SetStreamCharSet( eOld );
|
||||
}
|
||||
else
|
||||
((ScStringCell*)pCell)->Save( rStream );
|
||||
|
@ -547,6 +525,35 @@ BOOL ScColumn::Load( SvStream& rStream, ScMultipleReadHeader& rHdr )
|
|||
}
|
||||
rHdr.EndEntry();
|
||||
|
||||
if ( pDocument->SymbolStringCellsPending() )
|
||||
{
|
||||
ScFontToSubsFontConverter_AutoPtr xFontConverter;
|
||||
const ULONG nFontConverterFlags = FONTTOSUBSFONT_IMPORT | FONTTOSUBSFONT_ONLYOLDSOSYMBOLFONTS;
|
||||
ScSymbolStringCellEntry* pE;
|
||||
USHORT nStt, nEnd;
|
||||
|
||||
ScAttrIterator aIter( pAttrArray, 0, MAXROW );
|
||||
const ScPatternAttr* pAttr = aIter.Next( nStt, nEnd );
|
||||
xFontConverter = pAttr->GetSubsFontConverter( nFontConverterFlags );
|
||||
|
||||
List& rList = pDocument->GetLoadedSymbolStringCellsList();
|
||||
for ( pE = (ScSymbolStringCellEntry*) rList.First(); pE;
|
||||
pE = (ScSymbolStringCellEntry*) rList.Next() )
|
||||
{
|
||||
const ScPatternAttr* pLastAttr = pAttr;
|
||||
while ( nEnd < pE->nRow )
|
||||
{
|
||||
pAttr = aIter.Next( nStt, nEnd );
|
||||
}
|
||||
if ( pAttr != pLastAttr )
|
||||
xFontConverter = pAttr->GetSubsFontConverter( nFontConverterFlags );
|
||||
pE->pCell->ConvertFont( xFontConverter );
|
||||
delete pE;
|
||||
}
|
||||
rList.Clear();
|
||||
}
|
||||
pAttrArray->ConvertFontsAfterLoad();
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
|
@ -2,9 +2,9 @@
|
|||
*
|
||||
* $RCSfile: documen2.cxx,v $
|
||||
*
|
||||
* $Revision: 1.26 $
|
||||
* $Revision: 1.27 $
|
||||
*
|
||||
* last change: $Author: er $ $Date: 2001-08-02 14:46:38 $
|
||||
* last change: $Author: er $ $Date: 2001-08-10 18:02:39 $
|
||||
*
|
||||
* The Contents of this file are made available subject to the terms of
|
||||
* either of the following licenses
|
||||
|
@ -268,6 +268,9 @@
|
|||
#ifndef _TOOLS_TENCCVT_HXX
|
||||
#include <tools/tenccvt.hxx>
|
||||
#endif
|
||||
#ifndef _LIST_HXX
|
||||
#include <tools/list.hxx>
|
||||
#endif
|
||||
|
||||
#include "document.hxx"
|
||||
#include "table.hxx"
|
||||
|
@ -371,7 +374,8 @@ ScDocument::ScDocument( ScDocumentMode eMode,
|
|||
eLinkMode(LM_UNKNOWN),
|
||||
pDPCollection( NULL ),
|
||||
pScriptTypeData( NULL ),
|
||||
nAsianCompression(SC_ASIANCOMPRESSION_INVALID)
|
||||
nAsianCompression(SC_ASIANCOMPRESSION_INVALID),
|
||||
pLoadedSymbolStringCellList( NULL )
|
||||
{
|
||||
eSrcSet = gsl_getSystemTextEncoding();
|
||||
nSrcVer = SC_CURRENT_VERSION;
|
||||
|
@ -665,6 +669,21 @@ void lcl_RefreshPivotData( ScPivotCollection* pColl )
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
BOOL ScDocument::SymbolStringCellsPending() const
|
||||
{
|
||||
return pLoadedSymbolStringCellList && pLoadedSymbolStringCellList->Count();
|
||||
}
|
||||
|
||||
|
||||
List& ScDocument::GetLoadedSymbolStringCellsList()
|
||||
{
|
||||
if ( !pLoadedSymbolStringCellList )
|
||||
pLoadedSymbolStringCellList = new List;
|
||||
return *pLoadedSymbolStringCellList;
|
||||
}
|
||||
|
||||
|
||||
void lcl_AddLanguage( SfxItemSet& rSet, SvNumberFormatter& rFormatter )
|
||||
{
|
||||
// Sprache dann dazutueten, wenn ein Zahlformat mit einer anderen Sprache
|
||||
|
@ -936,6 +955,9 @@ BOOL ScDocument::Load( SvStream& rStream, ScProgress* pProgress )
|
|||
lcl_AddLanguage( pStyle->GetItemSet(), *pFormatter );
|
||||
}
|
||||
|
||||
// change FontItems in styles
|
||||
xPoolHelper->GetStylePool()->ConvertFontsAfterLoad();
|
||||
|
||||
// Druckbereiche etc.
|
||||
|
||||
SfxStyleSheetIterator aIter( xPoolHelper->GetStylePool(), SFX_STYLE_FAMILY_PAGE );
|
||||
|
@ -1030,6 +1052,12 @@ BOOL ScDocument::Load( SvStream& rStream, ScProgress* pProgress )
|
|||
CalcAfterLoad();
|
||||
}
|
||||
|
||||
if ( pLoadedSymbolStringCellList )
|
||||
{ // we had symbol string cells, list was cleared by columns, delete it
|
||||
delete pLoadedSymbolStringCellList;
|
||||
pLoadedSymbolStringCellList = NULL;
|
||||
}
|
||||
|
||||
//----------------------------------------------------
|
||||
|
||||
bLoadingDone = TRUE;
|
||||
|
|
|
@ -2,9 +2,9 @@
|
|||
*
|
||||
* $RCSfile: patattr.cxx,v $
|
||||
*
|
||||
* $Revision: 1.10 $
|
||||
* $Revision: 1.11 $
|
||||
*
|
||||
* last change: $Author: nn $ $Date: 2001-05-18 19:41:13 $
|
||||
* last change: $Author: er $ $Date: 2001-08-10 18:02:39 $
|
||||
*
|
||||
* The Contents of this file are made available subject to the terms of
|
||||
* either of the following licenses
|
||||
|
@ -1059,6 +1059,17 @@ BOOL ScPatternAttr::IsSymbolFont() const
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
FontToSubsFontConverter ScPatternAttr::GetSubsFontConverter( ULONG nFlags ) const
|
||||
{
|
||||
const SfxPoolItem* pItem;
|
||||
if( GetItemSet().GetItemState( ATTR_FONT, TRUE, &pItem ) == SFX_ITEM_SET )
|
||||
return CreateFontToSubsFontConverter(
|
||||
((const SvxFontItem*) pItem)->GetFamilyName(), nFlags );
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
ULONG ScPatternAttr::GetNumberFormat( SvNumberFormatter* pFormatter ) const
|
||||
{
|
||||
ULONG nFormat =
|
||||
|
|
|
@ -2,9 +2,9 @@
|
|||
*
|
||||
* $RCSfile: stlpool.cxx,v $
|
||||
*
|
||||
* $Revision: 1.3 $
|
||||
* $Revision: 1.4 $
|
||||
*
|
||||
* last change: $Author: nn $ $Date: 2001-06-18 16:48:35 $
|
||||
* last change: $Author: er $ $Date: 2001-08-10 18:02:39 $
|
||||
*
|
||||
* The Contents of this file are made available subject to the terms of
|
||||
* either of the following licenses
|
||||
|
@ -86,6 +86,12 @@
|
|||
#include <svtools/itemset.hxx>
|
||||
#include <svtools/zforlist.hxx>
|
||||
#include <unotools/charclass.hxx>
|
||||
#ifndef _SVX_FONTITEM_HXX
|
||||
#include <svx/fontitem.hxx>
|
||||
#endif
|
||||
#ifndef _SV_FONTCVT_HXX
|
||||
#include <vcl/fontcvt.hxx>
|
||||
#endif
|
||||
|
||||
#include "sc.hrc"
|
||||
#include "attrib.hxx"
|
||||
|
@ -97,6 +103,7 @@
|
|||
#include "stlsheet.hxx"
|
||||
#include "rechead.hxx"
|
||||
#include "editutil.hxx"
|
||||
#include "patattr.hxx"
|
||||
|
||||
|
||||
//========================================================================
|
||||
|
@ -614,5 +621,31 @@ ScStyleSheet* ScStyleSheetPool::FindCaseIns( const String& rName, SfxStyleFamily
|
|||
}
|
||||
|
||||
|
||||
|
||||
void ScStyleSheetPool::ConvertFontsAfterLoad()
|
||||
{
|
||||
ScFontToSubsFontConverter_AutoPtr xFontConverter;
|
||||
const ULONG nFlags = FONTTOSUBSFONT_IMPORT | FONTTOSUBSFONT_ONLYOLDSOSYMBOLFONTS;
|
||||
SfxStyleSheetIterator aIter( this, SFX_STYLE_FAMILY_PARA );
|
||||
for ( SfxStyleSheetBase* pStyle = aIter.First(); pStyle; pStyle = aIter.Next() )
|
||||
{
|
||||
const SfxPoolItem* pItem;
|
||||
if( pStyle->GetItemSet().GetItemState( ATTR_FONT, FALSE, &pItem ) == SFX_ITEM_SET )
|
||||
{
|
||||
const SvxFontItem* pFontItem = (const SvxFontItem*) pItem;
|
||||
const String& rOldName = pFontItem->GetFamilyName();
|
||||
xFontConverter = CreateFontToSubsFontConverter( rOldName, nFlags );
|
||||
if ( xFontConverter )
|
||||
{
|
||||
String aNewName( GetFontToSubsFontName( xFontConverter ) );
|
||||
if ( aNewName != rOldName )
|
||||
{
|
||||
SvxFontItem aNewItem( pFontItem->GetFamily(), aNewName,
|
||||
pFontItem->GetStyleName(), pFontItem->GetPitch(),
|
||||
RTL_TEXTENCODING_DONTKNOW, ATTR_FONT );
|
||||
pStyle->GetItemSet().Put( aNewItem );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue