|
|
//========= Copyright � 1996-2005, 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); }
|