static LRESULT CALLBACK BreakpointListProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { case WM_KEYDOWN: if(wParam == VK_RETURN) { int index = ListView_GetSelectionMark(hDlg); SendMessage(GetParent(hDlg),WM_DEB_GOTOBREAKPOINT,index,0); return 0; } else if (wParam == VK_DELETE) { int index = ListView_GetSelectionMark(hDlg); SendMessage(GetParent(hDlg),WM_DEB_REMOVEBREAKPOINT,index,0); return 0; } else if (wParam == VK_TAB) { SendMessage(GetParent(hDlg),WM_DEB_TABPRESSED,0,0); return 0; } break; case WM_GETDLGCODE: if (lParam && ((MSG*)lParam)->message == WM_KEYDOWN) { if (wParam == VK_TAB) return DLGC_WANTMESSAGE; } break; }; return (LRESULT)CallWindowProc((WNDPROC)DefBreakpointListProc,hDlg,message,wParam,lParam);; }
LRESULT CALLBACK CtrlBreakpointList::wndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { CtrlBreakpointList* bp = (CtrlBreakpointList*) GetWindowLongPtr(hwnd,GWLP_USERDATA); switch(message) { case WM_SIZE: { int width = LOWORD(lParam); RECT rect; GetWindowRect(hwnd,&rect); int totalListSize = (rect.right-rect.left-20); for (int i = 0; i < BPL_COLUMNCOUNT; i++) { ListView_SetColumnWidth(hwnd,i,breakpointColumns[i].size * totalListSize); } } break; case WM_KEYDOWN: if(wParam == VK_RETURN) { int index = ListView_GetSelectionMark(hwnd); bp->editBreakpoint(index); return 0; } else if (wParam == VK_DELETE) { int index = ListView_GetSelectionMark(hwnd); bp->removeBreakpoint(index); return 0; } else if (wParam == VK_TAB) { SendMessage(GetParent(hwnd),WM_DEB_TABPRESSED,0,0); return 0; } else if (wParam == VK_SPACE) { int index = ListView_GetSelectionMark(hwnd); bp->toggleEnabled(index); } break; case WM_GETDLGCODE: if (lParam && ((MSG*)lParam)->message == WM_KEYDOWN) { if (wParam == VK_TAB || wParam == VK_RETURN) return DLGC_WANTMESSAGE; } break; }; return (LRESULT)CallWindowProc((WNDPROC)bp->oldProc,hwnd,message,wParam,lParam); }
void COutputDialog::OnNMClickListFilter(NMHDR *pNMHDR, LRESULT *pResult) { //LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<NMITEMACTIVATE>(pNMHDR); CWnd* pList = GetDlgItem(IDC_LIST_FILTER); int nSelected = ListView_GetSelectionMark(pList->m_hWnd); BOOL bFilterSelected = FALSE; if (nSelected >= 0) { bFilterSelected = TRUE; } CWnd* pBtnFilterSetting = GetDlgItem(IDC_BTN_FILTER_SETTING); CWnd* pBtnFilterDelete = GetDlgItem(IDC_BTN_FILTER_DELETE); CWnd* pBtnFilterUp = GetDlgItem(IDC_BTN_FILTER_UP); CWnd* pBtnFilterDown = GetDlgItem(IDC_BTN_FILTER_DOWN); if(pBtnFilterSetting && ::IsWindow(pBtnFilterSetting->m_hWnd)) pBtnFilterSetting->EnableWindow(bFilterSelected); if(pBtnFilterDelete && ::IsWindow(pBtnFilterDelete->m_hWnd)) pBtnFilterDelete->EnableWindow(bFilterSelected); if(pBtnFilterUp && ::IsWindow(pBtnFilterUp->m_hWnd)) pBtnFilterUp->EnableWindow(bFilterSelected); if(pBtnFilterDown && ::IsWindow(pBtnFilterDown->m_hWnd)) pBtnFilterDown->EnableWindow(bFilterSelected); if(pResult) *pResult = 0; }
LRESULT CALLBACK DlgMsgProc( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam ) { HWND parentHWnd = (HWND)GetWindowLong(hWnd,GWL_HWNDPARENT); wchar_t buff[2048]; wmemset(buff,'\0',2048); wchar_t* pos=NULL; switch (Msg) { case WM_DESTROY: EndDialog(hWnd,0); break; case WM_INITDIALOG: wcscpy_s (buff,2048,mLogWnd[parentHWnd].vList[ListView_GetSelectionMark(mLogWnd[parentHWnd].hListView)].c_str()); while ((pos=wcsstr(buff,L":|:"))!=NULL) {wcscpy_s(buff,2048,pos+3);} SetDlgItemText(hWnd,IDC_EDIT1,buff); break; case WM_COMMAND: if (wParam == IDOK) {EndDialog(hWnd,0);} break; case WM_SYSCOMMAND: if (wParam ==SC_CLOSE) { EndDialog(hWnd,0); } default: return (0); } return (0); }
bool GUI_manager::remove_IMG() { char buffer[MAX_PATH+1]; char internal_name[20]; int item = ListView_GetSelectionMark(IMG_list); int count = ListView_GetItemCount(IMG_list); bool removed = false; if( item > -1 ) { ListView_GetItemText(IMG_list,item,2,buffer,MAX_PATH); ListView_GetItemText(IMG_list,item,3,internal_name,sizeof internal_name); if( strlen(buffer) && strlen(internal_name) ) { if( uploader->remove_img_file(buffer,internal_name) && !removed ) removed = true; } if( ListView_DeleteItem(IMG_list,item) ) { removed = true; if( (item+1) >= count ) item--; } SetSelection(IMG_list,item); show_size(); } uploader->remove_all(); return removed; }
static LRESULT RankProfView_OnDoubleClick(HWND hwndParent, HWND hwnd) { int index = ListView_GetSelectionMark(hwnd); if (index >= 0) { TCHAR trfltP2Name[MAX_PATH + 1]; LVITEM item; item.mask = LVIF_TEXT; item.iItem = index; item.iSubItem = 0; item.cchTextMax = _countof(trfltP2Name); item.pszText = trfltP2Name; ListView_GetItem(hwnd, &item); TCHAR countStr[32]; item.mask = LVIF_TEXT; item.iItem = index; item.iSubItem = 1; item.cchTextMax = _countof(countStr); item.pszText = countStr; ListView_GetItem(hwnd, &item); SCORELINE_FILTER_DESC *pFilterDesc = reinterpret_cast<SCORELINE_FILTER_DESC *>(::GetWindowLongPtr(hwndParent, GWL_USERDATA)); SCORELINE_FILTER_DESC filterDesc = *pFilterDesc; filterDesc.mask |= SCORELINE_FILTER__P2NAME | SCORELINE_FILTER__LIMIT; ::lstrcpynA(filterDesc.p2name, MinimalT2A(trfltP2Name), _countof(filterDesc.p2name) - 1); filterDesc.p1name[_countof(filterDesc.p1name) - 1] = 0; filterDesc.limit = ::StrToInt(countStr); TrackRecordDialog_ShowModeless(::GetParent(hwndParent), &filterDesc); } return FALSE; }
void RemoveDataBp(HWND hwnd) { HWND hwndLV = GetDlgItem(hwnd, IDC_BPLIST); int k = ListView_GetSelectionMark(hwndLV); int n = ListView_GetItemCount(hwndLV); int i,j; for (i=n-1; i >=0; i--) { DATABREAK **search = &dataBpList, *found; LVITEM item; memset(&item, 0, sizeof(item)); item.iItem = i; item.iSubItem = 0; item.mask = LVIF_STATE; item.stateMask = LVIS_SELECTED; ListView_GetItem(hwndLV, &item); if (item.state & LVIS_SELECTED) { for (j=0; j <i; j++) search = &(*search)->next; found = *search; *search = found->next; free(found); ListView_DeleteItem(hwndLV, i); } ListView_SetSelectionMark(hwndLV, i); ListView_SetItemState(hwndLV, i, LVIS_SELECTED, LVIS_SELECTED); } }
void COutputDialog::OnLvnKeydownListFilter(NMHDR *pNMHDR, LRESULT *pResult) { LPNMLVKEYDOWN pLVKeyDow = reinterpret_cast<LPNMLVKEYDOWN>(pNMHDR); CWnd* pList = GetDlgItem(IDC_LIST_FILTER); int nSelected = ListView_GetSelectionMark(pList->m_hWnd); if (nSelected >= 0 && pLVKeyDow->hdr.hwndFrom == pList->m_hWnd && pLVKeyDow->hdr.code == LVN_KEYDOWN ) { switch(pLVKeyDow->wVKey) { case VK_RETURN: OnBnClickedBtnFilterSetting(); break; case VK_INSERT: OnBnClickedBtnFilterAdd(); break; case VK_DELETE: OnBnClickedBtnFilterDelete(); break; } } *pResult = 0; }
/* Returns a selected item or -1 if no selection. Assumes that the list is single-sel */ int lv_get_selection_pos(HWND hwnd) { int selection; int selected_count = ListView_GetSelectedCount(hwnd); assert(selected_count <= 1); if (0 == selected_count) return -1; selection = ListView_GetSelectionMark(hwnd); return selection; }
void ListSort::sort() { int idx = ListView_GetSelectionMark(_hwnd); LPARAM param = ListView_GetItemData(_hwnd, idx); ListView_SortItems(_hwnd, _compare_fct, (LPARAM)this); if (idx >= 0) { idx = ListView_FindItemPara(_hwnd, param); ListView_EnsureVisible(_hwnd, idx, FALSE); } }
void CBuddyManager::OnBuddySelected() { BUDDY_INFO *pBI = NULL; BUDDY_INFO BI; dbg_print("OnBuddySelected"); int i = ListView_GetSelectionMark(g_hwndListBuddy); g_bRunningQuery = true; if(i!=-1) { SetCursor(LoadCursor(NULL, IDC_APPSTARTING)); LVITEM lvItem; memset(&lvItem,0,sizeof(LVITEM)); lvItem.mask = LVIF_PARAM ; lvItem.iItem = i; lvItem.iSubItem = 0; if(ListView_GetItem( g_hwndListBuddy, &lvItem)) { ListView_DeleteAllItems(g_hwndListViewVars); ListView_DeleteAllItems(g_hwndListViewPlayers); vecBI::iterator vecBI_it = find(BuddyList.begin(),BuddyList.end(),(DWORD)lvItem.lParam); if( vecBI_it != BuddyList.end()) { BI = (BUDDY_INFO)*vecBI_it; if(BI.sIndex!=-1) { try { if(BI.sIndex<gm.GamesInfo[BI.cGAMEINDEX].vSI.size()) { SERVER_INFO *pSI = gm.GamesInfo[BI.cGAMEINDEX].vSI.at((int)BI.sIndex); gm.GetServerInfo(BI.cGAMEINDEX,pSI); } } catch(const exception& e) { m_log.AddLogInfo(0,"Access Violation!!! %s (OnBuddySelected)\n",e.what()); } UpdateCurrentServerUI(); } }//if pSrv } } g_bRunningQuery = false; }
BOOL RemoveSoundFromList(HWND hList) { int iSel = ListView_GetSelectionMark(hList); if (iSel != -1) { iSel = -1; while ((iSel = ListView_GetNextItem(hList, iSel, LVNI_SELECTED)) != -1) ListView_SetItemText(hList, iSel, 1, TranslateT(DEFAULT_SOUND)); return TRUE; } return FALSE; }
int do_regjump(HWND hlistview) { int index; index=ListView_GetSelectionMark(hlistview); if(index>=0){ char str[512]={0}; int str_size=sizeof(str); ListView_GetItemText(hlistview,index,1,str,str_size); if(str[0]!=0){ char cmd[1024]={0}; _snprintf(cmd,sizeof(cmd),"%s%s","HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\",str); ShellExecute(hlistview,"open","regjump.exe",cmd,NULL,SW_SHOWNORMAL); } } }
void SelectMenu(int selectedItem = -1) { if (selectedItem == -1) { selectedItem = ListView_GetSelectionMark(hMenuView.GetHwnd()); if (selectedItem == -1) return; } switch (selectedItem) { case 0: ShowWindow(hWndTabConfig, SW_SHOW); ShowWindow(hWndTabPlugins, SW_HIDE); ShowWindow(hWndTabThemes, SW_HIDE); ShowWindow(hWndTabLanguages, SW_HIDE); ShowWindow(hWndTabKeyboards, SW_HIDE); break; case 1: ShowWindow(hWndTabConfig, SW_HIDE); ShowWindow(hWndTabPlugins, SW_SHOW); ShowWindow(hWndTabThemes, SW_HIDE); ShowWindow(hWndTabLanguages, SW_HIDE); ShowWindow(hWndTabKeyboards, SW_HIDE); break; case 2: ShowWindow(hWndTabConfig, SW_HIDE); ShowWindow(hWndTabPlugins, SW_HIDE); ShowWindow(hWndTabThemes, SW_SHOW); ShowWindow(hWndTabLanguages, SW_HIDE); ShowWindow(hWndTabKeyboards, SW_HIDE); break; case 3: ShowWindow(hWndTabConfig, SW_HIDE); ShowWindow(hWndTabPlugins, SW_HIDE); ShowWindow(hWndTabThemes, SW_HIDE); ShowWindow(hWndTabLanguages, SW_SHOW); ShowWindow(hWndTabKeyboards, SW_HIDE); break; case 4: ShowWindow(hWndTabConfig, SW_HIDE); ShowWindow(hWndTabPlugins, SW_HIDE); ShowWindow(hWndTabThemes, SW_HIDE); ShowWindow(hWndTabLanguages, SW_HIDE); ShowWindow(hWndTabKeyboards, SW_SHOW); break; } }
int _ext_disk_num( HWND hwnd ) { wchar_t vol[MAX_PATH]; wchar_t *num_offset; _get_item_text( hwnd, ListView_GetSelectionMark(hwnd), 0, vol, sizeof_w(vol) ); num_offset = wcschr(vol, ' '); return ( num_offset ? _wtoi(num_offset) : -1 ); }
void COutputDialog::OnBnClickedBtnFilterSetting() { CWnd* pList = GetDlgItem(IDC_LIST_FILTER); int nSelected = ListView_GetSelectionMark(pList->m_hWnd); if (nSelected < 0) { MessageBox(_T("플러그인을 먼저 선택해 주세요"), _T("Aral Trans"), MB_OK | MB_ICONINFORMATION ); } else if ((MAINAPP)->m_cMultiPlugin.OnPluginOption(nSelected)) { UpdateFilterGrid(); ListView_SetItemState(pList->m_hWnd, nSelected, LVIS_FOCUSED | LVIS_SELECTED, LVIS_FOCUSED | LVIS_SELECTED); ::SetFocus(pList->m_hWnd); OnNMClickListFilter(NULL, NULL); } }
//returns anything between 0 - 0xFFFFFFFF-1 //0xFFFFFFFF = unsuccessfull DWORD CBuddyManager::GetBuddyIDBySelection() { int n = ListView_GetSelectionMark(g_hwndListBuddy); if(n != -1) { LVITEM lvItem; memset(&lvItem,0,sizeof(LVITEM)); lvItem.mask = LVIF_PARAM ; lvItem.iItem = n; lvItem.iSubItem = 0; if(ListView_GetItem( g_hwndListBuddy, &lvItem)) { return (DWORD)lvItem.lParam; } } return 0xFFFFFFFF; }
LONG OnAdminModifyClick(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam) { ModifyMark = ListView_GetSelectionMark(hWndList)+1; if (ModifyMark !=0) { //读取限速器类型文件 HANDLE hFile = CreateFile(TypeFileName, GENERIC_READ , FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if( hFile == INVALID_HANDLE_VALUE) return FALSE; int index = 0; char detector[120] = {NULL};//读取文件内容到该缓存 char buf[20] = {NULL}; DWORD dwRead = -1; SetFilePointer(hFile,(ModifyMark-1)*120,NULL,FILE_CURRENT); ReadFile(hFile,(LPVOID)detector,120,&dwRead,NULL); _stprintf_s(TestsFileName,50,_T("\\NandFlash\\detector_")); memcpy(TestsFileName+20,detector+20,5); int i = 0; for (i = 0; i <5; i++) { if (detector[20+i*2] == NULL) { break;; } } _stprintf_s(TestsFileName+20+i,60,_T(".txt")); CloseHandle(hFile); DialogBox(NULL,MAKEINTRESOURCE(IDD_DIALOG_Admin_Add),NULL,DlgAdminAddPorc); //DialogBox(NULL,MAKEINTRESOURCE(IDD_DIALOG_OPERATOR),NULL,DlgOperatorPorc); CommandBar_Show(NULL, FALSE); EndDialog(hDlg,0); } return TRUE; }
BOOL AP_Win32Dialog_ListRevisions::_onCommand(HWND hWnd, WPARAM wParam, LPARAM lParam) { WORD wId = LOWORD(wParam); switch (wId) { case IDCANCEL: m_answer = a_CANCEL; EndDialog(hWnd,0); return 1; case IDOK: { HWND h = GetDlgItem(hWnd, AP_RID_DIALOG_LIST_REVISIONS_LIST); int iSelCount = ListView_GetSelectedCount(h); m_answer = a_OK; if(iSelCount) { LVITEMW item; item.iSubItem = 0; item.iItem = ListView_GetSelectionMark(h); item.mask = LVIF_PARAM; item.pszText = 0; item.cchTextMax = 0; ListView_GetItem(h,&item); m_iId = item.lParam; } else m_iId = 0; EndDialog(hWnd,0); return 1; } default: // we did not handle this notification UT_DEBUGMSG(("WM_Command for id %ld\n",wId)); return 0; // return zero to let windows take care of it. } }
BOOL Dlg_GameLibrary::LaunchSelected() { HWND hList = GetDlgItem(m_hDialogBox, IDC_RA_LBX_GAMELIST); const int nSel = ListView_GetSelectionMark(hList); if (nSel != -1) { TCHAR buffer[1024]; ListView_GetItemText(hList, nSel, 1, buffer, 1024); SetWindowText(GetDlgItem(m_hDialogBox, IDC_RA_GLIB_NAME), buffer); ListView_GetItemText(hList, nSel, 3, buffer, 1024); _RA_LoadROM(Narrow(buffer).c_str()); return TRUE; } else { return FALSE; } }
static int ParseNewFileData(HWND hwnd) { int rv = 1; GetWindowText(GetDlgItem(hwnd, IDC_FILENEWFILE), newTitle, sizeof(newTitle)); if (newTitle[0] == 0) { ExtendedMessageBox("Add New File", 0, "Please specify a new file name"); rv = 0; } else { LVITEM item; memset(&item, 0, sizeof(item)); item.mask = LVIF_PARAM; item.iItem = ListView_GetSelectionMark(GetDlgItem(hwnd, IDC_LVNEWFILE)); ListView_GetItem(GetDlgItem(hwnd, IDC_LVNEWFILE), &item); newMode = item.lParam; } return rv; }
static int add_row_tablewindow(TABLE_WINDOW *win,HWND hlistview) { int i,count,row; if(win==0 || hlistview==0) return FALSE; count=ListView_GetItemCount(win->hlistview); row=ListView_GetSelectionMark(win->hlistview); if(row<0) row=count; else row++; count=ListView_GetItemCount(hlistview); for(i=0;i<count;i++){ char str[255]={0}; ListView_GetItemText(hlistview,i,DATA_POS,str,sizeof(str)); lv_insert_data(win->hlistview,row,i,str); } ListView_EnsureVisible(win->hlistview,row,FALSE); ListView_SetSelectionMark(win->hlistview,row); ListView_SetItemState(win->hlistview,row,LVIS_SELECTED|LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED); return TRUE; }
DWORD GetSelectedProcessId(void) { int Index; LVITEM lvitem; if(ListView_GetSelectedCount(hProcessPageListCtrl) == 1) { Index = ListView_GetSelectionMark(hProcessPageListCtrl); memset(&lvitem, 0, sizeof(LVITEM)); lvitem.mask = LVIF_PARAM; lvitem.iItem = Index; (void)ListView_GetItem(hProcessPageListCtrl, &lvitem); if (lvitem.lParam) return ((LPPROCESS_PAGE_LIST_ITEM)lvitem.lParam)->ProcessId; } return 0; }
/* * MainWindowHandleObjectListProp * * Purpose: * * Object List properties per selected item. * */ VOID MainWindowHandleObjectListProp( _In_ HWND hwnd ) { INT nSelected; LPWSTR lpItemText, lpType, lpDesc = NULL; if (g_PropWindow != NULL) return; //nothing selected, go away if (ListView_GetSelectedCount(g_hwndObjectList) == 0) { return; } nSelected = ListView_GetSelectionMark(g_hwndObjectList); if (nSelected == -1) { return; } lpItemText = supGetItemText(g_hwndObjectList, nSelected, 0, NULL); if (lpItemText) { lpType = supGetItemText(g_hwndObjectList, nSelected, 1, NULL); if (lpType) { //lpDesc is not important, we can work if it NULL lpDesc = supGetItemText(g_hwndObjectList, nSelected, 2, NULL); propCreateDialog(hwnd, lpItemText, lpType, lpDesc); if (lpDesc) { supHeapFree(lpDesc); } supHeapFree(lpType); } supHeapFree(lpItemText); } }
static BOOL RunSelectedTool(VOID) { BOOL Success = FALSE; BOOL bUseAdvParams; LVITEM item = {}; item.mask = LVIF_PARAM; item.iItem = ListView_GetSelectionMark(hToolsListCtrl); ListView_GetItem(hToolsListCtrl, &item); if (ListView_GetItem(hToolsListCtrl, &item)) // (item.iItem > -1) // TODO: corriger ailleurs ce genre de code... { if ( (Button_IsEnabled(GetDlgItem(hToolsPage, IDC_CBX_TOOLS_ADVOPT))) && (Button_GetCheck(GetDlgItem(hToolsPage, IDC_CBX_TOOLS_ADVOPT)) == BST_CHECKED) ) bUseAdvParams = TRUE; else bUseAdvParams = FALSE; // Values greater (strictly) than 32 indicate success (see MSDN documentation for ShellExecute(...) API). Success = (reinterpret_cast<TOOL*>(item.lParam)->Run(bUseAdvParams) > 32); } return Success; }
/* * DesktopListHandleNotify * * Purpose: * * WM_NOTIFY processing for Desktop page listview. * */ VOID DesktopListHandleNotify( HWND hwndDlg, LPNMLISTVIEW nhdr ) { LVCOLUMNW col; INT c; SIZE_T sz, i, l; LPWSTR lpItemText, lpName; if (nhdr == NULL) { return; } if (nhdr->hdr.idFrom != ID_DESKTOPSLIST) { return; } switch (nhdr->hdr.code) { case LVN_COLUMNCLICK: bDesktopListSortInverse = !bDesktopListSortInverse; DesktopListSortColumn = ((NMLISTVIEW *)nhdr)->iSubItem; ListView_SortItemsEx(DesktopList, &DesktopListCompareFunc, DesktopListSortColumn); RtlSecureZeroMemory(&col, sizeof(col)); col.mask = LVCF_IMAGE; col.iImage = -1; for (c = 0; c < 3; c++) { ListView_SetColumn(DesktopList, c, &col); } if (bDesktopListSortInverse) col.iImage = 1; else col.iImage = 2; ListView_SetColumn(DesktopList, ((NMLISTVIEW *)nhdr)->iSubItem, &col); break; case NM_DBLCLK: /* * A very basic support for this type * desktop described by win32k PDESKTOP structure which is totally undocumented */ sz = 0; lpItemText = supGetItemText(DesktopList, ListView_GetSelectionMark(DesktopList), 0, &sz); if (lpItemText) { l = 0; for (i = 0; i<sz; i++) if (lpItemText[i] == L'\\') l = i + 1; lpName = &lpItemText[l]; //hwndDlg set to mainwindow on purpose propCreateDialog(hwndDlg, lpName, T_ObjectNames[TYPE_DESKTOP], NULL); HeapFree(GetProcessHeap(), 0, lpItemText); } break; default: break; } }
static INT_PTR CALLBACK DlgProcMirOTROptsFinger(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { HWND lv = GetDlgItem(hwndDlg, IDC_LV_FINGER_LIST); switch (msg) { case WM_INITDIALOG: TranslateDialogDefault(hwndDlg); SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG_PTR) new FPModifyMap()); SendDlgItemMessage(hwndDlg, IDC_LV_FINGER_LIST, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_FULLROWSELECT);// | LVS_EX_CHECKBOXES); { // add list columns LVCOLUMN lvc; // Initialize the LVCOLUMN structure. // The mask specifies that the format, width, text, and // subitem members of the structure are valid. lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM; lvc.fmt = LVCFMT_LEFT; lvc.iSubItem = 0; lvc.pszText = TranslateT(LANG_CONTACT); lvc.cx = 100; // width of column in pixels ListView_InsertColumn(lv, 0, &lvc); lvc.iSubItem = 1; lvc.pszText = TranslateT(LANG_PROTO); lvc.cx = 90; // width of column in pixels ListView_InsertColumn(lv, 1, &lvc); lvc.iSubItem = 2; lvc.pszText = TranslateT(LANG_ACTIVE); lvc.cx = 50; // width of column in pixels ListView_InsertColumn(lv, 2, &lvc); lvc.iSubItem = 3; lvc.pszText = TranslateT(LANG_VERIFIED); lvc.cx = 50; // width of column in pixels ListView_InsertColumn(lv, 3, &lvc); lvc.iSubItem = 4; lvc.pszText = TranslateT(LANG_FINGERPRINT); lvc.cx = 300; // width of column in pixels ListView_InsertColumn(lv, 4, &lvc); } SendMessage(hwndDlg, WMU_REFRESHLIST, 0, 0); return TRUE; case WMU_REFRESHLIST: // enumerate contacts, fill in list ListView_DeleteAllItems(lv); { LVITEM lvI = { 0 }; // Some code to create the list-view control. // Initialize LVITEM members that are common to all // items. lvI.mask = LVIF_TEXT | LVIF_PARAM;// | LVIF_NORECOMPUTE;// | LVIF_IMAGE; TCHAR *user, hash[45] = { 0 }; for (ConnContext *context = otr_user_state->context_root; context; context = context->next) { if (context->app_data) { user = (TCHAR*)contact_get_nameT((UINT_PTR)context->app_data); if (user) { PROTOACCOUNT *pa = Proto_GetAccount(context->protocol); for (Fingerprint *fp = context->fingerprint_root.next; fp; fp = fp->next) { otrl_privkey_hash_to_humanT(hash, fp->fingerprint); lvI.iSubItem = 0; lvI.lParam = (LPARAM)fp; lvI.pszText = user; int d = ListView_InsertItem(lv, &lvI); ListView_SetItemText(lv, d, 1, pa->tszAccountName); ListView_SetItemText(lv, d, 2, (context->active_fingerprint == fp) ? TranslateT(LANG_YES) : TranslateT(LANG_NO)); ListView_SetItemText(lv, d, 3, (fp->trust && fp->trust[0] != '\0') ? TranslateT(LANG_YES) : TranslateT(LANG_NO)); ListView_SetItemText(lv, d, 4, hash); } } } } } return TRUE; case WM_COMMAND: switch (HIWORD(wParam)) { int sel; case BN_CLICKED: switch (LOWORD(wParam)) { case IDC_BTN_FINGER_DONTTRUST: sel = ListView_GetSelectionMark(GetDlgItem(hwndDlg, IDC_LV_FINGER_LIST)); if (sel != -1) { LVITEM lvi = { 0 }; lvi.mask = LVIF_PARAM; lvi.iItem = sel; ListView_GetItem(GetDlgItem(hwndDlg, IDC_LV_FINGER_LIST), &lvi); Fingerprint *fp = (Fingerprint*)lvi.lParam; FPModifyMap* fpm = (FPModifyMap*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); (*fpm)[fp] = FPM_NOTRUST; ListView_SetItemText(GetDlgItem(hwndDlg, IDC_LV_FINGER_LIST), sel, 3, TranslateT(LANG_NO)); SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); } break; case IDC_BTN_FINGER_TRUST: sel = ListView_GetSelectionMark(GetDlgItem(hwndDlg, IDC_LV_FINGER_LIST)); if (sel != -1) { LVITEM lvi = { 0 }; lvi.mask = LVIF_PARAM; lvi.iItem = sel; ListView_GetItem(GetDlgItem(hwndDlg, IDC_LV_FINGER_LIST), &lvi); Fingerprint *fp = (Fingerprint*)lvi.lParam; FPModifyMap* fpm = (FPModifyMap*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); (*fpm)[fp] = FPM_VERIFY; ListView_SetItemText(GetDlgItem(hwndDlg, IDC_LV_FINGER_LIST), sel, 3, TranslateT(LANG_YES)); SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); } break; case IDC_BTN_FINGER_FORGET: sel = ListView_GetSelectionMark(GetDlgItem(hwndDlg, IDC_LV_FINGER_LIST)); if (sel != -1) { LVITEM lvi = { 0 }; lvi.mask = LVIF_PARAM; lvi.iItem = sel; ListView_GetItem(GetDlgItem(hwndDlg, IDC_LV_FINGER_LIST), &lvi); Fingerprint *fp = (Fingerprint*)lvi.lParam; if (fp->context->active_fingerprint == fp) { MCONTACT hContact = (UINT_PTR)fp->context->app_data; TCHAR buff[1024], hash[45]; otrl_privkey_hash_to_humanT(hash, fp->fingerprint); PROTOACCOUNT *pa = Proto_GetAccount(GetContactProto(hContact)); mir_sntprintf(buff, TranslateT(LANG_FINGERPRINT_STILL_IN_USE), hash, contact_get_nameT(hContact), pa->tszAccountName); ShowError(buff); } else { FPModifyMap* fpm = (FPModifyMap*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); (*fpm)[fp] = FPM_DELETE; ListView_DeleteItem(GetDlgItem(hwndDlg, IDC_LV_FINGER_LIST), sel); SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); } } break; } } break; case WM_NOTIFY: if (((LPNMHDR)lParam)->code == (UINT)PSN_APPLY) { // handle apply FPModifyMap *fpm = (FPModifyMap*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); // Iterate over the map and print out all key/value pairs. // Using a const_iterator since we are not going to change the values. for (FPModifyMap::const_iterator it = fpm->begin(); it != fpm->end(); ++it) { if (!it->first) continue; switch (it->second) { case FPM_DELETE: if (it->first->context->active_fingerprint == it->first) { MCONTACT hContact = (UINT_PTR)it->first->context->app_data; TCHAR buff[1024], hash[45]; otrl_privkey_hash_to_humanT(hash, it->first->fingerprint); PROTOACCOUNT *pa = Proto_GetAccount(GetContactProto(hContact)); mir_sntprintf(buff, TranslateT(LANG_FINGERPRINT_NOT_DELETED), hash, contact_get_nameT(hContact), pa->tszAccountName); ShowError(buff); } else otrl_context_forget_fingerprint(it->first, 1); break; case FPM_VERIFY: otrl_context_set_trust(it->first, "verified"); if (it->first == it->first->context->active_fingerprint) VerifyFingerprint(it->first->context, true); break; case FPM_NOTRUST: otrl_context_set_trust(it->first, NULL); if (it->first == it->first->context->active_fingerprint) VerifyFingerprint(it->first->context, false); break; } } if (!fpm->empty()) otr_gui_write_fingerprints(0); fpm->clear(); SendMessage(hwndDlg, WMU_REFRESHLIST, 0, 0); return TRUE; } break; case WM_DESTROY: FPModifyMap *fpm = (FPModifyMap*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); fpm->clear(); delete fpm; break; } return FALSE; }
static INT_PTR CALLBACK DlgProcMirOTROptsContacts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { HWND lv = GetDlgItem(hwndDlg, IDC_LV_CONT_CONTACTS); switch (msg) { case WM_INITDIALOG: TranslateDialogDefault(hwndDlg); { SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG_PTR) new ContactPolicyMap()); HWND cmb = GetDlgItem(hwndDlg, IDC_CMB_CONT_POLICY); SendMessage(cmb, CB_ADDSTRING, 0, (WPARAM)TranslateT(LANG_POLICY_DEFAULT)); SendMessage(cmb, CB_ADDSTRING, 0, (WPARAM)TranslateT(LANG_POLICY_ALWAYS)); SendMessage(cmb, CB_ADDSTRING, 0, (WPARAM)TranslateT(LANG_POLICY_OPP)); SendMessage(cmb, CB_ADDSTRING, 0, (WPARAM)TranslateT(LANG_POLICY_MANUAL)); SendMessage(cmb, CB_ADDSTRING, 0, (WPARAM)TranslateT(LANG_POLICY_NEVER)); EnableWindow(GetDlgItem(hwndDlg, IDC_CMB_CONT_POLICY), FALSE); SendDlgItemMessage(hwndDlg, IDC_LV_CONT_CONTACTS, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_FULLROWSELECT);// | LVS_EX_CHECKBOXES); // add list columns LVCOLUMN lvc; // Initialize the LVCOLUMN structure. // The mask specifies that the format, width, text, and // subitem members of the structure are valid. lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM; lvc.fmt = LVCFMT_LEFT; lvc.iSubItem = 0; lvc.pszText = TranslateT(LANG_CONTACT); lvc.cx = 150; // width of column in pixels ListView_InsertColumn(lv, 0, &lvc); lvc.iSubItem = 1; lvc.pszText = TranslateT(LANG_PROTO); lvc.cx = 100; // width of column in pixels ListView_InsertColumn(lv, 1, &lvc); lvc.iSubItem = 2; lvc.pszText = TranslateT(LANG_POLICY); lvc.cx = 90; // width of column in pixels ListView_InsertColumn(lv, 2, &lvc); lvc.iSubItem = 3; lvc.pszText = TranslateT(LANG_HTMLCONV); lvc.cx = 80; // width of column in pixels ListView_InsertColumn(lv, 3, &lvc); } SendMessage(hwndDlg, WMU_REFRESHLIST, 0, 0); return TRUE; case WMU_REFRESHLIST: ListView_DeleteAllItems(lv); { LVITEM lvI = { 0 }; // Some code to create the list-view control. // Initialize LVITEM members that are common to all // items. lvI.mask = LVIF_TEXT | LVIF_PARAM;// | LVIF_NORECOMPUTE;// | LVIF_IMAGE; for (MCONTACT hContact = db_find_first(); hContact; hContact = db_find_next(hContact)) { const char *proto = GetContactProto(hContact); if (proto && db_get_b(hContact, proto, "ChatRoom", 0) == 0 && Proto_IsProtoOnContact(hContact, MODULENAME) // ignore chatrooms && mir_strcmp(proto, META_PROTO) != 0) // and MetaContacts { lvI.iItem = 0; lvI.iSubItem = 0; lvI.lParam = hContact; lvI.pszText = (TCHAR*)contact_get_nameT(hContact); lvI.iItem = ListView_InsertItem(lv, &lvI); PROTOACCOUNT *pa = Proto_GetAccount(proto); ListView_SetItemText(lv, lvI.iItem, 1, pa->tszAccountName); ListView_SetItemText(lv, lvI.iItem, 2, (TCHAR*)policy_to_string((OtrlPolicy)db_get_dw(hContact, MODULENAME, "Policy", CONTACT_DEFAULT_POLICY))); ListView_SetItemText(lv, lvI.iItem, 3, (db_get_b(hContact, MODULENAME, "HTMLConv", 0)) ? TranslateT(LANG_YES) : TranslateT(LANG_NO)); } } } return TRUE; case WM_COMMAND: switch (HIWORD(wParam)) { case CBN_SELCHANGE: switch (LOWORD(wParam)) { case IDC_CMB_CONT_POLICY: int iUser = ListView_GetSelectionMark(GetDlgItem(hwndDlg, IDC_LV_CONT_CONTACTS)); if (iUser == -1) break; int sel = SendDlgItemMessage(hwndDlg, IDC_CMB_CONT_POLICY, CB_GETCURSEL, 0, 0); if (sel == CB_ERR) break; int len = SendDlgItemMessage(hwndDlg, IDC_CMB_CONT_POLICY, CB_GETLBTEXTLEN, sel, 0); if (len < 0) break; TCHAR *text = new TCHAR[len + 1]; SendDlgItemMessage(hwndDlg, IDC_CMB_CONT_POLICY, CB_GETLBTEXT, sel, (LPARAM)text); ListView_SetItemText(GetDlgItem(hwndDlg, IDC_LV_CONT_CONTACTS), iUser, 2, text); OtrlPolicy policy = policy_from_string(text); delete[] text; LVITEM lvi = { 0 }; lvi.mask = LVIF_PARAM; lvi.iItem = iUser; lvi.iSubItem = 0; ListView_GetItem(GetDlgItem(hwndDlg, IDC_LV_CONT_CONTACTS), &lvi); ContactPolicyMap* cpm = (ContactPolicyMap*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); MCONTACT hContact = (MCONTACT)lvi.lParam; (*cpm)[hContact].policy = policy; SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); break; } break; } break; case WM_NOTIFY: if (((LPNMHDR)lParam)->code == PSN_APPLY) { // handle apply ContactPolicyMap *cpm = (ContactPolicyMap*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); // Iterate over the map and print out all key/value pairs. // Using a const_iterator since we are not going to change the values. for (ContactPolicyMap::const_iterator it = cpm->begin(); it != cpm->end(); ++it) { if (!it->first) continue; db_set_dw(it->first, MODULENAME, "Policy", (DWORD)it->second.policy); db_set_b(it->first, MODULENAME, "HTMLConv", it->second.htmlconv); } return TRUE; } if (((LPNMHDR)lParam)->hwndFrom == lv) { LPNMLISTVIEW notif = (LPNMLISTVIEW)lParam; if (((LPNMHDR)lParam)->code == LVN_ITEMCHANGED && (notif->uNewState & LVIS_SELECTED)) { if (notif->iItem == -1) { SendDlgItemMessage(hwndDlg, IDC_CMB_CONT_POLICY, CB_SETCURSEL, (LPARAM)-1, 0); EnableWindow(GetDlgItem(hwndDlg, IDC_CMB_CONT_POLICY), FALSE); } else { EnableWindow(GetDlgItem(hwndDlg, IDC_CMB_CONT_POLICY), TRUE); TCHAR buff[50]; ListView_GetItemText(((LPNMHDR)lParam)->hwndFrom, notif->iItem, 2, buff, _countof(buff)); SendDlgItemMessage(hwndDlg, IDC_CMB_CONT_POLICY, CB_SELECTSTRING, (LPARAM)-1, (WPARAM)buff); } } else if (((LPNMHDR)lParam)->code == NM_CLICK) { if (notif->iSubItem == 3) { LVITEM lvi; lvi.mask = LVIF_PARAM; lvi.iItem = notif->iItem; if (lvi.iItem < 0) return FALSE; lvi.iSubItem = 0; SendDlgItemMessage(hwndDlg, IDC_LV_CONT_CONTACTS, LVM_GETITEM, 0, (LPARAM)&lvi); MCONTACT hContact = (MCONTACT)lvi.lParam; ContactPolicyMap *cp = (ContactPolicyMap *)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); TCHAR buff[50]; ListView_GetItemText(((LPNMHDR)lParam)->hwndFrom, lvi.iItem, 3, buff, _countof(buff)); if (_tcsncmp(buff, TranslateT(LANG_YES), 50) == 0) { (*cp)[hContact].htmlconv = HTMLCONV_DISABLE; ListView_SetItemText(((LPNMHDR)lParam)->hwndFrom, lvi.iItem, 3, TranslateT(LANG_NO)); } else { (*cp)[hContact].htmlconv = HTMLCONV_ENABLE; ListView_SetItemText(((LPNMHDR)lParam)->hwndFrom, lvi.iItem, 3, TranslateT(LANG_YES)); } SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); } } } break; case WM_DESTROY: ContactPolicyMap *cpm = (ContactPolicyMap*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); cpm->clear(); delete cpm; break; } return FALSE; }
static INT_PTR CALLBACK DlgProcMirOTROptsProto(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { HWND lv = GetDlgItem(hwndDlg, IDC_LV_PROTO_PROTOS); int sel; switch (msg) { case WM_INITDIALOG: TranslateDialogDefault(hwndDlg); { HWND cmb = GetDlgItem(hwndDlg, IDC_CMB_PROTO_POLICY); SendMessage(cmb, CB_ADDSTRING, 0, (WPARAM)TranslateT(LANG_POLICY_DEFAULT)); SendMessage(cmb, CB_ADDSTRING, 0, (WPARAM)TranslateT(LANG_POLICY_ALWAYS)); SendMessage(cmb, CB_ADDSTRING, 0, (WPARAM)TranslateT(LANG_POLICY_OPP)); SendMessage(cmb, CB_ADDSTRING, 0, (WPARAM)TranslateT(LANG_POLICY_MANUAL)); SendMessage(cmb, CB_ADDSTRING, 0, (WPARAM)TranslateT(LANG_POLICY_NEVER)); SendDlgItemMessage(hwndDlg, IDC_CMB_PROTO_POLICY, CB_SETCURSEL, (LPARAM)-1, 0); EnableWindow(GetDlgItem(hwndDlg, IDC_CMB_PROTO_POLICY), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDC_BTN_PROTO_NEWKEY), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDC_BTN_PROTO_FORGET), FALSE); } SendMessage(lv, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_FULLROWSELECT);// | LVS_EX_CHECKBOXES); { // add list columns LVCOLUMN lvc; // Initialize the LVCOLUMN structure. // The mask specifies that the format, width, text, and // subitem members of the structure are valid. lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM; lvc.fmt = LVCFMT_LEFT; lvc.iSubItem = 0; lvc.pszText = TranslateT(LANG_PROTO); lvc.cx = 85; // width of column in pixels ListView_InsertColumn(lv, 0, &lvc); lvc.iSubItem = 1; lvc.pszText = TranslateT(LANG_POLICY); lvc.cx = 80; // width of column in pixels ListView_InsertColumn(lv, 1, &lvc); lvc.iSubItem = 2; lvc.pszText = TranslateT(LANG_FINGERPRINT); lvc.cx = 275; // width of column in pixels ListView_InsertColumn(lv, 2, &lvc); } PostMessage(hwndDlg, WMU_REFRESHPROTOLIST, 0, 0); return TRUE; case WMU_REFRESHPROTOLIST: ListView_DeleteAllItems(lv); { LV_ITEM item = { 0 }; int num_protocols; PROTOACCOUNT **pppDesc; Proto_EnumAccounts(&num_protocols, &pppDesc); for (int i = 0; i < num_protocols; i++) { if (!mir_strcmp(pppDesc[i]->szModuleName, META_PROTO)) continue; if ((CallProtoService(pppDesc[i]->szModuleName, PS_GETCAPS, PFLAGNUM_1, 0) & PF1_IM) == 0) continue; item.mask = LVIF_TEXT | LVIF_PARAM; item.pszText = pppDesc[i]->tszAccountName; item.lParam = (LPARAM)pppDesc[i]->szModuleName; int ilvItem = ListView_InsertItem(lv, &item); ListView_SetItemText(lv, ilvItem, 1, (TCHAR*)policy_to_string(db_get_dw(0, MODULENAME"_ProtoPol", pppDesc[i]->szModuleName, CONTACT_DEFAULT_POLICY))); char fprint[45]; if (otrl_privkey_fingerprint(otr_user_state, fprint, pppDesc[i]->szModuleName, pppDesc[i]->szModuleName)) { TCHAR *temp = mir_a2t(fprint); ListView_SetItemText(lv, ilvItem, 2, temp); mir_free(temp); } } } return TRUE; case WM_COMMAND: switch (HIWORD(wParam)) { case BN_CLICKED: switch (LOWORD(wParam)) { case IDC_BTN_PROTO_NEWKEY: sel = ListView_GetSelectionMark(GetDlgItem(hwndDlg, IDC_LV_PROTO_PROTOS)); if (sel != -1) { PROTOREGENKEYOPTIONS *opts = new PROTOREGENKEYOPTIONS(); opts->refresh = hwndDlg; ListView_GetItemText(GetDlgItem(hwndDlg, IDC_LV_PROTO_PROTOS), sel, 0, opts->proto, _countof(opts->proto)); CloseHandle((HANDLE)_beginthreadex(0, 0, regen_key_thread, opts, 0, 0)); } break; case IDC_BTN_PROTO_FORGET: sel = ListView_GetSelectionMark(GetDlgItem(hwndDlg, IDC_LV_PROTO_PROTOS)); if (sel != -1) { TCHAR buff_proto[128]; ListView_GetItemText(GetDlgItem(hwndDlg, IDC_LV_PROTO_PROTOS), sel, 0, buff_proto, _countof(buff_proto)); TCHAR buff[512]; mir_sntprintf(buff, TranslateT(LANG_OTR_ASK_REMOVEKEY), buff_proto); if (IDYES == MessageBox(hwndDlg, buff, TranslateT(LANG_OTR_INFO), MB_ICONQUESTION | MB_YESNO)) { char *proto = GetProtoName(lv, sel); if (proto == NULL) break; OtrlPrivKey *key = otrl_privkey_find(otr_user_state, proto, proto); if (key) { otrl_privkey_forget(key); otrl_privkey_write(otr_user_state, _T2A(g_private_key_filename)); ListView_SetItemText(GetDlgItem(hwndDlg, IDC_LV_PROTO_PROTOS), sel, 2, _T("")); } } } } break; case CBN_SELCHANGE: switch (LOWORD(wParam)) { case IDC_CMB_PROTO_POLICY: int proto = ListView_GetSelectionMark(GetDlgItem(hwndDlg, IDC_LV_PROTO_PROTOS)); if (proto == -1) break; int sel = SendDlgItemMessage(hwndDlg, IDC_CMB_PROTO_POLICY, CB_GETCURSEL, 0, 0); if (sel == CB_ERR) break; int len = SendDlgItemMessage(hwndDlg, IDC_CMB_PROTO_POLICY, CB_GETLBTEXTLEN, sel, 0); if (len < 0) break; TCHAR *text = new TCHAR[len + 1]; SendDlgItemMessage(hwndDlg, IDC_CMB_PROTO_POLICY, CB_GETLBTEXT, sel, (LPARAM)text); ListView_SetItemText(GetDlgItem(hwndDlg, IDC_LV_PROTO_PROTOS), proto, 1, text); delete[] text; SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); } break; } break; case WM_NOTIFY: if (((LPNMHDR)lParam)->code == LVN_ITEMCHANGED && ((LPNMHDR)lParam)->hwndFrom == lv) { LPNMLISTVIEW notif = (LPNMLISTVIEW)lParam; if ((notif->uNewState & LVIS_SELECTED) == 0) break; if (notif->iItem == -1) { SendDlgItemMessage(hwndDlg, IDC_CMB_PROTO_POLICY, CB_SETCURSEL, (LPARAM)-1, 0); EnableWindow(GetDlgItem(hwndDlg, IDC_CMB_PROTO_POLICY), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDC_BTN_PROTO_NEWKEY), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDC_BTN_PROTO_FORGET), FALSE); } else { EnableWindow(GetDlgItem(hwndDlg, IDC_CMB_PROTO_POLICY), TRUE); EnableWindow(GetDlgItem(hwndDlg, IDC_BTN_PROTO_NEWKEY), TRUE); EnableWindow(GetDlgItem(hwndDlg, IDC_BTN_PROTO_FORGET), TRUE); TCHAR buff[50]; ListView_GetItemText(((LPNMHDR)lParam)->hwndFrom, notif->iItem, 1, buff, _countof(buff)); SendDlgItemMessage(hwndDlg, IDC_CMB_PROTO_POLICY, CB_SELECTSTRING, (LPARAM)-1, (WPARAM)buff); } } else if (((LPNMHDR)lParam)->code == PSN_APPLY) { int cnt = ListView_GetItemCount(lv); TCHAR policy[64]; for (int i = 0; i < cnt; ++i) { char *proto = GetProtoName(lv, i); if (proto == NULL) continue; ListView_GetItemText(lv, i, 1, policy, _countof(policy)); db_set_dw(0, MODULENAME"_ProtoPol", proto, policy_from_string(policy)); } // handle apply return TRUE; } break; } return FALSE; }
long APIENTRY NewFileProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_INITDIALOG: if (!CreateNewFileData(hwnd)) { EndDialog(hwnd, 1); } else { CenterWindow(hwnd); } return 1; case WM_NOTIFY: if (((LPNMHDR)lParam)->code == NM_CUSTOMDRAW) { SetWindowLong(hwnd, DWL_MSGRESULT, CustomDrawNewFile(hwnd, (LPNMLVCUSTOMDRAW)lParam)); return TRUE; } else if (((LPNMHDR)lParam)->code == LVN_KEYDOWN) { switch (((LPNMLVKEYDOWN)lParam)->wVKey) { case VK_INSERT: if (GetKeyState(VK_CONTROL) & 0x80000000) { HWND hwndLV = GetDlgItem(hwnd, IDC_LVNEWFILE); ListView_SetSelectionMark(hwndLV, -1); } else { HWND hwndLV = GetDlgItem(hwnd, IDC_LVNEWFILE); int i = ListView_GetSelectionMark(hwndLV); ListView_SetSelectionMark(hwndLV, i); ListView_SetItemState(hwndLV, i, LVIS_SELECTED, LVIS_SELECTED); } break; } } return 0; case WM_COMMAND: switch (wParam &0xffff) { case IDOK: if (ParseNewFileData(hwnd)) EndDialog(hwnd, IDOK); break; case IDCANCEL: EndDialog(hwnd, IDCANCEL); break; case IDHELP: ContextHelp(IDH_NEW_FILE_DIALOG); break; } break; case WM_CLOSE: PostMessage(hwnd, WM_COMMAND, IDCANCEL, 0); break; } return 0; }