[EXPLORER] -Fix a parameter of OnCreateTaskbarPage(). Fix by Mark Jansen
[reactos.git] / reactos / base / shell / explorer / trayprop.cpp
index b813263..19738a0 100644 (file)
@@ -2,6 +2,7 @@
  * ReactOS Explorer
  *
  * Copyright 2006 - 2007 Thomas Weidenmueller <w3seek@reactos.org>
+ *                  2015 Robert Naumann <gonzomdx@gmail.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -24,54 +25,62 @@ typedef struct _PROPSHEET_INFO
 {
     HWND hTaskbarWnd;
     HWND hStartWnd;
-    HWND hNotiWnd;
-    HWND hToolWnd;
 
     HBITMAP hTaskbarBitmap;
+    HBITMAP hTrayBitmap;
 } PROPSHEET_INFO, *PPROPSHEET_INFO;
 
 
 static BOOL
 UpdateTaskbarBitmap(PPROPSHEET_INFO pPropInfo)
 {
-    HWND hwndLock, hwndHide, hwndGroup, hwndShowQL;
-    HWND hwndBitmap;
-    BOOL bLock, bHide, bGroup, bShowQL;
-    LPTSTR lpImageName = NULL;
+    HWND hwndLock, hwndHide, hwndGroup, hwndShowQL, hwndClock, hwndSeconds, hwndHideInactive;
+    HWND hwndTaskbarBitmap, hwndTrayBitmap;
+    BOOL bLock, bHide, bGroup, bShowQL, bShowClock, bShowSeconds, bHideInactive;
+    LPTSTR lpTaskBarImageName = NULL, lpTrayImageName = NULL;
     BOOL bRet = FALSE;
 
     hwndLock = GetDlgItem(pPropInfo->hTaskbarWnd, IDC_TASKBARPROP_LOCK);
     hwndHide = GetDlgItem(pPropInfo->hTaskbarWnd, IDC_TASKBARPROP_HIDE);
     hwndGroup = GetDlgItem(pPropInfo->hTaskbarWnd, IDC_TASKBARPROP_GROUP);
     hwndShowQL = GetDlgItem(pPropInfo->hTaskbarWnd, IDC_TASKBARPROP_SHOWQL);
+    
+    hwndClock = GetDlgItem(pPropInfo->hTaskbarWnd, IDC_TASKBARPROP_CLOCK);
+    hwndSeconds = GetDlgItem(pPropInfo->hTaskbarWnd, IDC_TASKBARPROP_SECONDS);
+    hwndHideInactive = GetDlgItem(pPropInfo->hTaskbarWnd, IDC_TASKBARPROP_HIDEICONS);
 
-    if (hwndLock && hwndHide && hwndGroup && hwndShowQL)
+    if (hwndLock && hwndHide && hwndGroup && hwndShowQL && hwndClock && hwndSeconds && hwndHideInactive)
     {
         bLock = (SendMessage(hwndLock, BM_GETCHECK, 0, 0) == BST_CHECKED);
         bHide = (SendMessage(hwndHide, BM_GETCHECK, 0, 0) == BST_CHECKED);
         bGroup = (SendMessage(hwndGroup, BM_GETCHECK, 0, 0) == BST_CHECKED);
         bShowQL = (SendMessage(hwndShowQL, BM_GETCHECK, 0, 0) == BST_CHECKED);
+        
+        bShowClock = (SendMessage(hwndClock, BM_GETCHECK, 0, 0) == BST_CHECKED);
+        bShowSeconds = (SendMessage(hwndSeconds, BM_GETCHECK, 0, 0) == BST_CHECKED);
+        bHideInactive = (SendMessage(hwndHideInactive, BM_GETCHECK, 0, 0) == BST_CHECKED);
 
         if (bHide)
-            lpImageName = MAKEINTRESOURCE(IDB_TASKBARPROP_AUTOHIDE);
+            lpTaskBarImageName = MAKEINTRESOURCE(IDB_TASKBARPROP_AUTOHIDE);
         else if (bLock  && bGroup  && bShowQL)
-            lpImageName = MAKEINTRESOURCE(IDB_TASKBARPROP_LOCK_GROUP_QL);
+            lpTaskBarImageName = MAKEINTRESOURCE(IDB_TASKBARPROP_LOCK_GROUP_QL);
         else if (bLock  && !bGroup && !bShowQL)
-            lpImageName = MAKEINTRESOURCE(IDB_TASKBARPROP_LOCK_NOGROUP_NOQL);
+            lpTaskBarImageName = MAKEINTRESOURCE(IDB_TASKBARPROP_LOCK_NOGROUP_NOQL);
         else if (bLock  && bGroup  && !bShowQL)
-            lpImageName = MAKEINTRESOURCE(IDB_TASKBARPROP_LOCK_GROUP_NOQL);
+            lpTaskBarImageName = MAKEINTRESOURCE(IDB_TASKBARPROP_LOCK_GROUP_NOQL);
         else if (bLock  && !bGroup && bShowQL)
-            lpImageName = MAKEINTRESOURCE(IDB_TASKBARPROP_LOCK_NOGROUP_QL);
+            lpTaskBarImageName = MAKEINTRESOURCE(IDB_TASKBARPROP_LOCK_NOGROUP_QL);
         else if (!bLock && !bGroup && !bShowQL)
-            lpImageName = MAKEINTRESOURCE(IDB_TASKBARPROP_NOLOCK_NOGROUP_NOQL);
+            lpTaskBarImageName = MAKEINTRESOURCE(IDB_TASKBARPROP_NOLOCK_NOGROUP_NOQL);
         else if (!bLock && bGroup  && !bShowQL)
-            lpImageName = MAKEINTRESOURCE(IDB_TASKBARPROP_NOLOCK_GROUP_NOQL);
+            lpTaskBarImageName = MAKEINTRESOURCE(IDB_TASKBARPROP_NOLOCK_GROUP_NOQL);
         else if (!bLock && !bGroup && bShowQL)
-            lpImageName = MAKEINTRESOURCE(IDB_TASKBARPROP_NOLOCK_NOGROUP_QL);
+            lpTaskBarImageName = MAKEINTRESOURCE(IDB_TASKBARPROP_NOLOCK_NOGROUP_QL);
         else if (!bLock && bGroup  && bShowQL)
-            lpImageName = MAKEINTRESOURCE(IDB_TASKBARPROP_NOLOCK_GROUP_QL);
+            lpTaskBarImageName = MAKEINTRESOURCE(IDB_TASKBARPROP_NOLOCK_GROUP_QL);
 
-        if (lpImageName)
+        
+        if (lpTaskBarImageName)
         {
             if (pPropInfo->hTaskbarBitmap)
             {
@@ -79,24 +88,86 @@ UpdateTaskbarBitmap(PPROPSHEET_INFO pPropInfo)
             }
 
             pPropInfo->hTaskbarBitmap = (HBITMAP)LoadImage(hExplorerInstance,
-                                                  lpImageName,
+                                                  lpTaskBarImageName,
                                                   IMAGE_BITMAP,
                                                   0,
                                                   0,
                                                   LR_DEFAULTCOLOR);
             if (pPropInfo->hTaskbarBitmap)
             {
-                hwndBitmap = GetDlgItem(pPropInfo->hTaskbarWnd,
+                hwndTaskbarBitmap = GetDlgItem(pPropInfo->hTaskbarWnd,
                                         IDC_TASKBARPROP_TASKBARBITMAP);
-                if (hwndBitmap)
+                if (hwndTaskbarBitmap)
                 {
-                    SendMessage(hwndBitmap,
+                    SendMessage(hwndTaskbarBitmap,
                                 STM_SETIMAGE,
                                 IMAGE_BITMAP,
                                 (LPARAM)pPropInfo->hTaskbarBitmap);
                 }
             }
         }
+        
+        if (bHideInactive)
+        {
+            /* FIXME: when the customize button is disabled, enable it. */
+            if(bShowClock)
+            {
+                /* FIXME: when the seconds checkbox is disabled, enable it. */
+                if(bShowSeconds)
+                    lpTrayImageName = MAKEINTRESOURCE(IDB_SYSTRAYPROP_HIDE_SECONDS);
+                else
+                    lpTrayImageName = MAKEINTRESOURCE(IDB_SYSTRAYPROP_HIDE_CLOCK);
+            }
+            else
+            {
+                /* FIXME: when the seconds checkbox is enabled, disable it it. */
+                lpTrayImageName = MAKEINTRESOURCE(IDB_SYSTRAYPROP_HIDE_NOCLOCK);
+            }
+        }
+        else
+        {
+            /* FIXME: when the customize button is enabled, disable it. */
+            if(bShowClock)
+            {
+                /* FIXME: when the seconds checkbox is disabled, enable it. */
+                if(bShowSeconds)
+                    lpTrayImageName = MAKEINTRESOURCE(IDB_SYSTRAYPROP_SHOW_SECONDS);
+                else
+                    lpTrayImageName = MAKEINTRESOURCE(IDB_SYSTRAYPROP_SHOW_CLOCK);
+            }
+            else
+            {
+                /* FIXME: when the seconds checkbox is enabled, disable it it. */
+                lpTrayImageName = MAKEINTRESOURCE(IDB_SYSTRAYPROP_SHOW_NOCLOCK);
+            }
+        }
+        
+        if(lpTrayImageName)
+        {
+            if (pPropInfo->hTrayBitmap)
+            {
+                DeleteObject(pPropInfo->hTrayBitmap);
+            }
+
+            pPropInfo->hTrayBitmap = (HBITMAP)LoadImage(hExplorerInstance,
+                                                  lpTrayImageName,
+                                                  IMAGE_BITMAP,
+                                                  0,
+                                                  0,
+                                                  LR_DEFAULTCOLOR);
+            if (pPropInfo->hTrayBitmap)
+            {
+                hwndTrayBitmap = GetDlgItem(pPropInfo->hTaskbarWnd,
+                                        IDC_TASKBARPROP_NOTIFICATIONBITMAP);
+                if (hwndTrayBitmap)
+                {
+                    SendMessage(hwndTrayBitmap,
+                                STM_SETIMAGE,
+                                IMAGE_BITMAP,
+                                (LPARAM)pPropInfo->hTrayBitmap);
+                }
+            }
+        }
     }
 
     return bRet;
@@ -136,7 +207,7 @@ TaskbarPageProc(HWND hwndDlg,
     switch (uMsg)
     {
         case WM_INITDIALOG:
-            OnCreateTaskbarPage(hwndDlg, (PPROPSHEET_INFO)lParam);
+            OnCreateTaskbarPage(hwndDlg, (PPROPSHEET_INFO)((LPPROPSHEETPAGE)lParam)->lParam);
             break;
 
         case WM_COMMAND:
@@ -146,6 +217,9 @@ TaskbarPageProc(HWND hwndDlg,
                 case IDC_TASKBARPROP_HIDE:
                 case IDC_TASKBARPROP_GROUP:
                 case IDC_TASKBARPROP_SHOWQL:
+                case IDC_TASKBARPROP_HIDEICONS:
+                case IDC_TASKBARPROP_CLOCK:
+                case IDC_TASKBARPROP_SECONDS:
                     if (HIWORD(wParam) == BN_CLICKED)
                     {
                         UpdateTaskbarBitmap(pPropInfo);
@@ -178,61 +252,13 @@ TaskbarPageProc(HWND hwndDlg,
             {
                 DeleteObject(pPropInfo->hTaskbarBitmap);
             }
-            break;
-
-HandleDefaultMessage:
-        default:
-            return FALSE;
-    }
-
-    return FALSE;
-}
-
-static INT_PTR CALLBACK
-AdvancedSettingsPageProc(HWND hwndDlg,
-                         UINT uMsg,
-                         WPARAM wParam,
-                         LPARAM lParam)
-{
-    switch (uMsg)
-    {
-        case WM_INITDIALOG:
-            CheckDlgButton(hwndDlg, IDC_TASKBARPROP_SECONDS, AdvancedSettings.bShowSeconds ? BST_CHECKED : BST_UNCHECKED);
-            break;
-
-        case WM_COMMAND:
-            switch (LOWORD(wParam))
-            {
-                case IDC_TASKBARPROP_SECONDS:
-                    if (HIWORD(wParam) == BN_CLICKED)
-                    {
-                        PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
-                    }
-                    break;
-            }
-            break;
-
-        case WM_NOTIFY:
-        {
-            LPNMHDR pnmh = (LPNMHDR)lParam;
-
-            switch (pnmh->code)
+            if (pPropInfo->hTrayBitmap)
             {
-                case PSN_SETACTIVE:
-                    break;
-
-                case PSN_APPLY:
-                    AdvancedSettings.bShowSeconds = IsDlgButtonChecked(hwndDlg, IDC_TASKBARPROP_SECONDS);
-                    SaveSettingDword(szAdvancedSettingsKey, TEXT("ShowSeconds"), AdvancedSettings.bShowSeconds);
-                    break;
+                DeleteObject(pPropInfo->hTrayBitmap);
             }
-
-            break;
-        }
-
-        case WM_DESTROY:
             break;
 
+HandleDefaultMessage:
         default:
             return FALSE;
     }
@@ -250,76 +276,17 @@ StartMenuPageProc(HWND hwndDlg,
     {
         case WM_INITDIALOG:
             break;
-
-        case WM_DESTROY:
-            break;
-
-        case WM_NOTIFY:
-        {
-            LPNMHDR pnmh = (LPNMHDR)lParam;
-
-            switch (pnmh->code)
-            {
-                case PSN_SETACTIVE:
-                    break;
-
-                case PSN_APPLY:
-                    break;
-            }
-
-            break;
-        }
-    }
-
-    return FALSE;
-}
-
-
-static INT_PTR CALLBACK
-NotificationPageProc(HWND hwndDlg,
-                     UINT uMsg,
-                     WPARAM wParam,
-                     LPARAM lParam)
-{
-    switch (uMsg)
-    {
-        case WM_INITDIALOG:
-            break;
-
-        case WM_DESTROY:
-            break;
-
-        case WM_NOTIFY:
+            
+        case WM_COMMAND:
         {
-            LPNMHDR pnmh = (LPNMHDR)lParam;
-
-            switch (pnmh->code)
+            switch (LOWORD(wParam))
             {
-                case PSN_SETACTIVE:
-                    break;
-
-                case PSN_APPLY:
+                case IDC_TASKBARPROP_STARTMENUCLASSICCUST:
+                    ShowCustomizeClassic(hExplorerInstance, hwndDlg);
                     break;
             }
-
             break;
         }
-    }
-
-    return FALSE;
-}
-
-
-static INT_PTR CALLBACK
-ToolbarsPageProc(HWND hwndDlg,
-                 UINT uMsg,
-                 WPARAM wParam,
-                 LPARAM lParam)
-{
-    switch (uMsg)
-    {
-        case WM_INITDIALOG:
-            break;
 
         case WM_DESTROY:
             break;
@@ -344,7 +311,6 @@ ToolbarsPageProc(HWND hwndDlg,
     return FALSE;
 }
 
-
 static VOID
 InitPropSheetPage(PROPSHEETPAGE *psp,
                   WORD idDlg,
@@ -366,7 +332,7 @@ DisplayTrayProperties(IN HWND hwndOwner)
 {
     PROPSHEET_INFO propInfo;
     PROPSHEETHEADER psh;
-    PROPSHEETPAGE psp[5];
+    PROPSHEETPAGE psp[2];
     WCHAR szCaption[256];
 
     if (!LoadString(hExplorerInstance,
@@ -390,9 +356,6 @@ DisplayTrayProperties(IN HWND hwndOwner)
 
     InitPropSheetPage(&psp[0], IDD_TASKBARPROP_TASKBAR, TaskbarPageProc, (LPARAM)&propInfo);
     InitPropSheetPage(&psp[1], IDD_TASKBARPROP_STARTMENU, StartMenuPageProc, (LPARAM)&propInfo);
-    InitPropSheetPage(&psp[2], IDD_TASKBARPROP_NOTIFICATION, NotificationPageProc, (LPARAM)&propInfo);
-    InitPropSheetPage(&psp[3], IDD_TASKBARPROP_TOOLBARS, ToolbarsPageProc, (LPARAM)&propInfo);
-    InitPropSheetPage(&psp[4], IDD_TASKBARPROP_ADVANCED, AdvancedSettingsPageProc, (LPARAM)&propInfo);
 
     PropertySheet(&psh);
 }