initial
This commit is contained in:
438
hammer/richeditctrlex.h
Normal file
438
hammer/richeditctrlex.h
Normal file
@@ -0,0 +1,438 @@
|
||||
//========= Copyright <20> 1996-2005, 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,
|
||||
(CString)m_bsUnderline, (CString)m_bsItalic, (CString)m_bsStrike,
|
||||
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++, (*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
|
||||
Reference in New Issue
Block a user