summaryrefslogtreecommitdiff
path: root/hammer/richeditctrlex.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'hammer/richeditctrlex.cpp')
-rw-r--r--hammer/richeditctrlex.cpp474
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;
+}
+