372 lines
7.6 KiB
C++
372 lines
7.6 KiB
C++
//========= 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);
|
|
}
|
|
}
|
|
|