summaryrefslogtreecommitdiff
path: root/hammer/optbuild.cpp
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /hammer/optbuild.cpp
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'hammer/optbuild.cpp')
-rw-r--r--hammer/optbuild.cpp305
1 files changed, 305 insertions, 0 deletions
diff --git a/hammer/optbuild.cpp b/hammer/optbuild.cpp
new file mode 100644
index 0000000..254f183
--- /dev/null
+++ b/hammer/optbuild.cpp
@@ -0,0 +1,305 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================
+
+#include "stdafx.h"
+#include "hammer.h"
+#include "GameConfig.h"
+#include "OPTBuild.h"
+#include "Options.h"
+#include "shlobj.h"
+
+// memdbgon must be the last include file in a .cpp file!!!
+#include <tier0/memdbgon.h>
+
+
+void UpdateConfigList(CComboBox &combo);
+void SelectActiveConfig(CComboBox &combo);
+
+
+// dvs: this is duplicated in RunMapExpertDlg.cpp!!
+enum
+{
+ id_InsertParmMapFileNoExt = 0x100,
+ id_InsertParmMapFile,
+ id_InsertParmMapPath,
+ id_InsertParmBspDir,
+ id_InsertParmExeDir,
+ id_InsertParmGameDir,
+
+ id_InsertParmEnd
+};
+
+
+void EditorUtil_ConvertPath(CString &str, bool bSave);
+void EditorUtil_TransferPath(CDialog *pDlg, int nIDC, char *szDest, bool bSave);
+
+
+COPTBuild::COPTBuild()
+ : CPropertyPage(COPTBuild::IDD)
+{
+ //{{AFX_DATA_INIT(COPTBuild)
+ //}}AFX_DATA_INIT
+
+ m_pConfig = NULL;
+}
+
+
+void COPTBuild::DoDataExchange(CDataExchange* pDX)
+{
+ CPropertyPage::DoDataExchange(pDX);
+ //{{AFX_DATA_MAP(COPTBuild)
+ DDX_Control(pDX, IDC_BSPDIR, m_cBSPDir);
+ DDX_Control(pDX, IDC_VIS, m_cVIS);
+ DDX_Control(pDX, IDC_LIGHT, m_cLIGHT);
+ DDX_Control(pDX, IDC_GAME, m_cGame);
+ DDX_Control(pDX, IDC_BSP, m_cBSP);
+ DDX_Control(pDX, IDC_CONFIGS, m_cConfigs);
+ //}}AFX_DATA_MAP
+}
+
+
+BEGIN_MESSAGE_MAP(COPTBuild, CPropertyPage)
+ //{{AFX_MSG_MAP(COPTBuild)
+ ON_BN_CLICKED(IDC_BROWSE_BSP, OnBrowseBsp)
+ ON_BN_CLICKED(IDC_BROWSE_GAME, OnBrowseGame)
+ ON_BN_CLICKED(IDC_BROWSE_LIGHT, OnBrowseLight)
+ ON_BN_CLICKED(IDC_BROWSE_VIS, OnBrowseVis)
+ ON_CBN_SELCHANGE(IDC_CONFIGS, OnSelchangeConfigs)
+ ON_BN_CLICKED(IDC_PARMS_BSP, OnParmsBsp)
+ ON_BN_CLICKED(IDC_PARMS_GAME, OnParmsGame)
+ ON_BN_CLICKED(IDC_PARMS_LIGHT, OnParmsLight)
+ ON_BN_CLICKED(IDC_PARMS_VIS, OnParmsVis)
+ ON_BN_CLICKED(IDC_BROWSE_BSPDIR, OnBrowseBspdir)
+ ON_COMMAND_EX_RANGE(id_InsertParmMapFileNoExt, id_InsertParmEnd, HandleInsertParm)
+ //}}AFX_MSG_MAP
+END_MESSAGE_MAP()
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void COPTBuild::DoBrowse(CWnd *pWnd)
+{
+ // Convert $Steam tokens to the real paths.
+ CString str;
+ pWnd->GetWindowText(str);
+ EditorUtil_ConvertPath(str, true);
+
+ CFileDialog dlg(TRUE, ".exe", str, OFN_NOCHANGEDIR | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY, "Programs (*.exe)|*.exe||", this);
+ if (dlg.DoModal() == IDCANCEL)
+ return;
+
+ // Convert back to $Steam tokens.
+ str = dlg.GetPathName();
+ EditorUtil_ConvertPath(str, false);
+ pWnd->SetWindowText(str);
+}
+
+void COPTBuild::OnBrowseBsp()
+{
+ DoBrowse(&m_cBSP);
+}
+
+void COPTBuild::OnBrowseGame()
+{
+ DoBrowse(&m_cGame);
+}
+
+void COPTBuild::OnBrowseLight()
+{
+ DoBrowse(&m_cLIGHT);
+}
+
+void COPTBuild::OnBrowseVis()
+{
+ DoBrowse(&m_cVIS);
+}
+
+void COPTBuild::OnSelchangeConfigs()
+{
+ SaveInfo(m_pConfig);
+
+ m_pConfig = NULL;
+
+ int iCurSel = m_cConfigs.GetCurSel();
+
+ BOOL bKillFields = (iCurSel == CB_ERR) ? FALSE : TRUE;
+ m_cBSP.EnableWindow(bKillFields);
+ m_cLIGHT.EnableWindow(bKillFields);
+ m_cVIS.EnableWindow(bKillFields);
+ m_cGame.EnableWindow(bKillFields);
+ m_cBSPDir.EnableWindow(bKillFields);
+
+ if(iCurSel == CB_ERR)
+ return;
+
+ // get pointer to the configuration
+ m_pConfig = Options.configs.FindConfig(m_cConfigs.GetItemData(iCurSel));
+
+ // update dialog data
+ EditorUtil_TransferPath(this, IDC_BSP, m_pConfig->szBSP, false);
+ EditorUtil_TransferPath(this, IDC_LIGHT, m_pConfig->szLIGHT, false);
+ EditorUtil_TransferPath(this, IDC_VIS, m_pConfig->szVIS, false);
+ EditorUtil_TransferPath(this, IDC_GAME, m_pConfig->szExecutable, false);
+ EditorUtil_TransferPath(this, IDC_BSPDIR, m_pConfig->szBSPDir, false);
+}
+
+
+void COPTBuild::SaveInfo(CGameConfig *pConfig)
+{
+ if (!pConfig)
+ {
+ return;
+ }
+
+ EditorUtil_TransferPath(this, IDC_BSP, m_pConfig->szBSP, true);
+ EditorUtil_TransferPath(this, IDC_LIGHT, m_pConfig->szLIGHT, true);
+ EditorUtil_TransferPath(this, IDC_VIS, m_pConfig->szVIS, true);
+ EditorUtil_TransferPath(this, IDC_GAME, m_pConfig->szExecutable, true);
+ EditorUtil_TransferPath(this, IDC_BSPDIR, m_pConfig->szBSPDir, true);
+}
+
+
+void COPTBuild::UpdateConfigList()
+{
+ m_pConfig = NULL;
+
+ ::UpdateConfigList(m_cConfigs);
+ ::SelectActiveConfig(m_cConfigs);
+
+ OnSelchangeConfigs();
+ SetModified();
+}
+
+BOOL COPTBuild::OnInitDialog()
+{
+ CPropertyPage::OnInitDialog();
+
+ UpdateConfigList();
+ SetModified(TRUE);
+
+ return TRUE;
+}
+
+BOOL COPTBuild::OnApply()
+{
+ SaveInfo(m_pConfig);
+
+ return CPropertyPage::OnApply();
+}
+
+BOOL COPTBuild::HandleInsertParm(UINT nID)
+// insert a parm at the current cursor location into the parameters
+// edit control
+{
+ LPCTSTR pszInsert = 0;
+
+ switch (nID)
+ {
+ case id_InsertParmMapFileNoExt:
+ pszInsert = "$file";
+ break;
+ case id_InsertParmMapFile:
+ pszInsert = "$file.$ext";
+ break;
+ case id_InsertParmMapPath:
+ pszInsert = "$path";
+ break;
+ case id_InsertParmExeDir:
+ pszInsert = "$exedir";
+ break;
+ case id_InsertParmBspDir:
+ pszInsert = "$bspdir";
+ break;
+ case id_InsertParmGameDir:
+ pszInsert = "$gamedir";
+ break;
+ }
+
+ Assert(pszInsert != NULL);
+ if (!pszInsert)
+ {
+ return TRUE;
+ }
+
+ m_pAddParmWnd->ReplaceSel(pszInsert);
+
+ return TRUE;
+}
+
+
+void COPTBuild::InsertParm(UINT nID, CEdit *pEdit)
+{
+ m_pAddParmWnd = pEdit;
+
+ // two stages - name/description OR data itself
+ CMenu menu;
+ menu.CreatePopupMenu();
+ menu.AppendMenu(MF_STRING, id_InsertParmMapFileNoExt, "Map Filename (no extension)");
+ menu.AppendMenu(MF_STRING, id_InsertParmMapFile, "Map Filename (with extension)");
+ menu.AppendMenu(MF_STRING, id_InsertParmMapPath, "Map Path (no filename)");
+ menu.AppendMenu(MF_SEPARATOR);
+ menu.AppendMenu(MF_STRING, id_InsertParmExeDir, "Game Executable Directory");
+ menu.AppendMenu(MF_STRING, id_InsertParmBspDir, "BSP Directory");
+ menu.AppendMenu(MF_STRING, id_InsertParmGameDir, "Game Directory");
+
+ // track menu
+ CWnd *pButton = GetDlgItem(nID);
+ CRect r;
+ pButton->GetWindowRect(r);
+ menu.TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON, r.left, r.bottom, this, NULL);
+}
+
+
+void COPTBuild::OnParmsBsp()
+{
+ InsertParm(IDC_PARMS_BSP, &m_cBSP);
+}
+
+void COPTBuild::OnParmsGame()
+{
+ InsertParm(IDC_PARMS_GAME, &m_cGame);
+}
+
+void COPTBuild::OnParmsLight()
+{
+ InsertParm(IDC_PARMS_LIGHT, &m_cLIGHT);
+}
+
+void COPTBuild::OnParmsVis()
+{
+ InsertParm(IDC_PARMS_VIS, &m_cVIS);
+}
+
+void COPTBuild::OnBrowseBspdir()
+{
+ CString str;
+ m_cBSPDir.GetWindowText(str);
+ EditorUtil_ConvertPath(str, true);
+
+ char szTemp[MAX_PATH];
+ Q_strncpy(szTemp, str, MAX_PATH);
+
+ BROWSEINFO bi;
+ memset(&bi, 0, sizeof bi);
+ bi.hwndOwner = m_hWnd;
+ bi.pszDisplayName = szTemp;
+ bi.lpszTitle = "Select BSP file directory";
+ bi.ulFlags = BIF_RETURNONLYFSDIRS;
+
+ LPITEMIDLIST idl = SHBrowseForFolder(&bi);
+
+ if (idl == NULL)
+ return;
+
+ SHGetPathFromIDList(idl, szTemp);
+ CoTaskMemFree(idl);
+
+ // Convert back to %STEAM%.
+ str = szTemp;
+ EditorUtil_ConvertPath(str, false);
+ m_cBSPDir.SetWindowText(str);
+}