| /************************************************************** |
| * |
| * 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_sc.hxx" |
| |
| |
| |
| // INCLUDE --------------------------------------------------------------- |
| |
| #include "scitems.hxx" |
| #include <editeng/eeitem.hxx> |
| |
| #include <svx/algitem.hxx> |
| #include <editeng/boxitem.hxx> |
| #include <editeng/brshitem.hxx> |
| #include <editeng/colritem.hxx> |
| #include <editeng/crsditem.hxx> |
| #include <editeng/editdata.hxx> |
| #include <editeng/editeng.hxx> |
| #include <editeng/editobj.hxx> |
| #include <editeng/fhgtitem.hxx> |
| #include <editeng/fontitem.hxx> |
| #include <editeng/lrspitem.hxx> |
| #include <svx/pageitem.hxx> |
| #include <editeng/postitem.hxx> |
| #include <editeng/sizeitem.hxx> |
| #include <editeng/udlnitem.hxx> |
| #include <editeng/ulspitem.hxx> |
| #include <editeng/wghtitem.hxx> |
| #include <svl/zforlist.hxx> |
| #include <svl/PasswordHelper.hxx> |
| #include <stdio.h> |
| #include <math.h> |
| #include <string.h> |
| |
| #include "global.hxx" |
| #include "sc.hrc" |
| #include "attrib.hxx" |
| #include "patattr.hxx" |
| #include "docpool.hxx" |
| #include "document.hxx" |
| #include "collect.hxx" |
| #include "rangenam.hxx" |
| #include "dbcolect.hxx" |
| #include "stlsheet.hxx" |
| #include "stlpool.hxx" |
| #include "filter.hxx" |
| #include "scflt.hxx" |
| #include "cell.hxx" |
| #include "scfobj.hxx" |
| #include "docoptio.hxx" |
| #include "viewopti.hxx" |
| #include "postit.hxx" |
| #include "globstr.hrc" |
| #include "ftools.hxx" |
| #include "tabprotection.hxx" |
| |
| #include "fprogressbar.hxx" |
| |
| using namespace com::sun::star; |
| |
| #define DEFCHARSET RTL_TEXTENCODING_MS_1252 |
| |
| #define SC10TOSTRING(p) String((p),DEFCHARSET) |
| |
| const SCCOL SC10MAXCOL = 255; // #i85906# don't try to load more columns than there are in the file |
| |
| |
| /** Those strings are used with SC10TOSTRING() and strcmp() and such, hence |
| need to be 0-terminated. */ |
| static void lcl_ReadFixedString( SvStream& rStream, void* pData, size_t nLen ) |
| { |
| sal_Char* pBuf = static_cast<sal_Char*>(pData); |
| if (!nLen) |
| pBuf[0] = 0; |
| else |
| { |
| rStream.Read( pBuf, nLen); |
| pBuf[nLen-1] = 0; |
| } |
| } |
| |
| |
| static void lcl_ReadFileHeader(SvStream& rStream, Sc10FileHeader& rFileHeader) |
| { |
| lcl_ReadFixedString( rStream, &rFileHeader.CopyRight, sizeof(rFileHeader.CopyRight)); |
| rStream >> rFileHeader.Version; |
| rStream.Read(&rFileHeader.Reserved, sizeof(rFileHeader.Reserved)); |
| } |
| |
| |
| static void lcl_ReadTabProtect(SvStream& rStream, Sc10TableProtect& rProtect) |
| { |
| lcl_ReadFixedString( rStream, &rProtect.PassWord, sizeof(rProtect.PassWord)); |
| rStream >> rProtect.Flags; |
| rStream >> rProtect.Protect; |
| } |
| |
| |
| static void lcl_ReadSheetProtect(SvStream& rStream, Sc10SheetProtect& rProtect) |
| { |
| lcl_ReadFixedString( rStream, &rProtect.PassWord, sizeof(rProtect.PassWord)); |
| rStream >> rProtect.Flags; |
| rStream >> rProtect.Protect; |
| } |
| |
| |
| static void lcl_ReadRGB(SvStream& rStream, Sc10Color& rColor) |
| { |
| rStream >> rColor.Dummy; |
| rStream >> rColor.Blue; |
| rStream >> rColor.Green; |
| rStream >> rColor.Red; |
| } |
| |
| |
| static void lcl_ReadPalette(SvStream& rStream, Sc10Color* pPalette) |
| { |
| for (sal_uInt16 i = 0; i < 16; i++) |
| lcl_ReadRGB(rStream, pPalette[i]); |
| } |
| |
| |
| static void lcl_ReadValueFormat(SvStream& rStream, Sc10ValueFormat& rFormat) |
| { |
| rStream >> rFormat.Format; |
| rStream >> rFormat.Info; |
| } |
| |
| |
| static void lcl_ReadLogFont(SvStream& rStream, Sc10LogFont& rFont) |
| { |
| rStream >> rFont.lfHeight; |
| rStream >> rFont.lfWidth; |
| rStream >> rFont.lfEscapement; |
| rStream >> rFont.lfOrientation; |
| rStream >> rFont.lfWeight; |
| rStream >> rFont.lfItalic; |
| rStream >> rFont.lfUnderline; |
| rStream >> rFont.lfStrikeOut; |
| rStream >> rFont.lfCharSet; |
| rStream >> rFont.lfOutPrecision; |
| rStream >> rFont.lfClipPrecision; |
| rStream >> rFont.lfQuality; |
| rStream >> rFont.lfPitchAndFamily; |
| lcl_ReadFixedString( rStream, &rFont.lfFaceName, sizeof(rFont.lfFaceName)); |
| } |
| |
| |
| static void lcl_ReadBlockRect(SvStream& rStream, Sc10BlockRect& rBlock) |
| { |
| rStream >> rBlock.x1; |
| rStream >> rBlock.y1; |
| rStream >> rBlock.x2; |
| rStream >> rBlock.y2; |
| } |
| |
| |
| static void lcl_ReadHeadFootLine(SvStream& rStream, Sc10HeadFootLine& rLine) |
| { |
| lcl_ReadFixedString( rStream, &rLine.Title, sizeof(rLine.Title)); |
| lcl_ReadLogFont(rStream, rLine.LogFont); |
| rStream >> rLine.HorJustify; |
| rStream >> rLine.VerJustify; |
| rStream >> rLine.Raster; |
| rStream >> rLine.Frame; |
| lcl_ReadRGB(rStream, rLine.TextColor); |
| lcl_ReadRGB(rStream, rLine.BackColor); |
| lcl_ReadRGB(rStream, rLine.RasterColor); |
| rStream >> rLine.FrameColor; |
| rStream >> rLine.Reserved; |
| } |
| |
| |
| static void lcl_ReadPageFormat(SvStream& rStream, Sc10PageFormat& rFormat) |
| { |
| lcl_ReadHeadFootLine(rStream, rFormat.HeadLine); |
| lcl_ReadHeadFootLine(rStream, rFormat.FootLine); |
| rStream >> rFormat.Orientation; |
| rStream >> rFormat.Width; |
| rStream >> rFormat.Height; |
| rStream >> rFormat.NonPrintableX; |
| rStream >> rFormat.NonPrintableY; |
| rStream >> rFormat.Left; |
| rStream >> rFormat.Top; |
| rStream >> rFormat.Right; |
| rStream >> rFormat.Bottom; |
| rStream >> rFormat.Head; |
| rStream >> rFormat.Foot; |
| rStream >> rFormat.HorCenter; |
| rStream >> rFormat.VerCenter; |
| rStream >> rFormat.PrintGrid; |
| rStream >> rFormat.PrintColRow; |
| rStream >> rFormat.PrintNote; |
| rStream >> rFormat.TopBottomDir; |
| lcl_ReadFixedString( rStream, &rFormat.PrintAreaName, sizeof(rFormat.PrintAreaName)); |
| lcl_ReadBlockRect(rStream, rFormat.PrintArea); |
| rStream.Read(&rFormat.PrnZoom, sizeof(rFormat.PrnZoom)); |
| rStream >> rFormat.FirstPageNo; |
| rStream >> rFormat.RowRepeatStart; |
| rStream >> rFormat.RowRepeatEnd; |
| rStream >> rFormat.ColRepeatStart; |
| rStream >> rFormat.ColRepeatEnd; |
| rStream.Read(&rFormat.Reserved, sizeof(rFormat.Reserved)); |
| } |
| |
| |
| static void lcl_ReadGraphHeader(SvStream& rStream, Sc10GraphHeader& rHeader) |
| { |
| rStream >> rHeader.Typ; |
| rStream >> rHeader.CarretX; |
| rStream >> rHeader.CarretY; |
| rStream >> rHeader.CarretZ; |
| rStream >> rHeader.x; |
| rStream >> rHeader.y; |
| rStream >> rHeader.w; |
| rStream >> rHeader.h; |
| rStream >> rHeader.IsRelPos; |
| rStream >> rHeader.DoPrint; |
| rStream >> rHeader.FrameType; |
| rStream >> rHeader.IsTransparent; |
| lcl_ReadRGB(rStream, rHeader.FrameColor); |
| lcl_ReadRGB(rStream, rHeader.BackColor); |
| rStream.Read(&rHeader.Reserved, sizeof(rHeader.Reserved)); |
| } |
| |
| |
| static void lcl_ReadImageHeaer(SvStream& rStream, Sc10ImageHeader& rHeader) |
| { |
| lcl_ReadFixedString( rStream, &rHeader.FileName, sizeof(rHeader.FileName)); |
| rStream >> rHeader.Typ; |
| rStream >> rHeader.Linked; |
| rStream >> rHeader.x1; |
| rStream >> rHeader.y1; |
| rStream >> rHeader.x2; |
| rStream >> rHeader.y2; |
| rStream >> rHeader.Size; |
| } |
| |
| |
| static void lcl_ReadChartHeader(SvStream& rStream, Sc10ChartHeader& rHeader) |
| { |
| rStream >> rHeader.MM; |
| rStream >> rHeader.xExt; |
| rStream >> rHeader.yExt; |
| rStream >> rHeader.Size; |
| } |
| |
| |
| static void lcl_ReadChartSheetData(SvStream& rStream, Sc10ChartSheetData& rSheetData) |
| { |
| rStream >> rSheetData.HasTitle; |
| rStream >> rSheetData.TitleX; |
| rStream >> rSheetData.TitleY; |
| rStream >> rSheetData.HasSubTitle; |
| rStream >> rSheetData.SubTitleX; |
| rStream >> rSheetData.SubTitleY; |
| rStream >> rSheetData.HasLeftTitle; |
| rStream >> rSheetData.LeftTitleX; |
| rStream >> rSheetData.LeftTitleY; |
| rStream >> rSheetData.HasLegend; |
| rStream >> rSheetData.LegendX1; |
| rStream >> rSheetData.LegendY1; |
| rStream >> rSheetData.LegendX2; |
| rStream >> rSheetData.LegendY2; |
| rStream >> rSheetData.HasLabel; |
| rStream >> rSheetData.LabelX1; |
| rStream >> rSheetData.LabelY1; |
| rStream >> rSheetData.LabelX2; |
| rStream >> rSheetData.LabelY2; |
| rStream >> rSheetData.DataX1; |
| rStream >> rSheetData.DataY1; |
| rStream >> rSheetData.DataX2; |
| rStream >> rSheetData.DataY2; |
| rStream.Read(&rSheetData.Reserved, sizeof(rSheetData.Reserved)); |
| } |
| |
| |
| static void lcl_ReadChartTypeData(SvStream& rStream, Sc10ChartTypeData& rTypeData) |
| { |
| rStream >> rTypeData.NumSets; |
| rStream >> rTypeData.NumPoints; |
| rStream >> rTypeData.DrawMode; |
| rStream >> rTypeData.GraphType; |
| rStream >> rTypeData.GraphStyle; |
| lcl_ReadFixedString( rStream, &rTypeData.GraphTitle, sizeof(rTypeData.GraphTitle)); |
| lcl_ReadFixedString( rStream, &rTypeData.BottomTitle, sizeof(rTypeData.BottomTitle)); |
| sal_uInt16 i; |
| for (i = 0; i < 256; i++) |
| rStream >> rTypeData.SymbolData[i]; |
| for (i = 0; i < 256; i++) |
| rStream >> rTypeData.ColorData[i]; |
| for (i = 0; i < 256; i++) |
| rStream >> rTypeData.ThickLines[i]; |
| for (i = 0; i < 256; i++) |
| rStream >> rTypeData.PatternData[i]; |
| for (i = 0; i < 256; i++) |
| rStream >> rTypeData.LinePatternData[i]; |
| for (i = 0; i < 11; i++) |
| rStream >> rTypeData.NumGraphStyles[i]; |
| rStream >> rTypeData.ShowLegend; |
| for (i = 0; i < 256; i++) |
| lcl_ReadFixedString( rStream, &rTypeData.LegendText[i], sizeof(Sc10ChartText)); |
| rStream >> rTypeData.ExplodePie; |
| rStream >> rTypeData.FontUse; |
| for (i = 0; i < 5; i++) |
| rStream >> rTypeData.FontFamily[i]; |
| for (i = 0; i < 5; i++) |
| rStream >> rTypeData.FontStyle[i]; |
| for (i = 0; i < 5; i++) |
| rStream >> rTypeData.FontSize[i]; |
| rStream >> rTypeData.GridStyle; |
| rStream >> rTypeData.Labels; |
| rStream >> rTypeData.LabelEvery; |
| for (i = 0; i < 50; i++) |
| lcl_ReadFixedString( rStream, &rTypeData.LabelText[i], sizeof(Sc10ChartText)); |
| lcl_ReadFixedString( rStream, &rTypeData.LeftTitle, sizeof(rTypeData.LeftTitle)); |
| rStream.Read(&rTypeData.Reserved, sizeof(rTypeData.Reserved)); |
| } |
| |
| double lcl_PascalToDouble(sal_Char* tp6) |
| { |
| sal_uInt8* pnUnsigned = reinterpret_cast< sal_uInt8* >( tp6 ); |
| // biased exponent |
| sal_uInt8 be = pnUnsigned[ 0 ]; |
| // lower 16 bits of mantissa |
| sal_uInt16 v1 = static_cast< sal_uInt16 >( pnUnsigned[ 2 ] * 256 + pnUnsigned[ 1 ] ); |
| // next 16 bits of mantissa |
| sal_uInt16 v2 = static_cast< sal_uInt16 >( pnUnsigned[ 4 ] * 256 + pnUnsigned[ 3 ] ); |
| // upper 7 bits of mantissa |
| sal_uInt8 v3 = static_cast< sal_uInt8 >( pnUnsigned[ 5 ] & 0x7F ); |
| // sign bit |
| bool s = (pnUnsigned[ 5 ] & 0x80) != 0; |
| |
| if (be == 0) |
| return 0.0; |
| return (((((128 + v3) * 65536.0) + v2) * 65536.0 + v1) * |
| ldexp ((s ? -1.0 : 1.0), be - (129+39))); |
| } |
| |
| |
| static void lcl_ChangeColor( sal_uInt16 nIndex, Color& rColor ) |
| { |
| ColorData aCol; |
| |
| switch( nIndex ) |
| { |
| case 1: aCol = COL_RED; break; |
| case 2: aCol = COL_GREEN; break; |
| case 3: aCol = COL_BROWN; break; |
| case 4: aCol = COL_BLUE; break; |
| case 5: aCol = COL_MAGENTA; break; |
| case 6: aCol = COL_CYAN; break; |
| case 7: aCol = COL_GRAY; break; |
| case 8: aCol = COL_LIGHTGRAY; break; |
| case 9: aCol = COL_LIGHTRED; break; |
| case 10: aCol = COL_LIGHTGREEN; break; |
| case 11: aCol = COL_YELLOW; break; |
| case 12: aCol = COL_LIGHTBLUE; break; |
| case 13: aCol = COL_LIGHTMAGENTA; break; |
| case 14: aCol = COL_LIGHTCYAN; break; |
| case 15: aCol = COL_WHITE; break; |
| default: aCol = COL_BLACK; |
| } |
| |
| rColor.SetColor( aCol ); |
| } |
| |
| String lcl_MakeOldPageStyleFormatName( sal_uInt16 i ) |
| { |
| String aName = ScGlobal::GetRscString( STR_PAGESTYLE ); |
| aName.AppendAscii( " " ); |
| aName += String::CreateFromInt32( i + 1 ); |
| |
| return aName; |
| } |
| |
| |
| template < typename T > sal_uLong insert_new( ScCollection* pCollection, SvStream& rStream ) |
| { |
| T* pData = new (::std::nothrow) T( rStream); |
| sal_uLong nError = rStream.GetError(); |
| if (pData) |
| { |
| if (nError) |
| delete pData; |
| else |
| pCollection->Insert( pData); |
| } |
| else |
| nError = errOutOfMemory; |
| return nError; |
| } |
| |
| //-------------------------------------------- |
| // Font |
| //-------------------------------------------- |
| |
| |
| Sc10FontData::Sc10FontData(SvStream& rStream) |
| { |
| rStream >> Height; |
| rStream >> CharSet; |
| rStream >> PitchAndFamily; |
| sal_uInt16 nLen; |
| rStream >> nLen; |
| if (nLen < sizeof(FaceName)) |
| rStream.Read(FaceName, nLen); |
| else |
| rStream.SetError(ERRCODE_IO_WRONGFORMAT); |
| } |
| |
| |
| Sc10FontCollection::Sc10FontCollection(SvStream& rStream) : |
| ScCollection (4, 4), |
| nError (0) |
| { |
| sal_uInt16 ID; |
| rStream >> ID; |
| if (ID == FontID) |
| { |
| sal_uInt16 nAnz; |
| rStream >> nAnz; |
| for (sal_uInt16 i=0; (i < nAnz) && (nError == 0); i++) |
| { |
| nError = insert_new<Sc10FontData>( this, rStream); |
| } |
| } |
| else |
| { |
| DBG_ERROR( "FontID" ); |
| nError = errUnknownID; |
| } |
| } |
| |
| |
| //-------------------------------------------- |
| // Benannte-Bereiche |
| //-------------------------------------------- |
| |
| |
| Sc10NameData::Sc10NameData(SvStream& rStream) |
| { |
| sal_uInt8 nLen; |
| rStream >> nLen; |
| rStream.Read(Name, sizeof(Name) - 1); |
| if (nLen >= sizeof(Name)) |
| nLen = sizeof(Name) - 1; |
| Name[nLen] = 0; |
| |
| rStream >> nLen; |
| rStream.Read(Reference, sizeof(Reference) - 1); |
| if (nLen >= sizeof(Reference)) |
| nLen = sizeof(Reference) - 1; |
| Reference[nLen] = 0; |
| rStream.Read(Reserved, sizeof(Reserved)); |
| } |
| |
| |
| Sc10NameCollection::Sc10NameCollection(SvStream& rStream) : |
| ScCollection (4, 4), |
| nError (0) |
| { |
| sal_uInt16 ID; |
| rStream >> ID; |
| if (ID == NameID) |
| { |
| sal_uInt16 nAnz; |
| rStream >> nAnz; |
| for (sal_uInt16 i=0; (i < nAnz) && (nError == 0); i++) |
| { |
| nError = insert_new<Sc10NameData>( this, rStream); |
| } |
| } |
| else |
| { |
| DBG_ERROR( "NameID" ); |
| nError = errUnknownID; |
| } |
| } |
| |
| //-------------------------------------------- |
| // Vorlagen |
| //-------------------------------------------- |
| |
| |
| Sc10PatternData::Sc10PatternData(SvStream& rStream) |
| { |
| lcl_ReadFixedString( rStream, Name, sizeof(Name)); |
| lcl_ReadValueFormat(rStream, ValueFormat); |
| lcl_ReadLogFont(rStream, LogFont); |
| |
| rStream >> Attr; |
| rStream >> Justify; |
| rStream >> Frame; |
| rStream >> Raster; |
| rStream >> nColor; |
| rStream >> FrameColor; |
| rStream >> Flags; |
| rStream >> FormatFlags; |
| rStream.Read(Reserved, sizeof(Reserved)); |
| } |
| |
| |
| Sc10PatternCollection::Sc10PatternCollection(SvStream& rStream) : |
| ScCollection (4, 4), |
| nError (0) |
| { |
| sal_uInt16 ID; |
| rStream >> ID; |
| if (ID == PatternID) |
| { |
| sal_uInt16 nAnz; |
| rStream >> nAnz; |
| for (sal_uInt16 i=0; (i < nAnz) && (nError == 0); i++) |
| { |
| nError = insert_new<Sc10PatternData>( this, rStream); |
| } |
| } |
| else |
| { |
| DBG_ERROR( "PatternID" ); |
| nError = errUnknownID; |
| } |
| } |
| |
| |
| //-------------------------------------------- |
| // Datenbank |
| //-------------------------------------------- |
| |
| |
| Sc10DataBaseData::Sc10DataBaseData(SvStream& rStream) |
| { |
| lcl_ReadFixedString( rStream, &DataBaseRec.Name, sizeof(DataBaseRec.Name)); |
| rStream >> DataBaseRec.Tab; |
| lcl_ReadBlockRect(rStream, DataBaseRec.Block); |
| rStream >> DataBaseRec.RowHeader; |
| rStream >> DataBaseRec.SortField0; |
| rStream >> DataBaseRec.SortUpOrder0; |
| rStream >> DataBaseRec.SortField1; |
| rStream >> DataBaseRec.SortUpOrder1; |
| rStream >> DataBaseRec.SortField2; |
| rStream >> DataBaseRec.SortUpOrder2; |
| rStream >> DataBaseRec.IncludeFormat; |
| |
| rStream >> DataBaseRec.QueryField0; |
| rStream >> DataBaseRec.QueryOp0; |
| rStream >> DataBaseRec.QueryByString0; |
| lcl_ReadFixedString( rStream, &DataBaseRec.QueryString0, sizeof(DataBaseRec.QueryString0)); |
| DataBaseRec.QueryValue0 = ScfTools::ReadLongDouble(rStream); |
| |
| rStream >> DataBaseRec.QueryConnect1; |
| rStream >> DataBaseRec.QueryField1; |
| rStream >> DataBaseRec.QueryOp1; |
| rStream >> DataBaseRec.QueryByString1; |
| lcl_ReadFixedString( rStream, &DataBaseRec.QueryString1, sizeof(DataBaseRec.QueryString1)); |
| DataBaseRec.QueryValue1 = ScfTools::ReadLongDouble(rStream); |
| |
| rStream >> DataBaseRec.QueryConnect2; |
| rStream >> DataBaseRec.QueryField2; |
| rStream >> DataBaseRec.QueryOp2; |
| rStream >> DataBaseRec.QueryByString2; |
| lcl_ReadFixedString( rStream, &DataBaseRec.QueryString2, sizeof(DataBaseRec.QueryString2)); |
| DataBaseRec.QueryValue2 = ScfTools::ReadLongDouble(rStream); |
| } |
| |
| |
| Sc10DataBaseCollection::Sc10DataBaseCollection(SvStream& rStream) : |
| ScCollection (4, 4), |
| nError (0) |
| { |
| sal_uInt16 ID; |
| rStream >> ID; |
| if (ID == DataBaseID) |
| { |
| lcl_ReadFixedString( rStream, ActName, sizeof(ActName)); |
| sal_uInt16 nAnz; |
| rStream >> nAnz; |
| for (sal_uInt16 i=0; (i < nAnz) && (nError == 0); i++) |
| { |
| nError = insert_new<Sc10DataBaseData>( this, rStream); |
| } |
| } |
| else |
| { |
| DBG_ERROR( "DataBaseID" ); |
| nError = errUnknownID; |
| } |
| } |
| |
| |
| int Sc10LogFont::operator==( const Sc10LogFont& rData ) const |
| { |
| return !strcmp( lfFaceName, rData.lfFaceName ) |
| && lfHeight == rData.lfHeight |
| && lfWidth == rData.lfWidth |
| && lfEscapement == rData.lfEscapement |
| && lfOrientation == rData.lfOrientation |
| && lfWeight == rData.lfWeight |
| && lfItalic == rData.lfItalic |
| && lfUnderline == rData.lfUnderline |
| && lfStrikeOut == rData.lfStrikeOut |
| && lfCharSet == rData.lfCharSet |
| && lfOutPrecision == rData.lfOutPrecision |
| && lfClipPrecision == rData.lfClipPrecision |
| && lfQuality == rData.lfQuality |
| && lfPitchAndFamily == rData.lfPitchAndFamily; |
| } |
| |
| |
| int Sc10Color::operator==( const Sc10Color& rColor ) const |
| { |
| return ((Red == rColor.Red) && (Green == rColor.Green) && (Blue == rColor.Blue)); |
| } |
| |
| |
| int Sc10HeadFootLine::operator==( const Sc10HeadFootLine& rData ) const |
| { |
| return !strcmp(Title, rData.Title) |
| && LogFont == rData.LogFont |
| && HorJustify == rData.HorJustify |
| && VerJustify == rData.VerJustify |
| && Raster == rData.Raster |
| && Frame == rData.Frame |
| && TextColor == rData.TextColor |
| && BackColor == rData.BackColor |
| && RasterColor == rData.RasterColor |
| && FrameColor == rData.FrameColor |
| && Reserved == rData.Reserved; |
| } |
| |
| |
| int Sc10PageFormat::operator==( const Sc10PageFormat& rData ) const |
| { |
| return !strcmp(PrintAreaName, rData.PrintAreaName) |
| && HeadLine == rData.HeadLine |
| && FootLine == rData.FootLine |
| && Orientation == rData.Orientation |
| && Width == rData.Width |
| && Height == rData.Height |
| && NonPrintableX == rData.NonPrintableX |
| && NonPrintableY == rData.NonPrintableY |
| && Left == rData.Left |
| && Top == rData.Top |
| && Right == rData.Right |
| && Bottom == rData.Bottom |
| && Head == rData.Head |
| && Foot == rData.Foot |
| && HorCenter == rData.HorCenter |
| && VerCenter == rData.VerCenter |
| && PrintGrid == rData.PrintGrid |
| && PrintColRow == rData.PrintColRow |
| && PrintNote == rData.PrintNote |
| && TopBottomDir == rData.TopBottomDir |
| && FirstPageNo == rData.FirstPageNo |
| && RowRepeatStart == rData.RowRepeatStart |
| && RowRepeatEnd == rData.RowRepeatEnd |
| && ColRepeatStart == rData.ColRepeatStart |
| && ColRepeatEnd == rData.ColRepeatEnd |
| && !memcmp( PrnZoom, rData.PrnZoom, sizeof(PrnZoom) ) |
| && !memcmp( &PrintArea, &rData.PrintArea, sizeof(PrintArea) ); |
| } |
| |
| |
| sal_uInt16 Sc10PageCollection::InsertFormat( const Sc10PageFormat& rData ) |
| { |
| for (sal_uInt16 i=0; i<nCount; i++) |
| if (At(i)->aPageFormat == rData) |
| return i; |
| |
| Insert( new Sc10PageData(rData) ); |
| |
| return nCount-1; |
| } |
| |
| |
| static inline sal_uInt8 GetMixedCol( const sal_uInt8 nB, const sal_uInt8 nF, const sal_uInt16 nFak ) |
| { |
| sal_Int32 nT = nB - nF; |
| nT *= ( sal_Int32 ) nFak; |
| nT /= 0xFFFF; |
| nT += nF; |
| return ( sal_uInt8 ) nT; |
| } |
| static inline Color GetMixedColor( const Color& rFore, const Color& rBack, sal_uInt16 nFact ) |
| { |
| return Color( GetMixedCol( rBack.GetRed(), rFore.GetRed(), nFact ), |
| GetMixedCol( rBack.GetGreen(), rFore.GetGreen(), nFact ), |
| GetMixedCol( rBack.GetBlue(), rFore.GetBlue(), nFact ) ); |
| } |
| |
| |
| void Sc10PageCollection::PutToDoc( ScDocument* pDoc ) |
| { |
| ScStyleSheetPool* pStylePool = pDoc->GetStyleSheetPool(); |
| EditEngine aEditEngine( pDoc->GetEnginePool() ); |
| EditTextObject* pEmptyObject = aEditEngine.CreateTextObject(); |
| |
| for (sal_uInt16 i=0; i<nCount; i++) |
| { |
| Sc10PageFormat* pPage = &At(i)->aPageFormat; |
| |
| pPage->Width = (short) ( pPage->Width * ( 72.0 / 72.27 ) + 0.5 ); |
| pPage->Height = (short) ( pPage->Height * ( 72.0 / 72.27 ) + 0.5 ); |
| pPage->Top = (short) ( pPage->Top * ( 72.0 / 72.27 ) + 0.5 ); |
| pPage->Bottom = (short) ( pPage->Bottom * ( 72.0 / 72.27 ) + 0.5 ); |
| pPage->Left = (short) ( pPage->Left * ( 72.0 / 72.27 ) + 0.5 ); |
| pPage->Right = (short) ( pPage->Right * ( 72.0 / 72.27 ) + 0.5 ); |
| pPage->Head = (short) ( pPage->Head * ( 72.0 / 72.27 ) + 0.5 ); |
| pPage->Foot = (short) ( pPage->Foot * ( 72.0 / 72.27 ) + 0.5 ); |
| |
| String aName = lcl_MakeOldPageStyleFormatName( i ); |
| |
| ScStyleSheet* pSheet = (ScStyleSheet*) &pStylePool->Make( aName, |
| SFX_STYLE_FAMILY_PAGE, |
| SFXSTYLEBIT_USERDEF | SCSTYLEBIT_STANDARD ); |
| // #i68483# set page style name at sheet... |
| pDoc->SetPageStyle( static_cast< SCTAB >( i ), aName ); |
| |
| SfxItemSet* pSet = &pSheet->GetItemSet(); |
| |
| for (sal_uInt16 nHeadFoot=0; nHeadFoot<2; nHeadFoot++) |
| { |
| Sc10HeadFootLine* pHeadFootLine = nHeadFoot ? &pPage->FootLine : &pPage->HeadLine; |
| |
| SfxItemSet aEditAttribs(aEditEngine.GetEmptyItemSet()); |
| FontFamily eFam = FAMILY_DONTKNOW; |
| switch (pPage->HeadLine.LogFont.lfPitchAndFamily & 0xF0) |
| { |
| case ffDontCare: eFam = FAMILY_DONTKNOW; break; |
| case ffRoman: eFam = FAMILY_ROMAN; break; |
| case ffSwiss: eFam = FAMILY_SWISS; break; |
| case ffModern: eFam = FAMILY_MODERN; break; |
| case ffScript: eFam = FAMILY_SCRIPT; break; |
| case ffDecorative: eFam = FAMILY_DECORATIVE; break; |
| default: eFam = FAMILY_DONTKNOW; break; |
| } |
| aEditAttribs.Put( SvxFontItem( |
| eFam, |
| SC10TOSTRING( pHeadFootLine->LogFont.lfFaceName ), EMPTY_STRING, |
| PITCH_DONTKNOW, RTL_TEXTENCODING_DONTKNOW, EE_CHAR_FONTINFO ), |
| EE_CHAR_FONTINFO ); |
| aEditAttribs.Put( SvxFontHeightItem( Abs( pHeadFootLine->LogFont.lfHeight ), 100, EE_CHAR_FONTHEIGHT ), |
| EE_CHAR_FONTHEIGHT); |
| |
| Sc10Color nColor = pHeadFootLine->TextColor; |
| Color TextColor( nColor.Red, nColor.Green, nColor.Blue ); |
| aEditAttribs.Put(SvxColorItem(TextColor, EE_CHAR_COLOR), EE_CHAR_COLOR); |
| // FontAttr |
| if (pHeadFootLine->LogFont.lfWeight != fwNormal) |
| aEditAttribs.Put(SvxWeightItem(WEIGHT_BOLD, EE_CHAR_WEIGHT), EE_CHAR_WEIGHT); |
| if (pHeadFootLine->LogFont.lfItalic != 0) |
| aEditAttribs.Put(SvxPostureItem(ITALIC_NORMAL, EE_CHAR_ITALIC), EE_CHAR_ITALIC); |
| if (pHeadFootLine->LogFont.lfUnderline != 0) |
| aEditAttribs.Put(SvxUnderlineItem(UNDERLINE_SINGLE, EE_CHAR_UNDERLINE), EE_CHAR_UNDERLINE); |
| if (pHeadFootLine->LogFont.lfStrikeOut != 0) |
| aEditAttribs.Put(SvxCrossedOutItem(STRIKEOUT_SINGLE, EE_CHAR_STRIKEOUT), EE_CHAR_STRIKEOUT); |
| String aText( pHeadFootLine->Title, DEFCHARSET ); |
| aEditEngine.SetText( aText ); |
| aEditEngine.QuickSetAttribs( aEditAttribs, ESelection( 0, 0, 0, aText.Len() ) ); |
| |
| EditTextObject* pObject = aEditEngine.CreateTextObject(); |
| ScPageHFItem aHeaderItem(nHeadFoot ? ATTR_PAGE_FOOTERRIGHT : ATTR_PAGE_HEADERRIGHT); |
| switch (pHeadFootLine->HorJustify) |
| { |
| case hjCenter: |
| aHeaderItem.SetLeftArea(*pEmptyObject); |
| aHeaderItem.SetCenterArea(*pObject); |
| aHeaderItem.SetRightArea(*pEmptyObject); |
| break; |
| case hjRight: |
| aHeaderItem.SetLeftArea(*pEmptyObject); |
| aHeaderItem.SetCenterArea(*pEmptyObject); |
| aHeaderItem.SetRightArea(*pObject); |
| break; |
| default: |
| aHeaderItem.SetLeftArea(*pObject); |
| aHeaderItem.SetCenterArea(*pEmptyObject); |
| aHeaderItem.SetRightArea(*pEmptyObject); |
| break; |
| } |
| delete pObject; |
| pSet->Put( aHeaderItem ); |
| |
| SfxItemSet aSetItemItemSet( *pDoc->GetPool(), |
| ATTR_BACKGROUND, ATTR_BACKGROUND, |
| ATTR_BORDER, ATTR_SHADOW, |
| ATTR_PAGE_SIZE, ATTR_PAGE_SIZE, |
| ATTR_LRSPACE, ATTR_ULSPACE, |
| ATTR_PAGE_ON, ATTR_PAGE_SHARED, |
| 0 ); |
| nColor = pHeadFootLine->BackColor; |
| Color aBColor( nColor.Red, nColor.Green, nColor.Blue ); |
| nColor = pHeadFootLine->RasterColor; |
| Color aRColor( nColor.Red, nColor.Green, nColor.Blue ); |
| |
| sal_uInt16 nFact; |
| sal_Bool bSwapCol = sal_False; |
| switch (pHeadFootLine->Raster) |
| { |
| case raNone: nFact = 0xffff; bSwapCol = sal_True; break; |
| case raGray12: nFact = (0xffff / 100) * 12; break; |
| case raGray25: nFact = (0xffff / 100) * 25; break; |
| case raGray50: nFact = (0xffff / 100) * 50; break; |
| case raGray75: nFact = (0xffff / 100) * 75; break; |
| default: nFact = 0xffff; |
| } |
| if( bSwapCol ) |
| aSetItemItemSet.Put( SvxBrushItem( GetMixedColor( aBColor, aRColor, nFact ), ATTR_BACKGROUND ) ); |
| else |
| aSetItemItemSet.Put( SvxBrushItem( GetMixedColor( aRColor, aBColor, nFact ), ATTR_BACKGROUND ) ); |
| |
| if (pHeadFootLine->Frame != 0) |
| { |
| sal_uInt16 nLeft = 0; |
| sal_uInt16 nTop = 0; |
| sal_uInt16 nRight = 0; |
| sal_uInt16 nBottom = 0; |
| sal_uInt16 fLeft = (pHeadFootLine->Frame & 0x000F); |
| sal_uInt16 fTop = (pHeadFootLine->Frame & 0x00F0) / 0x0010; |
| sal_uInt16 fRight = (pHeadFootLine->Frame & 0x0F00) / 0x0100; |
| sal_uInt16 fBottom = (pHeadFootLine->Frame & 0xF000) / 0x1000; |
| if (fLeft > 1) |
| nLeft = 50; |
| else if (fLeft > 0) |
| nLeft = 20; |
| if (fTop > 1) |
| nTop = 50; |
| else if (fTop > 0) |
| nTop = 20; |
| if (fRight > 1) |
| nRight = 50; |
| else if (fRight > 0) |
| nRight = 20; |
| if (fBottom > 1) |
| nBottom = 50; |
| else if (fBottom > 0) |
| nBottom = 20; |
| Color ColorLeft(COL_BLACK); |
| Color ColorTop(COL_BLACK); |
| Color ColorRight(COL_BLACK); |
| Color ColorBottom(COL_BLACK); |
| sal_uInt16 cLeft = (pHeadFootLine->FrameColor & 0x000F); |
| sal_uInt16 cTop = (pHeadFootLine->FrameColor & 0x00F0) >> 4; |
| sal_uInt16 cRight = (pHeadFootLine->FrameColor & 0x0F00) >> 8; |
| sal_uInt16 cBottom = (pHeadFootLine->FrameColor & 0xF000) >> 12; |
| lcl_ChangeColor(cLeft, ColorLeft); |
| lcl_ChangeColor(cTop, ColorTop); |
| lcl_ChangeColor(cRight, ColorRight); |
| lcl_ChangeColor(cBottom, ColorBottom); |
| SvxBorderLine aLine; |
| SvxBoxItem aBox( ATTR_BORDER ); |
| aLine.SetOutWidth(nLeft); |
| aLine.SetColor(ColorLeft); |
| aBox.SetLine(&aLine, BOX_LINE_LEFT); |
| aLine.SetOutWidth(nTop); |
| aLine.SetColor(ColorTop); |
| aBox.SetLine(&aLine, BOX_LINE_TOP); |
| aLine.SetOutWidth(nRight); |
| aLine.SetColor(ColorRight); |
| aBox.SetLine(&aLine, BOX_LINE_RIGHT); |
| aLine.SetOutWidth(nBottom); |
| aLine.SetColor(ColorBottom); |
| aBox.SetLine(&aLine, BOX_LINE_BOTTOM); |
| |
| aSetItemItemSet.Put(aBox); |
| } |
| |
| pSet->Put( SvxULSpaceItem( 0, 0, ATTR_ULSPACE ) ); |
| |
| if (nHeadFoot==0) |
| aSetItemItemSet.Put( SvxSizeItem( ATTR_PAGE_SIZE, Size( 0, pPage->Top - pPage->Head ) ) ); |
| else |
| aSetItemItemSet.Put( SvxSizeItem( ATTR_PAGE_SIZE, Size( 0, pPage->Bottom - pPage->Foot ) ) ); |
| |
| aSetItemItemSet.Put(SfxBoolItem( ATTR_PAGE_ON, sal_True )); |
| aSetItemItemSet.Put(SfxBoolItem( ATTR_PAGE_DYNAMIC, sal_False )); |
| aSetItemItemSet.Put(SfxBoolItem( ATTR_PAGE_SHARED, sal_True )); |
| |
| pSet->Put( SvxSetItem( nHeadFoot ? ATTR_PAGE_FOOTERSET : ATTR_PAGE_HEADERSET, |
| aSetItemItemSet ) ); |
| } |
| |
| SvxPageItem aPageItem(ATTR_PAGE); |
| aPageItem.SetPageUsage( SVX_PAGE_ALL ); |
| aPageItem.SetLandscape( pPage->Orientation != 1 ); |
| aPageItem.SetNumType( SVX_ARABIC ); |
| pSet->Put(aPageItem); |
| |
| pSet->Put(SvxLRSpaceItem( pPage->Left, pPage->Right, 0,0, ATTR_LRSPACE )); |
| pSet->Put(SvxULSpaceItem( pPage->Top, pPage->Bottom, ATTR_ULSPACE )); |
| |
| pSet->Put(SfxBoolItem( ATTR_PAGE_HORCENTER, pPage->HorCenter )); |
| pSet->Put(SfxBoolItem( ATTR_PAGE_VERCENTER, pPage->VerCenter )); |
| |
| //---------------- |
| // Area-Parameter: |
| //---------------- |
| { |
| ScRange* pRepeatRow = NULL; |
| ScRange* pRepeatCol = NULL; |
| |
| if ( pPage->ColRepeatStart >= 0 ) |
| pRepeatCol = new ScRange( static_cast<SCCOL> (pPage->ColRepeatStart), 0, 0 ); |
| if ( pPage->RowRepeatStart >= 0 ) |
| pRepeatRow = new ScRange( 0, static_cast<SCROW> (pPage->RowRepeatStart), 0 ); |
| |
| |
| if ( pRepeatRow || pRepeatCol ) |
| { |
| // |
| // an allen Tabellen setzen |
| // |
| for ( SCTAB nTab = 0, nTabCount = pDoc->GetTableCount(); nTab < nTabCount; ++nTab ) |
| { |
| pDoc->SetRepeatColRange( nTab, pRepeatCol ); |
| pDoc->SetRepeatRowRange( nTab, pRepeatRow ); |
| } |
| } |
| |
| delete pRepeatRow; |
| delete pRepeatCol; |
| } |
| |
| //----------------- |
| // Table-Parameter: |
| //----------------- |
| pSet->Put( SfxBoolItem( ATTR_PAGE_NOTES, pPage->PrintNote ) ); |
| pSet->Put( SfxBoolItem( ATTR_PAGE_GRID, pPage->PrintGrid ) ); |
| pSet->Put( SfxBoolItem( ATTR_PAGE_HEADERS, pPage->PrintColRow ) ); |
| pSet->Put( SfxBoolItem( ATTR_PAGE_TOPDOWN, pPage->TopBottomDir ) ); |
| pSet->Put( ScViewObjectModeItem( ATTR_PAGE_CHARTS, VOBJ_MODE_SHOW ) ); |
| pSet->Put( ScViewObjectModeItem( ATTR_PAGE_OBJECTS, VOBJ_MODE_SHOW ) ); |
| pSet->Put( ScViewObjectModeItem( ATTR_PAGE_DRAWINGS, VOBJ_MODE_SHOW ) ); |
| pSet->Put( SfxUInt16Item( ATTR_PAGE_SCALE, |
| (sal_uInt16)( lcl_PascalToDouble( pPage->PrnZoom ) * 100 ) ) ); |
| pSet->Put( SfxUInt16Item( ATTR_PAGE_FIRSTPAGENO, 1 ) ); |
| |
| pSet->Put( SvxSizeItem( ATTR_PAGE_SIZE, Size( pPage->Width, pPage->Height ) ) ); |
| } |
| |
| delete pEmptyObject; |
| } |
| |
| |
| ScDataObject* Sc10PageData::Clone() const |
| { |
| return new Sc10PageData(aPageFormat); |
| } |
| |
| |
| //-------------------------------------------- |
| // Import |
| //-------------------------------------------- |
| |
| |
| Sc10Import::Sc10Import(SvStream& rStr, ScDocument* pDocument ) : |
| rStream (rStr), |
| pDoc (pDocument), |
| pFontCollection (NULL), |
| pNameCollection (NULL), |
| pPatternCollection (NULL), |
| pDataBaseCollection (NULL), |
| nError (0), |
| nShowTab (0) |
| { |
| pPrgrsBar = NULL; |
| } |
| |
| |
| Sc10Import::~Sc10Import() |
| { |
| pDoc->CalcAfterLoad(); |
| pDoc->UpdateAllCharts(); |
| |
| delete pFontCollection; |
| delete pNameCollection; |
| delete pPatternCollection; |
| delete pDataBaseCollection; |
| |
| DBG_ASSERT( pPrgrsBar == NULL, |
| "*Sc10Import::Sc10Import(): Progressbar lebt noch!?" ); |
| } |
| |
| |
| sal_uLong Sc10Import::Import() |
| { |
| pPrgrsBar = new ScfStreamProgressBar( rStream, pDoc->GetDocumentShell() ); |
| |
| ScDocOptions aOpt = pDoc->GetDocOptions(); |
| aOpt.SetDate( 1, 1, 1900 ); |
| aOpt.SetYear2000( 18 + 1901 ); // ab SO51 src513e vierstellig |
| pDoc->SetDocOptions( aOpt ); |
| pDoc->GetFormatTable()->ChangeNullDate( 1, 1, 1900 ); |
| |
| LoadFileHeader(); pPrgrsBar->Progress(); |
| if (!nError) { LoadFileInfo(); pPrgrsBar->Progress(); } |
| if (!nError) { LoadEditStateInfo(); pPrgrsBar->Progress(); } |
| if (!nError) { LoadProtect(); pPrgrsBar->Progress(); } |
| if (!nError) { LoadViewColRowBar(); pPrgrsBar->Progress(); } |
| if (!nError) { LoadScrZoom(); pPrgrsBar->Progress(); } |
| if (!nError) { LoadPalette(); pPrgrsBar->Progress(); } |
| if (!nError) { LoadFontCollection(); pPrgrsBar->Progress(); } |
| if (!nError) { LoadNameCollection(); pPrgrsBar->Progress(); } |
| if (!nError) { LoadPatternCollection(); pPrgrsBar->Progress(); } |
| if (!nError) { LoadDataBaseCollection(); pPrgrsBar->Progress(); } |
| if (!nError) { LoadTables(); pPrgrsBar->Progress(); } |
| if (!nError) { LoadObjects(); pPrgrsBar->Progress(); } |
| if (!nError) { ImportNameCollection(); pPrgrsBar->Progress(); } |
| pDoc->SetViewOptions( aSc30ViewOpt ); |
| |
| #ifdef DBG_UTIL |
| if (nError) |
| { |
| DBG_ERROR( ByteString::CreateFromInt32( nError ).GetBuffer() ); |
| } |
| #endif |
| |
| delete pPrgrsBar; |
| #ifdef DBG_UTIL |
| pPrgrsBar = NULL; |
| #endif |
| |
| return nError; |
| } |
| |
| |
| void Sc10Import::LoadFileHeader() |
| { |
| Sc10FileHeader FileHeader; |
| lcl_ReadFileHeader(rStream, FileHeader); |
| |
| nError = rStream.GetError(); |
| if ( nError == 0 ) |
| { |
| sal_Char Sc10CopyRight[32]; |
| strcpy(Sc10CopyRight, "Blaise-Tabelle"); // #100211# - checked |
| Sc10CopyRight[14] = 10; |
| Sc10CopyRight[15] = 13; |
| Sc10CopyRight[16] = 0; |
| if ((strcmp(FileHeader.CopyRight, Sc10CopyRight) != 0) |
| || (FileHeader.Version < 101) |
| || (FileHeader.Version > 102)) |
| nError = errUnknownFormat; |
| } |
| } |
| |
| |
| void Sc10Import::LoadFileInfo() |
| { |
| Sc10FileInfo FileInfo; |
| rStream.Read(&FileInfo, sizeof(FileInfo)); |
| |
| nError = rStream.GetError(); |
| // Achtung Info Uebertragen |
| } |
| |
| |
| |
| void Sc10Import::LoadEditStateInfo() |
| { |
| Sc10EditStateInfo EditStateInfo; |
| rStream.Read(&EditStateInfo, sizeof(EditStateInfo)); |
| |
| nError = rStream.GetError(); |
| nShowTab = static_cast<SCTAB>(EditStateInfo.DeltaZ); |
| // Achtung Cursorposition und Offset der Tabelle Uebertragen (soll man das machen??) |
| } |
| |
| |
| void Sc10Import::LoadProtect() |
| { |
| lcl_ReadSheetProtect(rStream, SheetProtect); |
| nError = rStream.GetError(); |
| |
| ScDocProtection aProtection; |
| aProtection.setProtected(static_cast<bool>(SheetProtect.Protect)); |
| aProtection.setPassword(SC10TOSTRING(SheetProtect.PassWord)); |
| pDoc->SetDocProtection(&aProtection); |
| } |
| |
| |
| void Sc10Import::LoadViewColRowBar() |
| { |
| sal_uInt8 ViewColRowBar; |
| rStream >> ViewColRowBar; |
| nError = rStream.GetError(); |
| aSc30ViewOpt.SetOption( VOPT_HEADER, (sal_Bool)ViewColRowBar ); |
| } |
| |
| |
| void Sc10Import::LoadScrZoom() |
| { |
| // Achtung Zoom ist leider eine 6Byte TP real Zahl (keine Ahnung wie die Umzusetzen ist) |
| sal_Char cZoom[6]; |
| rStream.Read(cZoom, sizeof(cZoom)); |
| nError = rStream.GetError(); |
| } |
| |
| |
| void Sc10Import::LoadPalette() |
| { |
| lcl_ReadPalette(rStream, TextPalette); |
| lcl_ReadPalette(rStream, BackPalette); |
| lcl_ReadPalette(rStream, RasterPalette); |
| lcl_ReadPalette(rStream, FramePalette); |
| |
| nError = rStream.GetError(); |
| } |
| |
| |
| void Sc10Import::LoadFontCollection() |
| { |
| pFontCollection = new Sc10FontCollection(rStream); |
| if (!nError) |
| nError = pFontCollection->GetError(); |
| } |
| |
| |
| void Sc10Import::LoadNameCollection() |
| { |
| pNameCollection = new Sc10NameCollection(rStream); |
| if (!nError) |
| nError = pNameCollection->GetError(); |
| } |
| |
| |
| void Sc10Import::ImportNameCollection() |
| { |
| ScRangeName* pRN = pDoc->GetRangeName(); |
| |
| for (sal_uInt16 i = 0; i < pNameCollection->GetCount(); i++) |
| { |
| Sc10NameData* pName = pNameCollection->At( i ); |
| pRN->Insert( new ScRangeData( pDoc, |
| SC10TOSTRING( pName->Name ), |
| SC10TOSTRING( pName->Reference ) ) ); |
| } |
| } |
| |
| |
| void Sc10Import::LoadPatternCollection() |
| { |
| pPatternCollection = new Sc10PatternCollection( rStream ); |
| if (!nError) |
| nError = pPatternCollection->GetError(); |
| if (nError == errOutOfMemory) |
| return; // hopeless |
| ScStyleSheetPool* pStylePool = pDoc->GetStyleSheetPool(); |
| for( sal_uInt16 i = 0 ; i < pPatternCollection->GetCount() ; i++ ) |
| { |
| Sc10PatternData* pPattern = pPatternCollection->At( i ); |
| String aName( pPattern->Name, DEFCHARSET ); |
| SfxStyleSheetBase* pStyle = pStylePool->Find( aName, SFX_STYLE_FAMILY_PARA ); |
| if( pStyle == NULL ) |
| pStylePool->Make( aName, SFX_STYLE_FAMILY_PARA ); |
| else |
| { |
| pPattern->Name[ 27 ] = 0; |
| strcat( pPattern->Name, "_Old" ); // #100211# - checked |
| aName = SC10TOSTRING( pPattern->Name ); |
| pStylePool->Make( aName, SFX_STYLE_FAMILY_PARA ); |
| } |
| pStyle = pStylePool->Find( aName, SFX_STYLE_FAMILY_PARA ); |
| if( pStyle != NULL ) |
| { |
| SfxItemSet &rItemSet = pStyle->GetItemSet(); |
| // Font |
| if( ( pPattern->FormatFlags & pfFont ) == pfFont ) |
| { |
| FontFamily eFam = FAMILY_DONTKNOW; |
| switch( pPattern->LogFont.lfPitchAndFamily & 0xF0 ) |
| { |
| case ffDontCare : eFam = FAMILY_DONTKNOW; break; |
| case ffRoman : eFam = FAMILY_ROMAN; break; |
| case ffSwiss : eFam = FAMILY_SWISS; break; |
| case ffModern : eFam = FAMILY_MODERN; break; |
| case ffScript : eFam = FAMILY_SCRIPT; break; |
| case ffDecorative : eFam = FAMILY_DECORATIVE; break; |
| default: eFam = FAMILY_DONTKNOW; break; |
| } |
| rItemSet.Put( SvxFontItem( eFam, SC10TOSTRING( pPattern->LogFont.lfFaceName ), EMPTY_STRING, |
| PITCH_DONTKNOW, RTL_TEXTENCODING_DONTKNOW, ATTR_FONT ) ); |
| rItemSet.Put( SvxFontHeightItem( Abs( pPattern->LogFont.lfHeight ), 100, ATTR_FONT_HEIGHT ) ); |
| Color TextColor( COL_BLACK ); |
| lcl_ChangeColor( ( pPattern->nColor & 0x000F ), TextColor ); |
| rItemSet.Put( SvxColorItem( TextColor, ATTR_FONT_COLOR ) ); |
| // FontAttr |
| if( pPattern->LogFont.lfWeight != fwNormal ) |
| rItemSet.Put( SvxWeightItem( WEIGHT_BOLD, ATTR_FONT_WEIGHT ) ); |
| if( pPattern->LogFont.lfItalic != 0 ) |
| rItemSet.Put( SvxPostureItem( ITALIC_NORMAL, ATTR_FONT_POSTURE ) ); |
| if( pPattern->LogFont.lfUnderline != 0 ) |
| rItemSet.Put( SvxUnderlineItem( UNDERLINE_SINGLE, ATTR_FONT_UNDERLINE ) ); |
| if( pPattern->LogFont.lfStrikeOut != 0 ) |
| rItemSet.Put( SvxCrossedOutItem( STRIKEOUT_SINGLE, ATTR_FONT_CROSSEDOUT ) ); |
| } |
| // Ausrichtung |
| if( ( pPattern->FormatFlags & pfJustify ) == pfJustify ) |
| { |
| sal_uInt16 HorJustify = ( pPattern->Justify & 0x000F ); |
| sal_uInt16 VerJustify = ( pPattern->Justify & 0x00F0 ) >> 4; |
| sal_uInt16 OJustify = ( pPattern->Justify & 0x0F00 ) >> 8; |
| sal_uInt16 EJustify = ( pPattern->Justify & 0xF000 ) >> 12; |
| if( HorJustify != 0 ) |
| switch( HorJustify ) |
| { |
| case hjLeft: |
| rItemSet.Put( SvxHorJustifyItem( SVX_HOR_JUSTIFY_LEFT, ATTR_HOR_JUSTIFY ) ); |
| break; |
| case hjCenter: |
| rItemSet.Put( SvxHorJustifyItem( SVX_HOR_JUSTIFY_CENTER, ATTR_HOR_JUSTIFY ) ); |
| break; |
| case hjRight: |
| rItemSet.Put( SvxHorJustifyItem( SVX_HOR_JUSTIFY_RIGHT, ATTR_HOR_JUSTIFY ) ); |
| break; |
| } |
| if( VerJustify != 0 ) |
| switch( VerJustify ) |
| { |
| case vjTop: |
| rItemSet.Put( SvxVerJustifyItem( SVX_VER_JUSTIFY_TOP, ATTR_VER_JUSTIFY ) ); |
| break; |
| case vjCenter: |
| rItemSet.Put( SvxVerJustifyItem( SVX_VER_JUSTIFY_CENTER, ATTR_VER_JUSTIFY ) ); |
| break; |
| case vjBottom: |
| rItemSet.Put( SvxVerJustifyItem( SVX_VER_JUSTIFY_BOTTOM, ATTR_VER_JUSTIFY ) ); |
| break; |
| } |
| |
| if( ( OJustify & ojWordBreak ) == ojWordBreak ) |
| rItemSet.Put( SfxBoolItem( sal_True ) ); |
| if( ( OJustify & ojBottomTop ) == ojBottomTop ) |
| rItemSet.Put( SfxInt32Item( ATTR_ROTATE_VALUE, 9000 ) ); |
| else if( ( OJustify & ojTopBottom ) == ojTopBottom ) |
| rItemSet.Put( SfxInt32Item( ATTR_ROTATE_VALUE, 27000 ) ); |
| |
| sal_Int16 Margin = Max( ( sal_uInt16 ) 20, ( sal_uInt16 ) ( EJustify * 20 ) ); |
| if( ( ( OJustify & ojBottomTop ) == ojBottomTop ) ) |
| rItemSet.Put( SvxMarginItem( 20, Margin, 20, Margin, ATTR_MARGIN ) ); |
| else |
| rItemSet.Put( SvxMarginItem( Margin, 20, Margin, 20, ATTR_MARGIN ) ); |
| } |
| |
| // Frame |
| if( ( pPattern->FormatFlags & pfFrame ) == pfFrame ) |
| { |
| if( pPattern->Frame != 0 ) |
| { |
| sal_uInt16 nLeft = 0; |
| sal_uInt16 nTop = 0; |
| sal_uInt16 nRight = 0; |
| sal_uInt16 nBottom = 0; |
| sal_uInt16 fLeft = ( pPattern->Frame & 0x000F ); |
| sal_uInt16 fTop = ( pPattern->Frame & 0x00F0 ) / 0x0010; |
| sal_uInt16 fRight = ( pPattern->Frame & 0x0F00 ) / 0x0100; |
| sal_uInt16 fBottom = ( pPattern->Frame & 0xF000 ) / 0x1000; |
| |
| if( fLeft > 1 ) |
| nLeft = 50; |
| else if( fLeft > 0 ) |
| nLeft = 20; |
| |
| if( fTop > 1 ) |
| nTop = 50; |
| else if( fTop > 0 ) |
| nTop = 20; |
| |
| if( fRight > 1 ) |
| nRight = 50; |
| else if( fRight > 0 ) |
| nRight = 20; |
| |
| if( fBottom > 1 ) |
| nBottom = 50; |
| else if( fBottom > 0 ) |
| nBottom = 20; |
| |
| Color ColorLeft( COL_BLACK ); |
| Color ColorTop( COL_BLACK ); |
| Color ColorRight( COL_BLACK ); |
| Color ColorBottom( COL_BLACK ); |
| |
| sal_uInt16 cLeft = ( pPattern->FrameColor & 0x000F ); |
| sal_uInt16 cTop = ( pPattern->FrameColor & 0x00F0 ) >> 4; |
| sal_uInt16 cRight = ( pPattern->FrameColor & 0x0F00 ) >> 8; |
| sal_uInt16 cBottom = ( pPattern->FrameColor & 0xF000 ) >> 12; |
| |
| lcl_ChangeColor( cLeft, ColorLeft ); |
| lcl_ChangeColor( cTop, ColorTop ); |
| lcl_ChangeColor( cRight, ColorRight ); |
| lcl_ChangeColor( cBottom, ColorBottom ); |
| |
| SvxBorderLine aLine; |
| SvxBoxItem aBox( ATTR_BORDER ); |
| |
| aLine.SetOutWidth( nLeft ); |
| aLine.SetColor( ColorLeft ); |
| aBox.SetLine( &aLine, BOX_LINE_LEFT ); |
| aLine.SetOutWidth( nTop ); |
| aLine.SetColor( ColorTop ); |
| aBox.SetLine( &aLine, BOX_LINE_TOP ); |
| aLine.SetOutWidth( nRight ); |
| aLine.SetColor( ColorRight ); |
| aBox.SetLine( &aLine, BOX_LINE_RIGHT ); |
| aLine.SetOutWidth( nBottom ); |
| aLine.SetColor( ColorBottom ); |
| aBox.SetLine( &aLine, BOX_LINE_BOTTOM ); |
| rItemSet.Put( aBox ); |
| } |
| } |
| // Raster |
| if( ( pPattern->FormatFlags & pfRaster ) == pfRaster ) |
| { |
| if( pPattern->Raster != 0 ) |
| { |
| sal_uInt16 nBColor = ( pPattern->nColor & 0x00F0 ) >> 4; |
| sal_uInt16 nRColor = ( pPattern->nColor & 0x0F00 ) >> 8; |
| Color aBColor( COL_BLACK ); |
| |
| lcl_ChangeColor( nBColor, aBColor ); |
| |
| if( nBColor == 0 ) |
| aBColor.SetColor( COL_WHITE ); |
| else if( nBColor == 15 ) |
| aBColor.SetColor( COL_BLACK ); |
| |
| Color aRColor( COL_BLACK ); |
| lcl_ChangeColor( nRColor, aRColor ); |
| sal_uInt16 nFact; |
| sal_Bool bSwapCol = sal_False; |
| sal_Bool bSetItem = sal_True; |
| switch (pPattern->Raster) |
| { |
| case raNone: nFact = 0xffff; bSwapCol = sal_True; bSetItem = (nBColor > 0); break; |
| case raGray12: nFact = (0xffff / 100) * 12; break; |
| case raGray25: nFact = (0xffff / 100) * 25; break; |
| case raGray50: nFact = (0xffff / 100) * 50; break; |
| case raGray75: nFact = (0xffff / 100) * 75; break; |
| default: nFact = 0xffff; bSetItem = (nRColor < 15); |
| } |
| if ( bSetItem ) |
| { |
| if( bSwapCol ) |
| rItemSet.Put( SvxBrushItem( GetMixedColor( aBColor, aRColor, nFact ), ATTR_BACKGROUND ) ); |
| else |
| rItemSet.Put( SvxBrushItem( GetMixedColor( aRColor, aBColor, nFact ), ATTR_BACKGROUND ) ); |
| } |
| } |
| } |
| // ZahlenFormate |
| if( ( pPattern->ValueFormat.Format != 0 ) && |
| ( ( pPattern->FormatFlags & pfValue ) == pfValue ) ) |
| { |
| sal_uLong nKey = 0; |
| ChangeFormat( pPattern->ValueFormat.Format, pPattern->ValueFormat.Info, nKey ); |
| rItemSet.Put( SfxUInt32Item( ATTR_VALUE_FORMAT, ( sal_uInt32 ) nKey ) ); |
| } |
| |
| // Zellattribute (Schutz, Versteckt...) |
| if( ( pPattern->Flags != 0 ) && |
| ( ( pPattern->FormatFlags & pfProtection ) == pfProtection ) ) |
| { |
| sal_Bool bProtect = ( ( pPattern->Flags & paProtect ) == paProtect ); |
| sal_Bool bHFormula = ( ( pPattern->Flags & paHideFormula ) == paHideFormula ); |
| sal_Bool bHCell = ( ( pPattern->Flags & paHideAll ) == paHideAll ); |
| sal_Bool bHPrint = ( ( pPattern->Flags & paHidePrint ) == paHidePrint ); |
| rItemSet.Put( ScProtectionAttr( bProtect, bHFormula, bHCell, bHPrint ) ); |
| } |
| } // if Style != 0 |
| } // for (i = 0; i < GetCount() |
| } |
| |
| |
| void Sc10Import::LoadDataBaseCollection() |
| { |
| pDataBaseCollection = new Sc10DataBaseCollection(rStream); |
| if (!nError) |
| nError = pDataBaseCollection->GetError(); |
| if (nError == errOutOfMemory) |
| return; // hopeless |
| for( sal_uInt16 i = 0 ; i < pDataBaseCollection->GetCount() ; i++ ) |
| { |
| Sc10DataBaseData* pOldData = pDataBaseCollection->At(i); |
| ScDBData* pNewData = new ScDBData( SC10TOSTRING( pOldData->DataBaseRec.Name ), |
| ( SCTAB ) pOldData->DataBaseRec.Tab, |
| ( SCCOL ) pOldData->DataBaseRec.Block.x1, |
| ( SCROW ) pOldData->DataBaseRec.Block.y1, |
| ( SCCOL ) pOldData->DataBaseRec.Block.x2, |
| ( SCROW ) pOldData->DataBaseRec.Block.y2, |
| sal_True, |
| ( sal_Bool) pOldData->DataBaseRec.RowHeader ); |
| pDoc->GetDBCollection()->Insert( pNewData ); |
| } |
| } |
| |
| |
| void Sc10Import::LoadTables() |
| { |
| Sc10PageCollection aPageCollection; |
| |
| sal_Int16 nTabCount; |
| rStream >> nTabCount; |
| for (sal_Int16 Tab = 0; (Tab < nTabCount) && (nError == 0); Tab++) |
| { |
| Sc10PageFormat PageFormat; |
| sal_Int16 DataBaseIndex; |
| Sc10TableProtect TabProtect; |
| sal_Int16 TabNo; |
| sal_Char TabName[128]; |
| sal_uInt16 Display; |
| sal_uInt8 Visible; |
| sal_uInt16 ID; |
| sal_uInt16 DataCount; |
| sal_uInt16 DataStart; |
| sal_uInt16 DataEnd; |
| sal_uInt16 DataValue; |
| sal_uInt16 Count; |
| sal_uInt16 i; |
| String aStr; // Universal-Konvertierungs-String |
| |
| |
| lcl_ReadPageFormat(rStream, PageFormat); |
| |
| sal_uInt16 nAt = aPageCollection.InsertFormat(PageFormat); |
| String aPageName = lcl_MakeOldPageStyleFormatName( nAt ); |
| |
| pPrgrsBar->Progress(); |
| |
| rStream >> DataBaseIndex; |
| |
| lcl_ReadTabProtect(rStream, TabProtect); |
| |
| ScTableProtection aProtection; |
| aProtection.setProtected(static_cast<bool>(TabProtect.Protect)); |
| aProtection.setPassword(SC10TOSTRING(TabProtect.PassWord)); |
| pDoc->SetTabProtection(static_cast<SCTAB>(Tab), &aProtection); |
| |
| rStream >> TabNo; |
| |
| sal_uInt8 nLen; |
| rStream >> nLen; |
| rStream.Read(TabName, sizeof(TabName) - 1); |
| if (nLen >= sizeof(TabName)) |
| nLen = sizeof(TabName) - 1; |
| TabName[nLen] = 0; |
| |
| //---------------------------------------------------------- |
| rStream >> Display; |
| |
| if ( Tab == (sal_Int16)nShowTab ) |
| { |
| ScVObjMode eObjMode = VOBJ_MODE_SHOW; |
| |
| aSc30ViewOpt.SetOption( VOPT_FORMULAS, IS_SET(dfFormula,Display) ); |
| aSc30ViewOpt.SetOption( VOPT_NULLVALS, IS_SET(dfZerro,Display) ); |
| aSc30ViewOpt.SetOption( VOPT_SYNTAX, IS_SET(dfSyntax,Display) ); |
| aSc30ViewOpt.SetOption( VOPT_NOTES, IS_SET(dfNoteMark,Display) ); |
| aSc30ViewOpt.SetOption( VOPT_VSCROLL, sal_True ); |
| aSc30ViewOpt.SetOption( VOPT_HSCROLL, sal_True ); |
| aSc30ViewOpt.SetOption( VOPT_TABCONTROLS, sal_True ); |
| aSc30ViewOpt.SetOption( VOPT_OUTLINER, sal_True ); |
| aSc30ViewOpt.SetOption( VOPT_GRID, IS_SET(dfGrid,Display) ); |
| |
| // VOPT_HEADER wird in LoadViewColRowBar() gesetzt |
| |
| if ( IS_SET(dfObjectAll,Display) ) // Objekte anzeigen |
| eObjMode = VOBJ_MODE_SHOW; |
| else if ( IS_SET(dfObjectFrame,Display) ) // Objekte als Platzhalter |
| eObjMode = VOBJ_MODE_SHOW; |
| else if ( IS_SET(dfObjectNone,Display) ) // Objekte nicht anzeigen |
| eObjMode = VOBJ_MODE_HIDE; |
| |
| aSc30ViewOpt.SetObjMode( VOBJ_TYPE_OLE, eObjMode ); |
| aSc30ViewOpt.SetObjMode( VOBJ_TYPE_CHART, eObjMode ); |
| aSc30ViewOpt.SetObjMode( VOBJ_TYPE_DRAW, eObjMode ); |
| } |
| |
| /* wofuer wird das benoetigt? Da in SC 1.0 die Anzeigeflags pro Tabelle gelten und nicht pro View |
| Dieses Flag in die ViewOptions eintragen bei Gelegenheit, Sollte der Stephan Olk machen |
| sal_uInt16 nDisplayMask = 0xFFFF; |
| sal_uInt16 nDisplayValue = 0; |
| if (Tab == 0) |
| nDisplayValue = Display; |
| else |
| { |
| sal_uInt16 nDiff = Display ^ nDisplayValue; |
| nDisplayMask &= ~nDiff; |
| } |
| */ |
| //-------------------------------------------------------------------- |
| rStream >> Visible; |
| |
| nError = rStream.GetError(); |
| if (nError != 0) return; |
| |
| if (TabNo == 0) |
| pDoc->RenameTab(static_cast<SCTAB> (TabNo), SC10TOSTRING( TabName ), sal_False); |
| else |
| pDoc->InsertTab(SC_TAB_APPEND, SC10TOSTRING( TabName ) ); |
| |
| pDoc->SetPageStyle( static_cast<SCTAB>(Tab), aPageName ); |
| |
| if (Visible == 0) pDoc->SetVisible(static_cast<SCTAB> (TabNo), sal_False); |
| |
| // ColWidth |
| rStream >> ID; |
| if (ID != ColWidthID) |
| { |
| DBG_ERROR( "ColWidthID" ); |
| nError = errUnknownID; |
| return; |
| } |
| rStream >> DataCount; |
| DataStart = 0; |
| for (i=0; i < DataCount; i++) |
| { |
| rStream >> DataEnd; |
| rStream >> DataValue; |
| for (SCCOL j = static_cast<SCCOL>(DataStart); j <= static_cast<SCCOL>(DataEnd); j++) pDoc->SetColWidth(j, static_cast<SCTAB> (TabNo), DataValue); |
| DataStart = DataEnd + 1; |
| } |
| pPrgrsBar->Progress(); |
| |
| // ColAttr |
| rStream >> ID; |
| if (ID != ColAttrID) |
| { |
| DBG_ERROR( "ColAttrID" ); |
| nError = errUnknownID; |
| return; |
| } |
| |
| rStream >> DataCount; |
| DataStart = 0; |
| for (i=0; i < DataCount; i++) |
| { |
| rStream >> DataEnd; |
| rStream >> DataValue; |
| if (DataValue != 0) |
| { |
| bool bPageBreak = ((DataValue & crfSoftBreak) == crfSoftBreak); |
| bool bManualBreak = ((DataValue & crfHardBreak) == crfHardBreak); |
| bool bHidden = ((DataValue & crfHidden) == crfHidden); |
| for (SCCOL k = static_cast<SCCOL>(DataStart); k <= static_cast<SCCOL>(DataEnd); k++) |
| { |
| pDoc->SetColHidden(k, k, static_cast<SCTAB>(TabNo), bHidden); |
| pDoc->SetColBreak(k, static_cast<SCTAB> (TabNo), bPageBreak, bManualBreak); |
| } |
| } |
| DataStart = DataEnd + 1; |
| } |
| pPrgrsBar->Progress(); |
| |
| // RowHeight |
| rStream >> ID; |
| if (ID != RowHeightID) |
| { |
| DBG_ERROR( "RowHeightID" ); |
| nError = errUnknownID; |
| return; |
| } |
| |
| rStream >> DataCount; |
| DataStart = 0; |
| for (i=0; i < DataCount; i++) |
| { |
| rStream >> DataEnd; |
| rStream >> DataValue; |
| pDoc->SetRowHeightRange(static_cast<SCROW> (DataStart), static_cast<SCROW> (DataEnd), static_cast<SCTAB> (TabNo), DataValue); |
| DataStart = DataEnd + 1; |
| } |
| pPrgrsBar->Progress(); |
| |
| // RowAttr |
| rStream >> ID; |
| if (ID != RowAttrID) |
| { |
| DBG_ERROR( "RowAttrID" ); |
| nError = errUnknownID; |
| return; |
| } |
| |
| rStream >> DataCount; |
| DataStart = 0; |
| for (i=0; i < DataCount; i++) |
| { |
| rStream >> DataEnd; |
| rStream >> DataValue; |
| if (DataValue != 0) |
| { |
| bool bPageBreak = ((DataValue & crfSoftBreak) == crfSoftBreak); |
| bool bManualBreak = ((DataValue & crfHardBreak) == crfHardBreak); |
| bool bHidden = ((DataValue & crfHidden) == crfHidden); |
| for (SCROW l = static_cast<SCROW>(DataStart); l <= static_cast<SCROW>(DataEnd); l++) |
| { |
| pDoc->SetRowHidden(l, l, static_cast<SCTAB> (TabNo), bHidden); |
| pDoc->SetRowBreak(l, static_cast<SCTAB> (TabNo), bPageBreak, bManualBreak); |
| } |
| } |
| DataStart = DataEnd + 1; |
| } |
| pPrgrsBar->Progress(); |
| |
| // DataTable |
| rStream >> ID; |
| if (ID != TableID) |
| { |
| DBG_ERROR( "TableID" ); |
| nError = errUnknownID; |
| return; |
| } |
| for (SCCOL Col = 0; (Col <= SC10MAXCOL) && (nError == 0); Col++) |
| { |
| rStream >> Count; |
| nError = rStream.GetError(); |
| if ((Count != 0) && (nError == 0)) |
| LoadCol(Col, static_cast<SCTAB> (TabNo)); |
| } |
| DBG_ASSERT( nError == 0, "Stream" ); |
| } |
| pPrgrsBar->Progress(); |
| |
| aPageCollection.PutToDoc( pDoc ); |
| } |
| |
| |
| void Sc10Import::LoadCol(SCCOL Col, SCTAB Tab) |
| { |
| LoadColAttr(Col, Tab); |
| |
| sal_uInt16 CellCount; |
| sal_uInt8 CellType; |
| sal_uInt16 Row; |
| rStream >> CellCount; |
| SCROW nScCount = static_cast< SCROW >( CellCount ); |
| if (nScCount > MAXROW) nError = errUnknownFormat; |
| for (sal_uInt16 i = 0; (i < CellCount) && (nError == 0); i++) |
| { |
| rStream >> CellType; |
| rStream >> Row; |
| nError = rStream.GetError(); |
| if (nError == 0) |
| { |
| switch (CellType) |
| { |
| case ctValue : |
| { |
| const SfxPoolItem* pValueFormat = pDoc->GetAttr(Col, static_cast<SCROW> (Row), Tab, ATTR_VALUE_FORMAT); |
| sal_uLong nFormat = ((SfxUInt32Item*)pValueFormat)->GetValue(); |
| double Value = ScfTools::ReadLongDouble(rStream); |
| |
| // Achtung hier ist eine Anpassung Notwendig wenn Ihr das Basisdatum aendert |
| // In StarCalc 1.0 entspricht 0 dem 01.01.1900 |
| // if ((nFormat >= 30) && (nFormat <= 35)) |
| // Value += 0; |
| if ((nFormat >= 40) && (nFormat <= 45)) |
| Value /= 86400.0; |
| pDoc->SetValue(Col, static_cast<SCROW> (Row), Tab, Value); |
| break; |
| } |
| case ctString : |
| { |
| sal_uInt8 Len; |
| sal_Char s[256]; |
| rStream >> Len; |
| rStream.Read(s, Len); |
| s[Len] = 0; |
| |
| pDoc->SetString( Col, static_cast<SCROW> (Row), Tab, SC10TOSTRING( s ) ); |
| break; |
| } |
| case ctFormula : |
| { |
| /*double Value =*/ ScfTools::ReadLongDouble(rStream); |
| sal_uInt8 Len; |
| sal_Char s[256+1]; |
| rStream >> Len; |
| rStream.Read(&s[1], Len); |
| s[0] = '='; |
| s[Len + 1] = 0; |
| ScFormulaCell* pCell = new ScFormulaCell( pDoc, ScAddress( Col, static_cast<SCROW> (Row), Tab ) ); |
| pCell->SetHybridFormula( SC10TOSTRING( s ),formula::FormulaGrammar::GRAM_NATIVE ); |
| pDoc->PutCell( Col, static_cast<SCROW> (Row), Tab, pCell, (sal_Bool)sal_True ); |
| break; |
| } |
| case ctNote : |
| break; |
| default : |
| nError = errUnknownFormat; |
| break; |
| } |
| sal_uInt16 NoteLen; |
| rStream >> NoteLen; |
| if (NoteLen != 0) |
| { |
| sal_Char* pNote = new sal_Char[NoteLen+1]; |
| rStream.Read(pNote, NoteLen); |
| pNote[NoteLen] = 0; |
| String aNoteText( SC10TOSTRING(pNote)); |
| delete [] pNote; |
| ScAddress aPos( Col, static_cast<SCROW>(Row), Tab ); |
| ScNoteUtil::CreateNoteFromString( *pDoc, aPos, aNoteText, false, false ); |
| } |
| } |
| pPrgrsBar->Progress(); |
| } |
| } |
| |
| |
| void Sc10Import::LoadColAttr(SCCOL Col, SCTAB Tab) |
| { |
| Sc10ColAttr aFont; |
| Sc10ColAttr aAttr; |
| Sc10ColAttr aJustify; |
| Sc10ColAttr aFrame; |
| Sc10ColAttr aRaster; |
| Sc10ColAttr aValue; |
| Sc10ColAttr aColor; |
| Sc10ColAttr aFrameColor; |
| Sc10ColAttr aFlag; |
| Sc10ColAttr aPattern; |
| |
| if (nError == 0) LoadAttr(aFont); |
| if (nError == 0) LoadAttr(aAttr); |
| if (nError == 0) LoadAttr(aJustify); |
| if (nError == 0) LoadAttr(aFrame); |
| if (nError == 0) LoadAttr(aRaster); |
| if (nError == 0) LoadAttr(aValue); |
| if (nError == 0) LoadAttr(aColor); |
| if (nError == 0) LoadAttr(aFrameColor); |
| if (nError == 0) LoadAttr(aFlag); |
| if (nError == 0) LoadAttr(aPattern); |
| |
| if (nError == 0) |
| { |
| SCROW nStart; |
| SCROW nEnd; |
| sal_uInt16 i; |
| sal_uInt16 nLimit; |
| sal_uInt16 nValue1; |
| Sc10ColData *pColData; |
| |
| // Font (Name, Groesse) |
| nStart = 0; |
| nEnd = 0; |
| nLimit = aFont.Count; |
| pColData = aFont.pData; |
| for( i = 0 ; i < nLimit ; i++, pColData++ ) |
| { |
| nEnd = static_cast<SCROW>(pColData->Row); |
| if ((nStart <= nEnd) && (pColData->Value)) |
| { |
| FontFamily eFam = FAMILY_DONTKNOW; |
| Sc10FontData* pFont = pFontCollection->At(pColData->Value); |
| if (pFont) |
| { |
| switch (pFont->PitchAndFamily & 0xF0) |
| { |
| case ffDontCare : eFam = FAMILY_DONTKNOW; break; |
| case ffRoman : eFam = FAMILY_ROMAN; break; |
| case ffSwiss : eFam = FAMILY_SWISS; break; |
| case ffModern : eFam = FAMILY_MODERN; break; |
| case ffScript : eFam = FAMILY_SCRIPT; break; |
| case ffDecorative : eFam = FAMILY_DECORATIVE; break; |
| default: eFam = FAMILY_DONTKNOW; break; |
| } |
| ScPatternAttr aScPattern(pDoc->GetPool()); |
| aScPattern.GetItemSet().Put(SvxFontItem(eFam, SC10TOSTRING( pFont->FaceName ), EMPTY_STRING, |
| PITCH_DONTKNOW, RTL_TEXTENCODING_DONTKNOW, ATTR_FONT )); |
| aScPattern.GetItemSet().Put(SvxFontHeightItem(Abs(pFont->Height), 100, ATTR_FONT_HEIGHT )); |
| pDoc->ApplyPatternAreaTab(Col, nStart, Col, nEnd, Tab, aScPattern); |
| } |
| } |
| nStart = nEnd + 1; |
| } |
| |
| // Fontfarbe |
| nStart = 0; |
| nEnd = 0; |
| nLimit = aColor.Count; |
| pColData = aColor.pData; |
| for( i = 0 ; i < nLimit ; i++, pColData++ ) |
| { |
| nEnd = static_cast<SCROW>(pColData->Row); |
| if ((nStart <= nEnd) && (pColData->Value)) |
| { |
| Color TextColor(COL_BLACK); |
| lcl_ChangeColor((pColData->Value & 0x000F), TextColor); |
| ScPatternAttr aScPattern(pDoc->GetPool()); |
| aScPattern.GetItemSet().Put(SvxColorItem(TextColor, ATTR_FONT_COLOR )); |
| pDoc->ApplyPatternAreaTab(Col, nStart, Col, nEnd, Tab, aScPattern); |
| } |
| nStart = nEnd + 1; |
| } |
| |
| // Fontattribute (Fett, Kursiv...) |
| nStart = 0; |
| nEnd = 0; |
| nLimit = aAttr.Count; |
| pColData = aAttr.pData; |
| for( i = 0 ; i < nLimit ; i++, pColData++ ) |
| { |
| nEnd = static_cast<SCROW>(pColData->Row); |
| nValue1 = pColData->Value; |
| if ((nStart <= nEnd) && (nValue1)) |
| { |
| ScPatternAttr aScPattern(pDoc->GetPool()); |
| if ((nValue1 & atBold) == atBold) |
| aScPattern.GetItemSet().Put(SvxWeightItem(WEIGHT_BOLD, ATTR_FONT_WEIGHT)); |
| if ((nValue1 & atItalic) == atItalic) |
| aScPattern.GetItemSet().Put(SvxPostureItem(ITALIC_NORMAL, ATTR_FONT_POSTURE)); |
| if ((nValue1 & atUnderline) == atUnderline) |
| aScPattern.GetItemSet().Put(SvxUnderlineItem(UNDERLINE_SINGLE, ATTR_FONT_UNDERLINE)); |
| if ((nValue1 & atStrikeOut) == atStrikeOut) |
| aScPattern.GetItemSet().Put(SvxCrossedOutItem(STRIKEOUT_SINGLE, ATTR_FONT_CROSSEDOUT)); |
| pDoc->ApplyPatternAreaTab(Col, nStart, Col, nEnd, Tab, aScPattern); |
| } |
| nStart = nEnd + 1; |
| } |
| |
| // Zellausrichtung |
| nStart = 0; |
| nEnd = 0; |
| nLimit = aJustify.Count; |
| pColData = aJustify.pData; |
| for( i = 0 ; i < nLimit ; i++, pColData++ ) |
| { |
| nEnd = static_cast<SCROW>(pColData->Row); |
| nValue1 = pColData->Value; |
| if ((nStart <= nEnd) && (nValue1)) |
| { |
| ScPatternAttr aScPattern(pDoc->GetPool()); |
| sal_uInt16 HorJustify = (nValue1 & 0x000F); |
| sal_uInt16 VerJustify = (nValue1 & 0x00F0) >> 4; |
| sal_uInt16 OJustify = (nValue1 & 0x0F00) >> 8; |
| sal_uInt16 EJustify = (nValue1 & 0xF000) >> 12; |
| |
| switch (HorJustify) |
| { |
| case hjLeft: |
| aScPattern.GetItemSet().Put(SvxHorJustifyItem(SVX_HOR_JUSTIFY_LEFT, ATTR_HOR_JUSTIFY)); |
| break; |
| case hjCenter: |
| aScPattern.GetItemSet().Put(SvxHorJustifyItem(SVX_HOR_JUSTIFY_CENTER, ATTR_HOR_JUSTIFY)); |
| break; |
| case hjRight: |
| aScPattern.GetItemSet().Put(SvxHorJustifyItem(SVX_HOR_JUSTIFY_RIGHT, ATTR_HOR_JUSTIFY)); |
| break; |
| } |
| |
| switch (VerJustify) |
| { |
| case vjTop: |
| aScPattern.GetItemSet().Put(SvxVerJustifyItem(SVX_VER_JUSTIFY_TOP, ATTR_VER_JUSTIFY)); |
| break; |
| case vjCenter: |
| aScPattern.GetItemSet().Put(SvxVerJustifyItem(SVX_VER_JUSTIFY_CENTER, ATTR_VER_JUSTIFY)); |
| break; |
| case vjBottom: |
| aScPattern.GetItemSet().Put(SvxVerJustifyItem(SVX_VER_JUSTIFY_BOTTOM, ATTR_VER_JUSTIFY)); |
| break; |
| } |
| |
| if (OJustify & ojWordBreak) |
| aScPattern.GetItemSet().Put(SfxBoolItem(sal_True)); |
| if (OJustify & ojBottomTop) |
| aScPattern.GetItemSet().Put(SfxInt32Item(ATTR_ROTATE_VALUE,9000)); |
| else if (OJustify & ojTopBottom) |
| aScPattern.GetItemSet().Put(SfxInt32Item(ATTR_ROTATE_VALUE,27000)); |
| |
| sal_Int16 Margin = Max((sal_uInt16)20, (sal_uInt16)(EJustify * 20)); |
| if (((OJustify & ojBottomTop) == ojBottomTop) || ((OJustify & ojBottomTop) == ojBottomTop)) |
| aScPattern.GetItemSet().Put(SvxMarginItem(20, Margin, 20, Margin, ATTR_MARGIN)); |
| else |
| aScPattern.GetItemSet().Put(SvxMarginItem(Margin, 20, Margin, 20, ATTR_MARGIN)); |
| pDoc->ApplyPatternAreaTab(Col, nStart, Col, nEnd, Tab, aScPattern); |
| } |
| nStart = nEnd + 1; |
| } |
| // Umrandung |
| sal_Bool bEnd = sal_False; |
| sal_uInt16 nColorIndex = 0; |
| sal_uInt16 nFrameIndex = 0; |
| |
| // Special Fix... |
| const sal_uInt32 nHelpMeStart = 100; |
| sal_uInt32 nHelpMe = nHelpMeStart; |
| sal_uInt16 nColorIndexOld = nColorIndex; |
| sal_uInt16 nFrameIndexOld = nColorIndex; |
| |
| nEnd = 0; |
| nStart = 0; |
| while( !bEnd && nHelpMe ) |
| { |
| pColData = &aFrame.pData[ nFrameIndex ]; |
| |
| sal_uInt16 nValue = pColData->Value; |
| sal_uInt16 nLeft = 0; |
| sal_uInt16 nTop = 0; |
| sal_uInt16 nRight = 0; |
| sal_uInt16 nBottom = 0; |
| sal_uInt16 fLeft = ( nValue & 0x000F ); |
| sal_uInt16 fTop = ( nValue & 0x00F0 ) >> 4; |
| sal_uInt16 fRight = ( nValue & 0x0F00 ) >> 8; |
| sal_uInt16 fBottom = ( nValue & 0xF000 ) >> 12; |
| |
| if( fLeft > 1 ) |
| nLeft = 50; |
| else if( fLeft > 0 ) |
| nLeft = 20; |
| |
| if( fTop > 1 ) |
| nTop = 50; |
| else if( fTop > 0 ) |
| nTop = 20; |
| |
| if( fRight > 1 ) |
| nRight = 50; |
| else if( fRight > 0 ) |
| nRight = 20; |
| |
| if( fBottom > 1 ) |
| nBottom = 50; |
| else if( fBottom > 0 ) |
| nBottom = 20; |
| |
| Color ColorLeft( COL_BLACK ); |
| Color ColorTop( COL_BLACK ); |
| Color ColorRight( COL_BLACK ); |
| Color ColorBottom( COL_BLACK ); |
| sal_uInt16 nFrmColVal = aFrameColor.pData[ nColorIndex ].Value; |
| SCROW nFrmColRow = static_cast<SCROW>(aFrameColor.pData[ nColorIndex ].Row); |
| sal_uInt16 cLeft = ( nFrmColVal & 0x000F ); |
| sal_uInt16 cTop = ( nFrmColVal & 0x00F0 ) >> 4; |
| sal_uInt16 cRight = ( nFrmColVal & 0x0F00 ) >> 8; |
| sal_uInt16 cBottom = ( nFrmColVal & 0xF000 ) >> 12; |
| |
| lcl_ChangeColor( cLeft, ColorLeft ); |
| lcl_ChangeColor( cTop, ColorTop ); |
| lcl_ChangeColor( cRight, ColorRight ); |
| lcl_ChangeColor( cBottom, ColorBottom ); |
| |
| if( static_cast<SCROW>(pColData->Row) < nFrmColRow ) |
| { |
| nEnd = static_cast<SCROW>(pColData->Row); |
| if( nFrameIndex < ( aFrame.Count - 1 ) ) |
| nFrameIndex++; |
| } |
| else if( static_cast<SCROW>(pColData->Row) > nFrmColRow ) |
| { |
| nEnd = static_cast<SCROW>(aFrameColor.pData[ nColorIndex ].Row); |
| if( nColorIndex < ( aFrameColor.Count - 1 ) ) |
| nColorIndex++; |
| } |
| else |
| { |
| nEnd = nFrmColRow; |
| if( nFrameIndex < (aFrame.Count - 1 ) ) |
| nFrameIndex++; |
| if( nColorIndex < ( aFrameColor.Count - 1 ) ) |
| nColorIndex++; |
| } |
| if( ( nStart <= nEnd ) && ( nValue != 0 ) ) |
| { |
| ScPatternAttr aScPattern(pDoc->GetPool()); |
| SvxBorderLine aLine; |
| SvxBoxItem aBox( ATTR_BORDER ); |
| |
| aLine.SetOutWidth( nLeft ); |
| aLine.SetColor( ColorLeft ); |
| aBox.SetLine( &aLine, BOX_LINE_LEFT ); |
| |
| aLine.SetOutWidth( nTop ); |
| aLine.SetColor( ColorTop ); |
| aBox.SetLine( &aLine, BOX_LINE_TOP ); |
| |
| aLine.SetOutWidth( nRight ); |
| aLine.SetColor( ColorRight ); |
| aBox.SetLine( &aLine, BOX_LINE_RIGHT ); |
| |
| aLine.SetOutWidth( nBottom ); |
| aLine.SetColor( ColorBottom ); |
| aBox.SetLine( &aLine, BOX_LINE_BOTTOM ); |
| |
| aScPattern.GetItemSet().Put( aBox ); |
| pDoc->ApplyPatternAreaTab( Col, nStart, Col, nEnd, Tab, aScPattern ); |
| } |
| nStart = nEnd + 1; |
| |
| bEnd = ( nFrameIndex == ( aFrame.Count - 1 ) ) && ( nColorIndex == ( aFrameColor.Count - 1 ) ); |
| |
| if( nColorIndexOld != nColorIndex || nFrameIndexOld != nFrameIndex ) |
| { |
| nColorIndexOld = nColorIndex; |
| nFrameIndexOld = nFrameIndex; |
| nHelpMe = nHelpMeStart; |
| } |
| else |
| nHelpMe--; |
| |
| pColData++; |
| } |
| |
| // ACHTUNG: Code bis hier ueberarbeitet ... jetzt hab' ich keinen Bock mehr! (GT) |
| |
| // Hintergrund (Farbe, Raster) |
| sal_uInt16 nRasterIndex = 0; |
| bEnd = sal_False; |
| nColorIndex = 0; |
| nEnd = 0; |
| nStart = 0; |
| |
| // Special Fix... |
| nHelpMe = nHelpMeStart; |
| sal_uInt16 nRasterIndexOld = nRasterIndex; |
| |
| while( !bEnd && nHelpMe ) |
| { |
| sal_uInt16 nBColor = ( aColor.pData[ nColorIndex ].Value & 0x00F0 ) >> 4; |
| sal_uInt16 nRColor = ( aColor.pData[ nColorIndex ].Value & 0x0F00 ) >> 8; |
| Color aBColor( COL_BLACK ); |
| |
| lcl_ChangeColor( nBColor, aBColor ); |
| |
| if( nBColor == 0 ) |
| aBColor.SetColor( COL_WHITE ); |
| else if( nBColor == 15 ) |
| aBColor.SetColor( COL_BLACK ); |
| |
| Color aRColor( COL_BLACK ); |
| |
| lcl_ChangeColor( nRColor, aRColor ); |
| |
| ScPatternAttr aScPattern( pDoc->GetPool() ); |
| |
| sal_uInt16 nFact; |
| sal_Bool bSwapCol = sal_False; |
| sal_Bool bSetItem = sal_True; |
| switch ( aRaster.pData[ nRasterIndex ].Value ) |
| { |
| case raNone: nFact = 0xffff; bSwapCol = sal_True; bSetItem = (nBColor > 0); break; |
| case raGray12: nFact = (0xffff / 100) * 12; break; |
| case raGray25: nFact = (0xffff / 100) * 25; break; |
| case raGray50: nFact = (0xffff / 100) * 50; break; |
| case raGray75: nFact = (0xffff / 100) * 75; break; |
| default: nFact = 0xffff; bSetItem = (nRColor < 15); |
| } |
| if ( bSetItem ) |
| { |
| if( bSwapCol ) |
| aScPattern.GetItemSet().Put( SvxBrushItem( GetMixedColor( aBColor, aRColor, nFact ), ATTR_BACKGROUND ) ); |
| else |
| aScPattern.GetItemSet().Put( SvxBrushItem( GetMixedColor( aRColor, aBColor, nFact ), ATTR_BACKGROUND ) ); |
| } |
| if( aRaster.pData[ nRasterIndex ].Row < aColor.pData[ nColorIndex ].Row ) |
| { |
| nEnd = static_cast<SCROW>(aRaster.pData[ nRasterIndex ].Row); |
| if( nRasterIndex < ( aRaster.Count - 1 ) ) |
| nRasterIndex++; |
| } |
| else if( aRaster.pData[ nRasterIndex ].Row > aColor.pData[ nColorIndex ].Row ) |
| { |
| nEnd = static_cast<SCROW>(aColor.pData[ nColorIndex ].Row); |
| if( nColorIndex < ( aColor.Count - 1 ) ) |
| nColorIndex++; |
| } |
| else |
| { |
| nEnd = static_cast<SCROW>(aColor.pData[ nColorIndex ].Row); |
| if( nRasterIndex < ( aRaster.Count - 1 ) ) |
| nRasterIndex++; |
| if( nColorIndex < ( aColor.Count - 1 ) ) |
| nColorIndex++; |
| } |
| if( nStart <= nEnd ) |
| pDoc->ApplyPatternAreaTab( Col, nStart, Col, nEnd, Tab, aScPattern ); |
| |
| nStart = nEnd + 1; |
| |
| bEnd = ( nRasterIndex == ( aRaster.Count - 1 ) ) && ( nColorIndex == ( aColor.Count - 1 ) ); |
| |
| if( nColorIndexOld != nColorIndex || nRasterIndexOld != nRasterIndex ) |
| { |
| nColorIndexOld = nColorIndex; |
| nRasterIndexOld = nRasterIndex; |
| nHelpMe = nHelpMeStart; |
| } |
| else |
| nHelpMe--; |
| |
| nHelpMe--; |
| } |
| |
| // Zahlenformate |
| nStart = 0; |
| nEnd = 0; |
| nLimit = aValue.Count; |
| pColData = aValue.pData; |
| for (i=0; i<nLimit; i++, pColData++) |
| { |
| nEnd = static_cast<SCROW>(pColData->Row); |
| nValue1 = pColData->Value; |
| if ((nStart <= nEnd) && (nValue1)) |
| { |
| sal_uLong nKey = 0; |
| sal_uInt16 nFormat = (nValue1 & 0x00FF); |
| sal_uInt16 nInfo = (nValue1 & 0xFF00) >> 8; |
| ChangeFormat(nFormat, nInfo, nKey); |
| ScPatternAttr aScPattern(pDoc->GetPool()); |
| aScPattern.GetItemSet().Put(SfxUInt32Item(ATTR_VALUE_FORMAT, (sal_uInt32)nKey)); |
| pDoc->ApplyPatternAreaTab(Col, nStart, Col, nEnd, Tab, aScPattern); |
| } |
| nStart = nEnd + 1; |
| } |
| |
| // Zellattribute (Schutz, Versteckt...) |
| nStart = 0; |
| nEnd = 0; |
| for (i=0; i<aFlag.Count; i++) |
| { |
| nEnd = static_cast<SCROW>(aFlag.pData[i].Row); |
| if ((nStart <= nEnd) && (aFlag.pData[i].Value != 0)) |
| { |
| sal_Bool bProtect = ((aFlag.pData[i].Value & paProtect) == paProtect); |
| sal_Bool bHFormula = ((aFlag.pData[i].Value & paHideFormula) == paHideFormula); |
| sal_Bool bHCell = ((aFlag.pData[i].Value & paHideAll) == paHideAll); |
| sal_Bool bHPrint = ((aFlag.pData[i].Value & paHidePrint) == paHidePrint); |
| ScPatternAttr aScPattern(pDoc->GetPool()); |
| aScPattern.GetItemSet().Put(ScProtectionAttr(bProtect, bHFormula, bHCell, bHPrint)); |
| pDoc->ApplyPatternAreaTab(Col, nStart, Col, nEnd, Tab, aScPattern); |
| } |
| nStart = nEnd + 1; |
| } |
| |
| // ZellVorlagen |
| nStart = 0; |
| nEnd = 0; |
| ScStyleSheetPool* pStylePool = pDoc->GetStyleSheetPool(); |
| for (i=0; i<aPattern.Count; i++) |
| { |
| nEnd = static_cast<SCROW>(aPattern.pData[i].Row); |
| if ((nStart <= nEnd) && (aPattern.pData[i].Value != 0)) |
| { |
| sal_uInt16 nPatternIndex = (aPattern.pData[i].Value & 0x00FF) - 1; |
| Sc10PatternData* pPattern = pPatternCollection->At(nPatternIndex); |
| if (pPattern != NULL) |
| { |
| ScStyleSheet* pStyle = (ScStyleSheet*) pStylePool->Find( |
| SC10TOSTRING( pPattern->Name ), SFX_STYLE_FAMILY_PARA); |
| |
| if (pStyle != NULL) |
| pDoc->ApplyStyleAreaTab(Col, nStart, Col, nEnd, Tab, *pStyle); |
| } |
| } |
| nStart = nEnd + 1; |
| } |
| } |
| } |
| |
| |
| void Sc10Import::LoadAttr(Sc10ColAttr& rAttr) |
| { |
| // rAttr is not reused, otherwise we'd have to delete [] rAttr.pData; |
| rStream >> rAttr.Count; |
| if (rAttr.Count) |
| { |
| rAttr.pData = new (::std::nothrow) Sc10ColData[rAttr.Count]; |
| if (rAttr.pData != NULL) |
| { |
| for (sal_uInt16 i = 0; i < rAttr.Count; i++) |
| { |
| rStream >> rAttr.pData[i].Row; |
| rStream >> rAttr.pData[i].Value; |
| } |
| nError = rStream.GetError(); |
| } |
| else |
| { |
| nError = errOutOfMemory; |
| rAttr.Count = 0; |
| } |
| } |
| } |
| |
| |
| void Sc10Import::ChangeFormat(sal_uInt16 nFormat, sal_uInt16 nInfo, sal_uLong& nKey) |
| { |
| // Achtung: Die Formate werden nur auf die StarCalc 3.0 internen Formate gemappt |
| // Korrekterweise muessten zum Teil neue Formate erzeugt werden (sollte Stephan sich ansehen) |
| nKey = 0; |
| switch (nFormat) |
| { |
| case vfStandard : |
| if (nInfo > 0) |
| nKey = 2; |
| break; |
| case vfMoney : |
| if (nInfo > 0) |
| nKey = 21; |
| else |
| nKey = 20; |
| break; |
| case vfThousend : |
| if (nInfo > 0) |
| nKey = 4; |
| else |
| nKey = 5; |
| break; |
| case vfPercent : |
| if (nInfo > 0) |
| nKey = 11; |
| else |
| nKey = 10; |
| break; |
| case vfExponent : |
| nKey = 60; |
| break; |
| case vfZerro : |
| // Achtung kein Aequivalent |
| break; |
| case vfDate : |
| switch (nInfo) |
| { |
| case df_NDMY_Long : |
| nKey = 31; |
| break; |
| case df_DMY_Long : |
| nKey = 30; |
| break; |
| case df_MY_Long : |
| nKey = 32; |
| break; |
| case df_NDM_Long : |
| nKey = 31; |
| break; |
| case df_DM_Long : |
| nKey = 33; |
| break; |
| case df_M_Long : |
| nKey = 34; |
| break; |
| case df_NDMY_Short : |
| nKey = 31; |
| break; |
| case df_DMY_Short : |
| nKey = 30; |
| break; |
| case df_MY_Short : |
| nKey = 32; |
| break; |
| case df_NDM_Short : |
| nKey = 31; |
| break; |
| case df_DM_Short : |
| nKey = 33; |
| break; |
| case df_M_Short : |
| nKey = 34; |
| break; |
| case df_Q_Long : |
| nKey = 35; |
| break; |
| case df_Q_Short : |
| nKey = 35; |
| break; |
| default : |
| nKey = 30; |
| break; |
| } |
| break; |
| case vfTime : |
| switch (nInfo) |
| { |
| case tf_HMS_Long : |
| nKey = 41; |
| break; |
| case tf_HM_Long : |
| nKey = 40; |
| break; |
| case tf_HMS_Short : |
| nKey = 43; |
| break; |
| case tf_HM_Short : |
| nKey = 42; |
| break; |
| default : |
| nKey = 41; |
| break; |
| } |
| break; |
| case vfBoolean : |
| nKey = 99; |
| break; |
| case vfStandardRed : |
| if (nInfo > 0) |
| nKey = 2; |
| break; |
| case vfMoneyRed : |
| if (nInfo > 0) |
| nKey = 23; |
| else |
| nKey = 22; |
| break; |
| case vfThousendRed : |
| if (nInfo > 0) |
| nKey = 4; |
| else |
| nKey = 5; |
| break; |
| case vfPercentRed : |
| if (nInfo > 0) |
| nKey = 11; |
| else |
| nKey = 10; |
| break; |
| case vfExponentRed : |
| nKey = 60; |
| break; |
| case vfFormula : |
| break; |
| case vfString : |
| break; |
| default : |
| break; |
| } |
| } |
| |
| |
| void Sc10Import::LoadObjects() |
| { |
| sal_uInt16 ID; |
| rStream >> ID; |
| if (rStream.IsEof()) return; |
| if (ID == ObjectID) |
| { |
| #ifdef SC10_SHOW_OBJECTS |
| // Achtung nur zu Debugzwecken |
| //----------------------------------- |
| pDoc->InsertTab(SC_TAB_APPEND, "GraphObjects"); |
| SCCOL nCol = 0; |
| SCROW nRow = 0; |
| SCTAB nTab = 0; |
| pDoc->GetTable("GraphObjects", nTab); |
| pDoc->SetString(nCol++, nRow, nTab, "ObjectTyp"); |
| pDoc->SetString(nCol++, nRow, nTab, "Col"); |
| pDoc->SetString(nCol++, nRow, nTab, "Row"); |
| pDoc->SetString(nCol++, nRow, nTab, "Tab"); |
| pDoc->SetString(nCol++, nRow, nTab, "X"); |
| pDoc->SetString(nCol++, nRow, nTab, "Y"); |
| pDoc->SetString(nCol++, nRow, nTab, "W"); |
| pDoc->SetString(nCol++, nRow, nTab, "H"); |
| //----------------------------------- |
| #endif |
| |
| sal_uInt16 nAnz; |
| rStream >> nAnz; |
| sal_Char Reserved[32]; |
| rStream.Read(Reserved, sizeof(Reserved)); |
| nError = rStream.GetError(); |
| if ((nAnz > 0) && (nError == 0)) |
| { |
| sal_uInt8 ObjectType; |
| Sc10GraphHeader GraphHeader; |
| sal_Bool IsOleObject = sal_False; // Achtung dies ist nur ein Notnagel |
| for (sal_uInt16 i = 0; (i < nAnz) && (nError == 0) && !rStream.IsEof() && !IsOleObject; i++) |
| { |
| rStream >> ObjectType; |
| lcl_ReadGraphHeader(rStream, GraphHeader); |
| |
| double nPPTX = ScGlobal::nScreenPPTX; |
| double nPPTY = ScGlobal::nScreenPPTY; |
| |
| long nStartX = 0; |
| for (SCsCOL nX=0; nX<GraphHeader.CarretX; nX++) |
| nStartX += pDoc->GetColWidth(nX, static_cast<SCTAB>(GraphHeader.CarretZ)); |
| nStartX = (long) ( nStartX * HMM_PER_TWIPS ); |
| nStartX += (long) ( GraphHeader.x / nPPTX * HMM_PER_TWIPS ); |
| long nSizeX = (long) ( GraphHeader.w / nPPTX * HMM_PER_TWIPS ); |
| long nStartY = pDoc->GetRowHeight( 0, |
| static_cast<SCsROW>(GraphHeader.CarretY) - 1, |
| static_cast<SCTAB>(GraphHeader.CarretZ)); |
| nStartY = (long) ( nStartY * HMM_PER_TWIPS ); |
| nStartY += (long) ( GraphHeader.y / nPPTY * HMM_PER_TWIPS ); |
| long nSizeY = (long) ( GraphHeader.h / nPPTY * HMM_PER_TWIPS ); |
| |
| #ifdef SC10_SHOW_OBJECTS |
| // Achtung nur zu Debugzwecken |
| //----------------------------------- |
| nCol = 0; |
| nRow++; |
| switch (ObjectType) |
| { |
| case otOle : |
| pDoc->SetString(nCol++, nRow, nTab, "Ole-Object"); |
| break; |
| case otImage : |
| pDoc->SetString(nCol++, nRow, nTab, "Image-Object"); |
| break; |
| case otChart : |
| pDoc->SetString(nCol++, nRow, nTab, "Chart-Object"); |
| break; |
| default : |
| pDoc->SetString(nCol++, nRow, nTab, "ERROR"); |
| break; |
| } |
| pDoc->SetValue(nCol++, nRow, nTab, GraphHeader.CarretX); |
| pDoc->SetValue(nCol++, nRow, nTab, GraphHeader.CarretY); |
| pDoc->SetValue(nCol++, nRow, nTab, GraphHeader.CarretZ); |
| pDoc->SetValue(nCol++, nRow, nTab, GraphHeader.x); |
| pDoc->SetValue(nCol++, nRow, nTab, GraphHeader.y); |
| pDoc->SetValue(nCol++, nRow, nTab, GraphHeader.w); |
| pDoc->SetValue(nCol++, nRow, nTab, GraphHeader.h); |
| //----------------------------------- |
| #endif |
| |
| switch (ObjectType) |
| { |
| case otOle : |
| // Achtung hier muss sowas wie OleLoadFromStream passieren |
| IsOleObject = sal_True; |
| break; |
| case otImage : |
| { |
| Sc10ImageHeader ImageHeader; |
| lcl_ReadImageHeaer(rStream, ImageHeader); |
| |
| // Achtung nun kommen die Daten (Bitmap oder Metafile) |
| // Typ = 1 Device Dependend Bitmap DIB |
| // Typ = 2 MetaFile |
| rStream.SeekRel(ImageHeader.Size); |
| |
| if( ImageHeader.Typ != 1 && ImageHeader.Typ != 2 ) |
| nError = errUnknownFormat; |
| break; |
| } |
| case otChart : |
| { |
| Sc10ChartHeader ChartHeader; |
| Sc10ChartSheetData ChartSheetData; |
| Sc10ChartTypeData* pTypeData = new (::std::nothrow) Sc10ChartTypeData; |
| if (!pTypeData) |
| nError = errOutOfMemory; |
| else |
| { |
| lcl_ReadChartHeader(rStream, ChartHeader); |
| |
| //! altes Metafile verwenden ?? |
| rStream.SeekRel(ChartHeader.Size); |
| |
| lcl_ReadChartSheetData(rStream, ChartSheetData); |
| |
| lcl_ReadChartTypeData(rStream, *pTypeData); |
| |
| Rectangle aRect( Point(nStartX,nStartY), Size(nSizeX,nSizeY) ); |
| Sc10InsertObject::InsertChart( pDoc, static_cast<SCTAB>(GraphHeader.CarretZ), aRect, |
| static_cast<SCTAB>(GraphHeader.CarretZ), |
| ChartSheetData.DataX1, ChartSheetData.DataY1, |
| ChartSheetData.DataX2, ChartSheetData.DataY2 ); |
| |
| delete pTypeData; |
| } |
| } |
| break; |
| default : |
| nError = errUnknownFormat; |
| break; |
| } |
| nError = rStream.GetError(); |
| } |
| } |
| } |
| else |
| { |
| DBG_ERROR( "ObjectID" ); |
| nError = errUnknownID; |
| } |
| } |
| |
| |
| |
| |
| //----------------------------------------------------------------------------------------------- |
| |
| FltError ScFormatFilterPluginImpl::ScImportStarCalc10( SvStream& rStream, ScDocument* pDocument ) |
| { |
| rStream.Seek( 0UL ); |
| Sc10Import aImport( rStream, pDocument ); |
| return ( FltError ) aImport.Import(); |
| } |
| |
| |
| |