/****************************************************************************\ * * advdlg.cpp * * Created: William Taylor (wtaylor) 01/22/01 * * MS Ratings Advanced Property Page * \****************************************************************************/ #include "msrating.h" #include "mslubase.h" #include "parselbl.h" #include "picsrule.h" #include "advdlg.h" // CAdvancedDialog // #include "custfile.h" // CCustomFileDialog #include "debug.h" // TraceMsg() #include // Help Context ID's #include // SHWinHelpOnDemandWrap() and MLLoadStringA() // $KLUDGE begins -- These should not be a global set outside the class!! extern PICSRulesRatingSystem * g_pPRRS; extern array g_arrpPRRS; extern array g_arrpPICSRulesPRRSPreApply; extern HANDLE g_HandleGlobalCounter,g_ApprovedSitesHandleGlobalCounter; extern long g_lGlobalCounterValue,g_lApprovedSitesGlobalCounterValue; // $KLUDGE ends -- These should not be a global set outside the class!! DWORD CAdvancedDialog::aIds[] = { IDC_TEXT1, IDH_RATINGS_BUREAU, IDC_TEXT2, IDH_RATINGS_BUREAU, IDC_TEXT3, IDH_RATINGS_BUREAU, IDC_3RD_COMBO, IDH_RATINGS_BUREAU, IDC_STATIC_PICSRULES, IDH_IGNORE, IDC_STATIC_PICSRULES2, IDH_IGNORE, IDC_PICSRULESOPEN, IDH_PICSRULES_OPEN, IDC_PICSRULESEDIT, IDH_PICSRULES_EDIT, IDC_PICSRULES_UP, IDH_ADVANCED_TAB_UP_ARROW_BUTTON, IDC_PICSRULES_DOWN, IDH_ADVANCED_TAB_DOWN_ARROW_BUTTON, IDC_STATIC1, IDH_IGNORE, IDC_PICSRULES_LIST, IDH_PICS_RULES_LIST, 0,0 }; CAdvancedDialog::CAdvancedDialog( PRSD * p_pPRSD ) { ASSERT( p_pPRSD ); m_pPRSD = p_pPRSD; } LRESULT CAdvancedDialog::OnSysColorChange(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { HWND hDlg = m_hWnd; HICON hIcon, hOldIcon; hIcon = (HICON) LoadImage(g_hInstance, MAKEINTRESOURCE(IDI_PICSRULES_UP), IMAGE_ICON, 16, 16, LR_LOADTRANSPARENT|LR_DEFAULTCOLOR|LR_CREATEDIBSECTION); hOldIcon=(HICON) SendDlgItemMessage(IDC_PICSRULES_UP,BM_SETIMAGE,(WPARAM) IMAGE_ICON,(LPARAM) hIcon); if(hOldIcon!=NULL) { DeleteObject(hOldIcon); } hIcon = (HICON) LoadImage(g_hInstance, MAKEINTRESOURCE(IDI_PICSRULES_DOWN), IMAGE_ICON, 16, 16, LR_LOADTRANSPARENT|LR_DEFAULTCOLOR|LR_CREATEDIBSECTION); hOldIcon=(HICON) SendDlgItemMessage(IDC_PICSRULES_DOWN,BM_SETIMAGE,(WPARAM) IMAGE_ICON,(LPARAM) hIcon); if(hOldIcon!=NULL) { DeleteObject(hOldIcon); } return 0L; } LRESULT CAdvancedDialog::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { HICON hIcon; int iCounter; PRSD * pPRSD = m_pPRSD; ASSERT( pPRSD ); if ( ! pPRSD ) { TraceMsg( TF_ERROR, "CAdvancedDialog::OnInitDialog() - pPRSD is NULL!" ); return 0L; } FillBureauList( pPRSD->pPRSI); hIcon = (HICON) LoadImage(g_hInstance, MAKEINTRESOURCE(IDI_PICSRULES_UP), IMAGE_ICON, 16, 16, LR_LOADTRANSPARENT|LR_DEFAULTCOLOR|LR_CREATEDIBSECTION); SendDlgItemMessage(IDC_PICSRULES_UP,BM_SETIMAGE,(WPARAM) IMAGE_ICON,(LPARAM) hIcon); hIcon = (HICON) LoadImage(g_hInstance, MAKEINTRESOURCE(IDI_PICSRULES_DOWN), IMAGE_ICON, 16, 16, LR_LOADTRANSPARENT|LR_DEFAULTCOLOR|LR_CREATEDIBSECTION); SendDlgItemMessage(IDC_PICSRULES_DOWN,BM_SETIMAGE,(WPARAM) IMAGE_ICON,(LPARAM) hIcon); g_arrpPICSRulesPRRSPreApply.DeleteAll(); if(g_lGlobalCounterValue!=SHGlobalCounterGetValue(g_HandleGlobalCounter)) { HRESULT hRes; DWORD dwNumSystems; PICSRulesRatingSystem * pPRRS=NULL; g_arrpPRRS.DeleteAll(); //someone modified our settings, so we'd better reload them. hRes=PICSRulesGetNumSystems(&dwNumSystems); if(SUCCEEDED(hRes)) { DWORD dwCounter; for(dwCounter=PICSRULES_FIRSTSYSTEMINDEX; dwCounter<(dwNumSystems+PICSRULES_FIRSTSYSTEMINDEX); dwCounter++) { hRes=PICSRulesReadFromRegistry(dwCounter,&pPRRS); if(FAILED(hRes)) { //we couldn't read in the systems, so don't inforce PICSRules, //and notify the user g_arrpPRRS.DeleteAll(); MyMessageBox(m_hWnd, IDS_PICSRULES_TAMPEREDREADMSG, IDS_PICSRULES_TAMPEREDREADTITLE, MB_OK|MB_ICONERROR ); break; } else { g_arrpPRRS.Append(pPRRS); pPRRS=NULL; } } } g_lGlobalCounterValue=SHGlobalCounterGetValue(g_HandleGlobalCounter); } CopyArrayPRRSStructures(&g_arrpPICSRulesPRRSPreApply,&g_arrpPRRS); //fill in the listbox with installed PICSRules systems for(iCounter=0;iCounterm_pPRName)!=NULL) { lpszName=pPRRSToList->m_pPRName->m_etstrRuleName.Get(); } if(lpszName==NULL) { lpszName=pPRRSToList->m_etstrFile.Get(); } // We should have a name in lpszName by now, but just in case, check for it. if (lpszName) { SendDlgItemMessage(IDC_PICSRULES_LIST,LB_ADDSTRING,(WPARAM) 0,(LPARAM) lpszName); } } SendDlgItemMessage(IDC_PICSRULES_LIST,LB_SETCURSEL,(WPARAM) -1,(LPARAM) 0); ::EnableWindow(GetDlgItem(IDC_PICSRULESEDIT),FALSE); if(SendDlgItemMessage( IDC_PICSRULES_LIST, LB_GETCOUNT, 0, 0) < 2) { // less than 2 elements in box - disable up and down buttons ::EnableWindow(GetDlgItem( IDC_PICSRULES_UP), FALSE); ::EnableWindow(GetDlgItem( IDC_PICSRULES_DOWN), FALSE); } PostMessage(WM_USER,(WPARAM) 0,(LPARAM) 0); bHandled = FALSE; return 1L; // Let the system set the focus } LRESULT CAdvancedDialog::OnUser(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { if (gPRSI->lpszFileName!=NULL) { ::SetFocus(GetDlgItem(IDC_PICSRULESOPEN)); SendMessage(WM_COMMAND,(WPARAM) IDC_PICSRULESOPEN,(LPARAM) 0); gPRSI->lpszFileName=NULL; } return 0L; } LRESULT CAdvancedDialog::OnMarkChanged(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled) { MarkChanged(); return 1L; } LRESULT CAdvancedDialog::OnSelChange(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled) { ::EnableWindow(GetDlgItem(IDC_PICSRULESEDIT),TRUE); return 1L; } LRESULT CAdvancedDialog::OnPicsRulesUp(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled) { int iSelected; PICSRulesRatingSystem * pPRRSToMove; char * lpszName=NULL; iSelected= (int) SendDlgItemMessage(IDC_PICSRULES_LIST, LB_GETCURSEL, (WPARAM) 0, (LPARAM) 0); if(iSelected==LB_ERR) { return 1L; } if(iSelected==0) { //already at the top return 1L; } pPRRSToMove=g_arrpPICSRulesPRRSPreApply[iSelected]; g_arrpPICSRulesPRRSPreApply[iSelected]= g_arrpPICSRulesPRRSPreApply[iSelected-1]; g_arrpPICSRulesPRRSPreApply[iSelected-1]=pPRRSToMove; //update the listbox SendDlgItemMessage(IDC_PICSRULES_LIST, LB_DELETESTRING, (WPARAM) iSelected, (LPARAM) 0); SendDlgItemMessage(IDC_PICSRULES_LIST, LB_DELETESTRING, (WPARAM) iSelected-1, (LPARAM) 0); pPRRSToMove=g_arrpPICSRulesPRRSPreApply[iSelected-1]; if((pPRRSToMove->m_pPRName)!=NULL) { lpszName=pPRRSToMove->m_pPRName->m_etstrRuleName.Get(); } if(lpszName==NULL) { lpszName=pPRRSToMove->m_etstrFile.Get(); } SendDlgItemMessage(IDC_PICSRULES_LIST, LB_INSERTSTRING, (WPARAM) iSelected-1, (LPARAM) lpszName); pPRRSToMove=g_arrpPICSRulesPRRSPreApply[iSelected]; if((pPRRSToMove->m_pPRName)!=NULL) { lpszName=pPRRSToMove->m_pPRName->m_etstrRuleName.Get(); } if(lpszName==NULL) { lpszName=pPRRSToMove->m_etstrFile.Get(); } SendDlgItemMessage(IDC_PICSRULES_LIST, LB_INSERTSTRING, (WPARAM) iSelected, (LPARAM) lpszName); SendDlgItemMessage(IDC_PICSRULES_LIST, LB_SETCURSEL, (WPARAM) iSelected-1, (LPARAM) 0); MarkChanged(); return 1L; } LRESULT CAdvancedDialog::OnPicsRulesDown(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled) { int iSelected, iNumItems; PICSRulesRatingSystem * pPRRSToMove; char * lpszName=NULL; iSelected= (int) SendDlgItemMessage(IDC_PICSRULES_LIST, LB_GETCURSEL, (WPARAM) 0, (LPARAM) 0); if(iSelected==LB_ERR) { return 1L; } iNumItems= (int) SendDlgItemMessage(IDC_PICSRULES_LIST, LB_GETCOUNT, (WPARAM) 0, (LPARAM) 0); if(iNumItems==LB_ERR) { return 1L; } if(iSelected==(iNumItems-1)) { //already at the bottom return 1L; } pPRRSToMove=g_arrpPICSRulesPRRSPreApply[iSelected]; g_arrpPICSRulesPRRSPreApply[iSelected]= g_arrpPICSRulesPRRSPreApply[iSelected+1]; g_arrpPICSRulesPRRSPreApply[iSelected+1]=pPRRSToMove; //update the listbox SendDlgItemMessage(IDC_PICSRULES_LIST, LB_DELETESTRING, (WPARAM) iSelected+1, (LPARAM) 0); SendDlgItemMessage(IDC_PICSRULES_LIST, LB_DELETESTRING, (WPARAM) iSelected, (LPARAM) 0); pPRRSToMove=g_arrpPICSRulesPRRSPreApply[iSelected]; if((pPRRSToMove->m_pPRName)!=NULL) { lpszName=pPRRSToMove->m_pPRName->m_etstrRuleName.Get(); } if(lpszName==NULL) { lpszName=pPRRSToMove->m_etstrFile.Get(); } SendDlgItemMessage(IDC_PICSRULES_LIST, LB_INSERTSTRING, (WPARAM) iSelected, (LPARAM) lpszName); pPRRSToMove=g_arrpPICSRulesPRRSPreApply[iSelected+1]; if((pPRRSToMove->m_pPRName)!=NULL) { lpszName=pPRRSToMove->m_pPRName->m_etstrRuleName.Get(); } if(lpszName==NULL) { lpszName=pPRRSToMove->m_etstrFile.Get(); } SendDlgItemMessage(IDC_PICSRULES_LIST, LB_INSERTSTRING, (WPARAM) iSelected+1, (LPARAM) lpszName); SendDlgItemMessage(IDC_PICSRULES_LIST, LB_SETCURSEL, (WPARAM) iSelected+1, (LPARAM) 0); MarkChanged(); return 1L; } LRESULT CAdvancedDialog::OnPicsRulesEdit(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled) { int iSelected, iCounter; array g_arrpPICSRulesPRRSNew; iSelected= (int) SendDlgItemMessage(IDC_PICSRULES_LIST, LB_GETCURSEL, (WPARAM) 0, (LPARAM) 0); if(iSelected==LB_ERR) { return 1L; } SendDlgItemMessage(IDC_PICSRULES_LIST, LB_DELETESTRING, (WPARAM) iSelected, (LPARAM) 0); // If there's less than two left, turn off up and down buttons if(SendDlgItemMessage( IDC_PICSRULES_LIST, LB_GETCOUNT, 0, 0) < 2) { ::EnableWindow(GetDlgItem( IDC_PICSRULES_UP), FALSE); ::EnableWindow(GetDlgItem( IDC_PICSRULES_DOWN), FALSE); } delete (g_arrpPICSRulesPRRSPreApply[iSelected]); g_arrpPICSRulesPRRSPreApply[iSelected]=NULL; for(iCounter=0;iCounterlpszFileName) { fHaveFile=TRUE; lstrcpy(szFile,gPRSI->lpszFileName); } else { TCHAR szDlgTitle[MAX_PATH]; TCHAR szDlgFilter[MAX_PATH]; LPTSTR pszDlgFilterPtr; memset( szDlgFilter, 0, sizeof( szDlgFilter ) ); MLLoadString(IDS_OPENDIALOGFILTER,(LPTSTR) szDlgFilter,ARRAYSIZE(szDlgFilter)); MLLoadString(IDS_OPENDIALOGTITLE,(LPTSTR) szDlgTitle,ARRAYSIZE(szDlgTitle)); pszDlgFilterPtr = &szDlgFilter[lstrlen(szDlgFilter)+1]; lstrcpy(pszDlgFilterPtr, TEXT("*.prf")); OPENFILENAME OpenFileName; memset( &OpenFileName, 0, sizeof(OpenFileName) ); OpenFileName.lStructSize =sizeof(OPENFILENAME); OpenFileName.hwndOwner =m_hWnd; OpenFileName.hInstance =NULL; OpenFileName.lpstrFilter =szDlgFilter; OpenFileName.lpstrCustomFilter =(LPTSTR) NULL; OpenFileName.nMaxCustFilter =0L; OpenFileName.nFilterIndex =1L; OpenFileName.lpstrFile =szFile; OpenFileName.nMaxFile =ARRAYSIZE(szFile); OpenFileName.lpstrInitialDir =NULL; OpenFileName.lpstrTitle =szDlgTitle; OpenFileName.nFileOffset =0; OpenFileName.nFileExtension =0; OpenFileName.lpstrDefExt =NULL; OpenFileName.lCustData =0; OpenFileName.Flags =OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY; fHaveFile = ::GetOpenFileName( &OpenFileName ); #ifdef NEVER DWORD dwFlags = OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_NONETWORKBUTTON | OFN_HIDEREADONLY; CCustomFileDialog cfd( TRUE, // Local Files Only TRUE, // Open File NULL, // Default Extension NULL, // Initial Filename dwFlags, // Open File Flags szDlgFilter, // Filter m_hWnd ); // Parent if ( cfd.DoModal( m_hWnd ) ) { fHaveFile = TRUE; lstrcpy( szFile, cfd.m_szFileName ); } #endif } if (fHaveFile) { HRESULT hRes; //create PICSRulesRatingSystem class, and pass to the //import procedure with file name hRes=PICSRulesImport(szFile,&pPRRS); if(SUCCEEDED(hRes)) { LPSTR lpszPICSRulesSystemName = NULL,lpszNewSystemName = NULL; DWORD dwSystemToSave,dwNumSystemsInstalled,dwCounter; BOOL fPromptToOverwrite=FALSE; if((pPRRS->m_pPRName)!=NULL) { lpszNewSystemName=pPRRS->m_pPRName->m_etstrRuleName.Get(); } if(lpszNewSystemName==NULL) { lpszNewSystemName=pPRRS->m_etstrFile.Get(); } dwNumSystemsInstalled=g_arrpPICSRulesPRRSPreApply.Length(); //Systems below PICSRULES_FIRSTSYSTEMINDEX are //reserved for the Approved Sites Rules, and //future expansion. for(dwCounter=0;dwCounterm_pPRName != NULL) { lpszPICSRulesSystemName=(g_arrpPICSRulesPRRSPreApply[dwCounter])->m_pPRName->m_etstrRuleName.Get(); } if (lpszPICSRulesSystemName == NULL) { lpszPICSRulesSystemName=(g_arrpPICSRulesPRRSPreApply[dwCounter])->m_etstrFile.Get(); } if(lstrcmp(lpszPICSRulesSystemName,lpszNewSystemName)==0) { //We've found an identical system, so set dwSystemToSave //to dwCounter and set fPromptToOverwrite to TRUE fPromptToOverwrite=TRUE; return 1L; } } dwSystemToSave=dwCounter+PICSRULES_FIRSTSYSTEMINDEX; if(fPromptToOverwrite) { if (IDNO == MyMessageBox(m_hWnd, IDS_PICSRULES_EXISTSMESSAGE, IDS_PICSRULES_EXISTSTITLE, MB_YESNO|MB_ICONERROR)) { delete pPRRS; pPRRS=NULL; g_pPRRS=NULL; return 1L; } } if((dwSystemToSave-PICSRULES_FIRSTSYSTEMINDEX)<(DWORD) (g_arrpPICSRulesPRRSPreApply.Length())) { char * lpszName=NULL; delete g_arrpPICSRulesPRRSPreApply[dwSystemToSave-PICSRULES_FIRSTSYSTEMINDEX]; g_arrpPICSRulesPRRSPreApply[dwSystemToSave-PICSRULES_FIRSTSYSTEMINDEX]=pPRRS; //update the listbox if((pPRRS->m_pPRName)!=NULL) { lpszName=pPRRS->m_pPRName->m_etstrRuleName.Get(); } if(lpszName==NULL) { lpszName=pPRRS->m_etstrFile.Get(); } SendDlgItemMessage(IDC_PICSRULES_LIST, LB_DELETESTRING, (WPARAM) dwSystemToSave-PICSRULES_FIRSTSYSTEMINDEX, (LPARAM) 0); SendDlgItemMessage(IDC_PICSRULES_LIST, LB_INSERTSTRING, (WPARAM) dwSystemToSave-PICSRULES_FIRSTSYSTEMINDEX, (LPARAM) lpszName); } else { char * lpszName=NULL; g_arrpPICSRulesPRRSPreApply.Append(pPRRS); //update the listbox if((pPRRS->m_pPRName)!=NULL) { lpszName=pPRRS->m_pPRName->m_etstrRuleName.Get(); } if(lpszName==NULL) { lpszName=pPRRS->m_etstrFile.Get(); } SendDlgItemMessage(IDC_PICSRULES_LIST, LB_ADDSTRING, (WPARAM) 0, (LPARAM) lpszName); // if there's now more than one element, // turn on up and down buttons if(SendDlgItemMessage( IDC_PICSRULES_LIST, LB_GETCOUNT, 0, 0) > 1) { ::EnableWindow(GetDlgItem( IDC_PICSRULES_UP), TRUE); ::EnableWindow(GetDlgItem( IDC_PICSRULES_DOWN), TRUE); } } fPICSRulesSaved=TRUE; MarkChanged(); } else { pPRRS->ReportError(hRes); delete pPRRS; pPRRS=NULL; } if (!fPICSRulesSaved) { if (pPRRS) { //we successfully processed the PICSRules, but couldn't //save them MyMessageBox(m_hWnd, IDS_PICSRULES_ERRORSAVINGMSG, IDS_PICSRULES_ERRORSAVINGTITLE, MB_OK|MB_ICONERROR); delete pPRRS; pPRRS=NULL; } } else { //Success! Notify the user. MyMessageBox(m_hWnd, IDS_PICSRULES_SUCCESSMESSAGE, IDS_PICSRULES_SUCCESSTITLE, MB_OK); } } g_pPRRS=NULL; //done processing the current system, so make sure it //doesn't point to anything return 1L; } LRESULT CAdvancedDialog::OnSetActive(int idCtrl, LPNMHDR pnmh, BOOL& bHandled) { PRSD * pPRSD = m_pPRSD; ASSERT( pPRSD ); if ( ! pPRSD ) { TraceMsg( TF_ERROR, "CAdvancedDialog::OnSetActive() - pPRSD is NULL!" ); return 0L; } if(pPRSD->fNewProviders==TRUE) { FillBureauList( pPRSD->pPRSI); } bHandled = FALSE; return 0L; } LRESULT CAdvancedDialog::OnApply(int idCtrl, LPNMHDR pnmh, BOOL& bHandled) { LPPSHNOTIFY lpPSHNotify = (LPPSHNOTIFY) pnmh; /*do apply stuff*/ PRSD * pPRSD = m_pPRSD; DWORD dwNumExistingSystems,dwCounter; /*do apply stuff*/ /* Get the text from the rating bureau combo box. */ /* Default for etstrRatingBureau (the URL) will be this text. */ NLS_STR nlsURL; int i; const char *p; if (nlsURL.realloc( ::GetWindowTextLength(GetDlgItem( IDC_3RD_COMBO)) + 1)) { GetDlgItemText( IDC_3RD_COMBO, nlsURL.Party(), nlsURL.QueryAllocSize()); nlsURL.DonePartying(); p = (char *)nlsURL.QueryPch(); INT_PTR temp = SendDlgItemMessage( IDC_3RD_COMBO, CB_GETCURSEL, 0, 0L); if (temp != CB_ERR) { /* Get the text of the selected item in the list. */ UINT cbName = (UINT)SendDlgItemMessage( IDC_3RD_COMBO, CB_GETLBTEXTLEN, temp, 0); NLS_STR nlsName(cbName+1); if (nlsName.QueryError()) p = NULL; else { /* If the text of the selected item in the list * is what's in the edit field, then the user * has selected one of those rating system names. * The itemdata for the item is the URL. */ SendDlgItemMessage( IDC_3RD_COMBO, CB_GETLBTEXT, temp, (LPARAM)(LPSTR)nlsName.Party()); nlsName.DonePartying(); if (nlsName == nlsURL) p = (char *)SendDlgItemMessage( IDC_3RD_COMBO, CB_GETITEMDATA, temp, 0L); } } } else { p = NULL; } if (pPRSD->pPRSI->etstrRatingBureau.fIsInit() && (!p || strcmpf(pPRSD->pPRSI->etstrRatingBureau.Get(),p))) { // check if old bureau is required for (i = 0; i pPRSI->arrpPRS.Length(); ++i) { if (pPRSD->pPRSI->arrpPRS[i]->etstrRatingBureau.fIsInit() && (!strcmpf(pPRSD->pPRSI->etstrRatingBureau.Get(), pPRSD->pPRSI->arrpPRS[i]->etstrRatingBureau.Get()))) { if (!(pPRSD->pPRSI->arrpPRS[i]->etbBureauRequired.Get())) { break; // Not required. We're done. } //We're removing a bureau that's required. Warn user. char pszBuf[MAXPATHLEN]; char szTemp[MAXPATHLEN]; MLLoadStringA(IDS_NEEDBUREAU, pszBuf, sizeof(pszBuf)); wsprintf(szTemp, pszBuf, pPRSD->pPRSI->arrpPRS[i]->etstrName.Get()); if (MessageBox(szTemp, NULL, MB_YESNO) == IDNO) { return PSNRET_INVALID_NOCHANGEPAGE; } else { break; } } } } if (!p || !*p) { pPRSD->pPRSI->etstrRatingBureau.Set(NULL); DeinstallRatingBureauHelper(); } else { pPRSD->pPRSI->etstrRatingBureau.Set((LPSTR)p); InstallRatingBureauHelper(); } /* Update the rating helper list to include or not include * the rating bureau helper. */ CleanupRatingHelpers(); InitRatingHelpers(); //process PICSRules PICSRulesGetNumSystems(&dwNumExistingSystems); for(dwCounter=0;dwCounterlParam ) { // Apply return PSNRET_NOERROR; } // Return 1L for OK or Cancel return PSNRET_NOERROR; } LRESULT CAdvancedDialog::OnReset(int idCtrl, LPNMHDR pnmh, BOOL& bHandled) { return 0L; } LRESULT CAdvancedDialog::OnHelp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { SHWinHelpOnDemandWrap((HWND)((LPHELPINFO)lParam)->hItemHandle, ::szHelpFile, HELP_WM_HELP, (DWORD_PTR)(LPSTR)aIds); return 0L; } LRESULT CAdvancedDialog::OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { SHWinHelpOnDemandWrap((HWND)wParam, ::szHelpFile, HELP_CONTEXTMENU, (DWORD_PTR)(LPVOID)aIds); return 0L; } void CAdvancedDialog::InstallRatingBureauHelper( void ) { HKEY hkey; hkey = CreateRegKeyNT( ::szRATINGHELPERS ); if ( hkey != NULL ) { CRegKey key; key.Attach( hkey ); key.SetValue( szRORSGUID, szNULL ); } else { TraceMsg( TF_ERROR, "CAdvancedDialog::InstallRatingBureauHelper() - Failed to create key szRATINGHELPERS='%s'!", szRATINGHELPERS ); } } void CAdvancedDialog::DeinstallRatingBureauHelper( void ) { CRegKey key; if ( key.Open( HKEY_LOCAL_MACHINE, szRATINGHELPERS ) == ERROR_SUCCESS ) { key.DeleteValue( szRORSGUID ); } } UINT CAdvancedDialog::FillBureauList( PicsRatingSystemInfo *pPRSI ) { int i; INT_PTR z; BOOL fHaveBureau = pPRSI->etstrRatingBureau.fIsInit(); BOOL fSelectedOne = FALSE; HWND hwndCombo = GetDlgItem( IDC_3RD_COMBO); LPCSTR pszCurrentBureau; BOOL fListBureau = FALSE; NLS_STR nlsURL; /* Save current selection if at all possible. If an item in the listbox * is selected, get its item data, which is the rating bureau string. * * We remember if it was an item from the list that was selected before; * that indicates that the bureau belongs to a rating system, and if we * don't find it in the list after reinitializing, we know that rating * system has been removed and the bureau is probably useless now. */ z = SendMessage(hwndCombo, CB_GETCURSEL, 0, 0); if (z != CB_ERR) { pszCurrentBureau = (LPCSTR)SendMessage(hwndCombo, CB_GETITEMDATA, z, 0); fListBureau = TRUE; } else { /* No item selected. If there is text in the edit control, preserve * it; otherwise, try to select the current rating bureau if any. */ UINT cch = ::GetWindowTextLength(hwndCombo); if (cch > 0 && nlsURL.realloc(cch + 1)) { ::GetWindowText(hwndCombo, nlsURL.Party(), nlsURL.QueryAllocSize()); nlsURL.DonePartying(); pszCurrentBureau = nlsURL.QueryPch(); } else { pszCurrentBureau = fHaveBureau ? pPRSI->etstrRatingBureau.Get() : szNULL; } } SendMessage(hwndCombo, CB_RESETCONTENT, 0, 0); for (i = 0; i < pPRSI->arrpPRS.Length(); ++i) { PicsRatingSystem *prs = pPRSI->arrpPRS[i]; if (prs->etstrRatingBureau.fIsInit()) { z = SendMessage(hwndCombo, CB_ADDSTRING, 0, (LPARAM)prs->etstrName.Get()); SendMessage(hwndCombo, CB_SETITEMDATA, z, (LPARAM)prs->etstrRatingBureau.Get()); if (!fSelectedOne) { if (!strcmpf(pszCurrentBureau, prs->etstrRatingBureau.Get())) { SendMessage(hwndCombo, CB_SETCURSEL, z,0); fSelectedOne = TRUE; } } } } NLS_STR nlsNone(MAX_RES_STR_LEN); if (nlsNone.LoadString(IDS_NO_BUREAU) != ERROR_SUCCESS) nlsNone = NULL; z = SendMessage(hwndCombo, CB_ADDSTRING, 0, (LPARAM)nlsNone.QueryPch()); SendMessage(hwndCombo, CB_SETITEMDATA, z, 0L); if (!fSelectedOne) { if (!fListBureau && *pszCurrentBureau != '\0') ::SetWindowText(hwndCombo, pszCurrentBureau); else SendMessage(hwndCombo, CB_SETCURSEL, z, 0L); } return 0; } HRESULT CAdvancedDialog::CopySubPolicyExpression(PICSRulesPolicyExpression * pPRSubPolicyExpression, PICSRulesPolicyExpression * pPRSubPolicyExpressionToCopy, PICSRulesRatingSystem * pPRRSLocal, PICSRulesPolicy * pPRPolicy) { BOOL fFlag; fFlag=pPRSubPolicyExpressionToCopy->m_prYesNoUseEmbedded.GetYesNo(); pPRSubPolicyExpression->m_prYesNoUseEmbedded.Set(&fFlag); pPRSubPolicyExpression->m_etstrServiceName.Set(pPRSubPolicyExpressionToCopy->m_etstrServiceName.Get()); pPRSubPolicyExpression->m_etstrCategoryName.Set(pPRSubPolicyExpressionToCopy->m_etstrCategoryName.Get()); pPRSubPolicyExpression->m_etstrFullServiceName.Set(pPRSubPolicyExpressionToCopy->m_etstrFullServiceName.Get()); pPRSubPolicyExpression->m_etnValue.Set(pPRSubPolicyExpressionToCopy->m_etnValue.Get()); pPRSubPolicyExpression->m_PROPolicyOperator=pPRSubPolicyExpressionToCopy->m_PROPolicyOperator; pPRSubPolicyExpression->m_PRPEPolicyEmbedded=pPRSubPolicyExpressionToCopy->m_PRPEPolicyEmbedded; if(pPRSubPolicyExpressionToCopy->m_pPRPolicyExpressionLeft!=NULL) { PICSRulesPolicyExpression * pPRSubPolicyExpression2,* pPRSubPolicyExpressionToCopy2; pPRSubPolicyExpression2=new PICSRulesPolicyExpression; if(pPRSubPolicyExpression2==NULL) { PICSRulesOutOfMemory(); delete pPRRSLocal; pPRRSLocal = NULL; delete pPRPolicy; pPRPolicy = NULL; return(E_OUTOFMEMORY); } pPRSubPolicyExpressionToCopy2=pPRSubPolicyExpressionToCopy->m_pPRPolicyExpressionLeft; if(FAILED(CopySubPolicyExpression(pPRSubPolicyExpression2,pPRSubPolicyExpressionToCopy2,pPRRSLocal,pPRPolicy))) { return(E_OUTOFMEMORY); } pPRSubPolicyExpression->m_pPRPolicyExpressionLeft=pPRSubPolicyExpression2; } if(pPRSubPolicyExpressionToCopy->m_pPRPolicyExpressionRight!=NULL) { PICSRulesPolicyExpression * pPRSubPolicyExpression2,* pPRSubPolicyExpressionToCopy2; pPRSubPolicyExpression2=new PICSRulesPolicyExpression; if(pPRSubPolicyExpression2==NULL) { PICSRulesOutOfMemory(); delete pPRRSLocal; pPRRSLocal = NULL; delete pPRPolicy; pPRPolicy = NULL; return(E_OUTOFMEMORY); } pPRSubPolicyExpressionToCopy2=pPRSubPolicyExpressionToCopy->m_pPRPolicyExpressionRight; if(FAILED(CopySubPolicyExpression(pPRSubPolicyExpression2,pPRSubPolicyExpressionToCopy2,pPRRSLocal,pPRPolicy))) { return(E_OUTOFMEMORY); } pPRSubPolicyExpression->m_pPRPolicyExpressionRight=pPRSubPolicyExpression2; } return(NOERROR); } HRESULT CAdvancedDialog::CopyArrayPRRSStructures(array * parrpPRRSDest,array * parrpPRRSSource) { DWORD dwCounter; PICSRulesRatingSystem * pPRRSLocal,* pPRRSBeingCopied; PICSRulesPolicy * pPRPolicy,* pPRPolicyBeingCopied; PICSRulesPolicyExpression * pPRPolicyExpression,* pPRPolicyExpressionBeingCopied; PICSRulesServiceInfo * pPRServiceInfo,* pPRServiceInfoBeingCopied; PICSRulesOptExtension * pPROptExtension,* pPROptExtensionBeingCopied; PICSRulesReqExtension * pPRReqExtension,* pPRReqExtensionBeingCopied; PICSRulesName * pPRName,* pPRNameBeingCopied; PICSRulesSource * pPRSource,* pPRSourceBeingCopied; PICSRulesByURL * pPRByURL,* pPRByURLToCopy; PICSRulesByURLExpression * pPRByURLExpression,* pPRByURLExpressionToCopy; if(parrpPRRSDest->Length()>0) { parrpPRRSDest->DeleteAll(); } for(dwCounter=0;dwCounter<(DWORD) (parrpPRRSSource->Length());dwCounter++) { pPRRSLocal=new PICSRulesRatingSystem; if(pPRRSLocal==NULL) { PICSRulesOutOfMemory(); return(E_OUTOFMEMORY); } pPRRSBeingCopied=(*parrpPRRSSource)[dwCounter]; pPRRSLocal->m_etstrFile.Set(pPRRSBeingCopied->m_etstrFile.Get()); pPRRSLocal->m_etnPRVerMajor.Set(pPRRSBeingCopied->m_etnPRVerMajor.Get()); pPRRSLocal->m_etnPRVerMinor.Set(pPRRSBeingCopied->m_etnPRVerMinor.Get()); pPRRSLocal->m_dwFlags=pPRRSBeingCopied->m_dwFlags; pPRRSLocal->m_nErrLine=pPRRSBeingCopied->m_nErrLine; if((pPRRSBeingCopied->m_pPRName)!=NULL) { pPRName=new PICSRulesName; if(pPRName==NULL) { PICSRulesOutOfMemory(); delete pPRRSLocal; pPRRSLocal = NULL; return(E_OUTOFMEMORY); } pPRNameBeingCopied=pPRRSBeingCopied->m_pPRName; pPRName->m_etstrRuleName.Set(pPRNameBeingCopied->m_etstrRuleName.Get()); pPRName->m_etstrDescription.Set(pPRNameBeingCopied->m_etstrDescription.Get()); pPRRSLocal->m_pPRName=pPRName; } else { pPRRSLocal->m_pPRName=NULL; } if((pPRRSBeingCopied->m_pPRSource)!=NULL) { pPRSource=new PICSRulesSource; if(pPRSource==NULL) { PICSRulesOutOfMemory(); delete pPRRSLocal; pPRRSLocal = NULL; return(E_OUTOFMEMORY); } pPRSourceBeingCopied=pPRRSBeingCopied->m_pPRSource; pPRSource->m_prURLSourceURL.Set(pPRSourceBeingCopied->m_prURLSourceURL.Get()); pPRSource->m_etstrCreationTool.Set(pPRSourceBeingCopied->m_etstrCreationTool.Get()); pPRSource->m_prEmailAuthor.Set(pPRSourceBeingCopied->m_prEmailAuthor.Get()); pPRSource->m_prDateLastModified.Set(pPRSourceBeingCopied->m_prDateLastModified.Get()); pPRRSLocal->m_pPRSource=pPRSource; } else { pPRRSLocal->m_pPRSource=NULL; } if(pPRRSBeingCopied->m_arrpPRPolicy.Length()>0) { DWORD dwSubCounter; for(dwSubCounter=0;dwSubCounter<(DWORD) (pPRRSBeingCopied->m_arrpPRPolicy.Length());dwSubCounter++) { DWORD dwPolicyExpressionSubCounter; pPRPolicy=new PICSRulesPolicy; pPRPolicyBeingCopied=pPRRSBeingCopied->m_arrpPRPolicy[dwSubCounter]; if(pPRPolicy==NULL) { PICSRulesOutOfMemory(); delete pPRRSLocal; pPRRSLocal = NULL; return(E_OUTOFMEMORY); } pPRPolicy->m_etstrExplanation.Set(pPRPolicyBeingCopied->m_etstrExplanation.Get()); pPRPolicy->m_PRPolicyAttribute=pPRPolicyBeingCopied->m_PRPolicyAttribute; pPRByURLToCopy=NULL; pPRPolicyExpressionBeingCopied=NULL; switch(pPRPolicy->m_PRPolicyAttribute) { case PR_POLICY_ACCEPTBYURL: { pPRByURLToCopy=pPRPolicyBeingCopied->m_pPRAcceptByURL; pPRByURL=new PICSRulesByURL; if(pPRByURL==NULL) { PICSRulesOutOfMemory(); delete pPRRSLocal; pPRRSLocal = NULL; delete pPRPolicy; pPRPolicy = NULL; return(E_OUTOFMEMORY); } pPRPolicy->m_pPRAcceptByURL=pPRByURL; break; } case PR_POLICY_REJECTBYURL: { pPRByURLToCopy=pPRPolicyBeingCopied->m_pPRRejectByURL; pPRByURL=new PICSRulesByURL; if(pPRByURL==NULL) { PICSRulesOutOfMemory(); delete pPRRSLocal; pPRRSLocal = NULL; delete pPRPolicy; pPRPolicy = NULL; return(E_OUTOFMEMORY); } pPRPolicy->m_pPRRejectByURL=pPRByURL; break; } case PR_POLICY_REJECTIF: { pPRPolicyExpressionBeingCopied=pPRPolicyBeingCopied->m_pPRRejectIf; pPRPolicyExpression=new PICSRulesPolicyExpression; if(pPRPolicyExpression==NULL) { PICSRulesOutOfMemory(); delete pPRRSLocal; pPRRSLocal = NULL; delete pPRPolicy; pPRPolicy = NULL; return(E_OUTOFMEMORY); } pPRPolicy->m_pPRRejectIf=pPRPolicyExpression; break; } case PR_POLICY_ACCEPTIF: { pPRPolicyExpressionBeingCopied=pPRPolicyBeingCopied->m_pPRAcceptIf; pPRPolicyExpression=new PICSRulesPolicyExpression; if(pPRPolicyExpression==NULL) { PICSRulesOutOfMemory(); delete pPRRSLocal; pPRRSLocal = NULL; delete pPRPolicy; pPRPolicy = NULL; return(E_OUTOFMEMORY); } pPRPolicy->m_pPRAcceptIf=pPRPolicyExpression; break; } case PR_POLICY_REJECTUNLESS: { pPRPolicyExpressionBeingCopied=pPRPolicyBeingCopied->m_pPRRejectUnless; pPRPolicyExpression=new PICSRulesPolicyExpression; if(pPRPolicyExpression==NULL) { PICSRulesOutOfMemory(); delete pPRRSLocal; pPRRSLocal = NULL; delete pPRPolicy; pPRPolicy = NULL; return(E_OUTOFMEMORY); } pPRPolicy->m_pPRRejectUnless=pPRPolicyExpression; break; } case PR_POLICY_ACCEPTUNLESS: { pPRPolicyExpressionBeingCopied=pPRPolicyBeingCopied->m_pPRAcceptUnless; pPRPolicyExpression=new PICSRulesPolicyExpression; if(pPRPolicyExpression==NULL) { PICSRulesOutOfMemory(); delete pPRRSLocal; pPRRSLocal = NULL; delete pPRPolicy; pPRPolicy = NULL; return(E_OUTOFMEMORY); } pPRPolicy->m_pPRAcceptUnless=pPRPolicyExpression; break; } } if(pPRByURLToCopy!=NULL) { for(dwPolicyExpressionSubCounter=0; dwPolicyExpressionSubCounter<(DWORD) (pPRByURLToCopy->m_arrpPRByURL.Length()); dwPolicyExpressionSubCounter++) { pPRByURLExpression=new PICSRulesByURLExpression; if(pPRByURLExpression==NULL) { PICSRulesOutOfMemory(); delete pPRRSLocal; pPRRSLocal = NULL; delete pPRPolicy; pPRPolicy = NULL; return(E_OUTOFMEMORY); } pPRByURLExpressionToCopy=pPRByURLToCopy->m_arrpPRByURL[dwPolicyExpressionSubCounter]; pPRByURLExpression->m_fInternetPattern=pPRByURLExpressionToCopy->m_fInternetPattern; pPRByURLExpression->m_bNonWild=pPRByURLExpressionToCopy->m_bNonWild; pPRByURLExpression->m_bSpecified=pPRByURLExpressionToCopy->m_bSpecified; pPRByURLExpression->m_etstrScheme.Set(pPRByURLExpressionToCopy->m_etstrScheme.Get()); pPRByURLExpression->m_etstrUser.Set(pPRByURLExpressionToCopy->m_etstrUser.Get()); pPRByURLExpression->m_etstrHost.Set(pPRByURLExpressionToCopy->m_etstrHost.Get()); pPRByURLExpression->m_etstrPort.Set(pPRByURLExpressionToCopy->m_etstrPort.Get()); pPRByURLExpression->m_etstrPath.Set(pPRByURLExpressionToCopy->m_etstrPath.Get()); pPRByURLExpression->m_etstrURL.Set(pPRByURLExpressionToCopy->m_etstrURL.Get()); pPRByURL->m_arrpPRByURL.Append(pPRByURLExpression); } pPRRSLocal->m_arrpPRPolicy.Append(pPRPolicy); } if(pPRPolicyExpressionBeingCopied!=NULL) { BOOL fFlag; fFlag=pPRPolicyExpressionBeingCopied->m_prYesNoUseEmbedded.GetYesNo(); pPRPolicyExpression->m_prYesNoUseEmbedded.Set(&fFlag); pPRPolicyExpression->m_etstrServiceName.Set(pPRPolicyExpressionBeingCopied->m_etstrServiceName.Get()); pPRPolicyExpression->m_etstrCategoryName.Set(pPRPolicyExpressionBeingCopied->m_etstrCategoryName.Get()); pPRPolicyExpression->m_etstrFullServiceName.Set(pPRPolicyExpressionBeingCopied->m_etstrFullServiceName.Get()); pPRPolicyExpression->m_etnValue.Set(pPRPolicyExpressionBeingCopied->m_etnValue.Get()); pPRPolicyExpression->m_PROPolicyOperator=pPRPolicyExpressionBeingCopied->m_PROPolicyOperator; pPRPolicyExpression->m_PRPEPolicyEmbedded=pPRPolicyExpressionBeingCopied->m_PRPEPolicyEmbedded; if(pPRPolicyExpressionBeingCopied->m_pPRPolicyExpressionLeft!=NULL) { PICSRulesPolicyExpression * pPRSubPolicyExpression,* pPRSubPolicyExpressionToCopy; pPRSubPolicyExpression=new PICSRulesPolicyExpression; if(pPRSubPolicyExpression==NULL) { PICSRulesOutOfMemory(); delete pPRRSLocal; pPRRSLocal = NULL; delete pPRPolicy; pPRPolicy = NULL; return(E_OUTOFMEMORY); } pPRSubPolicyExpressionToCopy=pPRPolicyExpressionBeingCopied->m_pPRPolicyExpressionLeft; if(FAILED(CopySubPolicyExpression(pPRSubPolicyExpression,pPRSubPolicyExpressionToCopy,pPRRSLocal,pPRPolicy))) { return(E_OUTOFMEMORY); } pPRPolicyExpression->m_pPRPolicyExpressionLeft=pPRSubPolicyExpression; } if(pPRPolicyExpressionBeingCopied->m_pPRPolicyExpressionRight!=NULL) { PICSRulesPolicyExpression * pPRSubPolicyExpression,* pPRSubPolicyExpressionToCopy; pPRSubPolicyExpression=new PICSRulesPolicyExpression; if(pPRSubPolicyExpression==NULL) { PICSRulesOutOfMemory(); delete pPRRSLocal; pPRRSLocal = NULL; delete pPRPolicy; pPRPolicy = NULL; return(E_OUTOFMEMORY); } pPRSubPolicyExpressionToCopy=pPRPolicyExpressionBeingCopied->m_pPRPolicyExpressionRight; if(FAILED(CopySubPolicyExpression(pPRSubPolicyExpression,pPRSubPolicyExpressionToCopy,pPRRSLocal,pPRPolicy))) { return(E_OUTOFMEMORY); } pPRPolicyExpression->m_pPRPolicyExpressionRight=pPRSubPolicyExpression; } pPRRSLocal->m_arrpPRPolicy.Append(pPRPolicy); } } } if(pPRRSBeingCopied->m_arrpPRServiceInfo.Length()>0) { DWORD dwSubCounter; for(dwSubCounter=0;dwSubCounter<(DWORD) (pPRRSBeingCopied->m_arrpPRServiceInfo.Length());dwSubCounter++) { BOOL fFlag; pPRServiceInfo=new PICSRulesServiceInfo; if(pPRServiceInfo==NULL) { PICSRulesOutOfMemory(); delete pPRRSLocal; pPRRSLocal = NULL; return(E_OUTOFMEMORY); } pPRServiceInfoBeingCopied=pPRRSBeingCopied->m_arrpPRServiceInfo[dwSubCounter]; pPRServiceInfo->m_prURLName.Set(pPRServiceInfoBeingCopied->m_prURLName.Get()); pPRServiceInfo->m_prURLBureauURL.Set(pPRServiceInfoBeingCopied->m_prURLBureauURL.Get()); pPRServiceInfo->m_etstrShortName.Set(pPRServiceInfoBeingCopied->m_etstrShortName.Get()); pPRServiceInfo->m_etstrRatfile.Set(pPRServiceInfoBeingCopied->m_etstrRatfile.Get()); fFlag=pPRServiceInfoBeingCopied->m_prYesNoUseEmbedded.GetYesNo(); pPRServiceInfo->m_prYesNoUseEmbedded.Set(&fFlag); fFlag=pPRServiceInfoBeingCopied->m_prPassFailBureauUnavailable.GetPassFail(); pPRServiceInfo->m_prPassFailBureauUnavailable.Set(&fFlag); pPRRSLocal->m_arrpPRServiceInfo.Append(pPRServiceInfo); } } if(pPRRSBeingCopied->m_arrpPROptExtension.Length()>0) { DWORD dwSubCounter; for(dwSubCounter=0;dwSubCounter<(DWORD) (pPRRSBeingCopied->m_arrpPROptExtension.Length());dwSubCounter++) { pPROptExtension=new PICSRulesOptExtension; if(pPROptExtension==NULL) { PICSRulesOutOfMemory(); delete pPRRSLocal; pPRRSLocal = NULL; return(E_OUTOFMEMORY); } pPROptExtensionBeingCopied=pPRRSBeingCopied->m_arrpPROptExtension[dwSubCounter]; pPROptExtension->m_prURLExtensionName.Set(pPROptExtensionBeingCopied->m_prURLExtensionName.Get()); pPROptExtension->m_etstrShortName.Set(pPROptExtensionBeingCopied->m_etstrShortName.Get()); pPRRSLocal->m_arrpPROptExtension.Append(pPROptExtension); } } if(pPRRSBeingCopied->m_arrpPRReqExtension.Length()>0) { DWORD dwSubCounter; for(dwSubCounter=0;dwSubCounter<(DWORD) (pPRRSBeingCopied->m_arrpPRReqExtension.Length());dwSubCounter++) { pPRReqExtension=new PICSRulesReqExtension; if(pPRReqExtension==NULL) { PICSRulesOutOfMemory(); delete pPRRSLocal; pPRRSLocal = NULL; return(E_OUTOFMEMORY); } pPRReqExtensionBeingCopied=pPRRSBeingCopied->m_arrpPRReqExtension[dwSubCounter]; pPRReqExtension->m_prURLExtensionName.Set(pPRReqExtensionBeingCopied->m_prURLExtensionName.Get()); pPRReqExtension->m_etstrShortName.Set(pPRReqExtensionBeingCopied->m_etstrShortName.Get()); pPRRSLocal->m_arrpPRReqExtension.Append(pPRReqExtension); } } parrpPRRSDest->Append(pPRRSLocal); } return(NOERROR); }