blob: 3dd1e8d7861cf1a359a88b5bf7136e048ddb1a88 [file] [log] [blame]
/**************************************************************
*
* 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 <tools/solar.h>
// 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