[SHELL32] - Implement a skeleton DlgProc for the folder options general dialog
authorRobert Naumann <gonzomdx@gmail.com>
Mon, 16 May 2016 11:58:31 +0000 (11:58 +0000)
committerRobert Naumann <gonzomdx@gmail.com>
Mon, 16 May 2016 11:58:31 +0000 (11:58 +0000)
- show icons depending on button states in folder options general dialog

svn path=/trunk/; revision=71343

reactos/dll/win32/shell32/dialogs/folder_options.cpp

index c400e40..7aed1ef 100644 (file)
@@ -84,6 +84,123 @@ static FOLDER_VIEW_ENTRY s_Options[] =
 
 EXTERN_C HPSXA WINAPI SHCreatePropSheetExtArrayEx(HKEY hKey, LPCWSTR pszSubKey, UINT max_iface, IDataObject *pDataObj);
 
+static VOID
+UpdateGeneralIcons(HWND hDlg)
+{
+    HWND hwndTaskIcon, hwndFolderIcon, hwndClickIcon;
+    HICON hTaskIcon = NULL, hFolderIcon = NULL, hClickIcon = NULL;
+    LPTSTR lpTaskIconName = NULL, lpFolderIconName = NULL, lpClickIconName = NULL;
+
+    // show task setting icon
+    if(IsDlgButtonChecked(hDlg, IDC_FOLDER_OPTIONS_COMMONTASKS) == BST_CHECKED)
+        lpTaskIconName = MAKEINTRESOURCE(IDI_SHELL_SHOW_COMMON_TASKS);
+    else if(IsDlgButtonChecked(hDlg, IDC_FOLDER_OPTIONS_CLASSICFOLDERS) == BST_CHECKED)
+        lpTaskIconName = MAKEINTRESOURCE(IDI_SHELL_CLASSIC_FOLDERS);
+
+    if (lpTaskIconName)
+    {
+        if (hTaskIcon)
+        {
+            DeleteObject(hTaskIcon);
+        }
+
+        hTaskIcon = (HICON)LoadImage(shell32_hInstance,
+                                              lpTaskIconName,
+                                              IMAGE_ICON,
+                                              0,
+                                              0,
+                                              LR_DEFAULTCOLOR);
+        if (hTaskIcon)
+        {
+            hwndTaskIcon = GetDlgItem(hDlg,
+                                    IDC_FOLDER_OPTIONS_TASKICON);
+            if (hwndTaskIcon)
+            {
+                SendMessage(hwndTaskIcon,
+                            STM_SETIMAGE,
+                            IMAGE_ICON,
+                            (LPARAM)hTaskIcon);
+            }
+        }
+    }
+    
+    // show Folder setting icons
+    if(IsDlgButtonChecked(hDlg, IDC_FOLDER_OPTIONS_SAMEWINDOW) == BST_CHECKED)
+        lpFolderIconName = MAKEINTRESOURCE(IDI_SHELL_OPEN_IN_SOME_WINDOW);
+    else if(IsDlgButtonChecked(hDlg, IDC_FOLDER_OPTIONS_OWNWINDOW) == BST_CHECKED)
+        lpFolderIconName = MAKEINTRESOURCE(IDI_SHELL_OPEN_IN_NEW_WINDOW);
+    
+    if (lpFolderIconName)
+    {
+        if (hFolderIcon)
+        {
+            DeleteObject(hFolderIcon);
+        }
+        
+        hFolderIcon = (HICON)LoadImage(shell32_hInstance,
+                                              lpFolderIconName,
+                                              IMAGE_ICON,
+                                              0,
+                                              0,
+                                              LR_DEFAULTCOLOR);
+        if (hFolderIcon)
+        {
+            hwndFolderIcon = GetDlgItem(hDlg,
+                                    IDC_FOLDER_OPTIONS_FOLDERICON);
+            if (hwndFolderIcon)
+            {
+                SendMessage(hwndFolderIcon,
+                            STM_SETIMAGE,
+                            IMAGE_ICON,
+                            (LPARAM)hFolderIcon);
+            }
+        }
+    }
+
+    // Show click setting icon
+    if(IsDlgButtonChecked(hDlg, IDC_FOLDER_OPTIONS_SINGLECLICK) == BST_CHECKED)
+        lpClickIconName = MAKEINTRESOURCE(IDI_SHELL_SINGLE_CLICK_TO_OPEN);
+    else if(IsDlgButtonChecked(hDlg, IDC_FOLDER_OPTIONS_DOUBLECLICK) == BST_CHECKED)
+        lpClickIconName = MAKEINTRESOURCE(IDI_SHELL_DOUBLE_CLICK_TO_OPEN);
+
+    if (lpClickIconName)
+    {
+        if (hClickIcon)
+        {
+            DeleteObject(hClickIcon);
+        }
+        
+        hClickIcon = (HICON)LoadImage(shell32_hInstance,
+                                              lpClickIconName,
+                                              IMAGE_ICON,
+                                              0,
+                                              0,
+                                              LR_DEFAULTCOLOR);
+        if (hClickIcon)
+        {
+            hwndClickIcon = GetDlgItem(hDlg,
+                                    IDC_FOLDER_OPTIONS_CLICKICON);
+            if (hwndClickIcon)
+            {
+                SendMessage(hwndClickIcon,
+                            STM_SETIMAGE,
+                            IMAGE_ICON,
+                            (LPARAM)hClickIcon);
+            }
+        }
+    }
+
+    // Clean up
+    if(hTaskIcon)
+        DeleteObject(hTaskIcon);
+    if(hFolderIcon)
+        DeleteObject(hFolderIcon);
+    if(hClickIcon)
+        DeleteObject(hClickIcon);
+    
+    return;
+}
+
 INT_PTR
 CALLBACK
 FolderOptionsGeneralDlg(
@@ -93,6 +210,53 @@ FolderOptionsGeneralDlg(
     LPARAM lParam
 )
 {
+    switch(uMsg)
+    {
+        case WM_INITDIALOG:
+            // FIXME
+            break;
+            
+        case WM_COMMAND:
+            switch (LOWORD(wParam))
+            {
+                case IDC_FOLDER_OPTIONS_COMMONTASKS:
+                case IDC_FOLDER_OPTIONS_CLASSICFOLDERS:
+                case IDC_FOLDER_OPTIONS_SAMEWINDOW:
+                case IDC_FOLDER_OPTIONS_OWNWINDOW:
+                case IDC_FOLDER_OPTIONS_SINGLECLICK:
+                case IDC_FOLDER_OPTIONS_DOUBLECLICK:
+                    if (HIWORD(wParam) == BN_CLICKED)
+                    {
+                        UpdateGeneralIcons(hwndDlg);
+
+                        /* Enable the 'Apply' button */
+                        PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
+                    }
+                    break;
+            }
+            break;
+
+        case WM_NOTIFY:
+        {
+            LPNMHDR pnmh = (LPNMHDR)lParam;
+
+            switch (pnmh->code)
+            {
+                case PSN_SETACTIVE:
+                    break;
+
+                case PSN_APPLY:
+                    break;
+            }
+            break;
+        }
+        
+        case WM_DESTROY:
+            break;
+         
+         default: 
+             return FALSE;
+    }
     return FALSE;
 }