Author: ashaposhnikov
Date: Wed Jul 26 13:30:46 2017
New Revision: 75411

URL: http://svn.reactos.org/svn/reactos?rev=75411&view=rev
Log:
[RAPPS] Making checkboxes useful WIP
- Added selection counter
  *NOTE: This requires changes in lang files*
- Added Sellect/Desellect button functionality
- Fixed some typos and macros-to-wide-functions

Modified:
    branches/GSoC_2017/rapps/reactos/base/applications/rapps/available.cpp
    branches/GSoC_2017/rapps/reactos/base/applications/rapps/gui.cpp
    branches/GSoC_2017/rapps/reactos/base/applications/rapps/installed.cpp
    branches/GSoC_2017/rapps/reactos/base/applications/rapps/lang/en-US.rc
    branches/GSoC_2017/rapps/reactos/base/applications/rapps/lang/ru-RU.rc
    branches/GSoC_2017/rapps/reactos/base/applications/rapps/lang/uk-UA.rc

Modified: branches/GSoC_2017/rapps/reactos/base/applications/rapps/available.cpp
URL: 
http://svn.reactos.org/svn/reactos/branches/GSoC_2017/rapps/reactos/base/applications/rapps/available.cpp?rev=75411&r1=75410&r2=75411&view=diff
==============================================================================
--- branches/GSoC_2017/rapps/reactos/base/applications/rapps/available.cpp      
[iso-8859-1] (original)
+++ branches/GSoC_2017/rapps/reactos/base/applications/rapps/available.cpp      
[iso-8859-1] Wed Jul 26 13:30:46 2017
@@ -11,7 +11,6 @@
 #include "rapps.h"
 
  // CAvailableApplicationInfo
-
 CAvailableApplicationInfo::CAvailableApplicationInfo(const ATL::CStringW& 
sFileNameParam)
     : m_Parser(sFileNameParam)
 {
@@ -311,7 +310,7 @@
                     m_InfoList.RemoveAt(LastListPosition);
 
                     delete Info;
-                    Info = nullptr;
+                    Info = NULL;
                     break;
                 }
                 else

Modified: branches/GSoC_2017/rapps/reactos/base/applications/rapps/gui.cpp
URL: 
http://svn.reactos.org/svn/reactos/branches/GSoC_2017/rapps/reactos/base/applications/rapps/gui.cpp?rev=75411&r1=75410&r2=75411&view=diff
==============================================================================
--- 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] Wed Jul 26 13:30:46 2017
@@ -111,8 +111,8 @@
         ATL::CStringW szLangInfo;
         ATL::CStringW szLoadedTextAvailability;
         ATL::CStringW szLoadedAInfoText;
+
         szLoadedAInfoText.LoadStringW(IDS_AINFO_LANGUAGES);
-
 
         //TODO: replace those hardcoded strings
         if (Info->HasNativeLanguage())
@@ -199,7 +199,7 @@
         DeleteObject(hImage);
     }
 
-    HIMAGELIST InitImageList(VOID)
+    HIMAGELIST InitImageList()
     {
         HIMAGELIST hImageList;
 
@@ -328,13 +328,14 @@
         int iSubItem;
     };
 
-    BOOL HasAllChecked;
+    BOOL bHasAllChecked;
+    BOOL bAscending;
+
 public:
-    BOOL bAscending;
-
-    CAppsListView()
-    {
-        bAscending = TRUE;
+    CAppsListView() :
+        bAscending(TRUE),
+        bHasAllChecked(FALSE)
+    {
     }
 
     VOID ColumnClick(LPNMLISTVIEW pnmv)
@@ -349,7 +350,7 @@
     PVOID GetLParam(INT Index)
     {
         INT ItemIndex;
-        LVITEM Item;
+        LVITEMW Item;
 
         if (Index == -1)
         {
@@ -379,13 +380,13 @@
 
     BOOL AddColumn(INT Index, LPWSTR lpText, INT Width, INT Format)
     {
-        LV_COLUMN Column;
+        LV_COLUMNW Column;
 
         ZeroMemory(&Column, sizeof(Column));
 
         Column.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM;
         Column.iSubItem = Index;
-        Column.pszText = (LPTSTR) lpText;
+        Column.pszText = lpText;
         Column.cx = Width;
         Column.fmt = Format;
 
@@ -449,18 +450,39 @@
 
         if (hwnd)
         {
-            SetExtendedListViewStyle(LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT 
);
+            SetExtendedListViewStyle(LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT);
         }
 
         return hwnd;
     }
 
+    BOOL GetCheckState(INT item)
+    {
+        return (BOOL) GetItemState(item, LVIS_STATEIMAGEMASK);
+    }
+
+    VOID SetCheckState(INT item, BOOL fCheck)
+    {
+        SetItemState(item, INDEXTOSTATEIMAGEMASK((fCheck) ? 2 : 1), 
LVIS_STATEIMAGEMASK);
+    }
+
     VOID CheckAll()
     {
-        if (HasAllChecked)
-        {
-            
-        }
+        bHasAllChecked = !bHasAllChecked;
+        SetCheckState(-1, bHasAllChecked);
+    }
+
+    ATL::CAtlList<PAPPLICATION_INFO> GetCheckedItems()
+    {
+        ATL::CAtlList<PAPPLICATION_INFO> list;
+        for (INT i = 0; i != -1; i = GetNextItem(i, LVNI_ALL))
+        {
+            if (GetCheckState(i) != FALSE)
+            {
+                list.AddTail((PAPPLICATION_INFO) GetItemData(i));
+            }
+        }
+        return list;
     }
 };
 
@@ -558,23 +580,24 @@
     CUiWindow<CRichEdit> * m_RichEdit;
 
     CUiWindow<CSearchBar> * m_SearchBar;
+    CAvailableApps m_AvailableApps;
 
     LPWSTR pLink;
 
-    BOOL SearchEnabled;
-
-    CAvailableApps m_AvailableApps;
-
+    INT nSelectedApps;
+
+    BOOL bSearchEnabled;
+    BOOL bUpdating;
 public:
     CMainWindow() :
         m_ClientPanel(NULL),
         pLink(NULL),
-        SearchEnabled(FALSE)
+        bSearchEnabled(FALSE)
     {
     }
 
 private:
-    VOID InitApplicationsList(VOID)
+    VOID InitApplicationsList()
     {
         ATL::CStringW szText;
 
@@ -597,7 +620,7 @@
         return m_TreeView->AddCategory(hRootItem, TextIndex, IconIndex);
     }
 
-    VOID InitCategoriesList(VOID)
+    VOID InitCategoriesList()
     {
         HTREEITEM hRootItem;
 
@@ -703,7 +726,7 @@
         return m_HSplitter->Create(m_hWnd) != NULL;
     }
 
-    BOOL CreateSearchBar(VOID)
+    BOOL CreateSearchBar()
     {
         m_SearchBar = new CUiWindow<CSearchBar>();
         m_SearchBar->m_VerticalAlignment = UiAlign_LeftTop;
@@ -716,7 +739,8 @@
 
     BOOL CreateLayout()
     {
-        bool b = TRUE;
+        BOOL b = TRUE;
+        bUpdating = TRUE;
 
         m_ClientPanel = new CUiPanel();
         m_ClientPanel->m_VerticalAlignment = UiAlign_Stretch;
@@ -754,6 +778,7 @@
             m_VSplitter->m_Margin.bottom = rBottom.bottom - rBottom.top;
         }
 
+        bUpdating = FALSE;
         return b;
     }
 
@@ -761,16 +786,13 @@
     {
         if (CreateLayout())
         {
-            ATL::CStringW szBuffer1, szBuffer2;
 
             InitApplicationsList();
-
             InitCategoriesList();
 
-            szBuffer2.LoadStringW(hInst, IDS_APPS_COUNT);
-            szBuffer1.Format(szBuffer2, m_ListView->GetItemCount());
-
-            m_StatusBar->SetText(szBuffer1);
+            nSelectedApps = 0;
+            UpdateStatusBarText();
+
             return TRUE;
         }
 
@@ -998,6 +1020,13 @@
                         if (IS_AVAILABLE_ENUM(SelectedEnumType))
                             CAvailableAppView::ShowAvailableAppInfo(ItemIndex);
                     }
+                    /* Check if the item is checked */
+                    if ((pnic->uNewState & LVIS_STATEIMAGEMASK) && !bUpdating)
+                    {
+                        BOOL checked = m_ListView->GetCheckState(pnic->iItem);
+                        nSelectedApps += (checked) ? 1 : -1;
+                        UpdateStatusBarText();
+                    }
                 }
             }
             break;
@@ -1083,10 +1112,10 @@
             if (wParam == SEARCH_TIMER_ID)
             {
                 ::KillTimer(hwnd, SEARCH_TIMER_ID);
-                if (SearchEnabled)
+                if (bSearchEnabled)
                     UpdateApplicationsList(-1);
             }
-            break;
+        break;
         }
 
         return FALSE;
@@ -1119,7 +1148,7 @@
         }
     }
 
-    BOOL IsSelectedNodeInstalled(void)
+    BOOL IsSelectedNodeInstalled()
     {
         HTREEITEM hSelectedItem = m_TreeView->GetSelection();
         TV_ITEM tItem;
@@ -1156,7 +1185,7 @@
                 m_SearchBar->GetWindowTextW(szWndText);
                 if (szBuf == szWndText)
                 {
-                    SearchEnabled = FALSE;
+                    bSearchEnabled = FALSE;
                     m_SearchBar->SetWindowTextW(L"");
                 }
             }
@@ -1168,7 +1197,7 @@
                 if (szBuf.IsEmpty())
                 {
                     szBuf.LoadStringW(hInst, IDS_SEARCH_TEXT);
-                    SearchEnabled = FALSE;
+                    bSearchEnabled = FALSE;
                     m_SearchBar->SetWindowTextW(szBuf.GetString());
                 }
             }
@@ -1178,9 +1207,9 @@
             {
                 ATL::CStringW szWndText;
 
-                if (!SearchEnabled)
+                if (!bSearchEnabled)
                 {
-                    SearchEnabled = TRUE;
+                    bSearchEnabled = TRUE;
                     break;
                 }
 
@@ -1265,13 +1294,14 @@
             break;
 
         case ID_CHECK_ALL:
-            break;
-        }
-    }
-
-    VOID FreeInstalledAppList(VOID)
-    {
-        INT Count = ListView_GetItemCount(hListView) - 1;
+            m_ListView->CheckAll();
+            break;
+        }
+    }
+
+    VOID FreeInstalledAppList()
+    {
+        INT Count = m_ListView->GetItemCount() - 1;
         PINSTALLED_INFO Info;
 
         while (Count >= 0)
@@ -1369,32 +1399,44 @@
         return TRUE;
     }
 
+    VOID UpdateStatusBarText()
+    {
+        if (m_StatusBar)
+        {
+            ATL::CStringW szBuffer1, szBuffer2;
+
+            szBuffer2.LoadStringW(hInst, IDS_APPS_COUNT);
+            szBuffer1.Format(szBuffer2, m_ListView->GetItemCount(), 
nSelectedApps);
+            m_StatusBar->SetText(szBuffer1);
+        }
+    }
 
     VOID UpdateApplicationsList(INT EnumType)
     {
         ATL::CStringW szBuffer1, szBuffer2;
         HIMAGELIST hImageListView;
-
-        m_ListView->SendMessageW(WM_SETREDRAW, FALSE, 0);
-
+        bUpdating = TRUE;
+
+        m_ListView->SetRedraw(FALSE);
+
+        nSelectedApps = 0;
         if (EnumType < 0) EnumType = SelectedEnumType;
 
         if (IS_INSTALLED_ENUM(SelectedEnumType))
             FreeInstalledAppList();
 
-        (VOID) ListView_DeleteAllItems(hListView);
+        m_ListView->DeleteAllItems();
 
         /* Create new ImageList */
         hImageListView = ImageList_Create(LISTVIEW_ICON_SIZE,
                                           LISTVIEW_ICON_SIZE,
                                           GetSystemColorDepth() | ILC_MASK,
                                           0, 1);
-        HIMAGELIST hImageListBuf = ListView_SetImageList(hListView, 
hImageListView, LVSIL_SMALL);
+        HIMAGELIST hImageListBuf = m_ListView->SetImageList(hImageListView, 
LVSIL_SMALL);
         if (hImageListBuf)
         {
             ImageList_Destroy(hImageListBuf);
         }
-
 
         if (IS_AVAILABLE_ENUM(EnumType))
         {
@@ -1404,17 +1446,16 @@
 
         SelectedEnumType = EnumType;
 
-        szBuffer2.LoadStringW(hInst, IDS_APPS_COUNT);
-        szBuffer1.Format(szBuffer2, ListView_GetItemCount(hListView));
-        SetStatusBarText(szBuffer1);
+        UpdateStatusBarText();
 
         SetWelcomeText();
 
         /* set automatic column width for program names if the list is not 
empty */
-        if (ListView_GetItemCount(hListView) > 0)
-            ListView_SetColumnWidth(hListView, 0, LVSCW_AUTOSIZE);
-
-        SendMessageW(hListView, WM_SETREDRAW, TRUE, 0);
+        if (m_ListView->GetItemCount() > 0)
+            ListView_SetColumnWidth(m_ListView->GetWindow(), 0, 
LVSCW_AUTOSIZE);
+
+        bUpdating = FALSE;
+        m_ListView->SetRedraw(TRUE);
     }
 
 public:

Modified: branches/GSoC_2017/rapps/reactos/base/applications/rapps/installed.cpp
URL: 
http://svn.reactos.org/svn/reactos/branches/GSoC_2017/rapps/reactos/base/applications/rapps/installed.cpp?rev=75411&r1=75410&r2=75411&view=diff
==============================================================================
--- branches/GSoC_2017/rapps/reactos/base/applications/rapps/installed.cpp      
[iso-8859-1] (original)
+++ branches/GSoC_2017/rapps/reactos/base/applications/rapps/installed.cpp      
[iso-8859-1] Wed Jul 26 13:30:46 2017
@@ -101,7 +101,7 @@
     WCHAR szAppName[MAX_STR_LEN];
     DWORD dwType, dwSize;
     INT ItemIndex;
-    LVITEM Item;
+    LVITEMW Item;
     HKEY hKey;
     PINSTALLED_INFO ItemInfo;
 

Modified: branches/GSoC_2017/rapps/reactos/base/applications/rapps/lang/en-US.rc
URL: 
http://svn.reactos.org/svn/reactos/branches/GSoC_2017/rapps/reactos/base/applications/rapps/lang/en-US.rc?rev=75411&r1=75410&r2=75411&view=diff
==============================================================================
--- branches/GSoC_2017/rapps/reactos/base/applications/rapps/lang/en-US.rc      
[iso-8859-1] (original)
+++ branches/GSoC_2017/rapps/reactos/base/applications/rapps/lang/en-US.rc      
[iso-8859-1] Wed Jul 26 13:30:46 2017
@@ -110,6 +110,16 @@
     ICON IDI_MAIN, IDC_STATIC, 10, 10, 7, 30
 END
 
+IDD_DOWNLOAD_DIALOG_MULTI DIALOGEX 0, 0, 220, 72
+STYLE DS_SHELLFONT | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | WS_VISIBLE 
+CAPTION "Downloading (multiple)..."
+FONT 8, "MS Shell Dlg"
+BEGIN
+    CONTROL "Progress1", IDC_DOWNLOAD_PROGRESS, "msctls_progress32", WS_BORDER 
| PBS_SMOOTH, 10, 10, 200, 12
+    EDITTEXT IDC_DOWNLOAD_STATUS, 10, 28, 200, 22, ES_CENTER | ES_MULTILINE | 
ES_AUTOVSCROLL | ES_READONLY | WS_DISABLED | NOT WS_BORDER
+    PUSHBUTTON "Cancel", IDCANCEL, 85, 53, 50, 15, WS_GROUP | WS_TABSTOP
+END
+
 STRINGTABLE
 BEGIN
     IDS_TOOLTIP_INSTALL "Install"
@@ -187,7 +197,7 @@
     IDS_INSTALL "Install"
     IDS_UNINSTALL "Uninstall"
     IDS_MODIFY "Modify"
-    IDS_APPS_COUNT "Applications count: %d"
+    IDS_APPS_COUNT "Applications count: %d; Selected: %d"
     IDS_WELCOME_TITLE "Welcome to ReactOS Applications Manager!\n\n"
     IDS_WELCOME_TEXT "Choose a category on the left, then choose an 
application to install or uninstall.\nReactOS Web Site: "
     IDS_WELCOME_URL "http://www.reactos.org";

Modified: branches/GSoC_2017/rapps/reactos/base/applications/rapps/lang/ru-RU.rc
URL: 
http://svn.reactos.org/svn/reactos/branches/GSoC_2017/rapps/reactos/base/applications/rapps/lang/ru-RU.rc?rev=75411&r1=75410&r2=75411&view=diff
==============================================================================
--- branches/GSoC_2017/rapps/reactos/base/applications/rapps/lang/ru-RU.rc      
[iso-8859-1] (original)
+++ branches/GSoC_2017/rapps/reactos/base/applications/rapps/lang/ru-RU.rc      
[iso-8859-1] Wed Jul 26 13:30:46 2017
@@ -91,7 +91,7 @@
 END
 
 IDD_DOWNLOAD_DIALOG DIALOGEX 0, 0, 220, 72
-STYLE DS_SHELLFONT | DS_CENTER | WS_BORDER | WS_CAPTION | WS_POPUP | 
WS_SYSMENU | WS_VISIBLE
+STYLE DS_SHELLFONT | DS_CENTER | WS_POPUPWINDOW | WS_SYSMENU | WS_VISIBLE
 CAPTION "Загрузка..."
 FONT 8, "MS Shell Dlg"
 BEGIN
@@ -186,7 +186,7 @@
     IDS_INSTALL "Установить"
     IDS_UNINSTALL "Удалить"
     IDS_MODIFY "Изменить"
-    IDS_APPS_COUNT "Количество: %d"
+    IDS_APPS_COUNT "Количество приложений: %d; 
Выбрано: %d"
     IDS_WELCOME_TITLE "Добро пожаловать в ""Менеджер 
приложений ReactOS""!\n\n"
     IDS_WELCOME_TEXT "Выберите категорию слева и 
приложение для установки или 
удаления.\nСайт ReactOS: "
     IDS_WELCOME_URL "http://www.reactos.org";

Modified: branches/GSoC_2017/rapps/reactos/base/applications/rapps/lang/uk-UA.rc
URL: 
http://svn.reactos.org/svn/reactos/branches/GSoC_2017/rapps/reactos/base/applications/rapps/lang/uk-UA.rc?rev=75411&r1=75410&r2=75411&view=diff
==============================================================================
--- branches/GSoC_2017/rapps/reactos/base/applications/rapps/lang/uk-UA.rc      
[iso-8859-1] (original)
+++ branches/GSoC_2017/rapps/reactos/base/applications/rapps/lang/uk-UA.rc      
[iso-8859-1] Wed Jul 26 13:30:46 2017
@@ -99,7 +99,7 @@
 END
 
 IDD_DOWNLOAD_DIALOG DIALOGEX 0, 0, 220, 72
-STYLE DS_SHELLFONT | DS_CENTER | WS_BORDER | WS_CAPTION | WS_POPUP | 
WS_SYSMENU | WS_VISIBLE
+STYLE DS_SHELLFONT | DS_CENTER | WS_POPUPWINDOW | WS_SYSMENU | WS_VISIBLE
 CAPTION "Завантаження..."
 FONT 8, "MS Shell Dlg"
 BEGIN
@@ -194,7 +194,7 @@
     IDS_INSTALL "Встановити"
     IDS_UNINSTALL "Видалити"
     IDS_MODIFY "Змінити"
-    IDS_APPS_COUNT "Kількість додатків: %d"
+    IDS_APPS_COUNT "Kількість додатків: %d; Обрано: %d"
     IDS_WELCOME_TITLE "Ласкаво просимо в Менеджер 
додатків ReactOS!\n\n"
     IDS_WELCOME_TEXT "Виберіть категорію зліва, а 
потім виберіть програми для встановлення 
чи видалення.\nСторінка ReactOS: "
     IDS_WELCOME_URL "http://www.reactos.org";


Reply via email to