diff options
Diffstat (limited to 'hammer/richeditctrlex.h')
| -rw-r--r-- | hammer/richeditctrlex.h | 438 |
1 files changed, 438 insertions, 0 deletions
diff --git a/hammer/richeditctrlex.h b/hammer/richeditctrlex.h new file mode 100644 index 0000000..b608e1c --- /dev/null +++ b/hammer/richeditctrlex.h @@ -0,0 +1,438 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// + +#ifndef RICHEDITCTRLEX_H +#define RICHEDITCTRLEX_H +#ifdef _WIN32 +#pragma once +#endif + +#pragma warning(push, 1) +#include <list> +#include <stack> +#pragma warning(pop) + +using namespace std; +#pragma warning(disable : 4786) + + +#ifdef RICHED_IMPL + #ifdef _AFXEXT + #define RICHED_DECL __declspec(dllexport) + #else + #define RICHED_DECL + #endif +#else + #ifdef _AFXEXT + #define RICHED_DECL __declspec(dllimport) + #else + #define RICHED_DECL + #endif//_AFXEXT +#endif //RICHED_IMPL + + +class CRTFBuilder; +class CStringManip; +class CIntManip; + + +typedef CRTFBuilder &(*RTFSM_PFUNC) (CRTFBuilder &); +typedef CRTFBuilder &(*RTFSM_STRINGPFUNC) (CRTFBuilder &, CString &); +typedef CRTFBuilder &(*RTFSM_INTPFUNC) (CRTFBuilder &, int); +typedef CRTFBuilder &(*RTFSM_BOOLPFUNC) (CRTFBuilder &, bool); +typedef CRTFBuilder &(*RTFSM_CONTROLPFUNC) (CRTFBuilder &, CRichEditCtrl &); + + +class CBoolString +{ + private: + + bool m_b; + CString m_strOn; + CString m_strOff; + + public: + + CBoolString(CString strOn, CString strOff = "") + { + m_strOn = strOn; + m_strOff = strOff; + m_b = false; + } + + void operator=(bool b) + { + m_b = b; + } + + operator CString() const + { + return m_b ? m_strOn : m_strOff; + } +}; + + +class CTextAttributes +{ + protected: + + int m_nFontSize; + + CBoolString m_bsBold; + CBoolString m_bsUnderline; + CBoolString m_bsItalic; + CBoolString m_bsStrike; + + int m_nFontNumber; + int m_nColorFground; + int m_nColorBground; + + public: + + CTextAttributes() + : m_bsBold("\\b") , + m_bsUnderline("\\ul"), + m_bsItalic("\\i"), + m_bsStrike("\\strike") + { + m_nColorBground = m_nColorFground = m_nFontNumber = m_nFontSize = 0; + m_bsBold = false; + } + + operator CString() const + { + CString s; + s.Format("\\plain%s%s%s%s\\f%d\\fs%d\\cb%d\\cf%d ", + ((CString)m_bsBold).GetBuffer(), + ((CString)m_bsUnderline).GetBuffer(), ((CString)m_bsItalic).GetBuffer(), ((CString)m_bsStrike).GetBuffer(), + m_nFontNumber , + m_nFontSize , + m_nColorBground, + m_nColorFground); + return s; + } + + friend class CRTFBuilder; +}; + + + +class CFontList : public list<CString> +{ + public: + + operator CString() const + { + CString s; + s = "{\\fonttbl"; + + int nCount = 0; + for (const_iterator i = begin(); i!=end(); i++) + { + CString s2; + s2.Format("{\\f%d %s;}", nCount++, (const char*)(*i)); + s+=s2; + } + + s+='}'; + return s; + } + + void add(const CString &s) + { + push_back(s); + } +}; + + +class CColorList : public list<COLORREF> +{ + public: + + int add(COLORREF c) + { + push_back(c); + return size() - 1; + } + + int find(COLORREF c) + { + int n = 0; + for (iterator i = begin(); i != end(); i++, n++) + { + COLORREF cComp(*i); + if (cComp == c) + { + return n; + } + } + + return -1; + } + + + operator CString() const + { + CString s("{\\colortbl"); + for (const_iterator i = begin(); i != end(); i++) + { + COLORREF c(*i); + int r((c & 0x000000ff)); + int g((c >> 8) & 0x000000ff); + int b((c >> 16) & 0x000000ff); + + CString s2; + s2.Format("\\red%d\\green%d\\blue%d;", r, g, b); + s += s2; + } + + s += '}'; + return s; + } +}; + + +class RICHED_DECL CManip +{ + protected: + + CString m_strVal; + int m_nVal; + LPVOID m_pFunc; + bool m_bVal; + + public: + + virtual CRTFBuilder &go(CRTFBuilder &) = 0; + + CManip() + { + m_pFunc = NULL; + m_nVal = 0; + m_strVal = ""; + } + + CManip(LPVOID p, CString s) + { + m_pFunc = p; + m_strVal = s; + } + + CManip(LPVOID p, int n) + { + m_pFunc = p; + m_nVal = n; + } + + CManip(LPVOID p, bool b) + { + m_pFunc = p; + m_bVal = b; + } +}; + + +class RICHED_DECL CStringManip : public CManip +{ +public: + + CStringManip(RTFSM_STRINGPFUNC p, CString s = "") : CManip ((LPVOID)p, s) {}; + + CRTFBuilder &go(CRTFBuilder &b) + { + return((RTFSM_STRINGPFUNC)m_pFunc) (b, m_strVal); + } +}; + + +class RICHED_DECL CControlManip : public CManip +{ + protected: + + CRichEditCtrl &m_control; + + public: + + CControlManip(RTFSM_CONTROLPFUNC p, CRichEditCtrl& c) : m_control(c), CManip((LPVOID)p, (CString)"") {}; + + CRTFBuilder &go(CRTFBuilder &b) + { + return((RTFSM_CONTROLPFUNC)m_pFunc)(b, m_control); + } +}; + + +class RICHED_DECL CIntManip : public CManip +{ + public: + + CIntManip(RTFSM_INTPFUNC p, int n = 0) : CManip ((LPVOID)p, n) {}; + + CRTFBuilder &go(CRTFBuilder &b) + { + return((RTFSM_INTPFUNC)m_pFunc)(b, m_nVal); + } +}; + + +class RICHED_DECL CBoolManip : public CManip +{ + public: + + CBoolManip(RTFSM_BOOLPFUNC p, bool b) : CManip((LPVOID)p, b) {}; + + CRTFBuilder &go(CRTFBuilder &b) + { + return ((RTFSM_BOOLPFUNC ) m_pFunc)( b, m_bVal); + } +}; + + +class RICHED_DECL CRTFBuilder +{ + protected: + + CString m_string; + CTextAttributes m_attr; + CFontList m_fontList; + CColorList m_colorList; + stack<CTextAttributes> m_attrStack; + + public: + + void bold (bool b = true); + void strike(bool b = true); + void italic(bool b = true); + void underline(bool b = true); + void normal(); + void size(int n); + void font(const CString &i); + void black(); + void blue(); + void green(); + void red(); + void color(COLORREF); + void backColor(COLORREF); + + void push(); + void pop(); + + CRTFBuilder &operator+=(CString &s); + CRTFBuilder(); + virtual ~CRTFBuilder(); + + void addFont(const CString &s) + { + m_fontList.add(s); + } + + void addColor(COLORREF c) + { + m_colorList.add(c); + } + + + CRTFBuilder & operator+=(LPCTSTR p); + + operator CString() const + { + return m_string; + } + + void write(CRichEditCtrl &); + + int colorCount() const + { + return m_colorList.size(); + } + + public: + + CRTFBuilder & operator<<(LPCTSTR); + CRTFBuilder & operator<<(int); + CRTFBuilder & operator>>(CRichEditCtrl &); + + friend RICHED_DECL CRTFBuilder &normal(CRTFBuilder &); + friend RICHED_DECL CRTFBuilder &push(CRTFBuilder&); + friend RICHED_DECL CRTFBuilder &pop(CRTFBuilder &); + friend RICHED_DECL CRTFBuilder &black(CRTFBuilder &); + friend RICHED_DECL CRTFBuilder &red(CRTFBuilder &); + friend RICHED_DECL CRTFBuilder &green(CRTFBuilder &); + friend RICHED_DECL CRTFBuilder &blue(CRTFBuilder &); + friend RICHED_DECL CRTFBuilder &bold(CRTFBuilder &); + friend RICHED_DECL CRTFBuilder &strike(CRTFBuilder &); + friend RICHED_DECL CRTFBuilder &italic(CRTFBuilder &); + friend RICHED_DECL CRTFBuilder &underline(CRTFBuilder &); +}; + + +RICHED_DECL CControlManip write (CRichEditCtrl &); +RICHED_DECL CIntManip normal (int = 0); +RICHED_DECL CIntManip push (int = 0); +RICHED_DECL CIntManip pop (int = 0); +RICHED_DECL CIntManip size (int); +RICHED_DECL CIntManip color (int); +RICHED_DECL CIntManip backColor (int); +RICHED_DECL CIntManip addColor (int); +RICHED_DECL CIntManip font (int); +RICHED_DECL CStringManip font (LPCTSTR); +RICHED_DECL CStringManip addFont (LPCTSTR); +RICHED_DECL CBoolManip bold (bool); +RICHED_DECL CBoolManip strike (bool); +RICHED_DECL CBoolManip italic (bool); +RICHED_DECL CBoolManip underline (bool); + +RICHED_DECL CRTFBuilder & operator<<(CRTFBuilder &, RTFSM_PFUNC); +RICHED_DECL CRTFBuilder & operator<<(CRTFBuilder &, CManip & m); + + +class RICHED_DECL CRichEditCtrlEx : public CRichEditCtrl +{ + public: + + // Construction + CRichEditCtrlEx(); + + public: + + void enable(bool b = true) + { + ModifyStyle(b ? WS_DISABLED : 0, b ? 0 : WS_DISABLED, 0); + } + + void disable(bool b = true) + { + enable(!b); + } + + void readOnly(bool b = true) + { + SetReadOnly(b); + } + + void writable(bool b = true) + { + readOnly(!b); + } + + // ClassWizard generated virtual function overrides + //{{AFX_VIRTUAL(CRichEditCtrlEx) + protected: + virtual void PreSubclassWindow(); + //}}AFX_VIRTUAL + + public: + virtual ~CRichEditCtrlEx(); + + protected: + //{{AFX_MSG(CRichEditCtrlEx) + //}}AFX_MSG + + DECLARE_MESSAGE_MAP() +}; + +#endif // RICHEDITCTRLEX_H |