[RAPPS]
authorAlexander Shaposhnikov <sanchaez@reactos.org>
Sun, 4 Jun 2017 21:36:14 +0000 (21:36 +0000)
committerAlexander Shaposhnikov <sanchaez@reactos.org>
Sun, 4 Jun 2017 21:36:14 +0000 (21:36 +0000)
* Added constants in resource.h for stringtables
* Removed "Installed apps" from the TreeView
* Added intallation status to the RichEdit using existing check
* Changed IsInstalledApplication signature to accept access righta
  This is needed for the 64 bit systems.

svn path=/branches/GSoC_2017/rapps/; revision=74920

reactos/base/applications/rapps/available.cpp
reactos/base/applications/rapps/crichedit.h
reactos/base/applications/rapps/gui.cpp
reactos/base/applications/rapps/installed.cpp
reactos/base/applications/rapps/rapps.h
reactos/base/applications/rapps/resource.h

index 640b793..dc3ec40 100644 (file)
         InsertRichEditText(b, d); \
     } \
 
+#define ADD_TEXT_NEWL(a, b) \
+  LoadStringW(hInst, a, szText, _countof(szText)); \
+  InsertRichEditText(L"\n", 0); \
+  InsertRichEditText(szText, b); \
+  InsertRichEditText(L"\n", 0);
+
 #define GET_STRING1(a, b)  \
     if (!ParserGetString(a, b, _countof(b), FindFileData.cFileName)) \
         continue;
     if (!ParserGetString(a, b, _countof(b), FindFileData.cFileName)) \
         b[0] = '\0';
 
+//App is "installed" if the RegName is in the registry
+#define APP_INSTALL_CHECK_K(Info, key) \
+ (*Info->szRegName && (IsInstalledApplicationEx(Info->szRegName, FALSE, key) \
+                        || IsInstalledApplicationEx(Info->szRegName, TRUE, key)))
+
+//Check both registry keys in 64bit system
+//TODO: check system type beforehand to avoid double checks?
+#define APP_INSTALL_CHECK(Info) \
+  (APP_INSTALL_CHECK_K(Info, KEY_WOW64_32KEY) || APP_INSTALL_CHECK_K(Info, KEY_WOW64_64KEY))
+
 LIST_ENTRY CachedEntriesHead = { &CachedEntriesHead, &CachedEntriesHead };
 PLIST_ENTRY pCachedEntry = &CachedEntriesHead;
 
@@ -37,8 +53,13 @@ ShowAvailableAppInfo(INT Index)
     if (!Info) return FALSE;
 
     NewRichEditText(Info->szName, CFE_BOLD);
-
-    InsertRichEditText(L"\n", 0);
+    if (APP_INSTALL_CHECK(Info))
+    {
+      ADD_TEXT_NEWL(IDS_STATUS_INSTALLED, CFE_ITALIC);
+    } else 
+    {
+      ADD_TEXT_NEWL(IDS_STATUS_NOTINSTALLED, CFE_ITALIC);
+    }
 
     ADD_TEXT(IDS_AINFO_VERSION,     Info->szVersion, CFE_BOLD, 0);
     ADD_TEXT(IDS_AINFO_LICENSE,     Info->szLicense, CFE_BOLD, 0);
index 857aa4f..63c5b62 100644 (file)
@@ -90,7 +90,6 @@ public:
         return m_hWnd;
     }
 
-public:
     virtual VOID OnLink(ENLINK *Link)
     {
     }
index 891390f..49db003 100644 (file)
@@ -372,33 +372,28 @@ private:
 
     VOID InitCategoriesList(VOID)
     {
-        HTREEITEM hRootItem1, hRootItem2;
-
-        hRootItem1 = AddCategory(TVI_ROOT, IDS_INSTALLED, IDI_CATEGORY);
-        AddCategory(hRootItem1, IDS_APPLICATIONS, IDI_APPS);
-        AddCategory(hRootItem1, IDS_UPDATES, IDI_APPUPD);
-
-        hRootItem2 = AddCategory(TVI_ROOT, IDS_AVAILABLEFORINST, IDI_CATEGORY);
-        AddCategory(hRootItem2, IDS_CAT_AUDIO, IDI_CAT_AUDIO);
-        AddCategory(hRootItem2, IDS_CAT_VIDEO, IDI_CAT_VIDEO);
-        AddCategory(hRootItem2, IDS_CAT_GRAPHICS, IDI_CAT_GRAPHICS);
-        AddCategory(hRootItem2, IDS_CAT_GAMES, IDI_CAT_GAMES);
-        AddCategory(hRootItem2, IDS_CAT_INTERNET, IDI_CAT_INTERNET);
-        AddCategory(hRootItem2, IDS_CAT_OFFICE, IDI_CAT_OFFICE);
-        AddCategory(hRootItem2, IDS_CAT_DEVEL, IDI_CAT_DEVEL);
-        AddCategory(hRootItem2, IDS_CAT_EDU, IDI_CAT_EDU);
-        AddCategory(hRootItem2, IDS_CAT_ENGINEER, IDI_CAT_ENGINEER);
-        AddCategory(hRootItem2, IDS_CAT_FINANCE, IDI_CAT_FINANCE);
-        AddCategory(hRootItem2, IDS_CAT_SCIENCE, IDI_CAT_SCIENCE);
-        AddCategory(hRootItem2, IDS_CAT_TOOLS, IDI_CAT_TOOLS);
-        AddCategory(hRootItem2, IDS_CAT_DRIVERS, IDI_CAT_DRIVERS);
-        AddCategory(hRootItem2, IDS_CAT_LIBS, IDI_CAT_LIBS);
-        AddCategory(hRootItem2, IDS_CAT_OTHER, IDI_CAT_OTHER);
+        HTREEITEM hRootItem;
+
+        hRootItem = AddCategory(TVI_ROOT, IDS_AVAILABLEFORINST, IDI_CATEGORY);
+        AddCategory(hRootItem, IDS_CAT_AUDIO, IDI_CAT_AUDIO);
+        AddCategory(hRootItem, IDS_CAT_VIDEO, IDI_CAT_VIDEO);
+        AddCategory(hRootItem, IDS_CAT_GRAPHICS, IDI_CAT_GRAPHICS);
+        AddCategory(hRootItem, IDS_CAT_GAMES, IDI_CAT_GAMES);
+        AddCategory(hRootItem, IDS_CAT_INTERNET, IDI_CAT_INTERNET);
+        AddCategory(hRootItem, IDS_CAT_OFFICE, IDI_CAT_OFFICE);
+        AddCategory(hRootItem, IDS_CAT_DEVEL, IDI_CAT_DEVEL);
+        AddCategory(hRootItem, IDS_CAT_EDU, IDI_CAT_EDU);
+        AddCategory(hRootItem, IDS_CAT_ENGINEER, IDI_CAT_ENGINEER);
+        AddCategory(hRootItem, IDS_CAT_FINANCE, IDI_CAT_FINANCE);
+        AddCategory(hRootItem, IDS_CAT_SCIENCE, IDI_CAT_SCIENCE);
+        AddCategory(hRootItem, IDS_CAT_TOOLS, IDI_CAT_TOOLS);
+        AddCategory(hRootItem, IDS_CAT_DRIVERS, IDI_CAT_DRIVERS);
+        AddCategory(hRootItem, IDS_CAT_LIBS, IDI_CAT_LIBS);
+        AddCategory(hRootItem, IDS_CAT_OTHER, IDI_CAT_OTHER);
 
         m_TreeView->SetImageList(hImageTreeView, TVSIL_NORMAL);
-        m_TreeView->Expand(hRootItem2, TVE_EXPAND);
-        m_TreeView->Expand(hRootItem1, TVE_EXPAND);
-        m_TreeView->SelectItem(hRootItem1);
+        m_TreeView->Expand(hRootItem, TVE_EXPAND);
+        m_TreeView->SelectItem(hRootItem);
     }
 
     BOOL CreateStatusBar()
@@ -1138,17 +1133,10 @@ private:
             return TRUE;
         }
 
-        /* Only add a ListView entry if...
-        - no RegName was supplied (so we cannot determine whether the application is installed or not) or
-        -  a RegName was supplied and the application is not installed
-        */
-        if (!*Info->szRegName || (!IsInstalledApplication(Info->szRegName, FALSE) && !IsInstalledApplication(Info->szRegName, TRUE)))
-        {
-            Index = ListViewAddItem(Info->Category, 0, Info->szName, (LPARAM) Info);
+        Index = ListViewAddItem(Info->Category, 0, Info->szName, (LPARAM) Info);
 
-            ListView_SetItemText(hListView, Index, 1, Info->szVersion);
-            ListView_SetItemText(hListView, Index, 2, Info->szDesc);
-        }
+        ListView_SetItemText(hListView, Index, 1, Info->szVersion);
+        ListView_SetItemText(hListView, Index, 2, Info->szDesc);
 
         return TRUE;
     }
@@ -1183,14 +1171,15 @@ private:
 
         ImageList_AddIcon(hImageListView, hIcon);
         DestroyIcon(hIcon);
-
+        /*
         if (IS_INSTALLED_ENUM(EnumType))
         {
-            /* Enum installed applications and updates */
+            / Enum installed applications and updates 
             EnumInstalledApplications(EnumType, TRUE, s_EnumInstalledAppProc);
             EnumInstalledApplications(EnumType, FALSE, s_EnumInstalledAppProc);
         }
-        else if (IS_AVAILABLE_ENUM(EnumType))
+
+        else */if (IS_AVAILABLE_ENUM(EnumType))
         {
             /* Enum available applications */
             EnumAvailableApplications(EnumType, s_EnumAvailableAppProc);
index e8ad586..f0c7e55 100644 (file)
@@ -28,9 +28,8 @@ GetApplicationString(HKEY hKey, LPCWSTR lpKeyName, LPWSTR lpString)
     return FALSE;
 }
 
-
 BOOL
-IsInstalledApplication(LPWSTR lpRegName, BOOL IsUserKey)
+IsInstalledApplicationEx(LPWSTR lpRegName, BOOL IsUserKey, REGSAM keyWow)
 {
     DWORD dwSize = MAX_PATH, dwType;
     WCHAR szName[MAX_PATH];
@@ -38,8 +37,8 @@ IsInstalledApplication(LPWSTR lpRegName, BOOL IsUserKey)
     HKEY hKey, hSubKey;
     INT ItemIndex = 0;
 
-    if (RegOpenKeyW(IsUserKey ? HKEY_CURRENT_USER : HKEY_LOCAL_MACHINE,
-                    L"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall",
+    if (RegOpenKeyExW(IsUserKey ? HKEY_CURRENT_USER : HKEY_LOCAL_MACHINE,
+                    L"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall", 0, keyWow | KEY_ENUMERATE_SUB_KEYS,
                     &hKey) != ERROR_SUCCESS)
     {
         return FALSE;
@@ -47,8 +46,9 @@ IsInstalledApplication(LPWSTR lpRegName, BOOL IsUserKey)
 
     while (RegEnumKeyExW(hKey, ItemIndex, szName, &dwSize, NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
     {
-        if (RegOpenKeyW(hKey, szName, &hSubKey) == ERROR_SUCCESS)
+        if (RegOpenKeyExW(hKey, szName, 0, keyWow | KEY_READ, &hSubKey) == ERROR_SUCCESS)
         {
+
             dwType = REG_SZ;
             dwSize = sizeof(szDisplayName);
             if (RegQueryValueExW(hSubKey,
@@ -63,15 +63,13 @@ IsInstalledApplication(LPWSTR lpRegName, BOOL IsUserKey)
                     RegCloseKey(hSubKey);
                     RegCloseKey(hKey);
                     return TRUE;
-                }
+                } 
             }
         }
-
         RegCloseKey(hSubKey);
         dwSize = MAX_PATH;
         ItemIndex++;
     }
-
     RegCloseKey(hKey);
     return FALSE;
 }
index 539f3c3..15c152e 100644 (file)
@@ -142,7 +142,7 @@ BOOL EnumInstalledApplications(INT EnumType, BOOL IsUserKey, APPENUMPROC lpEnumP
 BOOL GetApplicationString(HKEY hKey, LPCWSTR lpKeyName, LPWSTR lpString);
 BOOL ShowInstalledAppInfo(INT Index);
 BOOL UninstallApplication(INT Index, BOOL bModify);
-BOOL IsInstalledApplication(LPWSTR lpRegName, BOOL IsUserKey);
+BOOL IsInstalledApplicationEx(LPWSTR lpRegName, BOOL IsUserKey, REGSAM keyWow);
 VOID RemoveAppFromRegistry(INT Index);
 
 /* winmain.c */
index 0c224c7..fe6b509 100644 (file)
 #define IDS_TOOLTIP_SETTINGS     203
 #define IDS_TOOLTIP_REFRESH      204
 #define IDS_TOOLTIP_EXIT         205
-#define IDS_TOOLTIP_UPDATE_DB            206
+#define IDS_TOOLTIP_UPDATE_DB    206
 
 /* Columns info */
 #define IDS_APP_NAME             250
 #define IDS_CAT_TOOLS            713
 #define IDS_CAT_VIDEO            714
 
+/* App installation status */
+#define IDS_STATUS_INSTALLED          800     
+#define IDS_STATUS_NOTINSTALLED       801
+#define IDS_STATUS_DOWNLOADED         802
+#define IDS_STATUS_UPDATE_AVAILABLE   803
+#define IDS_STATUS_DOWNLOADING        804
+#define IDS_STATUS_INSTALLING         805
+
+
 /* Accelerators */
 #define HOTKEYS                  715