#include "pch.h" INT_PTR CALLBACK FavsProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) { TCHAR szValue[16]; TCHAR szUrl[INTERNET_MAX_URL_LENGTH]; LPCTSTR pszValue; HWND hTv = GetDlgItem(hDlg, IDC_TREE1); BOOL fQL, fFavoritesOnTop, fFavoritesDelete, fIEAKFavoritesDelete, fCheckDirtyOnly; DWORD dwFavoritesDeleteFlags; switch (msg) { case WM_INITDIALOG: EnableDBCSChars(hDlg, IDC_TREE1); MigrateFavorites(g_szInsFile); ASSERT(GetFavoritesNumber(hTv, FALSE) == 0 && GetFavoritesNumber(hTv, TRUE) == 0); ImportFavorites (hTv, g_szDefInf, g_szInsFile, NULL, g_szWorkDir, FALSE); ImportQuickLinks(hTv, g_szDefInf, g_szInsFile, NULL, g_szWorkDir, FALSE); TreeView_SelectItem(hTv, TreeView_GetRoot(hTv)); fFavoritesOnTop = GetPrivateProfileInt(IS_BRANDING, IK_FAVORITES_ONTOP, (int)FALSE, g_szInsFile); CheckDlgButton(hDlg, IDC_FAVONTOP, fFavoritesOnTop ? BST_CHECKED : BST_UNCHECKED); if (!fFavoritesOnTop) { DisableDlgItem(hDlg, IDC_FAVUP); DisableDlgItem(hDlg, IDC_FAVDOWN); } dwFavoritesDeleteFlags = (DWORD) GetPrivateProfileInt(IS_BRANDING, IK_FAVORITES_DELETE, (int)FD_DEFAULT, g_szInsFile); fFavoritesDelete = HasFlag(dwFavoritesDeleteFlags, ~FD_REMOVE_IEAK_CREATED); CheckDlgButton(hDlg, IDC_DELFAVORITES, fFavoritesDelete ? BST_CHECKED : BST_UNCHECKED); fIEAKFavoritesDelete = HasFlag(dwFavoritesDeleteFlags, FD_REMOVE_IEAK_CREATED); CheckDlgButton(hDlg, IDC_DELIEAKFAVORITES, fIEAKFavoritesDelete ? BST_CHECKED : BST_UNCHECKED); // only if delete Favorites is TRUE should the delete IEAK Favorites checkbox be enabled EnableWindow(GetDlgItem(hDlg, IDC_DELIEAKFAVORITES), fFavoritesDelete); break; case WM_COMMAND: switch (HIWORD(wParam)) { case BN_CLICKED: switch (LOWORD(wParam)) { case IDC_FAVONTOP: if (BST_CHECKED == IsDlgButtonChecked(hDlg, IDC_FAVONTOP)) { HTREEITEM hti; TV_ITEM tvi; EnableDlgItem(hDlg, IDC_FAVONTOP); hti = TreeView_GetSelection(hTv); if (hti != NULL) { ZeroMemory(&tvi, sizeof(tvi)); tvi.mask = TVIF_STATE; tvi.hItem = hti; TreeView_GetItem(hTv, &tvi); if (!HasFlag(tvi.state, TVIS_BOLD)) { EnableDlgItem2(hDlg, IDC_FAVUP, (NULL != TreeView_GetPrevSibling(hTv, hti))); EnableDlgItem2(hDlg, IDC_FAVDOWN, (NULL != TreeView_GetNextSibling(hTv, hti))); } } } else { DisableDlgItem(hDlg, IDC_FAVUP); DisableDlgItem(hDlg, IDC_FAVDOWN); } break; case IDC_DELFAVORITES: fFavoritesDelete = (IsDlgButtonChecked(hDlg, IDC_DELFAVORITES) == BST_CHECKED); EnableWindow(GetDlgItem(hDlg, IDC_DELIEAKFAVORITES), fFavoritesDelete); break; case IDC_FAVUP: if (MoveUpFavorite(hTv, TreeView_GetSelection(hTv))) g_fInsDirty = TRUE; SetFocus(GetDlgItem(hDlg, IDC_TREE1)); break; case IDC_FAVDOWN: if (MoveDownFavorite(hTv, TreeView_GetSelection(hTv))) g_fInsDirty = TRUE; SetFocus(GetDlgItem(hDlg, IDC_TREE1)); break; case IDC_ADDURL: fQL = !IsFavoriteItem(hTv, TreeView_GetSelection(hTv)); if (GetFavoritesNumber(hTv, fQL) >= GetFavoritesMaxNumber(fQL)) { UINT nID; nID = (!fQL ? IDS_ERROR_MAXFAVS : IDS_ERROR_MAXQLS); ErrorMessageBox(hDlg, nID); break; } if (NewUrl(hTv, g_szWorkDir, g_dwPlatformId, IEM_PROFMGR)) g_fInsDirty = TRUE; RedrawWindow(hTv, NULL, NULL, RDW_ERASE | RDW_FRAME | RDW_INVALIDATE); SetFocus(GetDlgItem(hDlg, IDC_ADDURL)); break; case IDC_ADDFOLDER: ASSERT(IsFavoriteItem(hTv, TreeView_GetSelection(hTv))); if (GetFavoritesNumber(hTv) >= GetFavoritesMaxNumber()) { ErrorMessageBox(hDlg, IDS_ERROR_MAXFAVS); break; } if (NewFolder(hTv)) g_fInsDirty = TRUE; RedrawWindow(hTv, NULL, NULL, RDW_ERASE | RDW_FRAME | RDW_INVALIDATE); SetFocus(GetDlgItem(hDlg, IDC_ADDFOLDER)); break; case IDC_MODIFY: if (ModifyFavorite(hTv, TreeView_GetSelection(hTv), g_szWorkDir, g_szWorkDir, g_dwPlatformId, IEM_PROFMGR)) g_fInsDirty = TRUE; RedrawWindow(hTv, NULL, NULL, RDW_ERASE | RDW_FRAME | RDW_INVALIDATE); SetFocus(GetDlgItem(hDlg, IDC_MODIFY)); break; case IDC_REMOVE: if (DeleteFavorite(hTv, TreeView_GetSelection(hTv), g_szWorkDir)) g_fInsDirty = TRUE; break; case IDC_TESTFAVURL: if (GetFavoriteUrl(hTv, TreeView_GetSelection(hTv), szUrl, ARRAYSIZE(szUrl))) TestURL(szUrl); SetFocus(GetDlgItem(hDlg, IDC_TESTFAVURL)); break; case IDC_IMPORT: { CNewCursor cursor(IDC_WAIT); if (ImportFavoritesCmd(hTv, g_szWorkDir) > 0) g_fInsDirty = TRUE; SetFocus(GetDlgItem(hDlg, IDC_IMPORT)); break; } } break; default: break; } break; case WM_NOTIFY: switch(((NMHDR FAR *)lParam)->code) { case TVN_GETINFOTIP: ASSERT(wParam == IDC_TREE1); GetFavoritesInfoTip((NMTVGETINFOTIP *)lParam); break; case NM_DBLCLK: ASSERT(wParam == IDC_TREE1); if (IsWindowEnabled(GetDlgItem(hDlg, IDC_MODIFY))) SendMessage(hDlg, WM_COMMAND, MAKEWPARAM(IDC_MODIFY, BN_CLICKED), (LPARAM)GetDlgItem(hDlg, IDC_MODIFY)); break; case TVN_KEYDOWN: ASSERT(wParam == IDC_TREE1); if (((LPNMTVKEYDOWN)lParam)->wVKey == VK_DELETE && IsWindowEnabled(GetDlgItem(hDlg, IDC_REMOVE))) SendMessage(hDlg, WM_COMMAND, MAKEWPARAM(IDC_REMOVE, BN_CLICKED), (LPARAM)GetDlgItem(hDlg, IDC_REMOVE)); break; case TVN_SELCHANGED: ASSERT(wParam == IDC_TREE1); ProcessFavSelChange(hDlg, hTv, (LPNMTREEVIEW)lParam); break; default: return FALSE; } break; case UM_SAVE: fCheckDirtyOnly = (BOOL) lParam; fFavoritesOnTop = (IsDlgButtonChecked(hDlg, IDC_FAVONTOP) == BST_CHECKED); dwFavoritesDeleteFlags = 0; szValue[0] = TEXT('\0'); pszValue = NULL; fFavoritesDelete = (IsDlgButtonChecked(hDlg, IDC_DELFAVORITES) == BST_CHECKED); fIEAKFavoritesDelete = (IsDlgButtonChecked(hDlg, IDC_DELIEAKFAVORITES) == BST_CHECKED); if (!g_fInsDirty) { BOOL fTemp; DWORD dwTemp; // check to see if there is a old favorites section. // if there isn't a section, set the dirty flag to TRUE so that we write // the old section for backward compatibility. if (GetFavoritesNumber(hTv) > 1) { if (!GetPrivateProfileSection(IS_FAVORITES, szValue, countof(szValue), g_szInsFile)) g_fInsDirty = TRUE; } dwTemp = (DWORD) GetPrivateProfileInt(IS_BRANDING, IK_FAVORITES_DELETE, (int)FD_DEFAULT, g_szInsFile); fTemp = HasFlag(dwTemp, ~FD_REMOVE_IEAK_CREATED); if (fTemp != fFavoritesDelete) g_fInsDirty = TRUE; fTemp = HasFlag(dwTemp, FD_REMOVE_IEAK_CREATED); if (fTemp != fIEAKFavoritesDelete) g_fInsDirty = TRUE; fTemp = GetPrivateProfileInt(IS_BRANDING, IK_FAVORITES_ONTOP, (int)FALSE, g_szInsFile); if (fTemp != fFavoritesOnTop) g_fInsDirty = TRUE; } if (!fCheckDirtyOnly) { if (fFavoritesDelete) { // NOTE. (andrewgu) flags explanation: // 1. FD_FAVORITES means "empty favorites"; // 2. FD_CHANNELS means "don't delete channels folder"; // 3. FD_SOFTWAREUPDATES means "don't delete sofware updates folder"; // 4. FD_QUICKLINKS means "don't delete quick links folder"; // 5. FD_EMPTY_QUICKLINKS means "but make it empty"; // 6. FD_REMOVE_HIDDEN means "don't hesitate to party on HIDDEN folders and favorites"; // 7. FD_REMOVE_SYSTEM means "don't hesitate to party on SYSTEM folders and favorites"; dwFavoritesDeleteFlags |= FD_FAVORITES | FD_CHANNELS | FD_SOFTWAREUPDATES | FD_QUICKLINKS | FD_EMPTY_QUICKLINKS | FD_REMOVE_HIDDEN | FD_REMOVE_SYSTEM; } if (fIEAKFavoritesDelete) // FD_REMOVE_IEAK_CREATED means "delete those items created by the IEAK"; dwFavoritesDeleteFlags |= FD_REMOVE_IEAK_CREATED; if (dwFavoritesDeleteFlags) { wsprintf(szValue, TEXT("0x%X"), dwFavoritesDeleteFlags); pszValue = szValue; } WritePrivateProfileString(IS_BRANDING, IK_FAVORITES_DELETE, pszValue, g_szInsFile); WritePrivateProfileString(IS_BRANDING, IK_FAVORITES_ONTOP, fFavoritesOnTop ? TEXT("1") : TEXT("0"), g_szInsFile); ExportFavorites (hTv, g_szInsFile, g_szWorkDir, TRUE); ExportQuickLinks(hTv, g_szInsFile, g_szWorkDir, TRUE); MigrateToOldFavorites(g_szInsFile); } *((LPBOOL)wParam) = TRUE; break; case WM_CLOSE: DeleteFavorite(hTv, TreeView_GetRoot(hTv), NULL); DeleteFavorite(hTv, TreeView_GetRoot(hTv), NULL); DestroyWindow(hDlg); return FALSE; default: return FALSE; } return TRUE; }