///////////////////////////////////////////////////////////////////////////// // FILE : dlgSelectCountry.cpp // // // // DESCRIPTION : The CDlgSelectCountry class implements the // // dialog for selecting Country code from country ID. // // // // AUTHOR : yossg // // // // HISTORY : // // Sep 22 2000 yossg Create // // Oct 17 2000 yossg // // // // Copyright (C) 2000 Microsoft Corporation All Rights Reserved // ///////////////////////////////////////////////////////////////////////////// #include "StdAfx.h" #include "dlgSelectCountry.h" #include "FaxServer.h" #include "FaxServerNode.h" #include "FaxMMCUtils.h" #include "dlgutils.h" #include "Helper.h" ///////////////////////////////////////////////////////////////////////////// // CDlgSelectCountry CDlgSelectCountry::CDlgSelectCountry(CFaxServer * pFaxServer) { m_pCountryList = NULL; m_dwNumOfCountries = 0; m_fAllReadyToApply = FALSE; ATLASSERT(pFaxServer); m_pFaxServer = pFaxServer; } CDlgSelectCountry::~CDlgSelectCountry() { if (NULL != m_pCountryList) FaxFreeBuffer(m_pCountryList); } /* + CDlgSelectCountry::OnInitDialog + * Purpose: * Initiate all dialog controls. * * Arguments: * [in] uMsg : Value identifying the event. * [in] lParam : Message-specific value. * [in] wParam : Message-specific value. * [in] bHandled : bool value. * - Return: - 0 or 1 */ LRESULT CDlgSelectCountry::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { DEBUG_FUNCTION_NAME( _T("CDlgSelectCountry::OnInitDialog")); HRESULT hRc = S_OK; DWORD ec = ERROR_SUCCESS; HINSTANCE hInst; hInst = _Module.GetResourceInstance(); PFAX_TAPI_LINECOUNTRY_ENTRYW pCountryEntries; pCountryEntries = NULL; WCHAR buf[FXS_MAX_COUNTRYNAME_LEN //256 == TAPIUTIL MAX_COUNTRY_NAME +3 // " (" and ")" +FXS_MAX_COUNTRYCODE_LEN // 10 +1]; //NULL // // Attach controls // m_CountryCombo.Attach(GetDlgItem(IDC_COUNTRYRULE_COMBO)); // // Step 1: Init List // // // Init country drop-down box // ATLASSERT(m_pCountryList); pCountryEntries = m_pCountryList->LineCountryEntries; for (int i = 0; (DWORD)i < m_dwNumOfCountries; i++ ) { wsprintf(buf, _T("%s (%d)"), pCountryEntries[i].lpctstrCountryName, pCountryEntries[i].dwCountryCode); hRc = AddComboBoxItem ( m_CountryCombo, buf, //pCountryEntries[i].lpctstrCountryName, pCountryEntries[i].dwCountryCode, hInst); if (FAILED(hRc)) { DebugPrintEx( DEBUG_ERR, _T("Fail to load country list.")); PageError(IDS_FAIL2LOADCOUNTRYLIST, m_hWnd, hInst); ::EnableWindow(GetDlgItem(IDC_COUNTRYRULE_COMBO), FALSE); goto Cleanup; } } Cleanup: EnableOK(FALSE); return 1; // Let the system set the focus } /* + CDlgSelectCountry::OnOK + * Purpose: * Submit data * * Arguments: * - Return: - 0 or 1 */ LRESULT CDlgSelectCountry::OnOK(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled) { DEBUG_FUNCTION_NAME( _T("CDlgSelectCountry::OnOK")); HRESULT hRc = S_OK; DWORD ec = ERROR_SUCCESS; BOOL fSkipMessage = FALSE; int iCurrentSelectedItem = 0; DWORD dwCountryCode = 0; // // Step 0: PreApply Checks // ATLASSERT( TRUE == m_fAllReadyToApply ); if (!AllReadyToApply(/*fSilent =*/ FALSE)) { EnableOK(FALSE); hRc =S_FALSE; goto Exit; } // // Step 1: get selected country // iCurrentSelectedItem = m_CountryCombo.GetCurSel(); ATLASSERT(iCurrentSelectedItem != CB_ERR); // // Step 2: setCountryCode from the ItemData // m_dwCountryCode = (DWORD)m_CountryCombo.GetItemData(iCurrentSelectedItem); // // Step 3: Close the dialog // ATLASSERT(S_OK == hRc && ERROR_SUCCESS == ec); DebugPrintEx( DEBUG_MSG, _T("The rule was added successfully.")); EndDialog(wID); goto Exit; Exit: return FAILED(hRc) ? 0 : 1; } /* - CDlgSelectCountry::OnComboChanged - * Purpose: * Gray/Ungray the submit button. * * Arguments: * * Return: * 1 */ LRESULT CDlgSelectCountry::OnComboChanged(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled) { DEBUG_FUNCTION_NAME( _T("CDlgSelectCountry::OnComboChanged")); if (AllReadyToApply(TRUE)) { m_fAllReadyToApply = TRUE; EnableOK(TRUE); } else { m_fAllReadyToApply = FALSE; EnableOK(FALSE); } return 1; } /* - CDlgSelectCountry::AllReadyToApply - * Purpose: * Enable/Disable the submit button. * * Arguments: * * Return: * TRUE if all ready to apply, else FALSE. */ BOOL CDlgSelectCountry::AllReadyToApply(BOOL fSilent) { DEBUG_FUNCTION_NAME( _T("CDlgSelectCountry::AllReadyToApply")); if ( CB_ERR == m_CountryCombo.GetCurSel()) { if (!fSilent) { DlgMsgBox(this, IDS_PLEASESELECT_COUNTRY); ::SetFocus(GetDlgItem(IDC_COUNTRYRULE_COMBO)); } return FALSE; } return TRUE; } /* - CDlgSelectCountry::EnableOK - * Purpose: * Enable/Disable the submit button. * * Arguments: * [in] fEnable - boolen value tells * to Enable or Disable the OK button. * * Return: * VOID */ VOID CDlgSelectCountry::EnableOK(BOOL fEnable) { HWND hwndOK = GetDlgItem(IDOK); ::EnableWindow(hwndOK, fEnable); } /* - CDlgSelectCountry::OnCancel - * Purpose: * End the dialog. * * Arguments: * * Return: * 0 */ LRESULT CDlgSelectCountry::OnCancel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled) { DEBUG_FUNCTION_NAME( _T("CDlgSelectCountry::OnCancel")); EndDialog(wID); return 0; } /* - CDlgSelectCountry::InitSelectCountryCodeDlg - * Purpose: * Init all the members as country list pointer and * device list pointer * * Arguments: * No. * * Return: * 0 */ HRESULT CDlgSelectCountry::InitSelectCountryCodeDlg() { DEBUG_FUNCTION_NAME( _T("CDlgSelectCountry::InitSelectCountryCodeDlg")); HRESULT hRc = S_OK; DWORD ec = ERROR_SUCCESS; // // Step 1: Init Lists from RPC // // // get Fax Handle // if (!m_pFaxServer->GetFaxServerHandle()) { ec= GetLastError(); DebugPrintEx( DEBUG_ERR, _T("Failed to GetFaxServerHandle. (ec: %ld)"), ec); goto Error; } // // Country (code ,name) // if (!FaxGetCountryList(m_pFaxServer->GetFaxServerHandle(), &m_pCountryList)) { ec = GetLastError(); DebugPrintEx( DEBUG_ERR, _T("Fail to get c TAPI country list. (ec: %ld)"), ec); if (IsNetworkError(ec)) { DebugPrintEx( DEBUG_ERR, _T("Network Error was found. (ec: %ld)"), ec); m_pFaxServer->Disconnect(); } goto Error; } ATLASSERT(m_pCountryList); m_dwNumOfCountries = m_pCountryList->dwNumCountries; ATLASSERT(S_OK == hRc); DebugPrintEx( DEBUG_MSG, _T("Succeed to get all configurations.")); goto Exit; Error: ATLASSERT(ERROR_SUCCESS != ec); hRc = HRESULT_FROM_WIN32(ec); //MsgBox will be done by calling Func. Exit: return hRc; } ////////////////////////////////////////////////////////////////////////////// /*++ CDlgSelectCountry::OnHelpRequest This is called in response to the WM_HELP Notify message and to the WM_CONTEXTMENU Notify message. WM_HELP Notify message. This message is sent when the user presses F1 or -F1 over an item or when the user clicks on the ? icon and then presses the mouse over an item. WM_CONTEXTMENU Notify message. This message is sent when the user right clicks over an item and then clicks "What's this?" --*/ ///////////////////////////////////////////////////////////////////////////// LRESULT CDlgSelectCountry::OnHelpRequest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/) { DEBUG_FUNCTION_NAME(_T("CDlgSelectCountry::OnHelpRequest")); switch (uMsg) { case WM_HELP: WinContextHelp(((LPHELPINFO)lParam)->dwContextId, m_hWnd); break; case WM_CONTEXTMENU: WinContextHelp(::GetWindowContextHelpId((HWND)wParam), m_hWnd); break; } return TRUE; } /////////////////////////////////////////////////////////////////////////////