static int list_channel_CB(HANDLE hProcess, void* addr, struct __wine_debug_channel* channel, void* user) { int j; WCHAR nameW[sizeof(channel->name)], val[2]; LVITEMW lvitem; int index; HWND hChannelLV = user; MultiByteToWideChar(CP_ACP, 0, channel->name, sizeof(channel->name), nameW, sizeof(nameW)/sizeof(WCHAR)); lvitem.mask = LVIF_TEXT; lvitem.pszText = nameW; lvitem.iItem = 0; lvitem.iSubItem = 0; index = ListView_InsertItemW(hChannelLV, &lvitem); if (index == -1) return 0; val[1] = '\0'; for (j = 0; j < 4; j++) { val[0] = (channel->flags & (1 << j)) ? 'x' : ' '; ListView_SetItemTextW(hChannelLV, index, j + 1, val); } return 1; }
INT_PTR CALLBACK DlgProcPopupActions(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { static bool windowInitialized = false; static UINT controls[] = { IDC_GRP_CUSTOMACTIONS, IDC_TXT_CUSTOMACTIONS, IDC_CHK_IMCONTACTSONLY, IDC_CHK_CONTACTSONLY, IDC_CHK_DONTCLOSE, IDC_GRP_SIZEPOSITION, IDC_CHK_LARGEICONS, IDC_TXT_POSITION, IDC_RD_TEXT, IDC_RD_LEFTICONS, IDC_RD_RIGHTICONS, IDC_GRP_ACTIONS, IDC_ACTIONS, IDC_GRP_SIZEPOSITION2, IDC_TXT_POSITION2, IDC_CB_LEFT, IDC_TXT_MIDDLE, IDC_CB_MIDDLE, IDC_TXT_RIGHT, IDC_CB_RIGHT }; switch (msg) { case WM_INITDIALOG: { int i; windowInitialized = false; TranslateDialogDefault(hwnd); SendMessage(GetDlgItem(hwnd, IDC_ICO_INFO), STM_SETICON, (WPARAM)IcoLib_GetIcon(ICO_MISC_NOTIFY,0), 0); CheckDlgButton(hwnd, IDC_CHK_ENABLEACTIONS, PopUpOptions.actions&ACT_ENABLE ? TRUE : FALSE); CheckDlgButton(hwnd, IDC_CHK_IMCONTACTSONLY, PopUpOptions.actions&ACT_DEF_IMONLY ? TRUE : FALSE); CheckDlgButton(hwnd, IDC_CHK_CONTACTSONLY, PopUpOptions.actions&ACT_DEF_NOGLOBAL ? TRUE : FALSE); CheckDlgButton(hwnd, IDC_CHK_DONTCLOSE, PopUpOptions.actions&ACT_DEF_KEEPWND ? TRUE : FALSE); CheckDlgButton(hwnd, IDC_CHK_LARGEICONS, PopUpOptions.actions&ACT_LARGE ? TRUE : FALSE); CheckDlgButton(hwnd, IDC_RD_TEXT, PopUpOptions.actions&ACT_TEXT ? TRUE : FALSE); CheckDlgButton(hwnd, IDC_RD_LEFTICONS, PopUpOptions.actions&ACT_LEFTICONS ? TRUE : FALSE); CheckDlgButton(hwnd, IDC_RD_RIGHTICONS, PopUpOptions.actions&ACT_RIGHTICONS ? TRUE : FALSE); { DWORD dwActiveItem = 0; HWND hCombo = GetDlgItem(hwnd, IDC_CB_LEFT); dwActiveItem = MouseOverride(hCombo, PopUpOptions.overrideLeft); SendDlgItemMessage(hwnd, IDC_CB_LEFT, CB_SETCURSEL, dwActiveItem, 0); dwActiveItem = 0; hCombo = GetDlgItem(hwnd, IDC_CB_MIDDLE); dwActiveItem = MouseOverride(hCombo, PopUpOptions.overrideMiddle); SendDlgItemMessage(hwnd, IDC_CB_MIDDLE, CB_SETCURSEL, dwActiveItem, 0); dwActiveItem = 0; hCombo = GetDlgItem(hwnd, IDC_CB_RIGHT); dwActiveItem = MouseOverride(hCombo, PopUpOptions.overrideRight); SendDlgItemMessage(hwnd, IDC_CB_RIGHT, CB_SETCURSEL, dwActiveItem, 0); } HWND hwndList = GetDlgItem(hwnd, IDC_ACTIONS); ListView_SetExtendedListViewStyleEx(hwndList, 0, LVS_EX_CHECKBOXES|LVS_EX_LABELTIP); HIMAGELIST hImgList = ImageList_Create(16, 16, ILC_MASK | (IsWinVerXPPlus()? ILC_COLOR32 : ILC_COLOR16), 10, 1); ListView_SetImageList(hwndList, hImgList, LVSIL_SMALL); LVCOLUMN column = {0}; column.mask = LVCF_TEXT|LVCF_WIDTH; column.pszText = TranslateT("Action"); column.cx = 175; ListView_InsertColumn(hwndList, 0, &column); if (IsWinVerXPPlus()) ListView_EnableGroupView(hwndList, TRUE); LIST<char> groups(1, strcmp); for (i = 0; i < gActions.getCount(); ++i) { char szGroup[64]; char *szName = strchr(gActions[i]->lpzTitle, '/'); if (!szName) szName = gActions[i]->lpzTitle; else ++szName; lstrcpynA(szGroup, gActions[i]->lpzTitle, szName - gActions[i]->lpzTitle); int grpId = 0; if (IsWinVerXPPlus() && ((grpId = groups.getIndex(szGroup)) < 0)) { LVGROUP group = {0}; group.cbSize = sizeof(group); group.mask = LVGF_HEADER|LVGF_GROUPID; LPWSTR wszGroup = mir_a2u(szGroup); group.pszHeader = TranslateW(wszGroup); group.cchHeader = lstrlenW(wszGroup); grpId = group.iGroupId = groups.getCount(); int grpId = ListView_InsertGroup(hwndList, -1, &group); mir_free(wszGroup); groups.insert(mir_strdup(szGroup), groups.getCount()); } if (g_popup.isOsUnicode) { LVITEMW item = {0}; item.mask = LVIF_IMAGE|LVIF_PARAM|LVIF_TEXT|LVIF_STATE|LVIF_INDENT; item.iItem = i; LPWSTR wszName = mir_a2u(szName); item.pszText = TranslateW(wszName); item.iImage = ImageList_AddIcon(hImgList, gActions[i]->lchIcon); item.lParam = i; if (IsWinVerXPPlus()) { item.mask |= LVIF_GROUPID; item.iGroupId = grpId; } item.iIndent = 0; ListView_InsertItemW(hwndList, &item); mir_free(wszName); } else { LVITEMA item = {0}; item.mask = LVIF_IMAGE|LVIF_PARAM|LVIF_TEXT|LVIF_STATE|LVIF_GROUPID|LVIF_INDENT; item.iItem = i; item.pszText = Translate(szName); item.iImage = ImageList_AddIcon(hImgList, gActions[i]->lchIcon); item.lParam = i; item.iGroupId = grpId; item.iIndent = 0; ListView_InsertItem(hwndList, &item); } ListView_SetItemState(hwndList, i, (gActions[i]->flags & PAF_ENABLED) ? 0x2000 : 0x1000, LVIS_STATEIMAGEMASK); } groups.destroy(); BOOL enabled = (PopUpOptions.actions&ACT_ENABLE) ? TRUE : FALSE; for (i = 0; i < SIZEOF(controls); ++i) EnableWindow(GetDlgItem(hwnd, controls[i]), enabled); windowInitialized = true; break; } case WM_COMMAND: { switch (LOWORD(wParam)) { case IDC_CHK_ENABLEACTIONS: { PopUpOptions.actions &= ~ACT_ENABLE; PopUpOptions.actions |= IsDlgButtonChecked(hwnd, IDC_CHK_ENABLEACTIONS) ? ACT_ENABLE : 0; SendMessage(GetParent(hwnd), PSM_CHANGED,0,0); BOOL enabled = (PopUpOptions.actions&ACT_ENABLE) ? TRUE : FALSE; for (int i = 0; i < SIZEOF(controls); ++i) EnableWindow(GetDlgItem(hwnd, controls[i]), enabled); break; } case IDC_CHK_IMCONTACTSONLY: PopUpOptions.actions &= ~ACT_DEF_IMONLY; PopUpOptions.actions |= IsDlgButtonChecked(hwnd, IDC_CHK_IMCONTACTSONLY) ? ACT_DEF_IMONLY : 0; SendMessage(GetParent(hwnd), PSM_CHANGED,0,0); break; case IDC_CHK_CONTACTSONLY: PopUpOptions.actions &= ~ACT_DEF_NOGLOBAL; PopUpOptions.actions |= IsDlgButtonChecked(hwnd, IDC_CHK_CONTACTSONLY) ? ACT_DEF_NOGLOBAL : 0; SendMessage(GetParent(hwnd), PSM_CHANGED,0,0); break; case IDC_CHK_DONTCLOSE: PopUpOptions.actions &= ~ACT_DEF_KEEPWND; PopUpOptions.actions |= IsDlgButtonChecked(hwnd, IDC_CHK_DONTCLOSE) ? ACT_DEF_KEEPWND : 0; SendMessage(GetParent(hwnd), PSM_CHANGED,0,0); break; case IDC_CHK_LARGEICONS: PopUpOptions.actions &= ~ACT_LARGE; PopUpOptions.actions |= IsDlgButtonChecked(hwnd, IDC_CHK_LARGEICONS) ? ACT_LARGE : 0; SendMessage(GetParent(hwnd), PSM_CHANGED,0,0); break; case IDC_RD_TEXT: PopUpOptions.actions &= ~(ACT_TEXT|ACT_LEFTICONS|ACT_RIGHTICONS); PopUpOptions.actions |= IsDlgButtonChecked(hwnd, IDC_CHK_ENABLEACTIONS) ? ACT_TEXT : 0; SendMessage(GetParent(hwnd), PSM_CHANGED,0,0); break; case IDC_RD_LEFTICONS: PopUpOptions.actions &= ~(ACT_TEXT|ACT_LEFTICONS|ACT_RIGHTICONS); PopUpOptions.actions |= IsDlgButtonChecked(hwnd, IDC_RD_LEFTICONS) ? ACT_LEFTICONS : 0; SendMessage(GetParent(hwnd), PSM_CHANGED,0,0); break; case IDC_RD_RIGHTICONS: PopUpOptions.actions &= ~(ACT_TEXT|ACT_LEFTICONS|ACT_RIGHTICONS); PopUpOptions.actions |= IsDlgButtonChecked(hwnd, IDC_RD_RIGHTICONS) ? ACT_RIGHTICONS : 0; SendMessage(GetParent(hwnd), PSM_CHANGED,0,0); break; case IDC_PREVIEW: PopUpPreview(); break; case IDC_CB_LEFT: case IDC_CB_MIDDLE: case IDC_CB_RIGHT: PopUpOptions.overrideLeft = SendDlgItemMessage(hwnd, IDC_CB_LEFT, CB_GETITEMDATA, SendDlgItemMessage(hwnd, IDC_CB_LEFT, CB_GETCURSEL,0,0),0); PopUpOptions.overrideMiddle = SendDlgItemMessage(hwnd, IDC_CB_MIDDLE, CB_GETITEMDATA, SendDlgItemMessage(hwnd, IDC_CB_MIDDLE, CB_GETCURSEL,0,0),0); PopUpOptions.overrideRight = SendDlgItemMessage(hwnd, IDC_CB_RIGHT, CB_GETITEMDATA, SendDlgItemMessage(hwnd, IDC_CB_RIGHT, CB_GETCURSEL,0,0),0); SendMessage(GetParent(hwnd), PSM_CHANGED,0,0); break; } break; } case WM_NOTIFY: { switch (((LPNMHDR)lParam)->idFrom) { case 0: { switch (((LPNMHDR)lParam)->code) { case PSN_RESET: LoadOption_Actions(); break; case PSN_APPLY: { DBWriteContactSettingDword(NULL, MODULNAME, "Actions", PopUpOptions.actions); HWND hwndList = GetDlgItem(hwnd, IDC_ACTIONS); for (int i = 0; i < gActions.getCount(); ++i) { gActions[i]->flags = (ListView_GetItemState(hwndList, i, LVIS_STATEIMAGEMASK) == 0x2000) ? PAF_ENABLED : 0; DBWriteContactSettingByte(NULL, "PopUpActions", gActions[i]->lpzTitle, (gActions[i]->flags&PAF_ENABLED) ? 1 : 0); } //overrideActions DBWriteContactSettingDword(NULL, MODULNAME, "OverrideLeft", PopUpOptions.overrideLeft); DBWriteContactSettingDword(NULL, MODULNAME, "OverrideMiddle", PopUpOptions.overrideMiddle); DBWriteContactSettingDword(NULL, MODULNAME, "OverrideRight", PopUpOptions.overrideRight); break; } } break; } case IDC_ACTIONS: { NMLISTVIEW *nmlv = (NMLISTVIEW *)lParam; if (windowInitialized && nmlv && nmlv->hdr.code == LVN_ITEMCHANGED && nmlv->uOldState != 0 && (nmlv->uNewState == 0x1000 || nmlv->uNewState == 0x2000)) { SendMessage(GetParent(hwnd), PSM_CHANGED,0,0); } break; } } break; } } return FALSE; }
/********************************************************************* * add_zone_to_listview [internal] * */ static void add_zone_to_listview(secdlg_data *sd, DWORD *pindex, DWORD zone) { DWORD lv_index = *pindex; ZONEATTRIBUTES *za = &sd->zone_attr[lv_index]; LVITEMW lvitem; HRESULT hr; INT iconid = 0; HMODULE hdll = NULL; WCHAR * ptr; HICON icon; TRACE("item %d (zone %d)\n", lv_index, zone); sd->zones[lv_index] = zone; memset(&lvitem, 0, sizeof(LVITEMW)); memset(za, 0, sizeof(ZONEATTRIBUTES)); za->cbSize = sizeof(ZONEATTRIBUTES); hr = IInternetZoneManager_GetZoneAttributes(sd->zone_mgr, zone, za); if (SUCCEEDED(hr)) { TRACE("displayname: %s\n", debugstr_w(za->szDisplayName)); TRACE("description: %s\n", debugstr_w(za->szDescription)); TRACE("minlevel: 0x%x, recommended: 0x%x, current: 0x%x (flags: 0x%x)\n", za->dwTemplateMinLevel, za->dwTemplateRecommended, za->dwTemplateCurrentLevel, za->dwFlags); if (za->dwFlags & ZAFLAGS_NO_UI ) { TRACE("item %d (zone %d): UI disabled for %s\n", lv_index, zone, debugstr_w(za->szDisplayName)); return; } sd->levels[lv_index] = za->dwTemplateCurrentLevel; lvitem.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM; lvitem.iItem = lv_index; lvitem.iSubItem = 0; lvitem.pszText = za->szDisplayName; lvitem.lParam = (LPARAM) zone; /* format is "filename.ext#iconid" */ ptr = StrChrW(za->szIconPath, '#'); if (ptr) { *ptr = 0; ptr++; iconid = StrToIntW(ptr); hdll = LoadLibraryExW(za->szIconPath, NULL, LOAD_LIBRARY_AS_DATAFILE); TRACE("%p: icon #%d from %s\n", hdll, iconid, debugstr_w(za->szIconPath)); icon = LoadImageW(hdll, MAKEINTRESOURCEW(iconid), IMAGE_ICON, GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON), LR_SHARED); if (!icon) { FIXME("item %d (zone %d): missing icon #%d in %s\n", lv_index, zone, iconid, debugstr_w(za->szIconPath)); } /* the failure result (NULL) from LoadImageW let ImageList_AddIcon fail with -1, which is reused in ListView_InsertItemW to disable the image */ lvitem.iImage = ImageList_AddIcon(sd->himages, icon); } else FIXME("item %d (zone %d): malformed szIconPath %s\n", lv_index, zone, debugstr_w(za->szIconPath)); if (ListView_InsertItemW(sd->hlv, &lvitem) >= 0) { /* activate first item in the listview */ if (! lv_index) { lvitem.state = LVIS_FOCUSED | LVIS_SELECTED; lvitem.stateMask = LVIS_FOCUSED | LVIS_SELECTED; SendMessageW(sd->hlv, LVM_SETITEMSTATE, 0, (LPARAM) &lvitem); sd->last_level = ~0; update_zone_info(sd, lv_index); } (*pindex)++; } FreeLibrary(hdll); } else FIXME("item %d (zone %d): GetZoneAttributes failed with 0x%x\n", lv_index, zone, hr); }