// XTPMarkupSpan.h: interface for the CXTPMarkupSpan class.
//
// This file is a part of the XTREME TOOLKIT PRO MFC class library.
// (c)1998-2012 Codejock Software, All Rights Reserved.
//
// THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
// RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
// CONSENT OF CODEJOCK SOFTWARE.
//
// THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
// IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
// YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
// SINGLE COMPUTER.
//
// CONTACT INFORMATION:
// support@codejock.com
// http://www.codejock.com
//
/////////////////////////////////////////////////////////////////////////////

//{{AFX_CODEJOCK_PRIVATE
#if !defined(__XTPMARKUPSPAN_H__)
#define __XTPMARKUPSPAN_H__
//}}AFX_CODEJOCK_PRIVATE

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000


class CXTPMarkupInlineCollection;
class CXTPMarkupDrawingContext;
class CXTPMarkupBrush;
class CXTPMarkupUIElement;
class CXTPMarkupBuilder;
class CXTPMarkupTextBlock;
class CXTPMarkupFont;
class CXTPMarkupFrameworkElement;
class CXTPMarkupStyle;


class _XTP_EXT_CLASS CXTPMarkupSpan : public CXTPMarkupInline
{
	DECLARE_MARKUPCLASS(CXTPMarkupSpan)

protected:
	CXTPMarkupSpan();
	~CXTPMarkupSpan();

public:
	CXTPMarkupInlineCollection* GetInlines() const;

public:
	virtual CXTPMarkupInline* GetFirstInline() const;

protected:
	virtual void SetContentObject(CXTPMarkupBuilder* pBuilder, CXTPMarkupObject* pContent);
	virtual BOOL HasContentObject() const;
	virtual BOOL AllowWhiteSpaceContent() const;
	virtual int GetLogicalChildrenCount() const;
	virtual CXTPMarkupObject* GetLogicalChild(int nIndex) const;

#ifdef _XTP_ACTIVEX
//{{AFX_CODEJOCK_PRIVATE
public:
	DECLARE_DISPATCH_MAP()
	DECLARE_INTERFACE_MAP()
	DECLARE_OLETYPELIB_EX(CXTPMarkupSpan);

	afx_msg LPDISPATCH OleGetInlines();

//}}AFX_CODEJOCK_PRIVATE
#endif

protected:
	CXTPMarkupInlineCollection* m_pInlines;
};

AFX_INLINE int CXTPMarkupSpan::GetLogicalChildrenCount() const
{
	return m_pInlines ? 1 : 0;
}

AFX_INLINE CXTPMarkupObject* CXTPMarkupSpan::GetLogicalChild(int nIndex) const
{
	return nIndex == 0 ? (CXTPMarkupObject*)m_pInlines : NULL;
}

AFX_INLINE CXTPMarkupInlineCollection* CXTPMarkupSpan::GetInlines() const
{
	return m_pInlines;
}


class _XTP_EXT_CLASS CXTPMarkupBold : public CXTPMarkupSpan
{
	DECLARE_MARKUPCLASS(CXTPMarkupBold)

protected:
	CXTPMarkupBold();

#ifdef _XTP_ACTIVEX
//{{AFX_CODEJOCK_PRIVATE
public:
	DECLARE_DISPATCH_MAP()
	DECLARE_INTERFACE_MAP()
	DECLARE_OLETYPELIB_EX(CXTPMarkupBold);
//}}AFX_CODEJOCK_PRIVATE
#endif
};


class _XTP_EXT_CLASS CXTPMarkupItalic : public CXTPMarkupSpan
{
	DECLARE_MARKUPCLASS(CXTPMarkupItalic)

protected:
	CXTPMarkupItalic();


#ifdef _XTP_ACTIVEX
//{{AFX_CODEJOCK_PRIVATE
public:
	DECLARE_DISPATCH_MAP()
	DECLARE_INTERFACE_MAP()
	DECLARE_OLETYPELIB_EX(CXTPMarkupItalic);
//}}AFX_CODEJOCK_PRIVATE
#endif
};


class _XTP_EXT_CLASS CXTPMarkupUnderline  : public CXTPMarkupSpan
{
	DECLARE_MARKUPCLASS(CXTPMarkupUnderline)

protected:
	CXTPMarkupUnderline();

#ifdef _XTP_ACTIVEX
//{{AFX_CODEJOCK_PRIVATE
public:
	DECLARE_DISPATCH_MAP()
	DECLARE_INTERFACE_MAP()
	DECLARE_OLETYPELIB_EX(CXTPMarkupUnderline);
//}}AFX_CODEJOCK_PRIVATE
#endif
};


class _XTP_EXT_CLASS CXTPMarkupHyperlink : public CXTPMarkupSpan
{
	DECLARE_MARKUPCLASS(CXTPMarkupHyperlink)

protected:
	CXTPMarkupHyperlink();

protected:
	virtual void OnMouseLeftButtonUp(CXTPMarkupMouseButtonEventArgs* e);
	virtual void OnMouseLeftButtonDown(CXTPMarkupMouseButtonEventArgs* e);

protected:
	virtual void OnClick();

#ifdef _XTP_ACTIVEX
//{{AFX_CODEJOCK_PRIVATE
public:
	DECLARE_DISPATCH_MAP()
	DECLARE_INTERFACE_MAP()
	DECLARE_OLETYPELIB_EX(CXTPMarkupHyperlink);
	afx_msg LPDISPATCH OleGetClickEvent();

//}}AFX_CODEJOCK_PRIVATE
#endif

protected:
	BOOL m_bPressed;

public:
	static CXTPMarkupRoutedEvent* m_pClickEvent;
};


#endif // !defined(__XTPMARKUPSPAN_H__)