Author: ashaposhnikov
Date: Fri Jun 23 07:04:43 2017
New Revision: 75168
URL: 
http://svn.reactos.org/svn/reactos?rev=75168&view=rev
Log:
[RAPPS]
* Added individual icons loading for each app
  The icons are loaded by the Name field in the DB for the proof-of-concept.
  It falls back to default icon if none present.
  TODO: It would be best to make another entry there for icon name.
Modified:
    branches/GSoC_2017/rapps/reactos/base/applications/rapps/gui.cpp
Modified: branches/GSoC_2017/rapps/reactos/base/applications/rapps/gui.cpp
URL:
http://svn.reactos.org/svn/reactos/branches/GSoC_2017/rapps/reactos/base/ap…
==============================================================================
--- branches/GSoC_2017/rapps/reactos/base/applications/rapps/gui.cpp    [iso-8859-1]
(original)
+++ branches/GSoC_2017/rapps/reactos/base/applications/rapps/gui.cpp    [iso-8859-1] Fri
Jun 23 07:04:43 2017
@@ -1,4 +1,4 @@
-/* PROJECT:     ReactOS CE Applications Manager
+/* PROJECT:     ReactOS CE Applications Manager
  * LICENSE:     GPL - See COPYING in the top level directory
  * AUTHORS:     David Quintana <gigaherz(a)gmail.com>
  */
@@ -1126,71 +1126,72 @@
     static BOOL CALLBACK s_EnumAvailableAppProc(PAPPLICATION_INFO Info)
     {
         INT Index;
+        HICON hIcon = NULL;
+        bool failed = false;
+        WCHAR szIconPath[MAX_PATH] = L"";
+        HIMAGELIST hImageListView = NULL;
+        hImageListView = ListView_GetImageList(hListView, LVSIL_SMALL);
         if (!SearchPatternMatch(Info->szName, szSearchPattern) &&
             !SearchPatternMatch(Info->szDesc, szSearchPattern))
         {
             return TRUE;
         }
-
-        Index = ListViewAddItem(Info->Category, 0, Info->szName, (LPARAM) Info);
-
-        ListView_SetItemText(hListView, Index, 1, Info->szVersion);
-        ListView_SetItemText(hListView, Index, 2, Info->szDesc);
-
-        return TRUE;
-    }
-
-    VOID UpdateApplicationsList(INT EnumType)
-    {
-        WCHAR szBuffer1[MAX_STR_LEN], szBuffer2[MAX_STR_LEN];
-        HICON hIcon;
-        HIMAGELIST hImageListView;
-
-        m_ListView->SendMessage(WM_SETREDRAW, FALSE, 0);
-
-        if (EnumType == -1) EnumType = SelectedEnumType;
-
-        if (IS_INSTALLED_ENUM(SelectedEnumType))
-            FreeInstalledAppList();
-
-        (VOID) ListView_DeleteAllItems(hListView);
-
-        /* Create image list */
-        hImageListView = ImageList_Create(LISTVIEW_ICON_SIZE,
-            LISTVIEW_ICON_SIZE,
-            GetSystemColorDepth() | ILC_MASK,
-            0, 1);
-
-        hIcon = (HICON) LoadImage(hInst,
-            MAKEINTRESOURCE(IDI_MAIN),
+        //TODO: Define another field for icon name in the DB
+        failed = !GetStorageDirectory(szIconPath, _countof(szIconPath))
+          || FAILED(StringCbPrintfW(szIconPath, sizeof(szIconPath),
L"%ls\\rapps\\icons\\%ls.ico", szIconPath, Info->szName));
+        if (!failed) {
+          //Load icon from file
+          hIcon = (HICON)LoadImage(NULL,
+            szIconPath,
             IMAGE_ICON,
             LISTVIEW_ICON_SIZE,
             LISTVIEW_ICON_SIZE,
-            LR_CREATEDIBSECTION);
-
-        ImageList_AddIcon(hImageListView, hIcon);
+            LR_LOADFROMFILE);
+        }
+        if (GetLastError() != ERROR_SUCCESS) {
+          //Load default icon
+          hIcon = (HICON)LoadIcon(hInst, MAKEINTRESOURCE(IDI_MAIN));
+        }
+        Index = ImageList_AddIcon(hImageListView, hIcon);
         DestroyIcon(hIcon);
-        /*
-        if (IS_INSTALLED_ENUM(EnumType))
-        {
-            / Enum installed applications and updates
-            EnumInstalledApplications(EnumType, TRUE, s_EnumInstalledAppProc);
-            EnumInstalledApplications(EnumType, FALSE, s_EnumInstalledAppProc);
-        }
-
-        else */if (IS_AVAILABLE_ENUM(EnumType))
-        {
-            /* Enum available applications */
-            EnumAvailableApplications(EnumType, s_EnumAvailableAppProc);
-        }
-
-        /* Set image list for ListView */
+
+        Index = ListViewAddItem(Info->Category, Index, Info->szName, (LPARAM)
Info);
         hImageListView = ListView_SetImageList(hListView, hImageListView, LVSIL_SMALL);
-        /* Destroy old image list */
+        ListView_SetItemText(hListView, Index, 1, Info->szVersion);
+        ListView_SetItemText(hListView, Index, 2, Info->szDesc);
+        return TRUE;
+    }
+
+
+    VOID UpdateApplicationsList(INT EnumType)
+    {
+        WCHAR szBuffer1[MAX_STR_LEN], szBuffer2[MAX_STR_LEN];
+        HIMAGELIST hImageListView = NULL;
+
+        m_ListView->SendMessage(WM_SETREDRAW, FALSE, 0);
+
+        if (EnumType < 0) EnumType = SelectedEnumType;
+
+        if (IS_INSTALLED_ENUM(SelectedEnumType))
+            FreeInstalledAppList();
+
+        (VOID) ListView_DeleteAllItems(hListView);
+        //Create new ImageList
+        hImageListView = ImageList_Create(LISTVIEW_ICON_SIZE,
+          LISTVIEW_ICON_SIZE,
+          GetSystemColorDepth() | ILC_MASK,
+          0, 1000);
+        hImageListView = ListView_SetImageList(hListView, hImageListView, LVSIL_SMALL);
+
         if (hImageListView)
-            ImageList_Destroy(hImageListView);
+          ImageList_Destroy(hImageListView);
+
+        if (IS_AVAILABLE_ENUM(EnumType)) {
+          /* Enum available applications */
+          EnumAvailableApplications(EnumType, s_EnumAvailableAppProc);
+        }
         SelectedEnumType = EnumType;
@@ -1212,7 +1213,7 @@
 public:
     static ATL::CWndClassInfo& GetWndClassInfo()
     {
-        DWORD csStyle = CS_VREDRAW |CS_HREDRAW;
+        DWORD csStyle = CS_VREDRAW | CS_HREDRAW;
         static ATL::CWndClassInfo wc =
         {
             { sizeof(WNDCLASSEX), csStyle, StartWindowProc,