Implement PROPSHEET_InsertPage.

Knut Andre Tidemann knut.tidemann at gmail.com
Sat Oct 23 06:32:24 CDT 2010


---
 dlls/comctl32/propsheet.c |   75 +++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 72 insertions(+), 3 deletions(-)

diff --git a/dlls/comctl32/propsheet.c b/dlls/comctl32/propsheet.c
index f711399..2c41b75 100644
--- a/dlls/comctl32/propsheet.c
+++ b/dlls/comctl32/propsheet.c
@@ -2480,11 +2480,80 @@ static void PROPSHEET_SetWizButtons(HWND hwndDlg, DWORD dwFlags)
  */
 static BOOL PROPSHEET_InsertPage(HWND hwndDlg, HPROPSHEETPAGE hpageInsertAfter, HPROPSHEETPAGE hpage)
 {
+    PropPageInfo * ppi;
+    PropSheetInfo * psInfo = GetPropW(hwndDlg, PropSheetInfoStr);
+    HWND hwndTabControl = GetDlgItem(hwndDlg, IDC_TABCONTROL);
+    TCITEMW item;
+    LPCPROPSHEETPAGEW ppsp = (LPCPROPSHEETPAGEW)hpage;
+    int pageIndex = -1;
+    int i;
+
     if (IS_INTRESOURCE(hpageInsertAfter))
-        FIXME("(%p, %d, %p): stub\n", hwndDlg, LOWORD(hpageInsertAfter), hpage);
+    {
+        pageIndex = LOWORD(hpageInsertAfter);
+    }
     else
-        FIXME("(%p, %p, %p): stub\n", hwndDlg, hpageInsertAfter, hpage);
-    return FALSE;
+    {
+        for(int i = 0; i < psInfo->nPages; i++)
+        {
+            if(psInfo->proppage[i].hPage == hpageInsertAfter)
+            {
+                pageIndex = i+1;
+                break;
+            }
+        }
+
+        if(pageIndex == -1)
+            return FALSE;
+    }
+
+    if ((int)pageIndex > psInfo->nPages)
+        return PROPSHEET_AddPage(hwndDlg, hpage);
+
+    ppi = ReAlloc(psInfo->proppage, sizeof(PropPageInfo) * (psInfo->nPages + 1));
+    if (!ppi)
+        return FALSE;
+
+    psInfo->proppage = ppi;
+    if (!PROPSHEET_CollectPageInfo(ppsp, psInfo, psInfo->nPages, FALSE))
+        return FALSE;
+
+    /* Move the other pages */
+    for (i = pageIndex; i < (psInfo->nPages - 1); i++)
+        psInfo->proppage[i+1] = psInfo->proppage[i];
+
+    psInfo->proppage[(int)pageIndex].hpage = hpage;
+
+    if (ppsp->dwFlags & PSP_PREMATURE)
+        PROPSHEET_CreatePage(hwndDlg, pageIndex, psInfo, ppsp);
+
+    /*
+    * Add a new tab to the tab control
+    */
+    item.mask = TCIF_TEXT;
+    item.pszText = (LPWSTR) psInfo->proppage[pageIndex].pszText;
+    item.cchTextMax = MAX_TABTEXT_LENGTH;
+
+    if (psInfo->hImageList)
+    {
+        SendMessageW(hwndTabControl, TCM_SETIMAGELIST, 0, (LPARAM)psInfo->hImageList);
+    }
+
+    if(psInfo->proppage[pageIndex].hasIcon)
+    {
+        item.mask |= TCIF_IMAGE;
+        item.iImage = pageIndex;
+    }
+
+    SendMessageW(hwndTabControl, TCM_INSERTITEMW, pageIndex,
+                 (LPARAM)&item);
+
+    psInfo->nPages++;
+
+    /* If this is the only page, show it */
+    if(psInfo->nPages == 1)
+        PROPSHEET_SetCurSel(hwndDlg, 0, 1, 0);
+    return TRUE;
 }
 
 /******************************************************************************
-- 
1.7.3.2


------------5h1O3GdvC7n7xJHWL29uhP--




More information about the wine-patches mailing list