mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-07 17:29:36 +00:00
1
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user