From 927add1b301c9f38808f3d35854d3ce896bff095 Mon Sep 17 00:00:00 2001 From: Vadim Dashevskiy Date: Sat, 19 May 2012 11:12:34 +0000 Subject: adding SpellChecker plugin git-svn-id: http://svn.miranda-ng.org/main/trunk@69 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/Updater/conf_comp_dialog.cpp | 204 +++++++++++++++++++++++++++++++++++ 1 file changed, 204 insertions(+) create mode 100644 plugins/Updater/conf_comp_dialog.cpp (limited to 'plugins/Updater/conf_comp_dialog.cpp') diff --git a/plugins/Updater/conf_comp_dialog.cpp b/plugins/Updater/conf_comp_dialog.cpp new file mode 100644 index 0000000000..b2ab25227a --- /dev/null +++ b/plugins/Updater/conf_comp_dialog.cpp @@ -0,0 +1,204 @@ +#include "common.h" +#include "conf_comp_dialog.h" + +void FillFolder(TCHAR *folder_name, StrList *filenames) { + TCHAR filename[MAX_PATH], *p; + + mir_sntprintf(filename, SIZEOF(filename), _T("%s\\*.*"), folder_name); + p = _tcsrchr(filename, '\\' ) + 1; + + WIN32_FIND_DATA findData; + HANDLE hFileSearch = FindFirstFile(filename, &findData); + if (hFileSearch != INVALID_HANDLE_VALUE) + { + do { + _tcscpy(p, findData.cFileName); + + if (findData.cFileName[0] != '.') + { + if(findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { + FillFolder(filename, filenames); + } else { + filenames->insert(mir_tstrdup(filename)); + } + } + } while(FindNextFile(hFileSearch, &findData)); + FindClose(hFileSearch); + } +} + +INT_PTR CALLBACK DlgProcConfirmComponents(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { + switch ( msg ) { + case WM_INITDIALOG: + TranslateDialogDefault( hwndDlg ); + SetWindowLongPtr(hwndDlg, GWLP_USERDATA, 0); + SendMessage(GetDlgItem(hwndDlg, IDC_LIST_COMPONENTS),LVM_SETEXTENDEDLISTVIEWSTYLE, 0,LVS_EX_FULLROWSELECT | LVS_EX_CHECKBOXES); + + { + 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("Component Name"); + lvc.cx = 180; // width of column in pixels + ListView_InsertColumn(GetDlgItem(hwndDlg, IDC_LIST_COMPONENTS), 0, &lvc); + + } + + //enumerate plugins, fill in list + { + StrList filenames; + + ListView_DeleteAllItems(GetDlgItem(hwndDlg, IDC_LIST_COMPONENTS)); + + LVITEM lvI; + + // Some code to create the list-view control. + // Initialize LVITEM members that are common to all + // items. + lvI.mask = LVIF_TEXT | LVIF_NORECOMPUTE;// | LVIF_IMAGE; + + + size_t temp_folder_name_len = _tcslen(options.temp_folder); + TCHAR *p; + + FillFolder(options.temp_folder, &filenames); + for (int i = 0; i < filenames.getCount(); ++i) + { + if(_tcslen(filenames[i]) > temp_folder_name_len) + { + p = filenames[i] + temp_folder_name_len + 1; + + lvI.iSubItem = 0; + lvI.pszText = p; + lvI.iItem = ListView_InsertItem(GetDlgItem(hwndDlg, IDC_LIST_COMPONENTS), &lvI); + + ListView_SetCheckState(GetDlgItem(hwndDlg, IDC_LIST_COMPONENTS), lvI.iItem, TRUE); + } + } + + // do this after filling list - enables 'ITEMCHANGED' below + SetWindowLongPtr(hwndDlg, GWLP_USERDATA, 1); + } + + Utils_RestoreWindowPositionNoSize(hwndDlg,0,MODULE,"ConfirmCompWindow"); + + return TRUE; + + case WM_NOTIFY: + if(((LPNMHDR) lParam)->hwndFrom == GetDlgItem(hwndDlg, IDC_LIST_COMPONENTS)) { + switch (((LPNMHDR) lParam)->code) { + + case LVN_ITEMCHANGED: + if(GetWindowLongPtr(hwndDlg, GWLP_USERDATA)) { + NMLISTVIEW *nmlv = (NMLISTVIEW *)lParam; + + if((nmlv->uNewState ^ nmlv->uOldState) & LVIS_STATEIMAGEMASK) { + + int size = ListView_GetItemCount(GetDlgItem(hwndDlg, IDC_LIST_COMPONENTS)); + bool enableOk = false; + for(int i = 0; i < size; i++) { + if(ListView_GetCheckState(GetDlgItem(hwndDlg, IDC_LIST_COMPONENTS), i)) { + enableOk = true; + break; + } + } + HWND hwOk = GetDlgItem(hwndDlg, IDOK); + EnableWindow(hwOk, enableOk ? TRUE : FALSE); + } + } + break; + } + } + break; + case WM_COMMAND: + if ( HIWORD( wParam ) == BN_CLICKED ) { + switch( LOWORD( wParam )) { + case IDC_BTN_SELECTALL: + { + int size = ListView_GetItemCount(GetDlgItem(hwndDlg, IDC_LIST_COMPONENTS)); + bool enableOk = false; + for(int i = 0; i < size; i++) { + ListView_SetCheckState(GetDlgItem(hwndDlg, IDC_LIST_COMPONENTS), i, TRUE); + enableOk = true; + } + HWND hwOk = GetDlgItem(hwndDlg, IDOK); + EnableWindow(hwOk, enableOk ? TRUE : FALSE); + } + return TRUE; + case IDC_BTN_SELECTINV: + { + int size = ListView_GetItemCount(GetDlgItem(hwndDlg, IDC_LIST_COMPONENTS)); + bool enableOk = false, flag; + for(int i = 0; i < size; i++) { + flag = !ListView_GetCheckState(GetDlgItem(hwndDlg, IDC_LIST_COMPONENTS), i); + ListView_SetCheckState(GetDlgItem(hwndDlg, IDC_LIST_COMPONENTS), i, flag); + enableOk |= flag; + } + HWND hwOk = GetDlgItem(hwndDlg, IDOK); + EnableWindow(hwOk, enableOk ? TRUE : FALSE); + } + return TRUE; + case IDC_BTN_SELECTDLLS: + { + int size = ListView_GetItemCount(GetDlgItem(hwndDlg, IDC_LIST_COMPONENTS)); + TCHAR fname_buff[MAX_PATH]; + bool enableOk = false, flag; + for(int i = 0; i < size; i++) { + ListView_GetItemText(GetDlgItem(hwndDlg, IDC_LIST_COMPONENTS), i, 0, fname_buff, MAX_PATH); + flag = _tcsstr(fname_buff, _T(".dll")) != 0; + ListView_SetCheckState(GetDlgItem(hwndDlg, IDC_LIST_COMPONENTS), i, flag); + enableOk |= flag; + } + HWND hwOk = GetDlgItem(hwndDlg, IDOK); + EnableWindow(hwOk, enableOk ? TRUE : FALSE); + } + return TRUE; + case IDOK: + SetWindowLongPtr(hwndDlg, GWLP_USERDATA, 0); + Utils_SaveWindowPosition(hwndDlg,0,MODULE,"ConfirmCompWindow"); + + { + TCHAR fname_buff[MAX_PATH]; + _tcscpy(fname_buff, options.temp_folder); + _tcscat(fname_buff, _T("\\")); + int path_len = (int)_tcslen(fname_buff); + TCHAR *p = fname_buff + path_len; + + int size = ListView_GetItemCount(GetDlgItem(hwndDlg, IDC_LIST_COMPONENTS)); + //bool enableOk = false; + for(int i = 0; i < size; i++) { + if(!ListView_GetCheckState(GetDlgItem(hwndDlg, IDC_LIST_COMPONENTS), i)) { + // delete file + ListView_GetItemText(GetDlgItem(hwndDlg, IDC_LIST_COMPONENTS), i, 0, p, MAX_PATH - path_len); + DeleteFile(fname_buff); + + // attempt to remove parent folder, if any, in case it's now empty + TCHAR *last_slash = _tcsrchr(fname_buff, _T('\\')); + if(last_slash != p - 1) { + *last_slash = 0; + RemoveDirectory(fname_buff); + } + } + } + } + + EndDialog(hwndDlg, IDOK); + return TRUE; + case IDCANCEL: + SetWindowLongPtr(hwndDlg, GWLP_USERDATA, 0); + Utils_SaveWindowPosition(hwndDlg,0,MODULE,"ConfirmCompWindow"); + EndDialog(hwndDlg, IDCANCEL); + return TRUE; + } + } + break; + } + + return FALSE; + +} -- cgit v1.2.3