/**************************************************************
 * 
 * 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_xmloff.hxx"
#include <tools/debug.hxx>
#include <backhdl.hxx>
#include <xmloff/xmltoken.hxx>
#include <xmloff/xmluconv.hxx>
#include <com/sun/star/uno/Any.hxx>
#include <rtl/ustrbuf.hxx>

using ::rtl::OUString;
using ::rtl::OUStringBuffer;

using namespace ::com::sun::star;
using namespace ::xmloff::token;

SvXMLEnumMapEntry pXML_BrushHorizontalPos[] =
{
	{ XML_LEFT,		        style::GraphicLocation_LEFT_MIDDLE	 },
	{ XML_RIGHT,		    style::GraphicLocation_RIGHT_MIDDLE },
	{ XML_TOKEN_INVALID,    0		}
};

SvXMLEnumMapEntry pXML_BrushVerticalPos[] =
{
	{ XML_TOP,			    style::GraphicLocation_MIDDLE_TOP	},
	{ XML_BOTTOM,		    style::GraphicLocation_MIDDLE_BOTTOM	},
	{ XML_TOKEN_INVALID,    0		}
};

///////////////////////////////////////////////////////////////////////////////
//
// class XMLBackGraphicPositionPropHdl
//

XMLBackGraphicPositionPropHdl::~XMLBackGraphicPositionPropHdl()
{
	// Nothing to do
}

sal_Bool XMLBackGraphicPositionPropHdl::importXML( const OUString& rStrImpValue, uno::Any& rValue, const SvXMLUnitConverter& ) const
{ 
	sal_Bool bRet = sal_True;
	style::GraphicLocation ePos = style::GraphicLocation_NONE, eTmp;
	sal_uInt16 nTmp;
	SvXMLTokenEnumerator aTokenEnum( rStrImpValue );
	OUString aToken;
	sal_Bool bHori = sal_False, bVert = sal_False;

	while( bRet && aTokenEnum.getNextToken( aToken ) )
	{
		if( bHori && bVert )
		{
			bRet = sal_False;
		}
		else if( -1 != aToken.indexOf( sal_Unicode('%') ) )
		{
			sal_Int32 nPrc = 50;
			if( SvXMLUnitConverter::convertPercent( nPrc, aToken ) )
			{
				if( !bHori )
				{
					ePos = nPrc < 25 ? style::GraphicLocation_LEFT_TOP : 
				                       (nPrc < 75 ? style::GraphicLocation_MIDDLE_MIDDLE : 
									                style::GraphicLocation_RIGHT_BOTTOM);
					bHori = sal_True;
				}
				else
				{
					eTmp = nPrc < 25 ? style::GraphicLocation_LEFT_TOP: 
				                       (nPrc < 75 ? style::GraphicLocation_LEFT_MIDDLE : 
									                style::GraphicLocation_LEFT_BOTTOM);
					MergeXMLVertPos( ePos, eTmp );
					bVert = sal_True;
				}
			}
			else
			{
				// wrong percentage
				bRet = sal_False;
			}
		}
		else if( IsXMLToken( aToken, XML_CENTER ) )
		{
			if( bHori )
				MergeXMLVertPos( ePos, style::GraphicLocation_MIDDLE_MIDDLE );
			else if ( bVert )
				MergeXMLHoriPos( ePos, style::GraphicLocation_MIDDLE_MIDDLE );
			else
				ePos = style::GraphicLocation_MIDDLE_MIDDLE;
		}
		else if( SvXMLUnitConverter::convertEnum( nTmp, aToken, pXML_BrushHorizontalPos ) )
		{
			if( bVert )
				MergeXMLHoriPos( ePos, (style::GraphicLocation)nTmp );
			else if( !bHori )
				ePos = (style::GraphicLocation)nTmp;
			else
				bRet = sal_False;

			bHori = sal_True;
		}
		else if( SvXMLUnitConverter::convertEnum( nTmp, aToken, pXML_BrushVerticalPos ) )
		{
			if( bHori )
				MergeXMLVertPos( ePos, (style::GraphicLocation)nTmp );
			else if( !bVert )
				ePos = (style::GraphicLocation)nTmp;
			else
				bRet = sal_False;
			bVert = sal_True;
		}
		else
		{
			bRet = sal_False;
		}
	}

	bRet &= style::GraphicLocation_NONE != ePos;
	if( bRet )
		rValue <<= (style::GraphicLocation)(sal_uInt16)ePos;

	return bRet; 
}

sal_Bool XMLBackGraphicPositionPropHdl::exportXML( OUString& rStrExpValue, const uno::Any& rValue, const SvXMLUnitConverter& ) const
{ 
	sal_Bool bRet = sal_True;
	OUStringBuffer aOut;

	style::GraphicLocation eLocation;
	if( !( rValue >>= eLocation ) )
	{
		sal_Int32 nValue = 0;
		if( rValue >>= nValue )
			eLocation = (style::GraphicLocation)nValue;
		else
			bRet = sal_False;
	}

	if( bRet )
	{
		bRet = sal_False;

		switch( eLocation )
		{
		case style::GraphicLocation_LEFT_TOP:
		case style::GraphicLocation_MIDDLE_TOP:
		case style::GraphicLocation_RIGHT_TOP:
			aOut.append( GetXMLToken(XML_TOP) );
			bRet = sal_True;
			break;
		case style::GraphicLocation_LEFT_MIDDLE:
		case style::GraphicLocation_MIDDLE_MIDDLE:
		case style::GraphicLocation_RIGHT_MIDDLE:
			aOut.append( GetXMLToken(XML_CENTER) );
			bRet = sal_True;
			break;
		case style::GraphicLocation_LEFT_BOTTOM:
		case style::GraphicLocation_MIDDLE_BOTTOM:
		case style::GraphicLocation_RIGHT_BOTTOM:
			aOut.append( GetXMLToken(XML_BOTTOM) );
			bRet = sal_True;
			break;
		default:
			break;
		}

		if( bRet )
		{
			aOut.append( sal_Unicode( ' ' ) );

			switch( eLocation )
			{
			case style::GraphicLocation_LEFT_TOP:
			case style::GraphicLocation_LEFT_BOTTOM:
			case style::GraphicLocation_LEFT_MIDDLE:
				aOut.append( GetXMLToken(XML_LEFT) );
				break;
			case style::GraphicLocation_MIDDLE_TOP:
			case style::GraphicLocation_MIDDLE_MIDDLE:
			case style::GraphicLocation_MIDDLE_BOTTOM:
				aOut.append( GetXMLToken(XML_CENTER) );
				break;
			case style::GraphicLocation_RIGHT_MIDDLE:
			case style::GraphicLocation_RIGHT_TOP:
			case style::GraphicLocation_RIGHT_BOTTOM:
				aOut.append( GetXMLToken(XML_RIGHT) );
				break;
			default:
				break;
			}
		}
	}

	rStrExpValue = aOut.makeStringAndClear();

	return bRet;
}

void XMLBackGraphicPositionPropHdl::MergeXMLVertPos( style::GraphicLocation& ePos, style::GraphicLocation eVert ) const
{
	switch( ePos )
	{
	case style::GraphicLocation_LEFT_TOP:
	case style::GraphicLocation_LEFT_MIDDLE:
	case style::GraphicLocation_LEFT_BOTTOM:
		ePos = style::GraphicLocation_MIDDLE_TOP==eVert ? 
			   style::GraphicLocation_LEFT_TOP : 
		      (style::GraphicLocation_MIDDLE_MIDDLE==eVert ? 
			   style::GraphicLocation_LEFT_MIDDLE : 
			   style::GraphicLocation_LEFT_BOTTOM);
		ePos = eVert;
		break;

	case style::GraphicLocation_MIDDLE_TOP:
	case style::GraphicLocation_MIDDLE_MIDDLE:
	case style::GraphicLocation_MIDDLE_BOTTOM:
		ePos = eVert;
		break;

	case style::GraphicLocation_RIGHT_TOP:
	case style::GraphicLocation_RIGHT_MIDDLE:
	case style::GraphicLocation_RIGHT_BOTTOM:
		ePos = style::GraphicLocation_MIDDLE_TOP==eVert ? 
			   style::GraphicLocation_RIGHT_TOP : 
		      (style::GraphicLocation_MIDDLE_MIDDLE==eVert ? 
			   style::GraphicLocation_RIGHT_MIDDLE : 
			   style::GraphicLocation_RIGHT_BOTTOM);
		break;
	default:
		break;
	}
}

void XMLBackGraphicPositionPropHdl::MergeXMLHoriPos( style::GraphicLocation& ePos, style::GraphicLocation eHori ) const
{
	DBG_ASSERT( style::GraphicLocation_LEFT_MIDDLE==eHori || style::GraphicLocation_MIDDLE_MIDDLE==eHori || style::GraphicLocation_RIGHT_MIDDLE==eHori,
				"lcl_frmitems_MergeXMLHoriPos: vertical pos must be middle" );

	switch( ePos )
	{
	case style::GraphicLocation_LEFT_TOP:
	case style::GraphicLocation_MIDDLE_TOP:
	case style::GraphicLocation_RIGHT_TOP:
		ePos = style::GraphicLocation_LEFT_MIDDLE==eHori ? 
			   style::GraphicLocation_LEFT_TOP : 
		      (style::GraphicLocation_MIDDLE_MIDDLE==eHori ? 
			   style::GraphicLocation_MIDDLE_TOP : 
			   style::GraphicLocation_RIGHT_TOP);
		break;

	case style::GraphicLocation_LEFT_MIDDLE:
	case style::GraphicLocation_MIDDLE_MIDDLE:
	case style::GraphicLocation_RIGHT_MIDDLE:
		ePos = eHori;
		break;

	case style::GraphicLocation_LEFT_BOTTOM:
	case style::GraphicLocation_MIDDLE_BOTTOM:
	case style::GraphicLocation_RIGHT_BOTTOM:
		ePos = style::GraphicLocation_LEFT_MIDDLE==eHori ? 
			   style::GraphicLocation_LEFT_BOTTOM : 
		      (style::GraphicLocation_MIDDLE_MIDDLE==eHori ? 
			   style::GraphicLocation_MIDDLE_BOTTOM : 
			   style::GraphicLocation_RIGHT_BOTTOM);
		break;
	default:
		break;
	}
}

