mirror of
https://github.com/reactos/reactos.git
synced 2025-05-21 10:05:35 +00:00
[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 svn path=/branches/GSoC_2017/rapps/; revision=75411
This commit is contained in:
parent
1866b89100
commit
ec9d05004b
6 changed files with 102 additions and 52 deletions
|
@ -11,7 +11,6 @@
|
|||
#include "rapps.h"
|
||||
|
||||
// CAvailableApplicationInfo
|
||||
|
||||
CAvailableApplicationInfo::CAvailableApplicationInfo(const ATL::CStringW& sFileNameParam)
|
||||
: m_Parser(sFileNameParam)
|
||||
{
|
||||
|
@ -311,7 +310,7 @@ BOOL CAvailableApps::EnumAvailableApplications(INT EnumType, AVAILENUMPROC lpEnu
|
|||
m_InfoList.RemoveAt(LastListPosition);
|
||||
|
||||
delete Info;
|
||||
Info = nullptr;
|
||||
Info = NULL;
|
||||
break;
|
||||
}
|
||||
else
|
||||
|
|
|
@ -111,8 +111,8 @@ class CAvailableAppView
|
|||
ATL::CStringW szLangInfo;
|
||||
ATL::CStringW szLoadedTextAvailability;
|
||||
ATL::CStringW szLoadedAInfoText;
|
||||
szLoadedAInfoText.LoadStringW(IDS_AINFO_LANGUAGES);
|
||||
|
||||
szLoadedAInfoText.LoadStringW(IDS_AINFO_LANGUAGES);
|
||||
|
||||
//TODO: replace those hardcoded strings
|
||||
if (Info->HasNativeLanguage())
|
||||
|
@ -199,7 +199,7 @@ class CMainToolbar :
|
|||
DeleteObject(hImage);
|
||||
}
|
||||
|
||||
HIMAGELIST InitImageList(VOID)
|
||||
HIMAGELIST InitImageList()
|
||||
{
|
||||
HIMAGELIST hImageList;
|
||||
|
||||
|
@ -328,13 +328,14 @@ class CAppsListView :
|
|||
int iSubItem;
|
||||
};
|
||||
|
||||
BOOL HasAllChecked;
|
||||
public:
|
||||
BOOL bHasAllChecked;
|
||||
BOOL bAscending;
|
||||
|
||||
CAppsListView()
|
||||
public:
|
||||
CAppsListView() :
|
||||
bAscending(TRUE),
|
||||
bHasAllChecked(FALSE)
|
||||
{
|
||||
bAscending = TRUE;
|
||||
}
|
||||
|
||||
VOID ColumnClick(LPNMLISTVIEW pnmv)
|
||||
|
@ -349,7 +350,7 @@ public:
|
|||
PVOID GetLParam(INT Index)
|
||||
{
|
||||
INT ItemIndex;
|
||||
LVITEM Item;
|
||||
LVITEMW Item;
|
||||
|
||||
if (Index == -1)
|
||||
{
|
||||
|
@ -379,13 +380,13 @@ public:
|
|||
|
||||
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;
|
||||
|
||||
|
@ -455,12 +456,33 @@ public:
|
|||
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 @@ class CMainWindow :
|
|||
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 @@ private:
|
|||
return m_TreeView->AddCategory(hRootItem, TextIndex, IconIndex);
|
||||
}
|
||||
|
||||
VOID InitCategoriesList(VOID)
|
||||
VOID InitCategoriesList()
|
||||
{
|
||||
HTREEITEM hRootItem;
|
||||
|
||||
|
@ -703,7 +726,7 @@ private:
|
|||
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 @@ private:
|
|||
|
||||
BOOL CreateLayout()
|
||||
{
|
||||
bool b = TRUE;
|
||||
BOOL b = TRUE;
|
||||
bUpdating = TRUE;
|
||||
|
||||
m_ClientPanel = new CUiPanel();
|
||||
m_ClientPanel->m_VerticalAlignment = UiAlign_Stretch;
|
||||
|
@ -754,6 +778,7 @@ private:
|
|||
m_VSplitter->m_Margin.bottom = rBottom.bottom - rBottom.top;
|
||||
}
|
||||
|
||||
bUpdating = FALSE;
|
||||
return b;
|
||||
}
|
||||
|
||||
|
@ -761,16 +786,13 @@ private:
|
|||
{
|
||||
if (CreateLayout())
|
||||
{
|
||||
ATL::CStringW szBuffer1, szBuffer2;
|
||||
|
||||
InitApplicationsList();
|
||||
|
||||
InitCategoriesList();
|
||||
|
||||
szBuffer2.LoadStringW(hInst, IDS_APPS_COUNT);
|
||||
szBuffer1.Format(szBuffer2, m_ListView->GetItemCount());
|
||||
nSelectedApps = 0;
|
||||
UpdateStatusBarText();
|
||||
|
||||
m_StatusBar->SetText(szBuffer1);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -998,6 +1020,13 @@ private:
|
|||
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,7 +1112,7 @@ private:
|
|||
if (wParam == SEARCH_TIMER_ID)
|
||||
{
|
||||
::KillTimer(hwnd, SEARCH_TIMER_ID);
|
||||
if (SearchEnabled)
|
||||
if (bSearchEnabled)
|
||||
UpdateApplicationsList(-1);
|
||||
}
|
||||
break;
|
||||
|
@ -1119,7 +1148,7 @@ private:
|
|||
}
|
||||
}
|
||||
|
||||
BOOL IsSelectedNodeInstalled(void)
|
||||
BOOL IsSelectedNodeInstalled()
|
||||
{
|
||||
HTREEITEM hSelectedItem = m_TreeView->GetSelection();
|
||||
TV_ITEM tItem;
|
||||
|
@ -1156,7 +1185,7 @@ private:
|
|||
m_SearchBar->GetWindowTextW(szWndText);
|
||||
if (szBuf == szWndText)
|
||||
{
|
||||
SearchEnabled = FALSE;
|
||||
bSearchEnabled = FALSE;
|
||||
m_SearchBar->SetWindowTextW(L"");
|
||||
}
|
||||
}
|
||||
|
@ -1168,7 +1197,7 @@ private:
|
|||
if (szBuf.IsEmpty())
|
||||
{
|
||||
szBuf.LoadStringW(hInst, IDS_SEARCH_TEXT);
|
||||
SearchEnabled = FALSE;
|
||||
bSearchEnabled = FALSE;
|
||||
m_SearchBar->SetWindowTextW(szBuf.GetString());
|
||||
}
|
||||
}
|
||||
|
@ -1178,9 +1207,9 @@ private:
|
|||
{
|
||||
ATL::CStringW szWndText;
|
||||
|
||||
if (!SearchEnabled)
|
||||
if (!bSearchEnabled)
|
||||
{
|
||||
SearchEnabled = TRUE;
|
||||
bSearchEnabled = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1265,13 +1294,14 @@ private:
|
|||
break;
|
||||
|
||||
case ID_CHECK_ALL:
|
||||
m_ListView->CheckAll();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
VOID FreeInstalledAppList(VOID)
|
||||
VOID FreeInstalledAppList()
|
||||
{
|
||||
INT Count = ListView_GetItemCount(hListView) - 1;
|
||||
INT Count = m_ListView->GetItemCount() - 1;
|
||||
PINSTALLED_INFO Info;
|
||||
|
||||
while (Count >= 0)
|
||||
|
@ -1369,33 +1399,45 @@ private:
|
|||
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;
|
||||
bUpdating = TRUE;
|
||||
|
||||
m_ListView->SendMessageW(WM_SETREDRAW, FALSE, 0);
|
||||
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))
|
||||
{
|
||||
/* Enum available applications */
|
||||
|
@ -1404,17 +1446,16 @@ private:
|
|||
|
||||
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);
|
||||
if (m_ListView->GetItemCount() > 0)
|
||||
ListView_SetColumnWidth(m_ListView->GetWindow(), 0, LVSCW_AUTOSIZE);
|
||||
|
||||
SendMessageW(hListView, WM_SETREDRAW, TRUE, 0);
|
||||
bUpdating = FALSE;
|
||||
m_ListView->SetRedraw(TRUE);
|
||||
}
|
||||
|
||||
public:
|
||||
|
|
|
@ -101,7 +101,7 @@ UninstallApplication(INT Index, BOOL bModify)
|
|||
WCHAR szAppName[MAX_STR_LEN];
|
||||
DWORD dwType, dwSize;
|
||||
INT ItemIndex;
|
||||
LVITEM Item;
|
||||
LVITEMW Item;
|
||||
HKEY hKey;
|
||||
PINSTALLED_INFO ItemInfo;
|
||||
|
||||
|
|
|
@ -110,6 +110,16 @@ BEGIN
|
|||
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 @@ BEGIN
|
|||
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"
|
||||
|
|
|
@ -91,7 +91,7 @@ BEGIN
|
|||
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 @@ BEGIN
|
|||
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"
|
||||
|
|
|
@ -99,7 +99,7 @@ BEGIN
|
|||
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 @@ BEGIN
|
|||
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"
|
||||
|
|
Loading…
Reference in a new issue