/**************************************************************
 * 
 * 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 _DXF2MTF_HXX
#define _DXF2MTF_HXX

#include "dxfreprd.hxx"
#include <vcl/font.hxx>
#include <vcl/lineinfo.hxx>

// MT: NOOLDSV, someone should change the code...
enum PenStyle { PEN_NULL, PEN_SOLID, PEN_DOT, PEN_DASH, PEN_DASHDOT };
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 };


class DXF2GDIMetaFile {
private:

	VirtualDevice * pVirDev;
	const DXFRepresentation * pDXF;
	sal_Bool bStatus;

	sal_uInt16 OptPointsPerCircle;

	sal_uLong nMinPercent;
	sal_uLong nMaxPercent;
	sal_uLong nLastPercent;
	sal_uLong nMainEntitiesCount;

	long		nBlockColor;
	DXFLineInfo	aBlockDXFLineInfo;
	long		nParentLayerColor;
	DXFLineInfo	aParentLayerDXFLineInfo;
	Color		aActLineColor;
	Color		aActFillColor;
	Font		aActFont;

	sal_uLong CountEntities(const DXFEntities & rEntities);

	void MayCallback(sal_uLong nMainEntitiesProcessed);

	Color ConvertColor(sal_uInt8 nColor);

	long GetEntityColor(const DXFBasicEntity & rE);

	DXFLineInfo LTypeToDXFLineInfo(const char * sLineType);

	DXFLineInfo GetEntityDXFLineInfo(const DXFBasicEntity & rE);

	sal_Bool SetLineAttribute(const DXFBasicEntity & rE, sal_uLong nWidth=0);

	sal_Bool SetAreaAttribute(const DXFBasicEntity & rE);

	sal_Bool SetFontAttribute(const DXFBasicEntity & rE, short nAngle,
						  sal_uInt16 nHeight, double fWidthScale);

	void DrawLineEntity(const DXFLineEntity & rE, const DXFTransform & rTransform);

	void DrawPointEntity(const DXFPointEntity & rE, const DXFTransform & rTransform);

	void DrawCircleEntity(const DXFCircleEntity & rE, const DXFTransform & rTransform);

	void DrawArcEntity(const DXFArcEntity & rE, const DXFTransform & rTransform);

	void DrawTraceEntity(const DXFTraceEntity & rE, const DXFTransform & rTransform);

	void DrawSolidEntity(const DXFSolidEntity & rE, const DXFTransform & rTransform);

	void DrawTextEntity(const DXFTextEntity & rE, const DXFTransform & rTransform);

	void DrawInsertEntity(const DXFInsertEntity & rE, const DXFTransform & rTransform);

	void DrawAttribEntity(const DXFAttribEntity & rE, const DXFTransform & rTransform);

	void DrawPolyLineEntity(const DXFPolyLineEntity & rE, const DXFTransform & rTransform);

	void Draw3DFaceEntity(const DXF3DFaceEntity & rE, const DXFTransform & rTransform);

	void DrawDimensionEntity(const DXFDimensionEntity & rE, const DXFTransform & rTransform);

	void DrawLWPolyLineEntity( const DXFLWPolyLineEntity & rE, const DXFTransform & rTransform );

	void DrawHatchEntity( const DXFHatchEntity & rE, const DXFTransform & rTransform );

	void DrawEntities(const DXFEntities & rEntities,
					  const DXFTransform & rTransform,
					  sal_Bool bTopEntities);

public:

	DXF2GDIMetaFile();
	~DXF2GDIMetaFile();

	sal_Bool Convert( const DXFRepresentation & rDXF, GDIMetaFile & rMTF, sal_uInt16 nMinPercent, sal_uInt16 nMaxPercent);

};


#endif


