- Sync desk.cpl with trunk
[reactos.git] / reactos / dll / cpl / desk / preview.c
index 467e923..f7a72b9 100644 (file)
@@ -3,7 +3,7 @@
  * LICENSE:     GPL - See COPYING in the top level directory\r
  * FILE:        lib/cpl/desk/preview.c\r
  * PURPOSE:     Draws the preview control\r
- * COPYRIGHT:   Copyright 2006 Eric Kohl\r
+ * COPYRIGHT:   Copyright 2006, 2007 Eric Kohl\r
  */\r
 \r
 #include "desk.h"\r
@@ -13,6 +13,8 @@ static const TCHAR szPreviewWndClass[] = TEXT("PreviewWndClass");
 \r
 typedef struct _PREVIEW_DATA\r
 {\r
+    HWND hwndParent;\r
+\r
     DWORD clrDesktop;\r
     HBRUSH hbrDesktop;\r
 \r
@@ -35,15 +37,19 @@ typedef struct _PREVIEW_DATA
     RECT rcDesktop;\r
     RECT rcInactiveFrame;\r
     RECT rcInactiveCaption;\r
+    RECT rcInactiveCaptionButtons;\r
 \r
     RECT rcActiveFrame;\r
     RECT rcActiveCaption;\r
+    RECT rcActiveCaptionButtons;\r
     RECT rcActiveMenuBar;\r
+    RECT rcSelectedMenuItem;\r
     RECT rcActiveClient;\r
     RECT rcActiveScroll;\r
 \r
     RECT rcDialogFrame;\r
     RECT rcDialogCaption;\r
+    RECT rcDialogCaptionButtons;\r
     RECT rcDialogClient;\r
 \r
     RECT rcDialogButton;\r
@@ -176,6 +182,9 @@ OnCreate(HWND hwnd, PPREVIEW_DATA pPreviewData)
     HiliteMenuItem(hwnd, pPreviewData->hMenu,\r
                    ID_MENU_SELECTED, MF_BYCOMMAND | MF_HILITE);\r
 \r
+//    GetMenuItemRect(hwnd, pPreviewData->hMenu,\r
+//                    ID_MENU_SELECTED, &pPreviewData->rcSelectedMenuItem);\r
+\r
 \r
     AllocAndLoadString(&pPreviewData->lpInAct, hApplet, IDS_INACTWIN);\r
     AllocAndLoadString(&pPreviewData->lpAct, hApplet, IDS_ACTWIN);\r
@@ -209,6 +218,12 @@ OnSize(INT cx, INT cy, PPREVIEW_DATA pPreviewData)
     pPreviewData->rcInactiveCaption.right = pPreviewData->rcInactiveFrame.right - pPreviewData->cxEdge - 1/*3*/ - 1;\r
     pPreviewData->rcInactiveCaption.bottom = pPreviewData->rcInactiveFrame.top + pPreviewData->cyCaption /*20*/ + 2;\r
 \r
+    /* Calculate the inactive caption buttons rectangle */\r
+    pPreviewData->rcInactiveCaptionButtons.left = pPreviewData->rcInactiveCaption.right - 2 - 2 - 3 * 16;\r
+    pPreviewData->rcInactiveCaptionButtons.top = pPreviewData->rcInactiveCaption.top + 2;\r
+    pPreviewData->rcInactiveCaptionButtons.right = pPreviewData->rcInactiveCaption.right - 2;\r
+    pPreviewData->rcInactiveCaptionButtons.bottom = pPreviewData->rcInactiveCaption.bottom - 2;\r
+\r
     /* Calculate the active window rectangle */\r
     pPreviewData->rcActiveFrame.left = pPreviewData->rcInactiveFrame.left + 3 + 1;\r
     pPreviewData->rcActiveFrame.top = pPreviewData->rcInactiveCaption.bottom + 1;\r
@@ -221,6 +236,12 @@ OnSize(INT cx, INT cy, PPREVIEW_DATA pPreviewData)
     pPreviewData->rcActiveCaption.right = pPreviewData->rcActiveFrame.right - 3 - 1;\r
     pPreviewData->rcActiveCaption.bottom = pPreviewData->rcActiveFrame.top + pPreviewData->cyCaption/*20*/ + 2;\r
 \r
+    /* Calculate the active caption buttons rectangle */\r
+    pPreviewData->rcActiveCaptionButtons.left = pPreviewData->rcActiveCaption.right - 2 - 2 - 3 * 16;\r
+    pPreviewData->rcActiveCaptionButtons.top = pPreviewData->rcActiveCaption.top + 2;\r
+    pPreviewData->rcActiveCaptionButtons.right = pPreviewData->rcActiveCaption.right - 2;\r
+    pPreviewData->rcActiveCaptionButtons.bottom = pPreviewData->rcActiveCaption.bottom - 2;\r
+\r
     /* Calculate the active menu bar rectangle */\r
     pPreviewData->rcActiveMenuBar.left = pPreviewData->rcActiveFrame.left + 3 + 1;\r
     pPreviewData->rcActiveMenuBar.top = pPreviewData->rcActiveCaption.bottom + 1;\r
@@ -252,6 +273,12 @@ OnSize(INT cx, INT cy, PPREVIEW_DATA pPreviewData)
     pPreviewData->rcDialogCaption.right = pPreviewData->rcDialogFrame.right - 3;\r
     pPreviewData->rcDialogCaption.bottom = pPreviewData->rcDialogFrame.top + 20 + 1;\r
 \r
+    /* Calculate the inactive caption buttons rectangle */\r
+    pPreviewData->rcDialogCaptionButtons.left = pPreviewData->rcDialogCaption.right - 2 - 16;\r
+    pPreviewData->rcDialogCaptionButtons.top = pPreviewData->rcDialogCaption.top + 2;\r
+    pPreviewData->rcDialogCaptionButtons.right = pPreviewData->rcDialogCaption.right - 2;\r
+    pPreviewData->rcDialogCaptionButtons.bottom = pPreviewData->rcDialogCaption.bottom - 2;\r
+\r
     /* Calculate the dialog client rectangle */\r
     pPreviewData->rcDialogClient.left = pPreviewData->rcDialogFrame.left + 3;\r
     pPreviewData->rcDialogClient.top = pPreviewData->rcDialogCaption.bottom + 1;\r
@@ -347,6 +374,61 @@ OnPaint(HWND hwnd, PPREVIEW_DATA pPreviewData)
 }\r
 \r
 \r
+static VOID\r
+OnLButtonDown(HWND hwnd, int xPos, int yPos, PPREVIEW_DATA pPreviewData)\r
+{\r
+    UINT type = IDX_DESKTOP;\r
+    POINT pt;\r
+\r
+    pt.x = xPos;\r
+    pt.y = yPos;\r
+\r
+    if (PtInRect(&pPreviewData->rcInactiveFrame, pt))\r
+        type = IDX_INACTIVE_BORDER;\r
+\r
+    if (PtInRect(&pPreviewData->rcInactiveCaption, pt))\r
+        type = IDX_INACTIVE_CAPTION;\r
+\r
+    if (PtInRect(&pPreviewData->rcInactiveCaptionButtons, pt))\r
+        type = IDX_CAPTION_BUTTON;\r
+\r
+    if (PtInRect(&pPreviewData->rcActiveFrame, pt))\r
+        type = IDX_ACTIVE_BORDER;\r
+\r
+    if (PtInRect(&pPreviewData->rcActiveCaption, pt))\r
+        type = IDX_ACTIVE_CAPTION;\r
+\r
+    if (PtInRect(&pPreviewData->rcActiveCaptionButtons, pt))\r
+        type = IDX_CAPTION_BUTTON;\r
+\r
+    if (PtInRect(&pPreviewData->rcActiveMenuBar, pt))\r
+        type = IDX_MENU;\r
+\r
+//    if (PtInRect(&pPreviewData->rcSelectedMenuItem, pt))\r
+//        type = IDX_SELECTION;\r
+\r
+    if (PtInRect(&pPreviewData->rcActiveClient, pt))\r
+        type = IDX_WINDOW;\r
+\r
+    if (PtInRect(&pPreviewData->rcActiveScroll, pt))\r
+        type = IDX_SCROLLBAR;\r
+\r
+    if (PtInRect(&pPreviewData->rcDialogFrame, pt))\r
+        type = IDX_DIALOG;\r
+\r
+    if (PtInRect(&pPreviewData->rcDialogCaption, pt))\r
+        type = IDX_ACTIVE_CAPTION;\r
+\r
+    if (PtInRect(&pPreviewData->rcDialogCaptionButtons, pt))\r
+        type = IDX_CAPTION_BUTTON;\r
+\r
+    if (PtInRect(&pPreviewData->rcDialogButton, pt))\r
+        type = IDX_3D_OBJECTS;\r
+\r
+    SendMessage(GetParent(hwnd), WM_USER, 0, type);\r
+}\r
+\r
+\r
 static VOID\r
 OnDestroy(PPREVIEW_DATA pPreviewData)\r
 {\r
@@ -400,6 +482,10 @@ PreviewWndProc(HWND hwnd,
             OnPaint(hwnd, pPreviewData);\r
             break;\r
 \r
+        case WM_LBUTTONDOWN:\r
+            OnLButtonDown(hwnd, LOWORD(lParam), HIWORD(lParam), pPreviewData);\r
+            break;\r
+\r
         case WM_DESTROY:\r
             OnDestroy(pPreviewData);\r
             HeapFree(GetProcessHeap(), 0, pPreviewData);\r