summaryrefslogtreecommitdiff
path: root/plugins/Updater/conf_comp_dialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/Updater/conf_comp_dialog.cpp')
-rw-r--r--plugins/Updater/conf_comp_dialog.cpp204
1 files changed, 204 insertions, 0 deletions
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;
+
+}