You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
371 lines
7.6 KiB
371 lines
7.6 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
//============================================================================= |
|
|
|
#include "stdafx.h" |
|
#include "EntityHelpDlg.h" |
|
#include "fgdlib/GameData.h" |
|
#include "RichEditCtrlEx.h" |
|
|
|
// memdbgon must be the last include file in a .cpp file!!! |
|
#include <tier0/memdbgon.h> |
|
|
|
|
|
static CEntityHelpDlg *g_pHelpDlg = NULL; |
|
|
|
|
|
BEGIN_MESSAGE_MAP(CEntityHelpDlg, CDialog) |
|
//{{AFX_MSG_MAP(CEntityHelpDlg) |
|
ON_WM_DESTROY() |
|
ON_WM_CLOSE() |
|
ON_WM_SIZE() |
|
//}}AFX_MSG_MAP |
|
END_MESSAGE_MAP() |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CEntityHelpDlg::ShowEntityHelpDialog(void) |
|
{ |
|
if (g_pHelpDlg == NULL) |
|
{ |
|
g_pHelpDlg = new CEntityHelpDlg; |
|
g_pHelpDlg->Create(IDD_ENTITY_HELP); |
|
} |
|
|
|
if (g_pHelpDlg != NULL) |
|
{ |
|
g_pHelpDlg->ShowWindow(SW_SHOW); |
|
} |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CEntityHelpDlg::SetEditGameClass(GDclass *pClass) |
|
{ |
|
if (g_pHelpDlg != NULL) |
|
{ |
|
g_pHelpDlg->UpdateClass(pClass); |
|
} |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Constructor. |
|
//----------------------------------------------------------------------------- |
|
CEntityHelpDlg::CEntityHelpDlg(CWnd *pwndParent) |
|
: CDialog(CEntityHelpDlg::IDD, pwndParent) |
|
{ |
|
m_pHelpText = NULL; |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Destructor. |
|
//----------------------------------------------------------------------------- |
|
CEntityHelpDlg::~CEntityHelpDlg(void) |
|
{ |
|
g_pHelpDlg = NULL; |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
// Input : pDX - |
|
//----------------------------------------------------------------------------- |
|
void CEntityHelpDlg::DoDataExchange(CDataExchange *pDX) |
|
{ |
|
CDialog::DoDataExchange(pDX); |
|
|
|
//{{AFX_DATA_MAP(CEntityHelpDlg) |
|
//}}AFX_DATA_MAP |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
// Input : pszText - |
|
// Output : |
|
//----------------------------------------------------------------------------- |
|
int CEntityHelpDlg::GetTextWidth(const char *pszText, CDC *pDC) |
|
{ |
|
if (pszText != NULL) |
|
{ |
|
bool bRelease = false; |
|
|
|
if (pDC == NULL) |
|
{ |
|
bRelease = true; |
|
pDC = m_pHelpText->GetDC(); |
|
} |
|
|
|
CGdiObject *pOldFont = pDC->SelectStockObject(DEFAULT_GUI_FONT); |
|
CSize Size = pDC->GetTabbedTextExtent(pszText, strlen(pszText), 0, NULL); |
|
pDC->SelectObject(pOldFont); |
|
|
|
if (bRelease) |
|
{ |
|
m_pHelpText->ReleaseDC(pDC); |
|
} |
|
|
|
return(Size.cx); |
|
} |
|
|
|
return(0); |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
// Input : pClass - |
|
// Output : |
|
//----------------------------------------------------------------------------- |
|
int CEntityHelpDlg::GetMaxVariableWidth(GDclass *pClass) |
|
{ |
|
CDC *pDC = m_pHelpText->GetDC(); |
|
|
|
int nWidthMax = 0; |
|
|
|
int nCount = m_pClass->GetVariableCount(); |
|
for (int i = 0; i < nCount; i++) |
|
{ |
|
GDinputvariable *pVar = m_pClass->GetVariableAt(i); |
|
int nWidth = GetTextWidth(pVar->GetName(), pDC); |
|
|
|
if (nWidth > nWidthMax) |
|
{ |
|
nWidthMax = nWidth; |
|
} |
|
} |
|
|
|
m_pHelpText->ReleaseDC(pDC); |
|
|
|
return(nWidthMax); |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CEntityHelpDlg::OnClose(void) |
|
{ |
|
DestroyWindow(); |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Called when our window is being destroyed. |
|
//----------------------------------------------------------------------------- |
|
void CEntityHelpDlg::OnDestroy(void) |
|
{ |
|
delete this; |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
BOOL CEntityHelpDlg::OnInitDialog(void) |
|
{ |
|
CDialog::OnInitDialog(); |
|
m_pHelpText = new CRichEditCtrlEx; |
|
m_pHelpText->SubclassDlgItem(IDC_HELP_TEXT, this); |
|
m_pHelpText->enable(); |
|
return(TRUE); |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
// Input : pClass - |
|
//----------------------------------------------------------------------------- |
|
void CEntityHelpDlg::UpdateClass(GDclass *pClass) |
|
{ |
|
m_pClass = pClass; |
|
UpdateHelp(); |
|
m_pHelpText->LineScroll(-64000, -64000); |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CEntityHelpDlg::UpdateHelp(void) |
|
{ |
|
if (m_pClass != NULL) |
|
{ |
|
m_pHelpText->SetWindowText(""); |
|
|
|
CRTFBuilder b; |
|
|
|
b << size(24); |
|
b << bold(true); |
|
b << color(1); |
|
b << m_pClass->GetName(); |
|
b << "\n\n"; |
|
b << write(*m_pHelpText); |
|
|
|
b << size(22); |
|
b << bold(false); |
|
b << m_pClass->GetDescription(); |
|
b << "\n\n"; |
|
b << write(*m_pHelpText); |
|
|
|
// |
|
// Keys section. |
|
// |
|
int nCount = m_pClass->GetVariableCount(); |
|
if (nCount > 0) |
|
{ |
|
// |
|
// Keys header. |
|
// |
|
b << size(24); |
|
b << bold(true); |
|
b << color(1); |
|
b << "KEYS"; |
|
b << "\n\n"; |
|
b << write(*m_pHelpText); |
|
|
|
// |
|
// Keys. |
|
// |
|
b << size(20); |
|
b << bold(false); |
|
|
|
for (int i = 0; i < nCount; i++) |
|
{ |
|
GDinputvariable *pVar = m_pClass->GetVariableAt(i); |
|
|
|
b << bold(true); |
|
b << pVar->GetLongName(); |
|
b << bold(false); |
|
b << " "; |
|
|
|
b << italic(true); |
|
b << pVar->GetName(); |
|
b << italic(false); |
|
|
|
b << " <"; |
|
b << pVar->GetTypeText(); |
|
b << "> "; |
|
|
|
b << pVar->GetDescription(); |
|
b << "\n\n"; |
|
b << write(*m_pHelpText); |
|
} |
|
} |
|
|
|
// |
|
// Inputs section. |
|
// |
|
int nInputCount = m_pClass->GetInputCount(); |
|
if (nInputCount > 0) |
|
{ |
|
// |
|
// Inputs header. |
|
// |
|
b << "\n"; |
|
b << size(24); |
|
b << bold(true); |
|
b << color(1); |
|
b << "INPUTS"; |
|
b << "\n\n"; |
|
b << write(*m_pHelpText); |
|
|
|
// |
|
// Inputs. |
|
// |
|
b << size(20); |
|
|
|
for (int i = 0; i < nInputCount; i++) |
|
{ |
|
CClassInput *pInput = m_pClass->GetInput(i); |
|
|
|
b << bold(true); |
|
b << pInput->GetName(); |
|
b << bold(false); |
|
b << " "; |
|
|
|
if (pInput->GetType() != iotVoid) |
|
{ |
|
b << "<"; |
|
b << pInput->GetTypeText(); |
|
b << "> "; |
|
} |
|
|
|
b << pInput->GetDescription(); |
|
b << "\n\n"; |
|
b << write(*m_pHelpText); |
|
} |
|
} |
|
|
|
// |
|
// Outputs section. |
|
// |
|
int nOutputCount = m_pClass->GetOutputCount(); |
|
if (nOutputCount > 0) |
|
{ |
|
// |
|
// Outputs header. |
|
// |
|
b << "\n"; |
|
b << size(24); |
|
b << bold(true); |
|
b << color(1); |
|
b << "OUTPUTS"; |
|
b << "\n\n"; |
|
b << write(*m_pHelpText); |
|
|
|
// |
|
// Outputs. |
|
// |
|
b << size(20); |
|
|
|
for (int i = 0; i < nOutputCount; i++) |
|
{ |
|
CClassOutput *pOutput = m_pClass->GetOutput(i); |
|
|
|
b << bold(true); |
|
b << pOutput->GetName(); |
|
b << bold(false); |
|
b << " "; |
|
|
|
if (pOutput->GetType() != iotVoid) |
|
{ |
|
b << "<"; |
|
b << pOutput->GetTypeText(); |
|
b << "> "; |
|
} |
|
|
|
b << pOutput->GetDescription(); |
|
b << "\n\n"; |
|
b << write(*m_pHelpText); |
|
} |
|
} |
|
} |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
// Input : nType - |
|
// cx - |
|
// cy - |
|
// Output : afx_msg void |
|
//----------------------------------------------------------------------------- |
|
void CEntityHelpDlg::OnSize( UINT nType, int cx, int cy ) |
|
{ |
|
CDialog::OnSize(nType, cx, cy); |
|
|
|
if (m_pHelpText != NULL) |
|
{ |
|
m_pHelpText->SetWindowPos(NULL, 0, 0, cx - 22, cy - 22, SWP_NOMOVE | SWP_NOZORDER); |
|
} |
|
} |
|
|
|
|