/**************************************************************
 * 
 * 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.
 * 
 *************************************************************/



//-------------------------------------------------------------------------
enum SvxCellHorJustifyEnum
{
	SVX_HOR_JUSTIFY_STANDARD,
	SVX_HOR_JUSTIFY_LEFT,
	SVX_HOR_JUSTIFY_CENTER,
	SVX_HOR_JUSTIFY_RIGHT,
	SVX_HOR_JUSTIFY_BLOCK,
	SVX_HOR_JUSTIFY_REPEAT
};
item SvxCellHorJustifyEnum SvxCellHorJustifyEnumItem;

enum SvxCellVerJustifyEnum
{
	SVX_VER_JUSTIFY_STANDARD,
	SVX_VER_JUSTIFY_TOP,
	SVX_VER_JUSTIFY_CENTER,
	SVX_VER_JUSTIFY_BOTTOM
};
item SvxCellVerJustifyEnum SvxCellVerJustifyEnumItem;

//-------------------------------------------------------------------------

enum SvxCellOrientationEnum
{
	SVX_ORIENTATION_STANDARD,
	SVX_ORIENTATION_TOPBOTTOM,
	SVX_ORIENTATION_BOTTOMTOP,
	SVX_ORIENTATION_STACKED
};
item SvxCellOrientationEnum SvxCellOrientationEnumItem;

enum SvxChooseControlEnum
{
	SVX_SNAP_PUSHBUTTON,
	SVX_SNAP_CHECKBOX,
	SVX_SNAP_RADIOBUTTON,
	SVX_SNAP_SPINBUTTON,
	SVX_SNAP_FIXEDTEXT,
	SVX_SNAP_GROUPBOX,
	SVX_SNAP_LISTBOX,
	SVX_SNAP_COMBOBOX,
	SVX_SNAP_EDIT,
	SVX_SNAP_HSCROLLBAR,
	SVX_SNAP_VSCROLLBAR,
	SVX_SNAP_PREVIEW,
	SVX_SNAP_SELECT,
	SVX_SNAP_URLBUTTON,
	SVX_SNAP_IMAGECONTROL,
	SVX_SNAP_PROGRESSBAR,
	SVX_SNAP_HFIXEDLINE,
	SVX_SNAP_VFIXEDLINE,
	SVX_SNAP_DATEFIELD,
	SVX_SNAP_TIMEFIELD,
	SVX_SNAP_NUMERICFIELD,
	SVX_SNAP_CURRENCYFIELD,
	SVX_SNAP_FORMATTEDFIELD,
	SVX_SNAP_PATTERNFIELD,
	SVX_SNAP_FILECONTROL,
	SVX_SNAP_TREECONTROL
}
item SvxChooseControlEnum SvxChooseControlItem;

//-------------------------------------------------------------------------

enum SvxDrawToolEnum
{
	SVX_SNAP_DRAW_SELECT,
	//
	SVX_SNAP_DRAW_LINE,
	SVX_SNAP_DRAW_RECT,
	SVX_SNAP_DRAW_ELLIPSE,
	SVX_SNAP_DRAW_POLYGON_NOFILL,
	SVX_SNAP_DRAW_BEZIER_NOFILL,
	SVX_SNAP_DRAW_FREELINE_NOFILL,
	SVX_SNAP_DRAW_ARC,
	SVX_SNAP_DRAW_PIE,
	SVX_SNAP_DRAW_CIRCLECUT,
	SVX_SNAP_DRAW_TEXT,
	SVX_SNAP_DRAW_TEXT_VERTICAL,
	SVX_SNAP_DRAW_TEXT_MARQUEE,
	SVX_SNAP_DRAW_CAPTION,
	SVX_SNAP_DRAW_CAPTION_VERTICAL
}
item SvxDrawToolEnum SvxDrawToolEnumItem;

//-------------------------------------------------------------------------

enum SvxDrawAlignEnum
{
	SVX_OBJECT_ALIGN_LEFT,
	SVX_OBJECT_ALIGN_CENTER,
	SVX_OBJECT_ALIGN_RIGHT,
	SVX_OBJECT_ALIGN_UP,
	SVX_OBJECT_ALIGN_MIDDLE,
	SVX_OBJECT_ALIGN_DOWN
}
item SvxDrawAlignEnum SvxDrawAlignEnumItem;

//-------------------------------------------------------------------------

enum SvxDrawBezierEnum
{
	SVX_BEZIER_MOVE,
	SVX_BEZIER_INSERT,
	SVX_BEZIER_DELETE,
	SVX_BEZIER_CUTLINE,
	SVX_BEZIER_CONVERT,
	SVX_BEZIER_EDGE,
	SVX_BEZIER_SMOOTH,
	SVX_BEZIER_SYMMTR,
	SVX_BEZIER_CLOSE,
	SVX_BEZIER_ELIMINATE_POINTS
}
item SvxDrawBezierEnum SvxDrawBezierEnumItem;

enum SvxAdjust
{
	SVX_ADJUST_LEFT,
	SVX_ADJUST_RIGHT,
	SVX_ADJUST_BLOCK,
	SVX_ADJUST_CENTER,
	SVX_ADJUST_BLOCKLINE,
	SVX_ADJUST_END
};

struct SvxAdjustStruct
{
	SvxAdjust	ParagraphAdjustment	MID_PARA_ADJUST;
	SvxAdjust	LastLineAdjustment 	MID_LAST_LINE_ADJUST;
	BOOL		ExpandSingleWord	MID_EXPAND_SINGLE;
};
item SvxAdjustStruct SvxAdjustItem;

//-------------------------------------------------------------------------

enum SvxCaseMap
{
	SVX_CASEMAP_NOT_MAPPED,
	SVX_CASEMAP_VERSALIEN,
	SVX_CASEMAP_GEMEINE,
	SVX_CASEMAP_TITEL,
	SVX_CASEMAP_KAPITAELCHEN,
	SVX_CASEMAP_END
};
item SvxCaseMap SvxCaseMapItem;

//-------------------------------------------------------------------------

enum CharSet
{
	CHARSET_DONTKNOW,
	CHARSET_ANSI,
	CHARSET_MAC,
	CHARSET_IBMPC_437,
	CHARSET_IBMPC_850,
	CHARSET_IBMPC_860,
	CHARSET_IBMPC_861,
	CHARSET_IBMPC_863,
	CHARSET_IBMPC_865,
	CHARSET_SYSTEM,
	CHARSET_SYMBOL
};

//-------------------------------------------------------------------------

enum FontFamily
{
	FAMILY_DONTKNOW,
	FAMILY_DECORATIVE,
	FAMILY_MODERN,
	FAMILY_ROMAN,
	FAMILY_SCRIPT,
	FAMILY_SWISS,
	FAMILY_SYSTEM
};

//-------------------------------------------------------------------------

enum FontPitch
{
	PITCH_DONTKNOW,
	PITCH_FIXED,
	PITCH_VARIABLE
};

//-------------------------------------------------------------------------

struct SvxFont
{
	String		StyleName	MID_FONT_STYLE_NAME;
	FontPitch	Pitch		MID_FONT_PITCH;			// INT16
	CharSet 	CharSet 	MID_FONT_CHAR_SET;		// INT16
	FontFamily	Family		MID_FONT_FAMILY;		// INT16
	String		FamilyName	MID_FONT_FAMILY_NAME;
};
item SvxFont SvxFontItem;

//-------------------------------------------------------------------------

enum FontWeight
{
	WEIGHT_DONTKNOW,
	WEIGHT_THIN,
	WEIGHT_ULTRALIGHT,
	WEIGHT_LIGHT,
	WEIGHT_SEMILIGHT,
	WEIGHT_NORMAL,
	WEIGHT_MEDIUM,
	WEIGHT_SEMIBOLD,
	WEIGHT_BOLD,
	WEIGHT_ULTRABOLD,
	WEIGHT_BLACK
};
item FontWeight SvxWeightItem;

//-------------------------------------------------------------------------

enum FontUnderline
{
	UNDERLINE_NONE,
	UNDERLINE_SINGLE,
	UNDERLINE_DOUBLE,
	UNDERLINE_DOTTED
};

//-------------------------------------------------------------------------

enum FontStrikeout
{
	STRIKEOUT_NONE,
	STRIKEOUT_SINGLE,
	STRIKEOUT_DOUBLE
};

//-------------------------------------------------------------------------

enum FontItalic
{
	ITALIC_NONE,
	ITALIC_OBLIQUE,
	ITALIC_NORMAL
};
item FontItalic SvxPostureItem;

//-------------------------------------------------------------------------

enum SvxDbType
{
	DBTYPE_STARBASE,
	DBTYPE_ODBC,
	DBTYPE_WATCOM
};
item SvxDbType SvxDbTypeItem;

//-------------------------------------------------------------------------

enum SvxLineSpace
{
	SVX_LINE_SPACE_AUTO,
	SVX_LINE_SPACE_MAX,
	SVX_LINE_SPACE_MIN,
	SVX_LINE_SPACE_END
};
item SvxLineSpace SvxLineSpaceItem;

//-------------------------------------------------------------------------

enum SvxInterLineSpace
{
	SVX_INTER_LINE_SPACE_OFF,
	SVX_INTER_LINE_SPACE_PROP,
	SVX_INTER_LINE_SPACE_FIX,
	SVX_INTER_LINE_SPACE_END
};
item SvxInterLineSpace SvxInterLineSpaceItem;

//-------------------------------------------------------------------------

enum SvxBreak
{
	SVX_BREAK_NONE,
	SVX_BREAK_COLUMN_BEFORE,
	SVX_BREAK_COLUMN_AFTER,
	SVX_BREAK_COLUMN_BOTH,
	SVX_BREAK_PAGE_BEFORE,
	SVX_BREAK_PAGE_AFTER,
	SVX_BREAK_PAGE_BOTH,
	SVX_BREAK_END
};
item SvxBreak SvxBreakItem;

//-------------------------------------------------------------------------

enum BrushStyle
{
	BRUSH_NULL,
	BRUSH_SOLID,
	BRUSH_HORZ,
	BRUSH_VERT,
	BRUSH_CROSS,
	BRUSH_DIAGCROSS,
	BRUSH_UPDIAG,
	BRUSH_DOWNDIAG,
	BRUSH_25,
	BRUSH_50,
	BRUSH_75,
	BRUSH_BITMAP
};
item BrushStyle BrushStyleItem;

//-------------------------------------------------------------------------

enum SvxNumType
{
	SVX_CHARS_UPPER_LETTER,
	SVX_CHARS_LOWER_LETTER,
	SVX_ROMAN_UPPER,
	SVX_ROMAN_LOWER,
	SVX_ARABIC,
	SVX_NUMBER_NONE,
	SVX_CHAR_SPECIAL,
	SVX_PAGEDESC
};
item SvxNumType SvxNumTypeItem;

//-------------------------------------------------------------------------

enum SvxShadowLocation
{
	SVX_SHADOW_NONE,
	SVX_SHADOW_TOPLEFT,
	SVX_SHADOW_TOPRIGHT,
	SVX_SHADOW_BOTTOMLEFT,
	SVX_SHADOW_BOTTOMRIGHT,
	SVX_SHADOW_END
};
item SvxShadowLocation      SvxShadowLocationItem;

//-------------------------------------------------------------------------

item INT16                  SvxCharScaleWidthItem;
item INT16                  SvxParaVertAlignItem;
item INT16					SvxCharReliefItem;
item BOOL                   SvxBlinkItem;
item BOOL                   SvxAutoKernItem;
item INT32                  SvxColorItem;
item BOOL                   SvxContourItem;
item INT16                  SvxFmtBreakItem;  // enum
item BOOL                   SvxFmtKeepItem;
item BOOL                   SvxFmtSplitItem;
item INT16                  SvxKerningItem;
item INT16                  SvxLanguageItem;
item BOOL                   SvxNoHyphenItem;
item BOOL                   SvxNoLinebreakItem;
item BOOL                   SvxOpaqueItem;
item BYTE                   SvxOrphansItem;
item BYTE                   SvxPaperBinItem;
item String                 SvxPostItAuthorItem;
item String                 SvxPostItDateItem;
item String                 SvxPostItTextItem;
item FontItalic             SvxPostureItem;  // enum
item BOOL                   SvxPrintItem;
item UINT16                 SvxPropSizeItem;        // derived from UInt16Item
item BOOL                   SvxShadowedItem;
item SvxDrawBezierEnum      SvxDrawBezierItem;
item SvxDrawAlignEnum 		SvxDrawAlignItem;
item SvxDrawToolEnum 		SvxDrawToolItem;
item BYTE 					SvxWidowsItem;
item BOOL 					SvxWordLineModeItem;
item SvxCellHorJustifyEnum  SvxHorJustifyItem;
item SvxCellVerJustifyEnum  SvxVerJustifyItem;
item SvxCellOrientationEnum SvxOrientationItem;
item BOOL                   SdrShadowItem;
item INT16                  SdrTextFitToSizeTypeItem;  // enum
item String                 SfxStringListItem;  // serialized into one concatenated string
item double					SvxDoubleItem;
item String                 OfaPtrItem;  // serialized into one concatenated string
item String                 SvxDashListItem;
item String                 SvxLineEndListItem;
item String                 SvxColorTableItem;
item String                 SvxGradientListItem;
item String                 SvxHatchListItem;
item String                 SvxBitmapListItem;
item String 				SfxLockBytesItem;
item String 				SvxFontListItem;
item String					avmedia_MediaItem;

item BYTE		    		SfxGlobalNameItem;

//-------------------------------------------------------------------------

struct SvxCrossedOut
{
    FontStrikeout   Kind        MID_CROSS_OUT;
};
item SvxCrossedOut SvxCrossedOutItem;

struct SvxTextLine
{
    FontUnderline   LineStyle   MID_TL_STYLE;
    BOOL            HasColor    MID_TL_HASCOLOR;
    INT32           Color       MID_TL_COLOR;
};
item SvxTextLine SvxTextLineItem;

struct SvxBrush
{
	BOOL		Transparent 	MID_GRAPHIC_TRANSPARENT;
	INT32		BackColor		MID_BACK_COLOR;
	String		URL				MID_GRAPHIC_URL;
	String		Filtername		MID_GRAPHIC_FILTER;
    INT16       Position        MID_GRAPHIC_POSITION;
};
item SvxBrush SvxBrushItem;

//-------------------------------------------------------------------------

struct SvxEscapement
{
	INT16		Escapement 		MID_ESC;
	BYTE		Height			MID_ESC_HEIGHT;
	BOOL		Auto			MID_AUTO_ESC;
};
item SvxEscapement SvxEscapementItem;

//-------------------------------------------------------------------------

struct SvxFontHeight
{
    float       Height      MID_FONTHEIGHT;         // may be converted to INT32
	INT16		Prop		MID_FONTHEIGHT_PROP;
    float       Diff        MID_FONTHEIGHT_DIFF;    // may be converted to INT32
};
item SvxFontHeight SvxFontHeightItem;

//-------------------------------------------------------------------------

struct SvxHyphenZone
{
	BOOL		Hyphen		MID_IS_HYPHEN;
	INT16		MinLead 	MID_HYPHEN_MIN_LEAD;
	INT16		MinTrail	MID_HYPHEN_MIN_TRAIL;
	INT16		MaxHyphens	MID_HYPHEN_MAX_HYPHENS;
};
item SvxHyphenZone SvxHyphenZoneItem;

//-------------------------------------------------------------------------
struct SvxLine
{
    INT32      LineFGColor     MID_FG_COLOR;
    INT32      LineOutWidth    MID_OUTER_WIDTH;
    INT32      LineInWidth     MID_INNER_WIDTH;
    INT32      LineDistance    MID_DISTANCE;
};
item SvxLine SvxLineItem;

//-------------------------------------------------------------------------

struct SvxLRSpace
{
	INT32		LeftMargin			MID_L_MARGIN;				// % or direct
	INT32		TextLeftMargin		MID_TXT_LMARGIN
	INT32		RightMargin 		MID_R_MARGIN;				// % or direct
	INT16		LeftRelMargin		MID_L_REL_MARGIN;
	INT16		RightRelMargin		MID_R_REL_MARGIN;
	INT32		FirstLineIndent		MID_FIRST_LINE_INDENT;		// % or direct
	INT32		FirstLineRelIdent	MID_FIRST_LINE_REL_INDENT;
	BOOL		AutoFirst			MID_FIRST_AUTO;
};
item SvxLRSpace SvxLRSpaceItem;

//-------------------------------------------------------------------------

struct SvxLineSpacing
{
    INT16               Mode        MID_LINESPACE;
    INT16               Height      MID_HEIGHT;
};
item SvxLineSpacing SvxLineSpacingItem;

//-------------------------------------------------------------------------

struct SvxPage
{
	BOOL				Landscape		MID_PAGE_ORIENTATION;
	INT16				Layout 			MID_PAGE_LAYOUT;
	INT16				NumType 		MID_PAGE_NUMTYPE;
};
item SvxPage SvxPageItem;

//-------------------------------------------------------------------------

struct SvxPagePosSize
{
	INT32				XPos			MID_X;			// ???
	INT32				YPos			MID_Y;			// ???
	INT32				Width			MID_WIDTH;		// ???
	INT32				Height			MID_HEIGHT;		// ???
};
item SvxPagePosSize SvxPagePosSizeItem;


//-------------------------------------------------------------------------
struct SvxShadow
{
    SvxShadowLocation   Location        MID_LOCATION;
    INT16               Width           MID_WIDTH;
    BOOL                IsTransparent   MID_TRANSPARENT;
    INT32               Color           MID_BG_COLOR;
};
item SvxShadow SvxShadowItem;


//-------------------------------------------------------------------------

struct SvxULSpace
{
	INT32				TopMargin		MID_UP_MARGIN;	// % or direct
	INT32				BottomMargin	MID_LO_MARGIN;	// % or direct
	INT16				TopRelMargin	MID_UP_REL_MARGIN;
	INT16				BottomRelMargin	MID_LO_REL_MARGIN;
};
item SvxULSpace SvxULSpaceItem

//-------------------------------------------------------------------------

struct SvxLongLRSpace
{
	INT32			Left		MID_LEFT;	// ???
	INT32			Right		MID_RIGHT;	// ???
};
item SvxLongLRSpace SvxLongLRSpaceItem;

//-------------------------------------------------------------------------

struct SvxLongULSpace
{
	INT32			Upper		MID_UPPER;	// ???
	INT32			Lower		MID_LOWER;	// ???
};
item SvxLongULSpace SvxLongULSpaceItem;

//-------------------------------------------------------------------------

struct SvxHyperlink
{
    String  Text    MID_HLINK_TEXT;
    String  URL     MID_HLINK_URL;
    String  Target  MID_HLINK_TARGET;
    String  Name    MID_HLINK_NAME;
    INT32   Type    MID_HLINK_TYPE;
};
item SvxHyperlink SvxHyperlinkItem;

//-------------------------------------------------------------------------

struct PageModel
{
    BOOL   Auto MID_AUTO;
    String Name MID_NAME;
};
item PageModel SvxPageModelItem;

struct SvxProtect
{
    BOOL Content    MID_PROTECT_CONTENT;
    BOOL Size       MID_PROTECT_SIZE;
    BOOL Position   MID_PROTECT_POSITION;
};
item SvxProtect SvxProtectItem;

struct SvxZoom
{
    UINT16 Value         MID_VALUE;
    INT16 ValueSet       MID_VALUESET;
    INT16 Type           MID_TYPE;
};
item SvxZoom SvxZoomItem;

struct SvxRulerObject
{
    INT32   StartX  MID_START_X;
    INT32   StartY  MID_START_Y;
    INT32   EndX    MID_END_X;
    INT32   EndY    MID_END_Y;
    BOOL    Limited MID_LIMIT;
};
item SvxRulerObject SvxObjectItem;

item String LineBorder;                 // dummy for sequence
struct SvxBox
{
    LineBorder LeftBorder       MID_LEFT_BORDER;
    INT32 LeftDistance          LEFT_BORDER_DISTANCE;
    LineBorder RightBorder      MID_RIGHT_BORDER;
    INT32 RightDistance         RIGHT_BORDER_DISTANCE;
    LineBorder TopBorder        MID_TOP_BORDER;
    INT32 TopDistance           TOP_BORDER_DISTANCE;
    LineBorder BottomBorder     MID_BOTTOM_BORDER;
    INT32 BottomDistance        BOTTOM_BORDER_DISTANCE;
};
item SvxBox SvxBoxItem;

struct SvxBoxInfo
{
    LineBorder Horizontal   MID_HORIZONTAL;
    LineBorder Vertical     MID_VERTICAL;
    INT16 Flags             MID_FLAGS;
    INT16 ValidFlags        MID_VALIDFLAGS;
    INT32 DefaultDistance   MID_DISTANCE;
};
item SvxBoxInfo SvxBoxInfoItem;

item String SvxColumns;                 // dummy for sequence
struct SvxColumnDescription
{
    SvxColumns  Columns     MID_COLUMNARRAY;  // currently not implemented
    INT32       Left        MID_LEFT;
    INT32       Right       MID_RIGHT;
    INT32       Actual      MID_ACTUAL;
    BOOL        Orthogonal  MID_ORTHO;
    BOOL        Table       MID_TABLE;
};
item SvxColumnDescription SvxColumnItem;

struct SvxTabStop
{
    String  TabStops         MID_TABSTOPS; // dummy, will be represented by array of structs
    //INT32   StandardTabStop  MID_STD_TAB;
};
item SvxTabStop SvxTabStopItem;

struct SvxCharRotate
{
    INT16  Rotation          MID_ROTATE;
    BOOL    FitToLine        MID_FITTOLINE;
};
item SvxCharRotate SvxCharRotateItem;

item String                 SfxSetItem;  // dummy
item INT16                  SvxRotateModeItem;  // enum
item INT16                  SvxOrientationItem;  // enum

struct SvxMargin
{
    INT32 LeftMargin MID_MARGIN_L_MARGIN;
    INT32 RightMargin MID_MARGIN_R_MARGIN;
    INT32 UpperMargin MID_MARGIN_UP_MARGIN;
    INT32 LowerMargin MID_MARGIN_LO_MARGIN;
};
item SvxMargin SvxMarginItem;

struct SvxEmphasisMark
{
    INT32   Emphasis    MID_EMPHASIS;
};
item SvxEmphasisMark SvxEmphasisMarkItem;

item String SvxSmartTagItem;                 // dummy for sequence


item String Points;                 // dummy for sequence
struct ZoomSlider
{
    INT16  CurrentZoom          MID_ZOOMSLIDER_CURRENTZOOM;
    Points SnappingPoints       MID_ZOOMSLIDER_SNAPPINGPOINTS;
    INT16  SvxMinZoom           MID_ZOOMSLIDER_MINZOOM;
    INT16  SvxMaxZoom           MID_ZOOMSLIDER_MAXZOOM;
};
item ZoomSlider SvxZoomSliderItem;

item String SvxGalleryItem; // dummy for sequence
