// SettingOptionPage.cpp : ±¸Çö ÆÄÀÏÀÔ´Ï´Ù. // #include "stdafx.h" #include "PatchMaker.h" #include "SettingOptionPage.h" #include "UtilityFunc.h" #include "PMSettingConstant.h" #include ".\settingoptionpage.h" // CSettingOptionPage ´ëÈ­ »óÀÚÀÔ´Ï´Ù. IMPLEMENT_DYNAMIC(CSettingOptionPage, CPropertyPage) CSettingOptionPage::CSettingOptionPage(CPMSetting& pmSetting, CPropertySheet& ownerSheet) : CPropertyPage(CSettingOptionPage::IDD) , m_dwManualPatchMinVer(100) , m_OwnerSheet(ownerSheet) , m_pmSettingOption(pmSetting) { } CSettingOptionPage::~CSettingOptionPage() { } void CSettingOptionPage::DoDataExchange(CDataExchange* pDX) { CPropertyPage::DoDataExchange(pDX); DDX_Control(pDX, IDC_CB_OPT_PATCH_TYPE, m_cbPatchType); DDX_Control(pDX, IDC_ED_OPT_OLD_PKG, m_edOldPkgPos); DDX_Control(pDX, IDC_ED_OPT_NEW_CLIENT, m_edNewClientPos); DDX_Control(pDX, IDC_ED_OPT_NEW_PKG, m_edNewPkgPos); DDX_Control(pDX, IDC_ED_OPT_MAX_PKG, m_edMaxPkgSize); DDX_Control(pDX, IDC_CB_OPT_OLD_PKG_POS, m_cbPkgPos); DDX_Control(pDX, IDC_ED_OPT_FTP_ADDR, m_edFTPAddr); DDX_Control(pDX, IDC_ED_OPT_FTP_PORT, m_edFTPPort); DDX_Control(pDX, IDC_CK_OPT_FTP_PASSIVE, m_bFTPPassive); DDX_Control(pDX, IDC_ED_OPT_MANUAL_PATCH_FILE, m_edManualPatchFolder); DDX_Control(pDX, IDC_ED_OPT_MANUAL_SFX_FILE, m_edManualPatchSFXFile); DDX_Control(pDX, IDC_ED_OPT_MANUAL_MIN_VER, m_edManualPatchMinVer); DDX_Text(pDX, IDC_ED_OPT_MANUAL_MIN_VER, m_dwManualPatchMinVer); DDV_MinMaxUInt(pDX, m_dwManualPatchMinVer, 100, 10000); } BEGIN_MESSAGE_MAP(CSettingOptionPage, CPropertyPage) ON_BN_CLICKED(IDC_BTN_OPT_OLD_PKG, OnBnClickedBtnOptOldPkg) ON_BN_CLICKED(IDC_BTN_OPT_NEW_CLIENT, OnBnClickedBtnOptNewClient) ON_BN_CLICKED(IDC_BTN_OPT_NEW_PKG, OnBnClickedBtnOptNewPkg) ON_BN_CLICKED(IDC_BTN_OPT_MANUAL_PATCH_FILE, OnBnClickedBtnOptManualPatchFile) ON_BN_CLICKED(IDC_BTN_OPT_MANUAL_SFX_FILE, OnBnClickedBtnOptManualSfxFile) ON_BN_CLICKED(ID_SAVE_SETUP, OnBnClickedSaveSetup) ON_BN_CLICKED(ID_LOAD_SETUP, OnBnClickedLoadSetup) ON_REGISTERED_MESSAGE(PMConst::AP_SETTING_ENABLE, OnEnableAutoPatchOption) ON_REGISTERED_MESSAGE(PMConst::AP_SETTING_DISABLE, OnDisableAutoPatchOption) ON_REGISTERED_MESSAGE(PMConst::MP_SETTING_ENABLE, OnEnableManualPatchOption) ON_REGISTERED_MESSAGE(PMConst::MP_SETTING_DISABLE, OnDisableManualPatchOption) ON_CBN_SELCHANGE(IDC_CB_OPT_OLD_PKG_POS, OnCbnSelchangeCbOptOldPkgPos) ON_WM_DESTROY() END_MESSAGE_MAP() // CSettingOptionPage ¸Þ½ÃÁö 󸮱âÀÔ´Ï´Ù. inline int AddCBString(CComboBox& combo, CString& tempString, int nIndex, UINT nID) { tempString.LoadString(nID); return combo.InsertString(nIndex, tempString); } BOOL CSettingOptionPage::OnInitDialog() { CPropertyPage::OnInitDialog(); // TODO: ¿©±â¿¡ Ãß°¡ ÃʱâÈ­ ÀÛ¾÷À» Ãß°¡ÇÕ´Ï´Ù. CString szTmp; m_cbPatchType.InsertString(0, PMConst::PatchType_Part1); m_cbPatchType.InsertString(1, PMConst::PatchType_BattleLohan); m_cbPatchType.InsertString(2, PMConst::PatchType_Part2); m_cbPatchType.InsertString(3, PMConst::PatchType_Part2Test); m_cbPatchType.InsertString(4, PMConst::PatchType_Part2Malay); AddCBString(m_cbPkgPos, szTmp, 0, IDS_CB_FTP); AddCBString(m_cbPkgPos, szTmp, 1, IDS_CB_LOCAL); OnCbnSelchangeCbOptOldPkgPos(); return TRUE; // return TRUE unless you set the focus to a control // ¿¹¿Ü: OCX ¼Ó¼º ÆäÀÌÁö´Â FALSE¸¦ ¹ÝÈ¯ÇØ¾ß ÇÕ´Ï´Ù. } void CSettingOptionPage::OnBnClickedBtnOptOldPkg() { // TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. PMUtil::BrowseForFolder(GetSafeHwnd(), _T("¿¹Àü ÆÐŰÁö°¡ ÀÖ´Â Æú´õ¸¦ ¼±ÅÃÇØÁÖ¼¼¿ä"), m_edOldPkgPos); } void CSettingOptionPage::OnBnClickedBtnOptNewClient() { // TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. PMUtil::BrowseForFolder(GetSafeHwnd(), _T("±ú²ýÇÑ Å¬¶óÀÌ¾ðÆ® ÆÄÀÏÀÌ ÀÖ´Â Æú´õ¸¦ ¼±ÅÃÇØÁÖ¼¼¿ä"), m_edNewClientPos); } void CSettingOptionPage::OnBnClickedBtnOptNewPkg() { // TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. PMUtil::BrowseForFolder(GetSafeHwnd(), _T("»õ ÆÐŰÁö ÆÄÀÏÀÌ ÀúÀåµÉ ·çÆ® Æú´õ¸¦ ¼±ÅÃÇØÁÖ¼¼¿ä"), m_edNewPkgPos); } void CSettingOptionPage::OnBnClickedBtnOptManualPatchFile() { // TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. PMUtil::BrowseForFolder(GetSafeHwnd(), _T("¼öµ¿ ÆÐÄ¡ ÆÄÀÏÀÌ À§Ä¡ÇÑ Æú´õ¸¦ ¼±ÅÃÇØÁÖ¼¼¿ä"), m_edManualPatchFolder); } void CSettingOptionPage::OnBnClickedBtnOptManualSfxFile() { // TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. CString szFileName; if (PMUtil::BrowseForExisingFile(this->GetSafeHwnd(), _T("¼öµ¿ ÆÐÄ¡ SFXÆÄÀÏÀ» ¼±ÅÃÇØÁÖ¼¼¿ä"), "SFX File\0*.exe", szFileName)) { m_edManualPatchSFXFile.SetWindowText(szFileName); } } void CSettingOptionPage::OnBnClickedSaveSetup() { // TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. UpdateSetupData(TRUE); if (!m_pmSettingOption.SaveSetting()) { MessageBox(_T("¼Â¾÷ ÆÄÀÏÀ» ÀúÀåÇϱâ À§Çؼ­ ¿©´Â µ¥ ½ÇÆÐÇß½À´Ï´Ù"), _T("ÆÄÀÏ ¿­±â ¿À·ù"), MB_OK | MB_ICONEXCLAMATION); } } void CSettingOptionPage::OnBnClickedLoadSetup() { // TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. if (m_pmSettingOption.LoadSetting()) { UpdateSetupData(FALSE); OnCbnSelchangeCbOptOldPkgPos(); } else { MessageBox(_T("¼Â¾÷ ÆÄÀÏÀ» ºÒ·¯¿À±â À§Çؼ­ ¿©´Â µ¥ ½ÇÆÐÇß½À´Ï´Ù"), _T("ÆÄÀÏ ¿­±â ¿À·ù"), MB_OK | MB_ICONEXCLAMATION); } } void SetCBSel(CComboBox& cb, CString& szValue, int nDefaultSel = 0) { CString szCBValue; int nMaxCount = cb.GetCount(); for (int nCount = 0; nCount < nMaxCount; ++nCount) { cb.GetLBText(nCount, szCBValue); if (0 == szValue.CompareNoCase(szCBValue)) { cb.SetCurSel(nCount); break; } } if (nCount == nMaxCount) { // ã¾ÆºÁ¼­ ¸Â´Â ¹®ÀÚ¿­ÀÌ ¾øÀ¸¸é ±âº»°ªÀ¸·Î ¼±Åà cb.SetCurSel(nDefaultSel); } } void CSettingOptionPage::UpdateSetupData(bool bSaveAndValidate) { CString szValue; struct KeyValuePair { LPCTSTR m_szKey; CEdit& m_edValue; }; KeyValuePair keyValueData[] = { { PMConst::AP_OldPkg, m_edOldPkgPos }, { PMConst::AP_NewClient, m_edNewClientPos }, { PMConst::AP_NewPkg, m_edNewPkgPos }, { PMConst::AP_MaxPkg, m_edMaxPkgSize }, { PMConst::AP_FTPAddr, m_edFTPAddr }, { PMConst::AP_FTPPort, m_edFTPPort }, { PMConst::MP_Folder, m_edManualPatchFolder }, { PMConst::MP_SFXFile, m_edManualPatchSFXFile } }; const int nMaxData = sizeof(keyValueData) / sizeof(KeyValuePair); if (!bSaveAndValidate) { // ¼Â¾÷ ¸ÊÀÇ µ¥ÀÌÅ͸¦ ÄÁÆ®·Ñ·Î ÀúÀåÇÑ´Ù. for (int nCount = 0; nCount < nMaxData; ++nCount) { m_pmSettingOption.GetSettingData(keyValueData[nCount].m_szKey, szValue); keyValueData[nCount].m_edValue.SetWindowText(szValue); } m_pmSettingOption.GetSettingData(PMConst::PatchType, szValue); SetCBSel(m_cbPatchType, szValue); m_pmSettingOption.GetSettingData(PMConst::AP_PkgPosType, szValue); SetCBSel(m_cbPkgPos, szValue); m_pmSettingOption.GetSettingData(PMConst::AP_FTPPassive, szValue); m_bFTPPassive.SetCheck(0 == szValue.CompareNoCase(_T("TRUE")) ? BST_CHECKED : BST_UNCHECKED); m_pmSettingOption.GetSettingData(PMConst::MP_MinVer, szValue); long nVersion = atol(szValue); if (nVersion < 100) { nVersion = 100; } m_dwManualPatchMinVer = nVersion; // ÄÁÆ®·Ñ µ¥ÀÌÅ͸¦ È­¸é¿¡ ¹Ý¿µÇÑ´Ù. UpdateData(FALSE); } else { // È­¸é µ¥ÀÌÅ͸¦ ÄÁÆ®·Ñ¿¡ Àоî¿Â´Ù. UpdateData(TRUE); // ÄÁÆ®·ÑÀÇ µ¥ÀÌÅ͸¦ ¼Â¾÷ ¸Ê¿¡ ÀúÀåÇÑ´Ù. for (int nCount = 0; nCount < nMaxData; ++nCount) { keyValueData[nCount].m_edValue.GetWindowText(szValue); m_pmSettingOption.SetSettingData(keyValueData[nCount].m_szKey, szValue); } int nCurSel = m_cbPatchType.GetCurSel(); if (CB_ERR != nCurSel) { m_cbPatchType.GetLBText(nCurSel, szValue); m_pmSettingOption.SetSettingData(PMConst::PatchType, szValue); } nCurSel = m_cbPkgPos.GetCurSel(); if (CB_ERR != nCurSel) { m_cbPkgPos.GetLBText(nCurSel, szValue); m_pmSettingOption.SetSettingData(PMConst::AP_PkgPosType, szValue); } m_pmSettingOption.SetSettingData(PMConst::AP_FTPPassive, BST_CHECKED == m_bFTPPassive.GetCheck() ? _T("TRUE") : _T("FALSE")); szValue.Format("%u", m_dwManualPatchMinVer); m_pmSettingOption.SetSettingData(PMConst::MP_MinVer, szValue); } } bool CSettingOptionPage::IsEmptyOption() { if (CB_ERR == m_cbPatchType.GetCurSel() || 0 == m_edOldPkgPos.GetWindowTextLength() || 0 == m_edNewClientPos.GetWindowTextLength() || 0 == m_edNewPkgPos.GetWindowTextLength() || 0 == m_edMaxPkgSize.GetWindowTextLength() || CB_ERR == m_cbPkgPos.GetCurSel() || 0 == m_edManualPatchFolder.GetWindowTextLength() || 0 == m_edManualPatchSFXFile.GetWindowTextLength() || m_dwManualPatchMinVer < 100 || 10000 < m_dwManualPatchMinVer) { // ºó Ç׸ñÀÌ ÀÖÀ¸¸é ½ÇÆÐ! return true; } CString szPkgPos, szFTPPos((LPCTSTR)IDS_CB_FTP); m_cbPkgPos.GetLBText(m_cbPkgPos.GetCurSel(), szPkgPos); if (0 == szPkgPos.CompareNoCase(szFTPPos) && (0 == m_edFTPAddr.GetWindowTextLength() || 0 == m_edFTPPort.GetWindowTextLength())) { // FTP¸¦ ¼±ÅÃÇߴµ¥, ÁÖ¼Ò³ª Port°¡ ¾øÀ¸¸é ½ÇÆÐ! return true; } return false; } BOOL CSettingOptionPage::OnKillActive() { // TODO: ¿©±â¿¡ Ư¼öÈ­µÈ Äڵ带 Ãß°¡ ¹×/¶Ç´Â ±âº» Ŭ·¡½º¸¦ È£ÃâÇÕ´Ï´Ù. if (this == m_OwnerSheet.GetActivePage()) { // ÆäÀÌÁö¸¦ ¿Å±â¸é ÀÚµ¿À¸·Î ÀúÀåµÊ SendMessage(WM_COMMAND, MAKEWPARAM(ID_SAVE_SETUP, BN_CLICKED)); if (IsEmptyOption()) { MessageBox(_T("±â·ÏÇÏÁö ¾ÊÀº ¼³Á¤ÀÌ ÀÖ½À´Ï´Ù. ³²Àº ¼³Á¤À» ¸ðµÎ ÀÔ·ÂÇØ ÁֽʽÿÀ"), _T("¿É¼Ç ¼³Á¤"), MB_OK | MB_ICONEXCLAMATION); return FALSE; } } return CPropertyPage::OnKillActive(); } BOOL CSettingOptionPage::OnSetActive() { // TODO: ¿©±â¿¡ Ư¼öÈ­µÈ Äڵ带 Ãß°¡ ¹×/¶Ç´Â ±âº» Ŭ·¡½º¸¦ È£ÃâÇÕ´Ï´Ù. SendMessage(WM_COMMAND, MAKEWPARAM(ID_LOAD_SETUP, BN_CLICKED)); return CPropertyPage::OnSetActive(); } afx_msg LRESULT CSettingOptionPage::OnEnableAutoPatchOption(WPARAM wParam, LPARAM lParam) { SetAutoPatchOption(true); return 0; } afx_msg LRESULT CSettingOptionPage::OnDisableAutoPatchOption(WPARAM wParam, LPARAM lParam) { SetAutoPatchOption(false); return 0; } afx_msg LRESULT CSettingOptionPage::OnEnableManualPatchOption(WPARAM wParam, LPARAM lParam) { SetManualPatchOption(true); return 0; } afx_msg LRESULT CSettingOptionPage::OnDisableManualPatchOption(WPARAM wParam, LPARAM lParam) { SetManualPatchOption(false); return 0; } void CSettingOptionPage::SetAutoPatchOption(bool bEnable) { UINT nDisableID[] = { IDC_BTN_OPT_OLD_PKG, IDC_BTN_OPT_NEW_CLIENT, IDC_BTN_OPT_NEW_PKG, }; PMUtil::EnableDlgItems(*this, nDisableID, sizeof(nDisableID)/sizeof(UINT), bEnable); if (bEnable && !theApp.IsManualPatchOperate()) { // ¼öµ¿ÆÐÄ¡°¡ ÀÛµ¿ ¾ÈÇÒ¶§¸¸ Enable m_cbPatchType.EnableWindow(TRUE); } else { m_cbPatchType.EnableWindow(FALSE); } m_cbPkgPos.EnableWindow(bEnable); m_bFTPPassive.EnableWindow(bEnable); m_edOldPkgPos.SetReadOnly(!bEnable); m_edMaxPkgSize.SetReadOnly(!bEnable); m_edFTPAddr.SetReadOnly(!bEnable); m_edFTPPort.SetReadOnly(!bEnable); } void CSettingOptionPage::SetManualPatchOption(bool bEnable) { UINT nDisableID[] = { IDC_BTN_OPT_MANUAL_PATCH_FILE, IDC_BTN_OPT_MANUAL_SFX_FILE }; PMUtil::EnableDlgItems(*this, nDisableID, sizeof(nDisableID)/sizeof(UINT), bEnable); if (bEnable && !theApp.IsAutoPatchOperate()) { // ÀÚµ¿ÆÐÄ¡°¡ ÀÛµ¿ ¾ÈÇÒ¶§¸¸ Enable m_cbPatchType.EnableWindow(TRUE); } else { m_cbPatchType.EnableWindow(FALSE); } m_edManualPatchMinVer.SetReadOnly(!bEnable); } void CSettingOptionPage::OnCbnSelchangeCbOptOldPkgPos() { // TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. BOOL bEnableFTP = FALSE; int nCurSel = m_cbPkgPos.GetCurSel(); if (CB_ERR != nCurSel) { CString szFTP((LPCTSTR)IDS_CB_FTP); CString szCurrentSel; m_cbPkgPos.GetLBText(nCurSel, szCurrentSel); if (0 == szCurrentSel.CompareNoCase(szFTP)) { bEnableFTP = TRUE; } } m_edFTPAddr.EnableWindow(bEnableFTP); m_edFTPPort.EnableWindow(bEnableFTP); m_bFTPPassive.EnableWindow(bEnableFTP); m_edOldPkgPos.SetReadOnly(!bEnableFTP); } void CSettingOptionPage::OnDestroy() { SendMessage(WM_COMMAND, MAKEWPARAM(ID_SAVE_SETUP, BN_CLICKED)); CPropertyPage::OnDestroy(); }