/************************************************************** * * 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. * *************************************************************/ #ifndef SC_SCFLT_HXX #define SC_SCFLT_HXX #include "viewopti.hxx" #include "collect.hxx" #include // FehlerNummern #define errUnknownFormat 1 #define errUnknownID 2 #define errOutOfMemory 3 // Identifiers im FileFormat #define ColWidthID 1 #define ColAttrID 2 #define RowHeightID 3 #define RowAttrID 4 #define FontID 5 #define NameID 6 #define TableID 7 #define ObjectID 8 #define PatternID 9 #define DataBaseID 10 // Zeilen/Spalten Flags #define crfSoftBreak 1 #define crfHardBreak 2 #define crfHidden 4 // Zelltypen #define ctValue 1 #define ctString 2 #define ctFormula 3 #define ctNote 4 // FontStyles #define ffDontCare 0x00 #define ffRoman 0x10 #define ffSwiss 0x20 #define ffModern 0x30 #define ffScript 0x40 #define ffDecorative 0x50 // FontWeight #define fwNormal 400 // FontAttribute #define atNone 0 #define atBold 1 #define atItalic 2 #define atUnderline 4 #define atStrikeOut 8 // Horizontale Ausrichtung #define hjNone 0 #define hjLeft 1 #define hjCenter 2 #define hjRight 3 // Vertikale Ausrichtung #define vjNone 0 #define vjTop 1 #define vjCenter 2 #define vjBottom 3 // AusrichtungsFlags #define ojWordBreak 0x01 #define ojBottomTop 0x02 #define ojTopBottom 0x04 // ZellRaster #define raNone 0 #define raGray12 1 #define raGray25 2 #define raGray50 3 #define raGray75 4 #define raGray100 5 // Zellschutz #define paProtect 1 #define paHideFormula 2 #define paHideAll 4 #define paHidePrint 8 // ZahlenFormatFlags #define vfStandard 0 #define vfMoney 1 #define vfThousend 2 #define vfPercent 3 #define vfExponent 4 #define vfZerro 5 #define vfDate 6 #define vfTime 7 #define vfBoolean 8 #define vfStandardRed 9 #define vfMoneyRed 10 #define vfThousendRed 11 #define vfPercentRed 12 #define vfExponentRed 13 #define vfFormula 14 #define vfString 15 #define vfNone 16 // DatumsFormatFlags #define df_NDMY_Long 0 #define df_DMY_Long 1 #define df_MY_Long 2 #define df_NDM_Long 3 #define df_DM_Long 4 #define df_M_Long 5 #define df_NDMY_Short 6 #define df_DMY_Short 7 #define df_MY_Short 8 #define df_NDM_Short 9 #define df_DM_Short 10 #define df_M_Short 11 #define df_Q_Long 12 #define df_Q_Short 13 // ZeitFormatFlags #define tf_HMS_Long 0 #define tf_HM_Long 1 #define tf_HMS_Short 2 #define tf_HM_Short 3 // Attribute fuer FormatVorlage #define pfValue 0x01 #define pfFont 0x02 #define pfJustify 0x04 #define pfFrame 0x08 #define pfRaster 0x10 #define pfProtection 0x20 // Displayflags fuer die Tabelle #define dfFormula 0x0001 // Formeln #define dfZerro 0x0002 // Nullwerte #define dfGrid 0x0004 // Gitternetz #define dfPageBreak 0x0008 // Seitenumbruch #define dfColRowBar 0x0010 // Zeilen/Spalten Koepfe (Dummy) #define dfSyntax 0x0020 // Syntax Highlighting #define dfPrintPage 0x0040 // Druckbildansicht (Dummy) #define dfObjectAll 0x0080 // Objekte anzeigen #define dfObjectFrame 0x0100 // Objekte als Platzhalter #define dfObjectNone 0x0200 // Objekte nicht anzeigen #define dfNoteMark 0x0400 // Notizanzeiger #define dfProtectMark 0x0800 // Schutzanzeiger // Objekt Typen #define otNone 0 // s.u. #define otOle 1 #define otImage 2 #define otChart 3 // Grafik Typen #define gtNone 0 // Kann nicht vorkommen #define gtOle 1 // Ole 1.0 Objekt #define gtImage 2 // Image (Bitmap oder Metafile) #define gtChart 3 // Chart // Datum/Uhrzeit struct Sc10DateTime { sal_uInt16 Year; sal_uInt16 Month; sal_uInt16 Day; sal_uInt16 Hour; sal_uInt16 Min; sal_uInt16 Sec; }; // ZahlenFormate struct Sc10ValueFormat { sal_uInt8 Format; // Zahl, Waehrung, Prozent etc. sal_uInt8 Info; // Anzahl Nachkommastellen, Anzahl Stellen, bzw. Datums/Zeitformat }; // Fontbeschreibung struct Sc10LogFont { sal_Int16 lfHeight; sal_Int16 lfWidth; sal_Int16 lfEscapement; sal_Int16 lfOrientation; sal_Int16 lfWeight; sal_uInt8 lfItalic; sal_uInt8 lfUnderline; sal_uInt8 lfStrikeOut; sal_uInt8 lfCharSet; sal_uInt8 lfOutPrecision; sal_uInt8 lfClipPrecision; sal_uInt8 lfQuality; sal_uInt8 lfPitchAndFamily; sal_Char lfFaceName[32]; int operator==( const Sc10LogFont& rData ) const; }; // RGB-Frabwerte struct Sc10Color { sal_uInt8 Dummy; sal_uInt8 Blue; sal_uInt8 Green; sal_uInt8 Red; int operator==( const Sc10Color& rColor ) const; }; // Blockbeschreibung struct Sc10BlockRect { sal_Int16 x1; sal_Int16 y1; sal_Int16 x2; sal_Int16 y2; }; // Datenbank-Bereich struct Sc10DataBaseRec { sal_Char Name[32]; sal_Int16 Tab; Sc10BlockRect Block; sal_uInt8 RowHeader; sal_Int16 SortField0; sal_uInt8 SortUpOrder0; sal_Int16 SortField1; sal_uInt8 SortUpOrder1; sal_Int16 SortField2; sal_uInt8 SortUpOrder2; sal_uInt8 IncludeFormat; sal_Int16 QueryField0; sal_Int16 QueryOp0; sal_uInt8 QueryByString0; sal_Char QueryString0[64]; double QueryValue0; sal_Int16 QueryConnect1; sal_Int16 QueryField1; sal_Int16 QueryOp1; sal_uInt8 QueryByString1; sal_Char QueryString1[64]; double QueryValue1; sal_Int16 QueryConnect2; sal_Int16 QueryField2; sal_Int16 QueryOp2; sal_uInt8 QueryByString2; sal_Char QueryString2[64]; double QueryValue2; }; // Kopf/Fusszeilen-Beschreibung struct Sc10HeadFootLine { sal_Char Title[128]; Sc10LogFont LogFont; sal_uInt8 HorJustify; sal_uInt8 VerJustify; sal_uInt16 Raster; sal_uInt16 Frame; Sc10Color TextColor; Sc10Color BackColor; Sc10Color RasterColor; sal_uInt16 FrameColor; // Nibble Codierte Farben link oben rechts unten sal_uInt16 Reserved; int operator==( const Sc10HeadFootLine& rData ) const; }; // Seitenformat struct Sc10PageFormat { Sc10HeadFootLine HeadLine; Sc10HeadFootLine FootLine; sal_Int16 Orientation; sal_Int16 Width; sal_Int16 Height; sal_Int16 NonPrintableX; sal_Int16 NonPrintableY; sal_Int16 Left; sal_Int16 Top; sal_Int16 Right; sal_Int16 Bottom; sal_Int16 Head; sal_Int16 Foot; sal_uInt8 HorCenter; sal_uInt8 VerCenter; sal_uInt8 PrintGrid; sal_uInt8 PrintColRow; sal_uInt8 PrintNote; sal_uInt8 TopBottomDir; sal_Char PrintAreaName[32]; Sc10BlockRect PrintArea; sal_Char PrnZoom[6]; // Pascal 6 Byte Realzahl sal_uInt16 FirstPageNo; sal_Int16 RowRepeatStart; sal_Int16 RowRepeatEnd; sal_Int16 ColRepeatStart; sal_Int16 ColRepeatEnd; sal_Char Reserved[26]; int operator==( const Sc10PageFormat& rData ) const; }; // Tabellenschutz struct Sc10TableProtect { sal_Char PassWord[16]; sal_uInt16 Flags; sal_uInt8 Protect; }; // Documentschutz struct Sc10SheetProtect { sal_Char PassWord[16]; sal_uInt16 Flags; sal_uInt8 Protect; }; // Dateikopf StarCalc 1.0 Datei struct Sc10FileHeader { sal_Char CopyRight[30]; sal_uInt16 Version; sal_Char Reserved[32]; }; // Benutzer-Definierte Datei-Beschreibung struct Sc10FileInfo { sal_Char Title[64]; sal_Char Thema[64]; sal_Char Keys[64]; sal_Char Note[256]; sal_Char InfoLabel0[16]; sal_Char InfoLabel1[16]; sal_Char InfoLabel2[16]; sal_Char InfoLabel3[16]; sal_Char Info0[32]; sal_Char Info1[32]; sal_Char Info2[32]; sal_Char Info3[32]; sal_Char CreateAuthor[64]; sal_Char ChangeAuthor[64]; sal_Char PrintAuthor[64]; Sc10DateTime CreateDate; Sc10DateTime ChangeDate; Sc10DateTime PrintDate; sal_uInt32 PageCount; sal_uInt32 ChartCount; sal_uInt32 PictureCount; sal_uInt32 GraphCount; sal_uInt32 OleCount; sal_uInt32 NoteCount; sal_uInt32 TextCellCount; sal_uInt32 ValueCellCount; sal_uInt32 FormulaCellCount; sal_uInt32 CellCount; sal_Char Reserved[52]; }; // Letze Cursorposition struct Sc10EditStateInfo { // Cursor Position sal_uInt16 CarretX; sal_uInt16 CarretY; sal_uInt16 CarretZ; // Linke obere Ecke der Tabelle im Fenster sal_uInt16 DeltaX; sal_uInt16 DeltaY; sal_uInt16 DeltaZ; // Ueberfluessig in StarCalc 3.0 sal_uInt8 DataBaseMode; sal_Char Reserved[51]; }; // Attribut-Eintrag struct Sc10ColData { sal_uInt16 Row; sal_uInt16 Value; }; // ZellAttribut-Beschreibung struct Sc10ColAttr { sal_uInt16 Count; Sc10ColData* pData; Sc10ColAttr() : pData(NULL) {} ~Sc10ColAttr() { delete [] pData; } }; // GraphHeader struct Sc10GraphHeader { sal_uInt8 Typ; // Typ der Grafik (Ole-Objekt, Image (Bitmap oder MetaFile), Chart-Object) sal_Int16 CarretX; // ZellPosition der Grafik sal_Int16 CarretY; sal_Int16 CarretZ; sal_Int32 x; // x,y Abstand zum Zellrand in Pixel (Pixel weil ich Grafiken in Fenstern ablege) sal_Int32 y; sal_Int32 w; // w,h Breite und Hoehe in Pixel sal_Int32 h; sal_uInt8 IsRelPos; // Ist die Position relativ zur Zelle oder absolute in der Tabelle sal_uInt8 DoPrint; // Soll die Grafik ausgedruckt werden sal_uInt16 FrameType; // Art der Umrandung um die Grafik (Keine, Einfach, Doppelt, Einfach Dick, Doppelt Dick) sal_uInt8 IsTransparent; // Soll der Hintergrund gezeichnet werden Sc10Color FrameColor; // Umrandungsfarbe als RGB-Wert Sc10Color BackColor; // Hintergrundfarbe als RGB-Wert sal_Char Reserved[32]; // Na was wohl }; // ImageHeader struct Sc10ImageHeader { sal_Char FileName[128]; // Dateiname des urspruenglich eingefuegten Bildes sal_Int16 Typ; // Typ der Grafik (Bitmap oder Metafile) sal_uInt8 Linked; // Kann nicht vorkommen sal_Int16 x1; // Urspruengliche Groesse der Grafik (nur fuer Metafiles) sal_Int16 y1; sal_Int16 x2; sal_Int16 y2; sal_uInt32 Size; // Groesse der Grafik in BYTES }; // ChartHeader struct Sc10ChartHeader { sal_Int16 MM; // Meatfile Struktur MapMode, Breite, Hoehe sal_Int16 xExt; sal_Int16 yExt; sal_uInt32 Size; // Groesse der Grafik in BYTES }; // ChartSheetData struct Sc10ChartSheetData { sal_uInt8 HasTitle; // Hat das Chart Daten aus der Tabell fuer einen Titel sal_Int16 TitleX; // Zellposition des Titels sal_Int16 TitleY; sal_uInt8 HasSubTitle; // Hat das Chart Daten aus der Tabell fuer einen Untertitel sal_Int16 SubTitleX; // Zellposition des Untertitels sal_Int16 SubTitleY; sal_uInt8 HasLeftTitle; // Hat das Chart Daten aus der Tabelle fuer einen Linken-Titel sal_Int16 LeftTitleX; // Zellposition des Linken-Titels sal_Int16 LeftTitleY; sal_uInt8 HasLegend; // Hat das Chart Daten aus der Tabelle fuer eine Legende sal_Int16 LegendX1; // Zellen der Legende sal_Int16 LegendY1; sal_Int16 LegendX2; sal_Int16 LegendY2; sal_uInt8 HasLabel; // Hat das Chart Daten aus der Tabelle fuer die Achsbeschriftung sal_Int16 LabelX1; // Zellen der Achsbeschriftung sal_Int16 LabelY1; sal_Int16 LabelX2; sal_Int16 LabelY2; sal_Int16 DataX1; // Zellen der Daten sal_Int16 DataY1; sal_Int16 DataX2; sal_Int16 DataY2; sal_Char Reserved[64]; }; #define AGPie2D 1 // Pie Chart 2D #define AGPie3D 2 // Pie Chart 3D #define AGBar2D 3 // Bar Chart 2D #define AGBar3D 4 // Bar Chart 3D #define AGGantt 5 // Gantt Diagramm #define AGLine 6 // Line Chart #define AGLogLine 7 // Logarythmic-Coordinate Chart #define AGArea 8 // Area Chart #define AGHLC 11 // High-Low-Close Chart #define AGPolar 10 // Polar-Coordinate Chart typedef sal_Char Sc10ChartText[30]; struct Sc10ChartTypeData { sal_Int16 NumSets; sal_Int16 NumPoints; sal_Int16 DrawMode; sal_Int16 GraphType; sal_Int16 GraphStyle; sal_Char GraphTitle[80]; sal_Char BottomTitle[80]; sal_Int16 SymbolData[256]; sal_Int16 ColorData[256]; sal_Int16 ThickLines[256]; sal_Int16 PatternData[256]; sal_Int16 LinePatternData[256]; sal_Int16 NumGraphStyles[11]; sal_Int16 ShowLegend; Sc10ChartText LegendText[256]; sal_Int16 ExplodePie; sal_Int16 FontUse; sal_Int16 FontFamily[5]; sal_Int16 FontStyle[5]; sal_Int16 FontSize[5]; sal_Int16 GridStyle; sal_Int16 Labels; sal_Int16 LabelEvery; Sc10ChartText LabelText[50]; sal_Char LeftTitle[80]; sal_Char Reserved[4646]; }; // FontAttribut class Sc10FontData : public ScDataObject { public: sal_Int16 Height; sal_uInt8 CharSet; sal_uInt8 PitchAndFamily; sal_Char FaceName[32]; Sc10FontData( const Sc10FontData& rData ) : ScDataObject( rData ), Height( rData.Height ), CharSet( rData.CharSet ), PitchAndFamily( rData.PitchAndFamily ) { strncpy( FaceName, rData.FaceName, sizeof(FaceName) ); FaceName[sizeof(FaceName)-1] = 0; } Sc10FontData( SvStream& rStream ); virtual ScDataObject* Clone() const { return new Sc10FontData(*this); } }; // Font-Collection class Sc10FontCollection : public ScCollection { protected: sal_uLong nError; public: Sc10FontCollection( SvStream& rStream ); sal_uLong GetError() { return nError; } Sc10FontData* At(sal_uInt16 nIndex) { return (Sc10FontData*)ScCollection::At(nIndex); } private: using ScCollection::At; }; //BereichsDaten class Sc10NameData : public ScDataObject { public : sal_Char Name[32]; sal_Char Reference[64]; sal_Char Reserved[12]; Sc10NameData(const Sc10NameData& rData) : ScDataObject( rData ) { strncpy(Name, rData.Name, sizeof(Name)); Name[sizeof(Name)-1] = 0; strncpy(Reference, rData.Reference, sizeof(Reference)); Reference[sizeof(Reference)-1] = 0; memcpy(Reserved, rData.Reserved, sizeof(Reserved)); } Sc10NameData(SvStream& rStream); virtual ScDataObject* Clone() const { return new Sc10NameData(*this); } }; // Bereichs-Collection class Sc10NameCollection : public ScCollection { protected: sal_uLong nError; public: Sc10NameCollection(SvStream& rStream); sal_uLong GetError() { return nError; } Sc10NameData* At(sal_uInt16 nIndex) { return (Sc10NameData*)ScCollection::At(nIndex); } private: using ScCollection::At; }; // Vorlage-Daten class Sc10PatternData : public ScDataObject { public: sal_Char Name[32]; Sc10ValueFormat ValueFormat; Sc10LogFont LogFont; sal_uInt16 Attr; sal_uInt16 Justify; sal_uInt16 Frame; sal_uInt16 Raster; sal_uInt16 nColor; sal_uInt16 FrameColor; sal_uInt16 Flags; sal_uInt16 FormatFlags; sal_Char Reserved[8]; Sc10PatternData(const Sc10PatternData& rData) : ScDataObject( rData ) { strncpy(Name, rData.Name, sizeof(Name)); Name[sizeof(Name)-1] = 0; memcpy(&ValueFormat, &rData.ValueFormat, sizeof(ValueFormat)); memcpy(&LogFont, &rData.LogFont, sizeof(LogFont)); Attr = rData.Attr; Justify = rData.Justify; Frame = rData.Frame; Raster = rData.Raster; nColor = rData.nColor; FrameColor = rData.FrameColor; Flags = rData.Flags; FormatFlags = rData.FormatFlags; memcpy(Reserved, rData.Reserved, sizeof(Reserved)); } Sc10PatternData(SvStream& rStream); virtual ScDataObject* Clone() const { return new Sc10PatternData(*this); } }; // Vorlage-Collection class Sc10PatternCollection : public ScCollection { protected: sal_uLong nError; public: Sc10PatternCollection(SvStream& rStream); sal_uLong GetError() { return nError; } Sc10PatternData* At(sal_uInt16 nIndex) { return (Sc10PatternData*)ScCollection::At(nIndex); } private: using ScCollection::At; }; // DatenBank-Daten class Sc10DataBaseData : public ScDataObject { public: Sc10DataBaseRec DataBaseRec; Sc10DataBaseData(const Sc10DataBaseData& rData) : ScDataObject( rData ) { memcpy(&DataBaseRec, &rData.DataBaseRec, sizeof(DataBaseRec)); } Sc10DataBaseData(SvStream& rStream); virtual ScDataObject* Clone() const { return new Sc10DataBaseData(*this); } }; // DatenBank-Collection class Sc10DataBaseCollection : public ScCollection { protected: sal_uLong nError; sal_Char ActName[32]; public: Sc10DataBaseCollection(SvStream& rStream); sal_uLong GetError() { return nError; } Sc10DataBaseData* At(sal_uInt16 nIndex) { return (Sc10DataBaseData*)ScCollection::At(nIndex); } private: using ScCollection::At; }; class Sc10PageData : public ScDataObject { public: Sc10PageFormat aPageFormat; Sc10PageData( const Sc10PageFormat& rFormat ) : aPageFormat(rFormat) {} int operator==( const Sc10PageData& rData ) const { return aPageFormat == rData.aPageFormat; } virtual ScDataObject* Clone() const; }; // Seitenformat-Collection class Sc10PageCollection : public ScCollection { public: Sc10PageCollection() : ScCollection(1,1) {}; Sc10PageData* At(sal_uInt16 nIndex) { return (Sc10PageData*)ScCollection::At(nIndex); } sal_uInt16 InsertFormat( const Sc10PageFormat& rData ); void PutToDoc( ScDocument* pDoc ); private: using ScCollection::At; }; class ScfStreamProgressBar; // Import-Klasse class Sc10Import { SvStream& rStream; ScDocument* pDoc; Sc10Color TextPalette[16]; Sc10Color BackPalette[16]; Sc10Color RasterPalette[16]; Sc10Color FramePalette[16]; Sc10SheetProtect SheetProtect; Sc10FontCollection* pFontCollection; Sc10NameCollection* pNameCollection; Sc10PatternCollection* pPatternCollection; Sc10DataBaseCollection* pDataBaseCollection; sal_uLong nError; sal_Int16 TabCount; SCTAB nShowTab; ScViewOptions aSc30ViewOpt; ScfStreamProgressBar* pPrgrsBar; public: Sc10Import( SvStream& rStr, ScDocument* pDocument ); ~Sc10Import(); sal_uLong Import(); void LoadFileHeader(); void LoadFileInfo(); void LoadEditStateInfo(); void LoadProtect(); void LoadViewColRowBar(); void LoadScrZoom(); void LoadPalette(); void LoadFontCollection(); void LoadNameCollection(); void ImportNameCollection(); void LoadPatternCollection(); void LoadDataBaseCollection(); void LoadTables(); void LoadCol(SCCOL Col, SCTAB Tab); void LoadColAttr(SCCOL Col, SCTAB Tab); void LoadAttr(Sc10ColAttr& rAttr); void ChangeFormat(sal_uInt16 nFormat, sal_uInt16 nInfo, sal_uLong& nKey); void LoadObjects(); }; #endif