//********************************************************************* //* Microsoft Windows ** //* Copyright(c) Microsoft Corp., 1994 ** //********************************************************************* // // AREACODE.CPP - Functions for // // HISTORY: // // 05/13/98 donaldm Created. // //********************************************************************* #include "pre.h" #include "icwextsn.h" long lLastLocationID = -1; void CleanupCombo(HWND hDlg) { HWND hCombo = GetDlgItem(hDlg, IDC_DIAL_FROM); for (int i=0; i < ComboBox_GetCount(hCombo); i++) { DWORD *pdwTemp = (DWORD*)ComboBox_GetItemData(hCombo, i); if (pdwTemp) delete pdwTemp; } ComboBox_ResetContent(GetDlgItem(hDlg, IDC_DIAL_FROM)); } /******************************************************************* NAME: AreaCodeInitProc SYNOPSIS: Called when page is displayed ENTRY: hDlg - dialog window fFirstInit - TRUE if this is the first time the dialog is initialized, FALSE if this InitProc has been called before (e.g. went past this page and backed up) ********************************************************************/ BOOL CALLBACK AreaCodeInitProc ( HWND hDlg, BOOL fFirstInit, UINT *puNextPage ) { if (!fFirstInit) { short wNumLocations; long lCurrLocIndex; DWORD dwCountryCode; TCHAR szTemp[MAX_MESSAGE_LEN]; BOOL bRetVal; if (gpWizardState->cmnStateData.dwFlags & ICW_CFGFLAG_AUTOCONFIG) LoadString(g_hInstance, IDS_MANUALOPTS_TITLE, szTemp, MAX_MESSAGE_LEN); else LoadString(g_hInstance, IDS_STEP1_TITLE, szTemp, MAX_MESSAGE_LEN); PropSheet_SetHeaderTitle(GetParent(hDlg), ORD_PAGE_AREACODE, (LPCSTR)szTemp); // We can skip the page if we have already downloaded gpWizardState->pTapiLocationInfo->GetTapiLocationInfo(&bRetVal); gpWizardState->pTapiLocationInfo->get_wNumberOfLocations(&wNumLocations, &lCurrLocIndex); // Ensure that we only have only 1 location and we never shwon the areacode page // Second part of this check is for case where user had more than 1 location and deleted // down to one location. That case, our history told us to come to areacode page but // since wNumLocations == 1, we would go back to refdial page. if ((1 == wNumLocations) && (-1 == lLastLocationID)) { // We are happy, so advance to the next page BSTR bstrAreaCode = NULL; *puNextPage = ORD_PAGE_REFSERVDIAL; gpWizardState->pTapiLocationInfo->get_lCountryCode((long *)&dwCountryCode); gpWizardState->pTapiLocationInfo->get_bstrAreaCode(&bstrAreaCode); gpWizardState->cmnStateData.dwCountryCode = dwCountryCode; lstrcpy(gpWizardState->cmnStateData.szAreaCode, W2A(bstrAreaCode)); SysFreeString(bstrAreaCode); } else { // We need to have the user enter the area code if (wNumLocations) { int iIndex = 0; CleanupCombo(hDlg); for (long lIndex=0; lIndex < (long)wNumLocations; lIndex++) { BSTR bstr = NULL; if (S_OK == gpWizardState->pTapiLocationInfo->get_LocationName(lIndex, &bstr)) { iIndex = ComboBox_InsertString(GetDlgItem(hDlg, IDC_DIAL_FROM), lIndex, W2A(bstr)); } SysFreeString(bstr); } BSTR bstrCountry = NULL; BSTR bstrAreaCode = NULL; long lCountryCode = 0; ComboBox_SetCurSel( GetDlgItem(hDlg, IDC_DIAL_FROM), lCurrLocIndex ); if (S_OK == gpWizardState->pTapiLocationInfo->get_LocationInfo(lCurrLocIndex, &gpWizardState->lLocationID, &bstrCountry, &lCountryCode, &bstrAreaCode)) { if (gpWizardState->lLocationID != lLastLocationID) { gpWizardState->bDoneRefServDownload = FALSE; } if (-1 == gpWizardState->lDefaultLocationID) { gpWizardState->lDefaultLocationID = gpWizardState->lLocationID; } lLastLocationID = gpWizardState->lLocationID; gpWizardState->cmnStateData.dwCountryCode = (DWORD) lCountryCode; SetWindowText(GetDlgItem(hDlg, IDC_AREACODE), W2A(bstrAreaCode)); SetWindowText(GetDlgItem(hDlg, IDC_COUNTRY), W2A(bstrCountry)); } SysFreeString(bstrCountry); SysFreeString(bstrAreaCode); } } } // if we've travelled through external apprentice pages, // it's easy for our current page pointer to get munged, // so reset it here for sanity's sake. gpWizardState->uCurrentPage = ORD_PAGE_AREACODE; return TRUE; } /******************************************************************* NAME: AreaCodeOKProc SYNOPSIS: Called when Next or Back btns pressed from page ENTRY: hDlg - dialog window fForward - TRUE if 'Next' was pressed, FALSE if 'Back' puNextPage - if 'Next' was pressed, proc can fill this in with next page to go to. This parameter is ingored if 'Back' was pressed. pfKeepHistory - page will not be kept in history if proc fills this in with FALSE. EXIT: returns TRUE to allow page to be turned, FALSE to keep the same page. ********************************************************************/ BOOL CALLBACK AreaCodeOKProc ( HWND hDlg, BOOL fForward, UINT *puNextPage, BOOL *pfKeepHistory ) { ASSERT(puNextPage); // Extract the data entered by the user and save it. if (fForward) { //BUGBUG - if we are in auto config, we need to change the title of the next page GetWindowText(GetDlgItem(hDlg, IDC_AREACODE), gpWizardState->cmnStateData.szAreaCode, MAX_AREA_CODE); gpWizardState->pTapiLocationInfo->put_LocationId(gpWizardState->lLocationID); if (gpWizardState->lLocationID != lLastLocationID) { lLastLocationID = gpWizardState->lLocationID; gpWizardState->bDoneRefServDownload = FALSE; } } return TRUE; } /******************************************************************* NAME: AreaCodeCmdProc ********************************************************************/ BOOL CALLBACK AreaCodeCmdProc ( HWND hDlg, WPARAM wParam, LPARAM lParam ) { switch(GET_WM_COMMAND_ID(wParam, lParam)) { case IDC_DIAL_FROM: { if (GET_WM_COMMAND_CMD(wParam, lParam) == CBN_SELCHANGE) { // Get the currently selected item HWND hWndDialFrom = GetDlgItem(hDlg, IDC_DIAL_FROM); int iIndex = ComboBox_GetCurSel( hWndDialFrom ); BSTR bstrCountry = NULL; BSTR bstrAreaCode = NULL; long lCountryCode = 0; if (S_OK == gpWizardState->pTapiLocationInfo->get_LocationInfo( iIndex, &gpWizardState->lLocationID, &bstrCountry, &lCountryCode, &bstrAreaCode)) { gpWizardState->cmnStateData.dwCountryCode = lCountryCode; if (bstrAreaCode) { SetWindowText(GetDlgItem(hDlg, IDC_AREACODE), W2A(bstrAreaCode)); } else { SetWindowText(GetDlgItem(hDlg, IDC_AREACODE), NULL); } if (bstrCountry) { SetWindowText(GetDlgItem(hDlg, IDC_COUNTRY), W2A(bstrCountry)); } else { SetWindowText(GetDlgItem(hDlg, IDC_COUNTRY), NULL); } } } break; } default: break; } return 1; }