summaryrefslogtreecommitdiff
path: root/hammer/editgameconfigs.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/editgameconfigs.cpp
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'hammer/editgameconfigs.cpp')
-rw-r--r--hammer/editgameconfigs.cpp217
1 files changed, 217 insertions, 0 deletions
diff --git a/hammer/editgameconfigs.cpp b/hammer/editgameconfigs.cpp
new file mode 100644
index 0000000..2a6b851
--- /dev/null
+++ b/hammer/editgameconfigs.cpp
@@ -0,0 +1,217 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//
+//=============================================================================//
+// EditGameConfigs.cpp : implementation file
+//
+
+#include "stdafx.h"
+#include "hammer.h"
+#include "EditGameConfigs.h"
+#include "StrDlg.h"
+#include "MapDoc.h"
+
+// memdbgon must be the last include file in a .cpp file!!!
+#include <tier0/memdbgon.h>
+
+/////////////////////////////////////////////////////////////////////////////
+// CEditGameConfigs dialog
+
+
+CEditGameConfigs::CEditGameConfigs(BOOL bSelectOnly,
+ CWnd* pParent /*=NULL*/)
+ : CDialog(CEditGameConfigs::IDD, pParent)
+{
+ //{{AFX_DATA_INIT(CEditGameConfigs)
+ // NOTE: the ClassWizard will add member initialization here
+ //}}AFX_DATA_INIT
+
+ m_bSelectOnly = bSelectOnly;
+}
+
+
+void CEditGameConfigs::DoDataExchange(CDataExchange* pDX)
+{
+ CDialog::DoDataExchange(pDX);
+ //{{AFX_DATA_MAP(CEditGameConfigs)
+ DDX_Control(pDX, IDC_CONFIGS, m_cConfigs);
+ //}}AFX_DATA_MAP
+}
+
+
+BEGIN_MESSAGE_MAP(CEditGameConfigs, CDialog)
+ //{{AFX_MSG_MAP(CEditGameConfigs)
+ ON_BN_CLICKED(IDC_ADD, OnAdd)
+ ON_BN_CLICKED(IDC_COPY, OnCopy)
+ ON_BN_CLICKED(IDC_REMOVE, OnRemove)
+ ON_LBN_SELCHANGE(IDC_CONFIGS, OnSelchangeConfigs)
+ ON_LBN_DBLCLK(IDC_CONFIGS, OnDblclkConfigs)
+ //}}AFX_MSG_MAP
+END_MESSAGE_MAP()
+
+/////////////////////////////////////////////////////////////////////////////
+// CEditGameConfigs message handlers
+
+void CEditGameConfigs::OnAdd()
+{
+ char szName[128];
+ szName[0] = 0;
+ CStrDlg dlg(0, szName, "Enter the game's name:", "Add a game");
+ if(dlg.DoModal() != IDOK)
+ return;
+
+ // add a new game config
+ CGameConfig *pConfig = Options.configs.AddConfig();
+ strcpy(pConfig->szName, dlg.m_string);
+
+ FillConfigList(pConfig->dwID);
+}
+
+void CEditGameConfigs::OnCopy()
+{
+ int iCurSel = m_cConfigs.GetCurSel();
+ if(iCurSel == CB_ERR)
+ return;
+
+ CGameConfig *pConfig = Options.configs.FindConfig(
+ m_cConfigs.GetItemData(iCurSel));
+
+ CGameConfig *pNewConfig = Options.configs.AddConfig();
+ pNewConfig->CopyFrom(pConfig);
+
+ FillConfigList(pNewConfig->dwID);
+}
+
+void CEditGameConfigs::OnRemove()
+{
+ int iCurSel = m_cConfigs.GetCurSel();
+ if(iCurSel == CB_ERR)
+ return;
+
+ int iArrayIndex;
+ CGameConfig *pConfig = Options.configs.FindConfig(
+ m_cConfigs.GetItemData(iCurSel), &iArrayIndex);
+
+ // check to see if any docs use this game - if so, can't
+ // delete it.
+ for ( int i=0; i<CMapDoc::GetDocumentCount(); i++ )
+ {
+ CMapDoc *pDoc = CMapDoc::GetDocument(i);
+ if(pDoc->GetGame() == pConfig)
+ {
+ AfxMessageBox("You can't delete this game configuration now\n"
+ "because some loaded documents are using it.\n"
+ "If you want to delete it, you must close those\n"
+ "documents first.");
+ return;
+ }
+ }
+
+ bool bResetDefaults = false;
+
+ // Check to see if this is the last configuation and prompt for the user to make a decision
+ if ( Options.configs.nConfigs <= 1 )
+ {
+ if ( AfxMessageBox( "At least one configuration must be present!\n"
+ "Would you like to reset to the default configurations?", MB_YESNO ) == IDNO )
+ {
+ return;
+ }
+
+ bResetDefaults = true;
+ }
+
+ // Remove selection
+ m_cConfigs.DeleteString( iCurSel );
+
+ // FIXME: This will apply the change even if you cancel the dialog. This needs to store a copy
+ // of the data which then reconciles the two versions on OK or Apply! -- jdw
+
+ Options.configs.Configs.RemoveAt(iArrayIndex);
+ Options.configs.nConfigs--;
+
+ // Reset to defaults
+ if ( bResetDefaults )
+ {
+ Options.configs.ResetGameConfigs( false );
+ FillConfigList();
+ }
+
+ // Put the selection back to the top
+ m_cConfigs.SetCurSel( 0 );
+}
+
+void CEditGameConfigs::FillConfigList(DWORD dwSelectID)
+{
+ // get current selection so we can keep it
+ DWORD dwCurID = dwSelectID;
+ int iNewIndex = -1;
+
+ if(m_cConfigs.GetCurSel() != LB_ERR && dwCurID == 0xFFFFFFFF)
+ {
+ dwCurID = m_cConfigs.GetItemData(m_cConfigs.GetCurSel());
+ }
+
+ m_cConfigs.ResetContent();
+
+ for(int i = 0; i < Options.configs.nConfigs; i++)
+ {
+ CGameConfig *pConfig = Options.configs.Configs[i];
+ int iIndex = m_cConfigs.AddString(pConfig->szName);
+ m_cConfigs.SetItemData(iIndex, pConfig->dwID);
+
+ if (dwCurID == pConfig->dwID)
+ {
+ iNewIndex = iIndex;
+ }
+ }
+
+ if (iNewIndex == -1)
+ {
+ iNewIndex = 0;
+ }
+ m_cConfigs.SetCurSel(iNewIndex);
+
+ OnSelchangeConfigs();
+
+ if (m_bSelectOnly && Options.configs.nConfigs == 1)
+ OnOK();
+}
+
+void CEditGameConfigs::OnSelchangeConfigs()
+{
+ int iCurSel = m_cConfigs.GetCurSel();
+ if(iCurSel == LB_ERR)
+ return;
+
+ m_pSelectedGame = Options.configs.FindConfig(
+ m_cConfigs.GetItemData(iCurSel));
+}
+
+BOOL CEditGameConfigs::OnInitDialog()
+{
+ CDialog::OnInitDialog();
+
+ if(m_bSelectOnly)
+ {
+ SetWindowText("Select a game configuration to use");
+
+ GetDlgItem(IDOK)->SetWindowText("OK");
+ GetDlgItem(IDC_REMOVE)->ShowWindow(SW_HIDE);
+ GetDlgItem(IDC_ADD)->ShowWindow(SW_HIDE);
+ GetDlgItem(IDC_COPY)->ShowWindow(SW_HIDE);
+ }
+
+ FillConfigList();
+
+ return TRUE;
+}
+
+void CEditGameConfigs::OnDblclkConfigs()
+{
+ OnOK();
+
+}