diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /hammer/entityhelpdlg.cpp | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'hammer/entityhelpdlg.cpp')
| -rw-r--r-- | hammer/entityhelpdlg.cpp | 371 |
1 files changed, 371 insertions, 0 deletions
diff --git a/hammer/entityhelpdlg.cpp b/hammer/entityhelpdlg.cpp new file mode 100644 index 0000000..79706a4 --- /dev/null +++ b/hammer/entityhelpdlg.cpp @@ -0,0 +1,371 @@ +//========= 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); + } +} + |