HWND hListView = NULL;
+class CAvailableAppView
+{
+ static inline VOID InsertTextAfterLoaded_RichEdit(UINT uStringID,
+ const ATL::CStringW& szText,
+ DWORD StringFlags,
+ DWORD TextFlags)
+ {
+ ATL::CStringW szLoadedText;
+ if (!szText.IsEmpty() && szLoadedText.LoadStringW(hInst, uStringID))
+ {
+ InsertRichEditText(szLoadedText, StringFlags);
+ InsertRichEditText(szText, TextFlags);
+ }
+ }
+
+ static inline VOID InsertLoadedTextNewl_RichEdit(UINT uStringID,
+ DWORD StringFlags)
+ {
+ ATL::CStringW szLoadedText;
+ if (szLoadedText.LoadStringW(hInst, uStringID))
+ {
+ InsertRichEditText(L"\n", 0);
+ InsertRichEditText(szLoadedText, StringFlags);
+ InsertRichEditText(L"\n", 0);
+ }
+ }
+
+ static VOID InsertVersionInfo_RichEdit(CAvailableApplicationInfo* Info)
+ {
+ if (Info->IsInstalled())
+ {
+ if (Info->HasInstalledVersion())
+ {
+ if (Info->HasUpdate())
+ InsertLoadedTextNewl_RichEdit(IDS_STATUS_UPDATE_AVAILABLE, CFE_ITALIC);
+ else
+ InsertLoadedTextNewl_RichEdit(IDS_STATUS_INSTALLED, CFE_ITALIC);
+
+ InsertTextAfterLoaded_RichEdit(IDS_AINFO_VERSION, Info->szInstalledVersion, CFE_BOLD, 0);
+ }
+ else
+ {
+ InsertLoadedTextNewl_RichEdit(IDS_STATUS_INSTALLED, CFE_ITALIC);
+ }
+ }
+ else
+ {
+ InsertLoadedTextNewl_RichEdit(IDS_STATUS_NOTINSTALLED, CFE_ITALIC);
+ }
+
+ InsertTextAfterLoaded_RichEdit(IDS_AINFO_AVAILABLEVERSION, Info->szVersion, CFE_BOLD, 0);
+ }
+
+ static VOID InsertLicenseInfo_RichEdit(CAvailableApplicationInfo* Info)
+ {
+ ATL::CStringW szLicense;
+ switch (Info->LicenseType)
+ {
+ case LICENSE_TYPE::OpenSource:
+ szLicense.LoadStringW(hInst, IDS_LICENSE_OPENSOURCE);
+ break;
+ case LICENSE_TYPE::Freeware:
+ szLicense.LoadStringW(hInst, IDS_LICENSE_FREEWARE);
+ break;
+ case LICENSE_TYPE::Trial:
+ szLicense.LoadStringW(hInst, IDS_LICENSE_TRIAL);
+ break;
+ default:
+ InsertTextAfterLoaded_RichEdit(IDS_AINFO_LICENSE, Info->szLicense, CFE_BOLD, 0);
+ return;
+ }
+
+ szLicense += L" (" + Info->szLicense + L")";
+ InsertTextAfterLoaded_RichEdit(IDS_AINFO_LICENSE, szLicense, CFE_BOLD, 0);
+ }
+
+ static VOID InsertLanguageInfo_RichEdit(CAvailableApplicationInfo* Info)
+ {
+ if (!Info->HasLanguageInfo())
+ {
+ return;
+ }
+
+ const INT nTranslations = Info->Languages.GetSize();
+ ATL::CStringW szLangInfo;
+ ATL::CStringW szLoadedTextAvailability;
+ ATL::CStringW szLoadedAInfoText;
+
+ szLoadedAInfoText.LoadStringW(IDS_AINFO_LANGUAGES);
+
+ //TODO: replace those hardcoded strings
+ if (Info->HasNativeLanguage())
+ {
+ szLoadedTextAvailability.LoadStringW(IDS_LANGUAGE_AVAILABLE_TRANSLATION);
+ if (nTranslations > 1)
+ {
+ szLangInfo.Format(L" (+%d more)", nTranslations - 1);
+ }
+ else
+ {
+ szLangInfo.LoadStringW(IDS_LANGUAGE_SINGLE);
+ szLangInfo = L" (" + szLangInfo + L")";
+ }
+ }
+ else if (Info->HasEnglishLanguage())
+ {
+ szLoadedTextAvailability.LoadStringW(IDS_LANGUAGE_ENGLISH_TRANSLATION);
+ if (nTranslations > 1)
+ {
+ szLangInfo.Format(L" (+%d available)", nTranslations - 1);
+ }
+ else
+ {
+ szLangInfo.LoadStringW(IDS_LANGUAGE_SINGLE);
+ szLangInfo = L" (" + szLangInfo + L")";
+ }
+ }
+ else
+ {
+ szLoadedTextAvailability.LoadStringW(IDS_LANGUAGE_NO_TRANSLATION);
+ }
+
+ InsertRichEditText(szLoadedAInfoText, CFE_BOLD);
+ InsertRichEditText(szLoadedTextAvailability, NULL);
+ InsertRichEditText(szLangInfo, CFE_ITALIC);
+ }
+
+public:
+ static BOOL ShowAvailableAppInfo(INT Index)
+ {
+ CAvailableApplicationInfo* Info = (CAvailableApplicationInfo*) ListViewGetlParam(Index);
+ if (!Info) return FALSE;
+
+ NewRichEditText(Info->szName, CFE_BOLD);
+ InsertVersionInfo_RichEdit(Info);
+ InsertLicenseInfo_RichEdit(Info);
+ InsertLanguageInfo_RichEdit(Info);
+
+ InsertTextAfterLoaded_RichEdit(IDS_AINFO_SIZE, Info->szSize, CFE_BOLD, 0);
+ InsertTextAfterLoaded_RichEdit(IDS_AINFO_URLSITE, Info->szUrlSite, CFE_BOLD, CFE_LINK);
+ InsertTextAfterLoaded_RichEdit(IDS_AINFO_DESCRIPTION, Info->szDesc, CFE_BOLD, 0);
+ InsertTextAfterLoaded_RichEdit(IDS_AINFO_URLDOWNLOAD, Info->szUrlDownload, CFE_BOLD, CFE_LINK);
+
+ return TRUE;
+ }
+};
+
class CMainToolbar :
public CUiWindow< CToolbar<> >
{
WCHAR szInstallBtn[MAX_STR_LEN];
WCHAR szUninstallBtn[MAX_STR_LEN];
WCHAR szModifyBtn[MAX_STR_LEN];
+ WCHAR szSelectAll[MAX_STR_LEN];
VOID AddImageToImageList(HIMAGELIST hImageList, UINT ImageIndex)
{
DeleteObject(hImage);
}
- HIMAGELIST InitImageList(VOID)
+ HIMAGELIST InitImageList()
{
HIMAGELIST hImageList;
AddImageToImageList(hImageList, IDI_INSTALL);
AddImageToImageList(hImageList, IDI_UNINSTALL);
AddImageToImageList(hImageList, IDI_MODIFY);
+ AddImageToImageList(hImageList, IDI_CHECK_ALL);
AddImageToImageList(hImageList, IDI_REFRESH);
AddImageToImageList(hImageList, IDI_UPDATE_DB);
AddImageToImageList(hImageList, IDI_SETTINGS);
switch (idButton)
{
case ID_EXIT:
- lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_EXIT);
+ lpttt->lpszText = MAKEINTRESOURCEW(IDS_TOOLTIP_EXIT);
break;
case ID_INSTALL:
- lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_INSTALL);
+ lpttt->lpszText = MAKEINTRESOURCEW(IDS_TOOLTIP_INSTALL);
break;
case ID_UNINSTALL:
- lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_UNINSTALL);
+ lpttt->lpszText = MAKEINTRESOURCEW(IDS_TOOLTIP_UNINSTALL);
break;
case ID_MODIFY:
- lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_MODIFY);
+ lpttt->lpszText = MAKEINTRESOURCEW(IDS_TOOLTIP_MODIFY);
break;
case ID_SETTINGS:
- lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_SETTINGS);
+ lpttt->lpszText = MAKEINTRESOURCEW(IDS_TOOLTIP_SETTINGS);
break;
case ID_REFRESH:
- lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_REFRESH);
+ lpttt->lpszText = MAKEINTRESOURCEW(IDS_TOOLTIP_REFRESH);
break;
case ID_RESETDB:
- lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_UPDATE_DB);
+ lpttt->lpszText = MAKEINTRESOURCEW(IDS_TOOLTIP_UPDATE_DB);
break;
}
}
{ 0, ID_INSTALL, TBSTATE_ENABLED, BTNS_BUTTON | BTNS_AUTOSIZE, { 0 }, 0, (INT_PTR) szInstallBtn },
{ 1, ID_UNINSTALL, TBSTATE_ENABLED, BTNS_BUTTON | BTNS_AUTOSIZE, { 0 }, 0, (INT_PTR) szUninstallBtn },
{ 2, ID_MODIFY, TBSTATE_ENABLED, BTNS_BUTTON | BTNS_AUTOSIZE, { 0 }, 0, (INT_PTR) szModifyBtn },
- { 5, 0, TBSTATE_ENABLED, BTNS_SEP, { 0 }, 0, 0 },
- { 3, ID_REFRESH, TBSTATE_ENABLED, BTNS_BUTTON | BTNS_AUTOSIZE, { 0 }, 0, 0 },
- { 4, ID_RESETDB, TBSTATE_ENABLED, BTNS_BUTTON | BTNS_AUTOSIZE, {0}, 0, 0},
- { 5, 0, TBSTATE_ENABLED, BTNS_SEP, { 0 }, 0, 0 },
- { 5, ID_SETTINGS, TBSTATE_ENABLED, BTNS_BUTTON | BTNS_AUTOSIZE, { 0 }, 0, 0 },
- { 6, ID_EXIT, TBSTATE_ENABLED, BTNS_BUTTON | BTNS_AUTOSIZE, { 0 }, 0, 0 }
+ { 3, ID_CHECK_ALL, TBSTATE_ENABLED, BTNS_BUTTON | BTNS_AUTOSIZE,{0}, 0, (INT_PTR) szSelectAll},
+ {-1, 0, TBSTATE_ENABLED, BTNS_SEP, { 0 }, 0, 0 },
+ { 4, ID_REFRESH, TBSTATE_ENABLED, BTNS_BUTTON | BTNS_AUTOSIZE, { 0 }, 0, 0 },
+ { 5, ID_RESETDB, TBSTATE_ENABLED, BTNS_BUTTON | BTNS_AUTOSIZE, { 0 }, 0, 0 },
+ {-1, 0, TBSTATE_ENABLED, BTNS_SEP, { 0 }, 0, 0 },
+ { 6, ID_SETTINGS, TBSTATE_ENABLED, BTNS_BUTTON | BTNS_AUTOSIZE, { 0 }, 0, 0 },
+ { 7, ID_EXIT, TBSTATE_ENABLED, BTNS_BUTTON | BTNS_AUTOSIZE, { 0 }, 0, 0 },
};
LoadStringW(hInst, IDS_INSTALL, szInstallBtn, _countof(szInstallBtn));
LoadStringW(hInst, IDS_UNINSTALL, szUninstallBtn, _countof(szUninstallBtn));
LoadStringW(hInst, IDS_MODIFY, szModifyBtn, _countof(szModifyBtn));
+ LoadStringW(hInst, IDS_SELECT_ALL, szSelectAll, _countof(szSelectAll));
m_hWnd = CreateWindowExW(0, TOOLBARCLASSNAMEW, NULL,
WS_CHILD | WS_VISIBLE | TBSTYLE_FLAT | TBSTYLE_TOOLTIPS | TBSTYLE_LIST,
int iSubItem;
};
-public:
+ BOOL bHasAllChecked;
BOOL bAscending;
- CAppsListView()
+public:
+ CAppsListView() :
+ bAscending(TRUE),
+ bHasAllChecked(FALSE)
{
- bAscending = TRUE;
}
VOID ColumnClick(LPNMLISTVIEW pnmv)
PVOID GetLParam(INT Index)
{
INT ItemIndex;
- LVITEM Item;
+ LVITEMW Item;
if (Index == -1)
{
BOOL AddColumn(INT Index, ATL::CStringW& Text, INT Width, INT Format)
{
- BOOL result = AddColumn(Index, Text.GetBuffer(), Width, Format);
-
- return result;
+ return AddColumn(Index, const_cast<LPWSTR>(Text.GetString()), Width, Format);
}
BOOL AddColumn(INT Index, LPWSTR lpText, INT Width, INT Format)
{
- LV_COLUMN Column;
+ LVCOLUMNW 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;
INT AddItem(INT ItemIndex, INT IconIndex, LPWSTR lpText, LPARAM lParam)
{
- LV_ITEMW Item;
+ LVITEMW Item;
ZeroMemory(&Item, sizeof(Item));
HWND hwnd = CListView::Create(hwndParent, r, NULL, style, WS_EX_CLIENTEDGE, menu);
if (hwnd)
- SetExtendedListViewStyle(LVS_EX_FULLROWSELECT);
+ {
+ SetExtendedListViewStyle(LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT);
+ }
return hwnd;
}
+ BOOL GetCheckState(INT item)
+ {
+ return (BOOL) (GetItemState(item, LVIS_STATEIMAGEMASK) >> 12) - 1;
+ }
+
+ VOID SetCheckState(INT item, BOOL fCheck)
+ {
+ SetItemState(item, INDEXTOSTATEIMAGEMASK((fCheck) ? 2 : 1), LVIS_STATEIMAGEMASK);
+ }
+
+ VOID CheckAll()
+ {
+ bHasAllChecked = !bHasAllChecked;
+ SetCheckState(-1, bHasAllChecked);
+ }
+
+ ATL::CSimpleArray<PAPPLICATION_INFO> GetCheckedItems()
+ {
+ ATL::CSimpleArray<PAPPLICATION_INFO> list;
+ for (INT i = 0; i >= 0; i = GetNextItem(i, LVNI_ALL))
+ {
+ if (GetCheckState(i) != FALSE)
+ {
+ PAPPLICATION_INFO pAppInfo = (PAPPLICATION_INFO) GetItemData(i);
+ list.Add(pAppInfo);
+ }
+ }
+ return list;
+ }
+
+ PAPPLICATION_INFO GetSelectedData()
+ {
+ INT item = GetSelectionMark();
+ return (PAPPLICATION_INFO) GetItemData(item);
+ }
};
class CSideTreeView :
public:
HTREEITEM AddItem(HTREEITEM hParent, ATL::CStringW &Text, INT Image, INT SelectedImage, LPARAM lParam)
{
- HTREEITEM result = CUiWindow<CTreeView>::AddItem(hParent, Text.GetBuffer(), Image, SelectedImage, lParam);
- Text.ReleaseBuffer();
- return result;
+ return CUiWindow<CTreeView>::AddItem(hParent, const_cast<LPWSTR>(Text.GetString()), Image, SelectedImage, lParam);
}
HTREEITEM AddCategory(HTREEITEM hRootItem, UINT TextIndex, UINT IconIndex)
CUiWindow<CRichEdit> * m_RichEdit;
CUiWindow<CSearchBar> * m_SearchBar;
+ CAvailableApps m_AvailableApps;
LPWSTR pLink;
- BOOL SearchEnabled;
+ INT nSelectedApps;
+ BOOL bSearchEnabled;
+ BOOL bUpdating;
public:
CMainWindow() :
m_ClientPanel(NULL),
pLink(NULL),
- SearchEnabled(TRUE)
+ bSearchEnabled(FALSE)
{
}
private:
-
- VOID InitApplicationsList(VOID)
+ VOID InitApplicationsList()
{
ATL::CStringW szText;
szText.LoadStringW(hInst, IDS_APP_DESCRIPTION);
m_ListView->AddColumn(3, szText, 250, LVCFMT_LEFT);
- UpdateApplicationsList(ENUM_ALL_COMPONENTS);
+ // Unnesesary since the list updates on every TreeView selection
+ // UpdateApplicationsList(ENUM_ALL_COMPONENTS);
}
HTREEITEM AddCategory(HTREEITEM hRootItem, UINT TextIndex, UINT IconIndex)
return m_TreeView->AddCategory(hRootItem, TextIndex, IconIndex);
}
- VOID InitCategoriesList(VOID)
+ VOID InitCategoriesList()
{
HTREEITEM hRootItem;
m_HSplitter->m_Horizontal = TRUE;
m_HSplitter->m_Pos = 32768;
m_HSplitter->m_MinFirst = 300;
- m_HSplitter->m_MinSecond = 80;
+ m_HSplitter->m_MinSecond = 150;
m_VSplitter->Second().Append(m_HSplitter);
return m_HSplitter->Create(m_hWnd) != NULL;
}
- BOOL CreateSearchBar(VOID)
+ BOOL CreateSearchBar()
{
m_SearchBar = new CUiWindow<CSearchBar>();
m_SearchBar->m_VerticalAlignment = UiAlign_LeftTop;
BOOL CreateLayout()
{
- bool b = TRUE;
+ BOOL b = TRUE;
+ bUpdating = TRUE;
m_ClientPanel = new CUiPanel();
m_ClientPanel->m_VerticalAlignment = UiAlign_Stretch;
RECT rBottom;
/* Size status bar */
- m_StatusBar->SendMessage(WM_SIZE, 0, 0);
+ m_StatusBar->SendMessageW(WM_SIZE, 0, 0);
/* Size tool bar */
m_Toolbar->AutoSize();
m_VSplitter->m_Margin.bottom = rBottom.bottom - rBottom.top;
}
+ bUpdating = FALSE;
return b;
}
{
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;
}
FreeLogs();
- FreeCachedAvailableEntries();
-
if (IS_INSTALLED_ENUM(SelectedEnumType))
FreeInstalledAppList();
if (IS_INSTALLED_ENUM(SelectedEnumType))
ShowInstalledAppInfo(ItemIndex);
if (IS_AVAILABLE_ENUM(SelectedEnumType))
- ShowAvailableAppInfo(ItemIndex);
+ CAvailableAppView::ShowAvailableAppInfo(ItemIndex);
+ }
+ /* Check if the item is checked */
+ if ((pnic->uNewState & LVIS_STATEIMAGEMASK) && !bUpdating)
+ {
+ BOOL checked = ListView_GetCheckState(pnic->hdr.hwndFrom, pnic->iItem);
+ nSelectedApps += (checked) ? 1 : -1;
+ UpdateStatusBarText();
}
}
}
if (IS_INSTALLED_ENUM(SelectedEnumType))
ShowInstalledAppInfo(-1);
if (IS_AVAILABLE_ENUM(SelectedEnumType))
- ShowAvailableAppInfo(-1);
+ CAvailableAppView::ShowAvailableAppInfo(-1);
}
}
break;
if (data->hwndFrom == m_ListView->m_hWnd && ((LPNMLISTVIEW) lParam)->iItem != -1)
{
/* this won't do anything if the program is already installed */
- SendMessage(hwnd, WM_COMMAND, ID_INSTALL, 0);
+ SendMessageW(hwnd, WM_COMMAND, ID_INSTALL, 0);
}
}
break;
if (wParam == SEARCH_TIMER_ID)
{
::KillTimer(hwnd, SEARCH_TIMER_ID);
- UpdateApplicationsList(-1);
+ if (bSearchEnabled)
+ UpdateApplicationsList(-1);
}
- break;
+ break;
}
return FALSE;
}
}
- BOOL IsSelectedNodeInstalled(void)
+ BOOL IsSelectedNodeInstalled()
{
HTREEITEM hSelectedItem = m_TreeView->GetSelection();
TV_ITEM tItem;
m_SearchBar->GetWindowTextW(szWndText);
if (szBuf == szWndText)
{
- SearchEnabled = FALSE;
+ bSearchEnabled = FALSE;
m_SearchBar->SetWindowTextW(L"");
}
}
if (szBuf.IsEmpty())
{
szBuf.LoadStringW(hInst, IDS_SEARCH_TEXT);
- SearchEnabled = FALSE;
+ bSearchEnabled = FALSE;
m_SearchBar->SetWindowTextW(szBuf.GetString());
}
}
{
ATL::CStringW szWndText;
- if (!SearchEnabled)
+ if (!bSearchEnabled)
{
- SearchEnabled = TRUE;
+ bSearchEnabled = TRUE;
break;
}
break;
case ID_INSTALL:
- if (DownloadApplication(-1))
- /* TODO: Implement install dialog
- * if (InstallApplication(-1))
- */
+ if (nSelectedApps)
+ {
+ СDownloadManager::DownloadListOfApplications(m_ListView->GetCheckedItems());
+ UpdateApplicationsList(-1);
+ }
+ else if(СDownloadManager::DownloadApplication(m_ListView->GetSelectedData()))
+ {
UpdateApplicationsList(-1);
+ }
+
break;
case ID_UNINSTALL:
break;
case ID_RESETDB:
- UpdateAppsDB();
+ m_AvailableApps.UpdateAppsDB();
UpdateApplicationsList(-1);
break;
case ID_ABOUT:
ShowAboutDialog();
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)
/* Get version info */
GetApplicationString(ItemInfo->hSubKey, L"DisplayVersion", szText);
- ListView_SetItemText(hListView, Index, 1, szText.GetBuffer());
- szText.ReleaseBuffer();
+ ListView_SetItemText(hListView, Index, 1, const_cast<LPWSTR>(szText.GetString()));
/* Get comments */
GetApplicationString(ItemInfo->hSubKey, L"Comments", szText);
- ListView_SetItemText(hListView, Index, 2, szText.GetBuffer());
- szText.ReleaseBuffer();
+ ListView_SetItemText(hListView, Index, 2, const_cast<LPWSTR>(szText.GetString()));
+
return TRUE;
}
- static BOOL CALLBACK s_EnumAvailableAppProc(PAPPLICATION_INFO Info)
+ static BOOL CALLBACK s_EnumAvailableAppProc(PAPPLICATION_INFO Info, LPCWSTR szFolderPath)
{
INT Index;
HICON hIcon = NULL;
- ATL::CStringW szIconPath;
+
HIMAGELIST hImageListView = ListView_GetImageList(hListView, LVSIL_SMALL);
if (!SearchPatternMatch(Info->szName, szSearchPattern) &&
return TRUE;
}
- if (GetStorageDirectory(szIconPath))
- {
- /* Load icon from file */
- szIconPath += L"\\rapps\\icons\\" + Info->szName + L".ico";
- hIcon = (HICON) LoadImageW(NULL,
- szIconPath.GetString(),
- IMAGE_ICON,
- LISTVIEW_ICON_SIZE,
- LISTVIEW_ICON_SIZE,
- LR_LOADFROMFILE);
- }
-
- if (!hIcon)
+ /* Load icon from file */
+ ATL::CStringW szIconPath;
+ szIconPath.Format(L"%lsicons\\%ls.ico", szFolderPath, Info->szName);
+ hIcon = (HICON) LoadImageW(NULL,
+ szIconPath.GetString(),
+ IMAGE_ICON,
+ LISTVIEW_ICON_SIZE,
+ LISTVIEW_ICON_SIZE,
+ LR_LOADFROMFILE);
+
+ if (!hIcon || GetLastError() != ERROR_SUCCESS)
{
/* Load default icon */
hIcon = (HICON) LoadIconW(hInst, MAKEINTRESOURCEW(IDI_MAIN));
}
+
Index = ImageList_AddIcon(hImageListView, hIcon);
DestroyIcon(hIcon);
Index = ListViewAddItem(Info->Category, Index, Info->szName, (LPARAM) Info);
- hImageListView = ListView_SetImageList(hListView, hImageListView, LVSIL_SMALL);
+ ListView_SetImageList(hListView, hImageListView, LVSIL_SMALL);
- ListView_SetItemText(hListView, Index, 1, Info->szVersion.GetBuffer());
- Info->szVersion.ReleaseBuffer();
+ ListView_SetItemText(hListView, Index, 1, const_cast<LPWSTR>(Info->szVersion.GetString()));
+ ListView_SetItemText(hListView, Index, 2, const_cast<LPWSTR>(Info->szDesc.GetString()));
- ListView_SetItemText(hListView, Index, 2, Info->szDesc.GetBuffer());
- Info->szDesc.ReleaseBuffer();
return TRUE;
}
+ VOID UpdateStatusBarText()
+ {
+ if (m_StatusBar)
+ {
+ ATL::CStringW szBuffer;
+
+ szBuffer.Format(IDS_APPS_COUNT, m_ListView->GetItemCount(), nSelectedApps);
+ m_StatusBar->SetText(szBuffer);
+ }
+ }
VOID UpdateApplicationsList(INT EnumType)
{
ATL::CStringW szBuffer1, szBuffer2;
- HIMAGELIST hImageListView = NULL;
+ 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);
- hImageListView = ListView_SetImageList(hListView, hImageListView, LVSIL_SMALL);
-
- if (hImageListView)
- ImageList_Destroy(hImageListView);
+ HIMAGELIST hImageListBuf = m_ListView->SetImageList(hImageListView, LVSIL_SMALL);
+ if (hImageListBuf)
+ {
+ ImageList_Destroy(hImageListBuf);
+ }
if (IS_AVAILABLE_ENUM(EnumType))
{
/* Enum available applications */
- EnumAvailableApplications(EnumType, s_EnumAvailableAppProc);
+ m_AvailableApps.EnumAvailableApplications(EnumType, s_EnumAvailableAppProc);
}
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:
DWORD csStyle = CS_VREDRAW | CS_HREDRAW;
static ATL::CWndClassInfo wc =
{
- {
- sizeof(WNDCLASSEX),
- csStyle,
+ {
+ sizeof(WNDCLASSEX),
+ csStyle,
StartWindowProc,
- 0,
- 0,
+ 0,
+ 0,
NULL,
LoadIconW(_AtlBaseModule.GetModuleInstance(), MAKEINTRESOURCEW(IDI_MAIN)),
LoadCursorW(NULL, IDC_ARROW),
- (HBRUSH) (COLOR_BTNFACE + 1),
+ (HBRUSH) (COLOR_BTNFACE + 1),
MAKEINTRESOURCEW(IDR_MAINMENU),
- L"RAppsWnd",
+ L"RAppsWnd",
NULL
},
NULL, NULL, IDC_ARROW, TRUE, 0, _T("")
{
return m_RichEdit;
}
+
+ CAvailableApps * GetAvailableApps()
+ {
+ return &m_AvailableApps;
+ }
};
+// File interface
+
CMainWindow * g_MainWindow;
HWND CreateMainWindow()
INT ListViewAddItem(INT ItemIndex, INT IconIndex, ATL::CStringW & Name, LPARAM lParam)
{
- INT result = ListViewAddItem(ItemIndex, IconIndex, Name.GetBuffer(), lParam);
- Name.ReleaseBuffer();
- return result;
+ return ListViewAddItem(ItemIndex, IconIndex, const_cast<LPWSTR>(Name.GetString()), lParam);
}
VOID NewRichEditText(const ATL::CStringW& szText, DWORD flags)
InsertRichEditText(szText.GetString(), flags);
}
+CAvailableApps* GetAvailableApps()
+{
+ return g_MainWindow->GetAvailableApps();
+}