// XTPMarkupInline.h: interface for the CXTPMarkupInline 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(__XTPMARKUPINLINE_H__) #define __XTPMARKUPINLINE_H__ //}}AFX_CODEJOCK_PRIVATE #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #define MARKUP_POSITION_EOF (POSITION)(-1) #define MARKUP_POSITION_START (POSITION)( 0) #define MARKUP_POSITION_END (POSITION)( 1) class CXTPMarkupInlineCollection; class CXTPMarkupDrawingContext; class CXTPMarkupBrush; class CXTPMarkupUIElement; class CXTPMarkupBuilder; class CXTPMarkupTextBlock; class CXTPMarkupFont; class CXTPMarkupFrameworkElement; class CXTPMarkupStyle; class CXTPMarkupRenderTransform; class _XTP_EXT_CLASS CXTPMarkupFrameworkContentElement : public CXTPMarkupInputElement { DECLARE_MARKUPCLASS(CXTPMarkupFrameworkContentElement) protected: CXTPMarkupFrameworkContentElement(); public: CXTPMarkupObject* GetTag() const; void SetTag(CXTPMarkupObject* pTag); public: CXTPMarkupInputElement* InputHitTest(CPoint point) const; CRect GetBoundRect() const; public: CXTPMarkupFrameworkElement* GetParent() const; protected: virtual void OnPropertyChanged(CXTPMarkupDependencyProperty* pProperty, CXTPMarkupObject* pOldValue, CXTPMarkupObject* pNewValue); static void AFX_CDECL OnStylePropertyChanged(CXTPMarkupObject* d, CXTPMarkupPropertyChangedEventArgs* e); public: static CXTPMarkupDependencyProperty* m_pTagProperty; }; class _XTP_EXT_CLASS CXTPMarkupTextElement : public CXTPMarkupFrameworkContentElement { DECLARE_MARKUPCLASS(CXTPMarkupTextElement) protected: CXTPMarkupTextElement(); virtual ~CXTPMarkupTextElement(); public: void SetBackground(CXTPMarkupBrush* pBrush); void SetBackground(COLORREF clr); static void AFX_CDECL SetBackground(CXTPMarkupObject* pObject, CXTPMarkupBrush* pBrush); CXTPMarkupBrush* GetBackground() const; void SetForeground(CXTPMarkupBrush* pBrush); void SetForeground(COLORREF clr); static void AFX_CDECL SetForeground(CXTPMarkupObject* pObject, CXTPMarkupBrush* pBrush); CXTPMarkupBrush* GetForeground() const; void SetFontSize(int nFontSize); int GetFontSize() const; void SetFontWeight(int nFontWeight); int GetFontWeight() const; void SetFontFamily(LPCWSTR lpszFontFamily); LPCWSTR GetFontFamily() const; void SetFontStyle(int nFontStyle); int GetFontStyle() const; void SetTextDecorations(int nTextDecorations); int GetTextDecorations() const; #ifdef _XTP_ACTIVEX //{{AFX_CODEJOCK_PRIVATE public: DECLARE_DISPATCH_MAP() DECLARE_INTERFACE_MAP() DECLARE_OLETYPELIB_EX(CXTPMarkupTextElement); afx_msg long OleGetTextDecorations(); afx_msg void OleSetTextDecorations(long nValue); afx_msg long OleGetFontSize(); afx_msg void OleSetFontSize(long nValue); afx_msg long OleGetFontWeight(); afx_msg void OleSetFontWeight(long nValue); afx_msg BSTR OleGetFontFamily(); afx_msg void OleSetFontFamily(LPCTSTR lpszValue); afx_msg long OleGetFontStyle(); afx_msg void OleSetFontStyle(long nValue); afx_msg LPDISPATCH OleGetBackground(); afx_msg void OleSetBackground(LPDISPATCH lpBackground); afx_msg LPDISPATCH OleGetForeground(); afx_msg void OleSetForeground(LPDISPATCH lpBackground); afx_msg VARIANT OleGetTag(); afx_msg void OleSetTag(const VARIANT& va); //}}AFX_CODEJOCK_PRIVATE #endif public: static CXTPMarkupDependencyProperty* m_pBackgroundProperty; static CXTPMarkupDependencyProperty* m_pForegroundProperty; static CXTPMarkupDependencyProperty* m_pFontSizeProperty; static CXTPMarkupDependencyProperty* m_pFontWeightProperty; static CXTPMarkupDependencyProperty* m_pFontFamilyProperty; static CXTPMarkupDependencyProperty* m_pFontStyleProperty; static CXTPMarkupDependencyProperty* m_pTextDecorationsProperty; static CXTPMarkupDependencyProperty* m_pFontQualityProperty; static CXTPMarkupDependencyProperty* m_pFontCharsetProperty; }; class _XTP_EXT_CLASS CXTPMarkupInline : public CXTPMarkupTextElement { DECLARE_MARKUPCLASS(CXTPMarkupInline) protected: CXTPMarkupInline(); virtual ~CXTPMarkupInline(); public: virtual CXTPMarkupInline* GetFirstInline() const; CXTPMarkupInline* GetNextInline() const; public: XTPMarkupBaselineAlignment GetBaselineAlignment() const; void SetBaselineAlignment(XTPMarkupBaselineAlignment nBaselineAlignment); public: virtual POSITION GetContentStartPosition() const; virtual void GetContentNextPosition(POSITION& pos) const; virtual BOOL IsWordBreakPosition(POSITION pos) const; virtual BOOL IsLineBreakPosition(POSITION pos) const; virtual BOOL IsCaretReturnPosition(POSITION pos) const; virtual BOOL IsWhiteSpacePosition(POSITION pos) const; virtual void Arrange(CRect rcFinalRect, POSITION posStart, POSITION posEnd); virtual CSize Measure(CXTPMarkupDrawingContext* pDC, POSITION posStart, POSITION posEnd); virtual void Render(CXTPMarkupDrawingContext* pDC, CRect rc, POSITION posStart, POSITION posEnd); virtual void PrepareMeasure(CXTPMarkupDrawingContext *pDC, CXTPMarkupRenderTransform *pRenderTransform); virtual int GetBaseline() const; CXTPMarkupTextBlock* GetTextBlock() const; #ifdef _XTP_ACTIVEX //{{AFX_CODEJOCK_PRIVATE public: DECLARE_DISPATCH_MAP() DECLARE_INTERFACE_MAP() DECLARE_OLETYPELIB_EX(CXTPMarkupInline); afx_msg int OleGetBaselineAlignment(); afx_msg void OleSetBaselineAlignment(int nValue); //}}AFX_CODEJOCK_PRIVATE #endif protected: int m_nIndex; public: static CXTPMarkupDependencyProperty* m_pBaselineAlignmentProperty; private: friend class CXTPMarkupInlineCollection; }; class _XTP_EXT_CLASS CXTPMarkupInlineUIContainer : public CXTPMarkupInline { DECLARE_MARKUPCLASS(CXTPMarkupInlineUIContainer); protected: CXTPMarkupInlineUIContainer(); CXTPMarkupInlineUIContainer(CXTPMarkupUIElement* pElement); ~CXTPMarkupInlineUIContainer(); public: void SetChild(CXTPMarkupUIElement* pElement); CXTPMarkupUIElement* GetChild() const; public: virtual POSITION GetContentStartPosition() const; virtual void GetContentNextPosition(POSITION& pos) const; virtual BOOL IsWordBreakPosition(POSITION pos) const; virtual void Render(CXTPMarkupDrawingContext* pDC, CRect rc, POSITION posStart, POSITION posEnd); virtual CSize Measure(CXTPMarkupDrawingContext* pDC, POSITION posStart, POSITION posEnd); virtual void Arrange(CRect rcFinalRect, POSITION posStart, POSITION posEnd); protected: virtual BOOL HasContentObject() const; virtual void SetContentObject(CXTPMarkupBuilder* pBuilder, CXTPMarkupObject* pContent); virtual int GetLogicalChildrenCount() const; virtual CXTPMarkupObject* GetLogicalChild(int nIndex) const; CXTPMarkupInputElement* InputHitTest(CPoint point) const; #ifdef _XTP_ACTIVEX //{{AFX_CODEJOCK_PRIVATE public: DECLARE_DISPATCH_MAP() DECLARE_INTERFACE_MAP() DECLARE_OLETYPELIB_EX(CXTPMarkupInlineUIContainer); afx_msg LPDISPATCH OleGetChild(); afx_msg void OleSetChild(LPDISPATCH lpDisp); //}}AFX_CODEJOCK_PRIVATE #endif protected: CXTPMarkupUIElement* m_pChild; }; class _XTP_EXT_CLASS CXTPMarkupInlineCollection : public CXTPMarkupCollection { DECLARE_MARKUPCLASS(CXTPMarkupInlineCollection); public: CXTPMarkupInlineCollection(); ~CXTPMarkupInlineCollection(); public: CXTPMarkupInline* GetInline(int nIndex) const; protected: virtual void SetContentObject(CXTPMarkupBuilder* pBuilder, CXTPMarkupObject* pContent); virtual void OnItemAdded(CXTPMarkupObject* pItem, int nIndex); #ifdef _XTP_ACTIVEX protected: //{{AFX_CODEJOCK_PRIVATE public: DECLARE_DISPATCH_MAP() DECLARE_INTERFACE_MAP() DECLARE_OLETYPELIB_EX(CXTPMarkupInlineCollection); DECLARE_ENUM_VARIANT(CXTPMarkupInlineCollection) long OleGetItemCount(); LPDISPATCH OleGetItem(long nIndex); void OleAdd(LPDISPATCH lpElementDisp); void OleInsert(long Index, LPDISPATCH lpElementDisp); //}}AFX_CODEJOCK_PRIVATE #endif private: friend class CXTPMarkupInline; friend class CXTPMarkupSpan; friend class CXTPMarkupTextBlock; }; ////////////////////////////////////////////////////////////////////////// AFX_INLINE CXTPMarkupInline* CXTPMarkupInlineCollection::GetInline(int nIndex) const { return nIndex >= 0 && nIndex < m_arrItems.GetSize() ? (CXTPMarkupInline*)m_arrItems[nIndex] : NULL; } AFX_INLINE int CXTPMarkupInlineUIContainer::GetLogicalChildrenCount() const { return m_pChild ? 1 : 0; } AFX_INLINE CXTPMarkupObject* CXTPMarkupInlineUIContainer::GetLogicalChild(int nIndex) const { return nIndex == 0 ? (CXTPMarkupObject*)m_pChild : NULL; } AFX_INLINE XTPMarkupBaselineAlignment CXTPMarkupInline::GetBaselineAlignment() const { CXTPMarkupEnum* pBaseline = MARKUP_STATICCAST(CXTPMarkupEnum, GetValue(m_pBaselineAlignmentProperty)); return pBaseline ? (XTPMarkupBaselineAlignment)(int)*pBaseline : xtpMarkupBaseline; } AFX_INLINE void CXTPMarkupInline::SetBaselineAlignment(XTPMarkupBaselineAlignment nBaselineAlignment) { SetValue(m_pBaselineAlignmentProperty, CXTPMarkupEnum::CreateValue(nBaselineAlignment)); } AFX_INLINE void CXTPMarkupFrameworkContentElement::SetTag(CXTPMarkupObject* pTag) { SetValue(m_pTagProperty, pTag); } AFX_INLINE CXTPMarkupObject* CXTPMarkupFrameworkContentElement::GetTag() const { return GetValue(m_pTagProperty); } #endif // !defined(__XTPMARKUPINLINE_H__)