diff options
Diffstat (limited to 'hammer/richeditctrlex.cpp')
| -rw-r--r-- | hammer/richeditctrlex.cpp | 474 |
1 files changed, 474 insertions, 0 deletions
diff --git a/hammer/richeditctrlex.cpp b/hammer/richeditctrlex.cpp new file mode 100644 index 0000000..88e4fb3 --- /dev/null +++ b/hammer/richeditctrlex.cpp @@ -0,0 +1,474 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// + +#include "stdafx.h" +#pragma warning(disable:4701 4702 4530) +#include "RichEditCtrlEx.h" + + +CRichEditCtrlEx::CRichEditCtrlEx() +{ +} + + +CRichEditCtrlEx::~CRichEditCtrlEx() +{ +} + + +BEGIN_MESSAGE_MAP(CRichEditCtrlEx, CRichEditCtrl) + //{{AFX_MSG_MAP(CRichEditCtrlEx) + //}}AFX_MSG_MAP +END_MESSAGE_MAP() + + +void CRichEditCtrlEx::PreSubclassWindow() +{ + CRichEditCtrl::PreSubclassWindow(); + SetBackgroundColor(FALSE, ::GetSysColor(COLOR_BTNFACE)); + disable(); + readOnly(); +} + + +CRTFBuilder &doWrite(CRTFBuilder &r, CRichEditCtrl &c) throw() +{ + r.write(c); + return r; +} + + +CRTFBuilder &doSize(CRTFBuilder &r, int n) throw() +{ + r.size(n); + return r; +} + + +CRTFBuilder &doBold(CRTFBuilder &r, bool b) +{ + r.bold(b); + return r; +} + + +CRTFBuilder &doStrike(CRTFBuilder &r, bool b) +{ + r.strike(b); + return r; +} + + +CRTFBuilder &doItalic(CRTFBuilder &r, bool b) +{ + r.italic(b); + return r; +} + + +CRTFBuilder &doUnderline(CRTFBuilder &r, bool b) +{ + r.underline(b); + return r; +} + + +CRTFBuilder &doColor(CRTFBuilder &r, int n) +{ + r.color((COLORREF)n); + return r; +} + + +CRTFBuilder &doBackColor(CRTFBuilder &r, int n) +{ + r.backColor((COLORREF)n); + return r; +} + + +CRTFBuilder &doAddColor(CRTFBuilder &r, int n) +{ + r.addColor((COLORREF)n); + return r; +} + + +CRTFBuilder &doFont(CRTFBuilder &r, CString &s) +{ + r.font(s); + return r; +} + + +CRTFBuilder &doAddFont(CRTFBuilder &r, CString &s) +{ + r.addFont(s); + return r; +} + + +CControlManip write(CRichEditCtrl &c) throw () +{ + return CControlManip(&doWrite, c); +} + +CIntManip size(int n) throw() +{ + return CIntManip(&doSize, n); +} + + +CIntManip color(int n) throw() +{ + return CIntManip(&doColor, n); +} + + +CIntManip backColor(int n) throw() +{ + return CIntManip(&doBackColor, n); +} + + +CIntManip addColor(int n) throw() +{ + return CIntManip(&doAddColor, n); +} + + +CStringManip font(LPCTSTR s) throw() +{ + return CStringManip(&doFont, s); +} + + +CStringManip addFont(LPCTSTR s) throw() +{ + return CStringManip(&doAddFont, s); +} + + +CBoolManip bold(bool b) throw() +{ + return CBoolManip(&doBold, b); +} + + +CBoolManip strike(bool b) throw() +{ + return CBoolManip(&doStrike, b); +} + + +CBoolManip italic(bool b) throw() +{ + return CBoolManip(&doItalic, b); +} + + +CBoolManip underline(bool b) throw() +{ + return CBoolManip(&doUnderline, b); +} + + +CRTFBuilder &operator<<(CRTFBuilder &b, RTFSM_PFUNC f) +{ + return f(b); +} + + +CRTFBuilder &operator<<(CRTFBuilder &b, CManip &f) +{ + return f.go(b); +} + + +CRTFBuilder &normal(CRTFBuilder &b) +{ + b.normal(); + return b; +} + + +CRTFBuilder &black(CRTFBuilder &b) +{ + b.black(); + return b; +} + + +CRTFBuilder &push(CRTFBuilder &b) +{ + b.push(); + return b; +} + + +CRTFBuilder &pop(CRTFBuilder &b) +{ + b.pop(); + return b; +} + + +CRTFBuilder &red(CRTFBuilder &b) +{ + b.red(); + return b; +} + + +CRTFBuilder &green(CRTFBuilder &b) +{ + b.green(); + return b; +} + + +CRTFBuilder &blue(CRTFBuilder &b) +{ + b.blue(); + return b; +} + + +CRTFBuilder &bold(CRTFBuilder &b) +{ + b.bold(); + return b; +} + + +CRTFBuilder &strike(CRTFBuilder &b) +{ + b.strike(); + return b; +} + + +CRTFBuilder &italic(CRTFBuilder &b) +{ + b.italic(); + return b; +} + + +CRTFBuilder &underline(CRTFBuilder &b) +{ + b.underline(); + return b; +} + + +CRTFBuilder::CRTFBuilder() +{ + m_fontList.add("Arial"); + m_colorList.add(RGB(0,0,0) ); + m_colorList.add(RGB(255,0,0) ); + m_colorList.add(RGB(0,255,0) ); + m_colorList.add(RGB(0,0,255) ); + size(35); +} + + +CRTFBuilder::~CRTFBuilder() +{ +} + + +void CRTFBuilder::push() +{ + m_attrStack.push(m_attr); +} + + +void CRTFBuilder::pop() +{ + m_attr = m_attrStack.top(); + m_attrStack.pop(); +} + + +void CRTFBuilder::color(COLORREF c) +{ + int n (m_colorList.find(c) ); + m_attr.m_nColorFground= n<0 ? m_colorList.add(c) : n; +} + + +void CRTFBuilder::backColor(COLORREF c) +{ + int n (m_colorList.find(c) ) ; + m_attr.m_nColorBground= n<0 ? m_colorList.add(c) : n; +} + + +void CRTFBuilder::black() +{ + m_attr.m_nColorFground = 0; +} + + +void CRTFBuilder::red() +{ + m_attr.m_nColorFground = 1; +} + + +void CRTFBuilder::green() +{ + m_attr.m_nColorFground = 2; +} + + +void CRTFBuilder::blue() +{ + m_attr.m_nColorFground = 3; +} + + +void CRTFBuilder::size(int n) +{ + m_attr.m_nFontSize = n; +} + + +void CRTFBuilder::font(const CString &strFont) +{ + int nCount = 0; + for (list<CString>::iterator i = m_fontList.begin(); i != m_fontList.end(); i++, nCount++) + { + if ((*i) == strFont) + { + m_attr.m_nFontNumber = nCount; + return; + } + } + + //not there, lets add it + m_fontList.add(strFont); + m_attr.m_nFontNumber = nCount; +} + + +void CRTFBuilder::bold(bool b) +{ + m_attr.m_bsBold= b; +} + + +void CRTFBuilder::strike(bool b) +{ + m_attr.m_bsStrike= b; +} + + +void CRTFBuilder::italic(bool b) +{ + m_attr.m_bsItalic = b; +} + + +void CRTFBuilder::underline(bool b) +{ + m_attr.m_bsUnderline = b; +} + + +void CRTFBuilder::normal() +{ + bold(false); + italic(false); + underline(false); + strike(false); +} + + +static DWORD CALLBACK EditStreamCallBack(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb) +{ + CString *pstr = (CString *)dwCookie; + + if (pstr->GetLength() < cb) + { + *pcb = pstr->GetLength(); + memcpy(pbBuff, (LPCSTR)*pstr, *pcb); + pstr->Empty(); + } + else + { + *pcb = cb; + memcpy( pbBuff, (LPCSTR)*pstr, *pcb); + *pstr = pstr->Right(pstr->GetLength() - cb); + } + return 0; +} + + +void CRTFBuilder::write(CRichEditCtrl &c) +{ + m_string += '}'; + +// CRtfStringDlg d(m_string); + + EDITSTREAM es = {(DWORD)&m_string, 0, EditStreamCallBack }; + + // richEd is the rich edit control + c.StreamIn(SF_RTF | SFF_SELECTION, es); + + m_string.Empty(); +} + + +CRTFBuilder &CRTFBuilder::operator+=(LPCTSTR p) +{ + CString s(p) , s2; + for (int i = 0; i < s.GetLength(); i ++) + { + if (s[i]=='\n') + { + s2 += (CString)"\r\n" += "\\par ";//\\par "; + } + else + { + s2 += s[i]; + } + } + + m_string += + (CString)"{\\rtf1\\ansi\\ansicpg1252\\deff0\\deftab720" += + (CString)m_fontList += + (CString)m_colorList += + (CString)m_attr += + s2 ; + return *this; +} + + +CRTFBuilder &CRTFBuilder::operator<<(LPCTSTR p) +{ + *this+=p; + return *this; +} + + +CRTFBuilder &CRTFBuilder::operator<<(int n) +{ + CString s; + s.Format("%d", n); + *this += (LPCTSTR)s; + return *this; +} + + +CRTFBuilder &CRTFBuilder::operator>>(CRichEditCtrl &e) +{ + write(e); + return *this; +} + |