From d123e0ce94bf90b2adb0a4000930eb467e293226 Mon Sep 17 00:00:00 2001 From: sje Date: Wed, 1 Nov 2006 14:48:34 +0000 Subject: git-svn-id: https://server.scottellis.com.au/svn/mim_plugs@16 4f64403b-2f21-0410-a795-97e2b3489a10 --- updater/conf_comp_dialog.cpp | 205 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 205 insertions(+) create mode 100644 updater/conf_comp_dialog.cpp (limited to 'updater/conf_comp_dialog.cpp') diff --git a/updater/conf_comp_dialog.cpp b/updater/conf_comp_dialog.cpp new file mode 100644 index 0000000..e6c3445 --- /dev/null +++ b/updater/conf_comp_dialog.cpp @@ -0,0 +1,205 @@ +#include "common.h" +#include "conf_comp_dialog.h" + +void FillFolder(TCHAR *folder_name, StringList *filenames) { + TCHAR mask[MAX_PATH], filename[MAX_PATH], *p; + + _tcscpy(mask, folder_name); + _tcscat(mask, _T("\\*.*")); + + _tcscpy(filename, folder_name); + _tcscat(filename, _T("\\")); + p = (filename + _tcslen(filename)); + + WIN32_FIND_DATA findData; + HANDLE hFileSearch = FindFirstFile(mask, &findData); + if(hFileSearch != INVALID_HANDLE_VALUE) { + do { + if(p) + _tcscpy(p, findData.cFileName); + + if(findData.cFileName[0] != '.') { + if(findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { + FillFolder(filename, filenames); + } else { + filenames->push_back(filename); + } + } + } while(FindNextFile(hFileSearch, &findData)); + FindClose(hFileSearch); + } +} + +BOOL CALLBACK DlgProcConfirmComponents(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { + switch ( msg ) { + case WM_INITDIALOG: + TranslateDialogDefault( hwndDlg ); + SetWindowLong(hwndDlg, GWL_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 + { + StringList 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; + + + unsigned int temp_folder_name_len = _tcslen(options.temp_folder); + TCHAR *p; + + FillFolder(options.temp_folder, &filenames); + for(filenames.reset(); filenames.current(); filenames.next()) { + if(_tcslen(filenames.current()) > temp_folder_name_len) { + p = filenames.current() + 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 + SetWindowLong(hwndDlg, GWL_USERDATA, 1L); + } + + 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(GetWindowLong(hwndDlg, GWL_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: + SetWindowLong(hwndDlg, GWL_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 = _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: + SetWindowLong(hwndDlg, GWL_USERDATA, 0); + Utils_SaveWindowPosition(hwndDlg,0,MODULE,"ConfirmCompWindow"); + EndDialog(hwndDlg, IDCANCEL); + return TRUE; + } + } + break; + } + + return FALSE; + +} -- cgit v1.2.3