Owen Rudge : appwiz.cpl: Add applications to list, remove on window close.

Alexandre Julliard julliard at winehq.org
Fri Jul 25 08:13:54 CDT 2008


Module: wine
Branch: master
Commit: 0215b55ce63e20d674fc6002695783089c2078fe
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=0215b55ce63e20d674fc6002695783089c2078fe

Author: Owen Rudge <owen at owenrudge.net>
Date:   Mon Jul 21 19:42:30 2008 +0100

appwiz.cpl: Add applications to list, remove on window close.

---

 dlls/appwiz.cpl/appwiz.c |   75 ++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 75 insertions(+), 0 deletions(-)

diff --git a/dlls/appwiz.cpl/appwiz.c b/dlls/appwiz.cpl/appwiz.c
index 4cbcf79..445e5ba 100644
--- a/dlls/appwiz.cpl/appwiz.c
+++ b/dlls/appwiz.cpl/appwiz.c
@@ -293,6 +293,60 @@ end:
     return ret;
 }
 
+
+/******************************************************************************
+ * Name       : AddApplicationsToList
+ * Description: Populates the list box with applications.
+ * Parameters : hWnd    - Handle of the dialog box
+ */
+static void AddApplicationsToList(HWND hWnd, HIMAGELIST hList)
+{
+    APPINFO *iter = AppInfo;
+    LVITEMW lvItem;
+    HICON hIcon;
+    int index;
+
+    while (iter)
+    {
+        /* get the icon */
+        index = 0;
+
+        if (iter->icon)
+        {
+            if (ExtractIconExW(iter->icon, iter->iconIdx, NULL, &hIcon, 1) == 1)
+            {
+                index = ImageList_AddIcon(hList, hIcon);
+                DestroyIcon(hIcon);
+            }
+        }
+
+        lvItem.mask = LVIF_IMAGE | LVIF_TEXT | LVIF_PARAM;
+        lvItem.iItem = iter->id;
+        lvItem.iSubItem = 0;
+        lvItem.pszText = iter->title;
+        lvItem.iImage = index;
+        lvItem.lParam = iter->id;
+
+        index = ListView_InsertItemW(hWnd, &lvItem);
+
+        /* now add the subitems (columns) */
+        ListView_SetItemTextW(hWnd, index, 1, iter->publisher);
+        ListView_SetItemTextW(hWnd, index, 2, iter->version);
+
+        iter = iter->next;
+    }
+}
+
+/******************************************************************************
+ * Name       : RemoveItemsFromList
+ * Description: Clears the application list box.
+ * Parameters : hWnd    - Handle of the dialog box
+ */
+static void RemoveItemsFromList(HWND hWnd)
+{
+    SendDlgItemMessageW(hWnd, IDL_PROGRAMS, LVM_DELETEALLITEMS, 0, 0);
+}
+
 /******************************************************************************
  * Name       : EmptyList
  * Description: Frees memory used by the application linked list.
@@ -409,6 +463,7 @@ static HIMAGELIST ResetApplicationList(BOOL bFirstRun, HWND hWnd, HIMAGELIST hIm
     }
     else /* we need to remove the existing things first */
     {
+        RemoveItemsFromList(hWnd);
         ImageList_Destroy(hImageList);
 
         /* reset the list, since it's probably changed if the uninstallation was
@@ -422,6 +477,7 @@ static HIMAGELIST ResetApplicationList(BOOL bFirstRun, HWND hWnd, HIMAGELIST hIm
     ReadApplicationsFromRegistry(HKEY_LOCAL_MACHINE);
     ReadApplicationsFromRegistry(HKEY_CURRENT_USER);
 
+    AddApplicationsToList(hWndListView, hImageList);
     UpdateButtons(hWnd);
 
     return(hImageList);
@@ -439,6 +495,7 @@ static HIMAGELIST ResetApplicationList(BOOL bFirstRun, HWND hWnd, HIMAGELIST hIm
 static BOOL CALLBACK MainDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
 {
     static HIMAGELIST hImageList;
+    LPNMHDR nmh;
 
     switch(msg)
     {
@@ -451,11 +508,29 @@ static BOOL CALLBACK MainDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lPar
             return TRUE;
 
         case WM_DESTROY:
+            RemoveItemsFromList(hWnd);
             ImageList_Destroy(hImageList);
 
             EmptyList();
 
             return 0;
+
+        case WM_NOTIFY:
+            nmh = (LPNMHDR) lParam;
+
+            switch (nmh->idFrom)
+            {
+                case IDL_PROGRAMS:
+                    switch (nmh->code)
+                    {
+                        case LVN_ITEMCHANGED:
+                            UpdateButtons(hWnd);
+                            break;
+                    }
+                    break;
+            }
+
+            return TRUE;
     }
 
     return FALSE;




More information about the wine-cvs mailing list