ReactOS 0.4.16-dev-852-gcfcc8d8
gui.cpp
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS Applications Manager
3 * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4 * PURPOSE: GUI classes for RAPPS
5 * COPYRIGHT: Copyright 2015 David Quintana (gigaherz@gmail.com)
6 * Copyright 2017 Alexander Shaposhnikov (sanchaez@reactos.org)
7 * Copyright 2020 He Yang (1160386205@qq.com)
8 */
9
10#include "rapps.h"
11#include "rosui.h"
12#include "crichedit.h"
13#include "asyncinet.h"
14#include "gui.h"
15#include <shlobj_undoc.h>
16#include <shlguid_undoc.h>
17
18#include <atlbase.h>
19#include <atlcom.h>
20#include <atltypes.h>
21#include <atlwin.h>
22#include <wininet.h>
23#include <shellutils.h>
24#include <ui/rosctrls.h>
25#include <gdiplus.h>
26#include <math.h>
27
28#define SEARCH_TIMER_ID 'SR'
29#define TREEVIEW_ICON_SIZE 24
30
31// **** CSideTreeView ****
32
34 : CUiWindow(),
36{
37}
38
41{
42 return CUiWindow<CTreeView>::AddItem(hParent, const_cast<LPWSTR>(Text.GetString()), Image, SelectedImage, lParam);
43}
44
47{
48 CStringW szText;
49 INT Index = 0;
51
54 if (hIcon)
55 {
58 }
59
60 szText.LoadStringW(TextIndex);
61 return AddItem(hRootItem, szText, Index, Index, TextIndex);
62}
63
66{
68}
69
70VOID
72{
75}
76
78{
80}
81// **** CSideTreeView ****
82
83// **** CMainWindow ****
86
87CMainWindow::CMainWindow(CAppDB *db, BOOL bAppwiz) : m_ClientPanel(NULL), m_Db(db), m_bAppwizMode(bAppwiz), SelectedEnumType(ENUM_ALL_INSTALLED)
88{
89}
90
92{
94}
95
96VOID
98{
99 HTREEITEM hRootItemAvailable;
100
104
105 // Do not show any other categories in APPWIZ-mode.
106 if (m_bAppwizMode)
107 goto Finish;
108
110
112 m_TreeView->AddCategory(hRootItemAvailable, IDS_CAT_AUDIO, IDI_CAT_AUDIO);
113 m_TreeView->AddCategory(hRootItemAvailable, IDS_CAT_VIDEO, IDI_CAT_VIDEO);
115 m_TreeView->AddCategory(hRootItemAvailable, IDS_CAT_GAMES, IDI_CAT_GAMES);
118 m_TreeView->AddCategory(hRootItemAvailable, IDS_CAT_DEVEL, IDI_CAT_DEVEL);
119 m_TreeView->AddCategory(hRootItemAvailable, IDS_CAT_EDU, IDI_CAT_EDU);
123 m_TreeView->AddCategory(hRootItemAvailable, IDS_CAT_TOOLS, IDI_CAT_TOOLS);
125 m_TreeView->AddCategory(hRootItemAvailable, IDS_CAT_LIBS, IDI_CAT_LIBS);
127 m_TreeView->AddCategory(hRootItemAvailable, IDS_CAT_OTHER, IDI_CAT_OTHER);
128
129Finish:
132 if (!m_bAppwizMode)
133 m_TreeView->Expand(hRootItemAvailable, TVE_EXPAND);
134 m_TreeView->SelectItem(m_bAppwizMode ? hRootItemInstalled : hRootItemAvailable);
135}
136
137BOOL
139{
144
146}
147
148BOOL
150{
155
156 return m_TreeView->Create(m_hWnd) != NULL;
157}
158
159BOOL
161{
162 m_ApplicationView = new CApplicationView(this); // pass this to ApplicationView for callback purpose
166
168}
169
170BOOL
172{
179
180 // TODO: m_MinSecond should be calculate dynamically instead of hard-coded
182 m_VSplitter->m_Pos = 240;
184
185 return m_VSplitter->Create(m_hWnd) != NULL;
186}
187
188BOOL
190{
191 BOOL b = TRUE;
192 bUpdating = TRUE;
193
194 m_ClientPanel = new CUiPanel();
197
198 // Top level
199 b = b && CreateStatusBar();
200 b = b && CreateVSplitter();
201
202 // Inside V Splitter
203 b = b && CreateTreeView();
205
206 if (b)
207 {
208 RECT rBottom;
209
210 /* Size status bar */
211 m_StatusBar->SendMessageW(WM_SIZE, 0, 0);
212
213 ::GetWindowRect(m_StatusBar->m_hWnd, &rBottom);
214
215 m_VSplitter->m_Margin.bottom = rBottom.bottom - rBottom.top;
216 }
217
219 return b;
220}
221
222VOID
224{
225 delete m_TreeView;
226 delete m_ApplicationView;
227 delete m_VSplitter;
228 delete m_StatusBar;
229 return;
230}
231
232BOOL
234{
235 if (CreateLayout())
236 {
239
240 return TRUE;
241 }
242
243 return FALSE;
244}
245
246VOID
248{
249 if (wParam == SIZE_MINIMIZED)
250 return;
251
252 /* Size status bar */
253 m_StatusBar->SendMessage(WM_SIZE, 0, 0);
254
255 RECT r = {0, 0, LOWORD(lParam), HIWORD(lParam)};
256 HDWP hdwp = NULL;
258
260 if (hdwp)
261 {
262 hdwp = m_ClientPanel->OnParentSize(r, hdwp);
263 if (hdwp)
264 {
265 EndDeferWindowPos(hdwp);
266 }
267 }
268}
269
270BOOL
272{
274 return FALSE;
275
276 CStringW szMsgText, szMsgTitle;
277
278 if (!szMsgText.LoadStringW(IDS_APP_REG_REMOVE) || !szMsgTitle.LoadStringW(IDS_INFORMATION))
279 return FALSE;
280
282 if (!InstalledApp)
283 return FALSE;
284
285 if (MessageBoxW(szMsgText, szMsgTitle, MB_YESNO | MB_ICONQUESTION) == IDYES)
286 return m_Db->RemoveInstalledAppFromRegistry(InstalledApp) == ERROR_SUCCESS;
287
288 return FALSE;
289}
290
291BOOL
293{
295 return FALSE;
296
298 if (!InstalledApp)
299 return FALSE;
300
301 return InstalledApp->UninstallApplication(bModify ? UCF_MODIFY : UCF_NONE);
302}
303
304VOID
306{
307 if (m_Db->GetAvailableCount() == 0)
308 {
312 }
313}
314
315BOOL
317{
318 theResult = 0;
319 switch (Msg)
320 {
321 case WM_CREATE:
322 if (!InitControls())
325 break;
326
327 case WM_DESTROY:
328 {
329 hMainWnd = NULL;
331 FreeLogs();
332
333 delete m_ClientPanel;
334
336 return 0;
337 }
338
339 case WM_CLOSE:
341 return g_Busy;
342
344 if (!g_Busy && !IsWindowVisible())
345 SendMessage(WM_CLOSE, 0, 0);
346 break;
347
349 m_PendingInstalledViewRefresh = true; // Something just installed, our uninstall list is probably outdated
351 break;
352
353 case DM_REPOSITION:
354 EmulateDialogReposition(hwnd); // We are not a real dialog, we need help from a real one
355 break;
356
357 case WM_ACTIVATE:
358 if (LOWORD(wParam) == WA_INACTIVE)
360 break;
361
362 case WM_SETFOCUS:
363 if (m_hLastFocus)
365 break;
366
367 case WM_NEXTDLGCTL:
368 if (!LOWORD(lParam))
369 HandleTabOrder(wParam ? -1 : 1);
370 else if (wParam)
372 break;
373
374 case WM_COMMAND:
376 break;
377
378 case WM_NOTIFY:
379 {
381
382 switch (data->code)
383 {
385 {
386 if (data->hwndFrom == m_TreeView->m_hWnd)
387 {
388 // APPWIZ-mode: forbid item collapse.
389 // FIXME: Prevent collapse (COMCTL32 is buggy)
390 // https://bugs.winehq.org/show_bug.cgi?id=53727
392 {
393 theResult = TRUE;
394 return TRUE; // Handled
395 }
396 }
397 break;
398 }
399
400 case TVN_SELCHANGED:
401 {
402 if (data->hwndFrom == m_TreeView->m_hWnd)
403 {
404 switch (((LPNMTREEVIEW)lParam)->itemNew.lParam)
405 {
406 case IDS_INSTALLED:
408 break;
409
410 case IDS_APPLICATIONS:
412 break;
413
414 case IDS_UPDATES:
416 break;
417
420 break;
421
422 case IDS_CAT_AUDIO:
424 break;
425
426 case IDS_CAT_DEVEL:
428 break;
429
430 case IDS_CAT_DRIVERS:
432 break;
433
434 case IDS_CAT_EDU:
436 break;
437
438 case IDS_CAT_ENGINEER:
440 break;
441
442 case IDS_CAT_FINANCE:
444 break;
445
446 case IDS_CAT_GAMES:
448 break;
449
450 case IDS_CAT_GRAPHICS:
452 break;
453
454 case IDS_CAT_INTERNET:
456 break;
457
458 case IDS_CAT_LIBS:
460 break;
461
462 case IDS_CAT_OFFICE:
464 break;
465
466 case IDS_CAT_OTHER:
468 break;
469
470 case IDS_CAT_SCIENCE:
472 break;
473
474 case IDS_CAT_TOOLS:
476 break;
477
478 case IDS_CAT_VIDEO:
480 break;
481
482 case IDS_CAT_THEMES:
484 break;
485
488 break;
489 }
490 }
491 }
492 break;
493 }
494 }
495 break;
496
497 case WM_SIZE:
499 break;
500
501 case WM_SIZING:
502 {
503 LPRECT pRect = (LPRECT)lParam;
504
505 if (pRect->right - pRect->left < 565)
506 pRect->right = pRect->left + 565;
507
508 if (pRect->bottom - pRect->top < 300)
509 pRect->bottom = pRect->top + 300;
510
511 return TRUE;
512 }
513
515 {
516 /* Forward WM_SYSCOLORCHANGE to common controls */
518 m_TreeView->SendMessageW(WM_SYSCOLORCHANGE, wParam, lParam);
519 }
520 break;
521
522 case WM_SETTINGCHANGE:
523 if (wParam == SPI_SETNONCLIENTMETRICS || wParam == SPI_SETICONMETRICS)
524 {
526 g_hDefaultPackageIcon = NULL; // Trigger imagelist recreation on next load
527 }
528 break;
529
530 case WM_TIMER:
531 if (wParam == SEARCH_TIMER_ID)
532 {
534
536 }
537 break;
538 }
539
540 return FALSE;
541}
542
543VOID
545{
546 CStringW szApp;
547 CStringW szAuthors;
548
549 szApp.LoadStringW(IDS_APPTITLE);
550 szAuthors.LoadStringW(IDS_APP_AUTHORS);
551 ShellAboutW(m_hWnd, szApp, szAuthors,
553}
554
555VOID
557{
558 const BOOL bReload = TRUE;
559 WORD wCommand = LOWORD(wParam);
560
561 if (!lParam)
562 {
563 switch (wCommand)
564 {
565 case ID_SETTINGS:
567 break;
568
569 case ID_EXIT:
570 PostMessageW(WM_CLOSE, 0, 0);
571 break;
572
573 case ID_SEARCH:
575 break;
576
577 case ID_INSTALL:
579 {
580 if (!m_Selected.IsEmpty())
581 {
583 {
586 }
587 }
588 else
589 {
591 if (App)
592 {
594 }
595 }
596 }
597 break;
598
599 case ID_UNINSTALL:
602 break;
603
604 case ID_MODIFY:
607 break;
608
609 case ID_REGREMOVE:
612 break;
613
614 case ID_REFRESH:
616 break;
617
618 case ID_RESETDB:
619 {
623 break;
624 }
625
626 case ID_HELP:
627 MessageBoxW(L"Help not implemented yet", NULL, MB_OK);
628 break;
629
630 case ID_ABOUT:
631 ShowAboutDlg();
632 break;
633
634 case ID_CHECK_ALL:
636 break;
637
641 break;
642 }
643 }
644}
645
646VOID
648{
649 if (m_StatusBar)
650 {
651 CStringW szBuffer;
653
654 // Append the number of selected apps if not in APPWIZ-mode.
655 if (!m_bAppwizMode)
656 {
657 CStringW szBuffer2;
659 szBuffer += szBuffer2;
660 }
661
662 m_StatusBar->SetText(szBuffer);
663 }
664}
665
666VOID
668{
669 POSITION CurrentListPosition = List.GetHeadPosition();
670 while (CurrentListPosition)
671 {
672 CAppInfo *Info = List.GetNext(CurrentListPosition);
675 {
676 BOOL bSelected = m_Selected.Find(Info) != NULL;
678 }
679 }
680 m_ApplicationView->AddApplication(NULL, FALSE); // Tell the list we are done
681}
682
683VOID
685{
686 // Only installed applications should be enumerated in APPWIZ-mode.
687 if (m_bAppwizMode && !IsInstalledEnum(EnumType))
688 {
689 ATLASSERT(FALSE && "Should not be called in APPWIZ-mode");
690 return;
691 }
692
693 bUpdating = TRUE;
694
695 if (HCURSOR hCursor = LoadCursor(NULL, IDC_APPSTARTING))
696 {
697 // The database (.ini files) is parsed on the UI thread, let the user know we are busy
698 SetCursor(hCursor);
700 }
701
702 if (bCheckAvailable)
704
706 {
708 bReload = TRUE; // Reload because we are switching from Available to Installed after something installed
709 }
710
711 BOOL TryRestoreSelection = SelectedEnumType == EnumType;
712 if (SelectedEnumType != EnumType)
713 SelectedEnumType = EnumType;
714
716 if (TryRestoreSelection)
718
719 if (bReload)
721
723 if (IsInstalledEnum(EnumType))
724 {
725 if (bReload)
727
728 // set the display type of application-view. this will remove all the item in application-view too.
730
732 m_Db->GetApps(List, EnumType);
734 }
735 else if (IsAvailableEnum(EnumType))
736 {
737 // We shouldn't get there in APPWIZ-mode.
739
740 if (bReload)
742
743 // set the display type of application-view. this will remove all the item in application-view too.
745
746 // enum available softwares
747 if (EnumType == ENUM_CAT_SELECTED)
748 {
750 }
751 else
752 {
754 m_Db->GetApps(List, EnumType);
756 }
757 }
758 else
759 {
760 ATLASSERT(0 && "This should be unreachable!");
761 }
762
763 if (TryRestoreSelection)
764 m_ApplicationView->RestoreListSelection(RestoreSelection);
766 m_ApplicationView->RedrawWindow(0, 0, RDW_INVALIDATE | RDW_ALLCHILDREN); // force the child window to repaint
768
771 {
772 text.LoadString(IDS_NO_SEARCH_RESULTS);
773 }
775
777}
778
781{
782 DWORD csStyle = CS_VREDRAW | CS_HREDRAW;
783 static ATL::CWndClassInfo wc = {
784 {sizeof(WNDCLASSEX), csStyle, StartWindowProc, 0, 0, NULL,
785 LoadIconW(_AtlBaseModule.GetModuleInstance(), MAKEINTRESOURCEW(IDI_MAIN)), LoadCursorW(NULL, IDC_ARROW),
787 NULL,
788 NULL,
789 IDC_ARROW,
790 TRUE,
791 0,
792 _T("")};
793 return wc;
794}
795
796HWND
798{
800
801 RECT r = {
805 r.right += r.left;
806 r.bottom += r.top;
807
808 return CWindowImpl::Create(
810}
811
812// this function is called when a item of application-view is checked/unchecked
813// CallbackParam is the param passed to application-view when adding the item (the one getting focus now).
814VOID
816{
817 if (bUpdating)
818 return;
819
820 CAppInfo *Info = (CAppInfo *)CallbackParam;
821
822 if (bChecked)
823 {
825 }
826 else
827 {
829 ATLASSERT(Pos != NULL);
830
831 if (Pos != NULL)
832 {
834 }
835 }
836
838}
839
840// this function is called when one or more application(s) should be installed
841// if Info is not zero, this app should be installed. otherwise those checked apps should be installed
842BOOL
844{
845 return Info && DownloadApplication(Info);
846}
847
848BOOL
850{
851 if (szSearchPattern == SearchText)
852 {
853 return FALSE;
854 }
855
856 szSearchPattern = SearchText;
857
858 DWORD dwDelay = 0;
859 SystemParametersInfoW(SPI_GETMENUSHOWDELAY, 0, &dwDelay, 0);
860 SetTimer(SEARCH_TIMER_ID, dwDelay);
861
862 return TRUE;
863}
864
865void
867{
868 ATL::CSimpleArray<HWND> TabOrderHwndList;
869
870 m_TreeView->AppendTabOrderWindow(direction, TabOrderHwndList);
871 m_ApplicationView->AppendTabOrderWindow(direction, TabOrderHwndList);
872
873 if (TabOrderHwndList.GetSize() == 0)
874 {
875 // in case the list is empty
876 return;
877 }
878
879 int FocusIndex;
880
881 if ((FocusIndex = TabOrderHwndList.Find(GetFocus())) == -1)
882 {
883 FocusIndex = 0; // focus the first window in the list
884 }
885 else
886 {
887 FocusIndex += direction;
888 FocusIndex +=
889 TabOrderHwndList.GetSize(); // FocusIndex might be negative. we don't want to mod a negative number
890 FocusIndex %= TabOrderHwndList.GetSize();
891 }
892
893 ::SetFocus(TabOrderHwndList[FocusIndex]);
894 return;
895}
896// **** CMainWindow ****
897
898VOID
900{
901 HACCEL KeyBrd;
902 MSG Msg;
903
904 hMainWnd = wnd->Create();
905 if (!hMainWnd)
906 return;
907
908 /* Maximize it if we must */
910 wnd->UpdateWindow();
911
912 /* Load the menu hotkeys */
914
915 /* Message Loop */
916 while (GetMessageW(&Msg, NULL, 0, 0))
917 {
918 if (!TranslateAcceleratorW(hMainWnd, KeyBrd, &Msg))
919 {
920 if (Msg.message == WM_CHAR && Msg.wParam == VK_TAB)
921 {
922 // Move backwards if shift is held down
923 int direction = (GetKeyState(VK_SHIFT) & 0x8000) ? -1 : 1;
924
925 wnd->HandleTabOrder(direction);
926 continue;
927 }
928
931 }
932 }
933}
#define ATLASSERT(x)
Definition: CComVariant.cpp:10
BOOL IsAvailableEnum(INT x)
Definition: appinfo.h:56
BOOL IsInstalledEnum(INT x)
Definition: appinfo.h:68
@ UCF_NONE
Definition: appinfo.h:75
@ UCF_MODIFY
Definition: appinfo.h:76
AppsCategories
Definition: appinfo.h:25
@ ENUM_CAT_LIBS
Definition: appinfo.h:40
@ ENUM_CAT_ENGINEER
Definition: appinfo.h:35
@ ENUM_CAT_VIDEO
Definition: appinfo.h:28
@ ENUM_CAT_FINANCE
Definition: appinfo.h:36
@ ENUM_CAT_OFFICE
Definition: appinfo.h:32
@ ENUM_CAT_EDU
Definition: appinfo.h:34
@ ENUM_CAT_AUDIO
Definition: appinfo.h:27
@ ENUM_CAT_TOOLS
Definition: appinfo.h:38
@ ENUM_UPDATES
Definition: appinfo.h:47
@ ENUM_CAT_SELECTED
Definition: appinfo.h:43
@ ENUM_ALL_AVAILABLE
Definition: appinfo.h:26
@ ENUM_CAT_INTERNET
Definition: appinfo.h:31
@ ENUM_CAT_GAMES
Definition: appinfo.h:30
@ ENUM_CAT_THEMES
Definition: appinfo.h:41
@ ENUM_INSTALLED_APPLICATIONS
Definition: appinfo.h:46
@ ENUM_CAT_GRAPHICS
Definition: appinfo.h:29
@ ENUM_CAT_DEVEL
Definition: appinfo.h:33
@ ENUM_CAT_DRIVERS
Definition: appinfo.h:39
@ ENUM_ALL_INSTALLED
Definition: appinfo.h:45
@ ENUM_CAT_SCIENCE
Definition: appinfo.h:37
@ ENUM_CAT_OTHER
Definition: appinfo.h:42
HICON g_hDefaultPackageIcon
Definition: appview.cpp:16
@ AppViewTypeInstalledApps
Definition: appview.h:72
@ AppViewTypeAvailableApps
Definition: appview.h:71
void SaveSettings(void)
Definition: settings.c:115
#define IDI_MAIN
Definition: resource.h:4
#define ID_EXIT
Definition: resource.h:10
#define IDS_APPTITLE
Definition: resource.h:3
#define IDR_MAINMENU
Definition: resource.h:40
#define ID_HELP
Definition: resource.h:26
#define IDC_STATUSBAR
Definition: resource.h:12
#define ID_REFRESH
Definition: resource.h:16
#define SEARCH_TIMER_ID
Definition: gui.h:21
#define TREEVIEW_ICON_SIZE
Definition: gui.h:22
VOID EmulateDialogReposition(HWND hwnd)
Definition: misc.cpp:61
VOID FreeLogs()
Definition: misc.cpp:310
INT GetSystemColorDepth()
Definition: misc.cpp:395
BOOL SearchPatternMatch(LPCWSTR szHaystack, LPCWSTR szNeedle)
Definition: misc.cpp:504
#define IDS_UPDATES
Definition: resource.h:107
#define IDS_CAT_TOOLS
Definition: resource.h:199
#define ID_REGREMOVE
Definition: resource.h:83
#define IDI_CAT_FINANCE
Definition: resource.h:26
#define IDS_CAT_VIDEO
Definition: resource.h:200
#define IDS_SELECTEDFORINST
Definition: resource.h:124
#define ID_UNINSTALL
Definition: resource.h:75
#define ID_SEARCH
Definition: resource.h:86
#define IDS_CAT_GRAPHICS
Definition: resource.h:193
#define IDI_SELECTEDFORINST
Definition: resource.h:17
#define IDI_CAT_EDU
Definition: resource.h:24
#define IDS_AVAILABLEFORINST
Definition: resource.h:106
#define IDI_CAT_INTERNET
Definition: resource.h:29
#define IDI_CAT_LIBS
Definition: resource.h:30
#define IDS_CAT_AUDIO
Definition: resource.h:186
#define IDS_INFORMATION
Definition: resource.h:113
#define IDS_APPS_COUNT
Definition: resource.h:103
#define IDS_CAT_SCIENCE
Definition: resource.h:198
#define IDS_CAT_ENGINEER
Definition: resource.h:190
#define IDI_CATEGORY
Definition: resource.h:14
#define IDI_CAT_OFFICE
Definition: resource.h:31
#define IDS_CAT_LIBS
Definition: resource.h:195
#define IDS_CAT_OTHER
Definition: resource.h:197
#define IDI_CAT_GRAPHICS
Definition: resource.h:28
#define ID_CHECK_ALL
Definition: resource.h:85
#define IDS_APPS_SELECT_COUNT
Definition: resource.h:104
#define IDS_CAT_DEVEL
Definition: resource.h:187
#define IDI_APPS
Definition: resource.h:12
#define IDS_CAT_THEMES
Definition: resource.h:201
#define IDS_APP_AUTHORS
Definition: resource.h:93
#define IDI_CAT_SCIENCE
Definition: resource.h:33
#define IDI_CAT_OTHER
Definition: resource.h:32
#define IDS_CAT_GAMES
Definition: resource.h:192
#define ID_ACTIVATE_APPWIZ
Definition: resource.h:89
#define IDS_CAT_EDU
Definition: resource.h:189
#define ID_MODIFY
Definition: resource.h:78
#define IDS_CAT_INTERNET
Definition: resource.h:194
#define IDS_NO_SEARCH_RESULTS
Definition: resource.h:130
#define IDI_APPUPD
Definition: resource.h:13
#define IDI_CAT_VIDEO
Definition: resource.h:35
#define ID_RESETDB
Definition: resource.h:84
#define IDS_CAT_DRIVERS
Definition: resource.h:188
#define IDI_CAT_DRIVERS
Definition: resource.h:23
#define HOTKEYS
Definition: resource.h:246
#define IDI_CAT_DEVEL
Definition: resource.h:22
#define IDS_CAT_OFFICE
Definition: resource.h:196
#define IDS_CAT_FINANCE
Definition: resource.h:191
#define IDI_CAT_THEMES
Definition: resource.h:36
#define IDS_APP_REG_REMOVE
Definition: resource.h:112
#define IDI_CAT_GAMES
Definition: resource.h:27
#define IDS_APPLICATIONS
Definition: resource.h:108
#define IDI_CAT_ENGINEER
Definition: resource.h:25
#define IDS_INSTALLED
Definition: resource.h:105
#define IDI_CAT_TOOLS
Definition: resource.h:34
#define IDI_CAT_AUDIO
Definition: resource.h:21
#define IDS_APPWIZ_TITLE
Definition: resource.h:97
#define ID_INSTALL
Definition: resource.h:74
#define ID_SETTINGS
Definition: resource.h:81
SETTINGS_INFO SettingsInfo
Definition: winmain.cpp:21
#define ID_ABOUT
Definition: charmap.c:17
bool IsEmpty() const
Definition: atlcoll.h:548
POSITION AddTail(INARGTYPE element)
Definition: atlcoll.h:629
void RemoveAll()
Definition: atlcoll.h:748
POSITION Find(INARGTYPE element, _In_opt_ POSITION posStartAfter=NULL) const
Definition: atlcoll.h:794
size_t GetCount() const
Definition: atlcoll.h:542
void RemoveAt(_In_ POSITION pos)
Definition: atlcoll.h:769
int GetSize() const
Definition: atlsimpcoll.h:104
int Find(const T &t) const
Definition: atlsimpcoll.h:82
bool IsEmpty() const noexcept
Definition: atlsimpstr.h:394
PXSTR GetString() noexcept
Definition: atlsimpstr.h:367
void __cdecl Format(UINT nFormatID,...)
Definition: cstringt.h:818
static LRESULT CALLBACK StartWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: atlwin.h:1619
HWND Create(HWND hWndParent, _U_RECT rect=NULL, LPCTSTR szWindowName=NULL, DWORD dwStyle=0, DWORD dwExStyle=0, _U_MENUorID MenuOrID=0U, LPVOID lpCreateParam=NULL)
Definition: atlwin.h:1734
HWND SetFocus()
Definition: atlwin.h:1198
BOOL IsWindowVisible() const
Definition: atlwin.h:958
BOOL UpdateWindow()
Definition: atlwin.h:1345
HWND m_hWnd
Definition: atlwin.h:273
BOOL ShowWindow(int nCmdShow)
Definition: atlwin.h:1333
Definition: appdb.h:9
static DWORD RemoveInstalledAppFromRegistry(const CAppInfo *Info)
Definition: appdb.cpp:315
VOID UpdateAvailable()
Definition: appdb.cpp:121
size_t GetAvailableCount() const
Definition: appdb.h:50
VOID UpdateInstalled()
Definition: appdb.cpp:236
VOID GetApps(CAtlList< CAppInfo * > &List, AppsCategories Type) const
Definition: appdb.cpp:53
VOID RemoveCached()
Definition: appdb.cpp:291
virtual BOOL UninstallApplication(UninstallCommandFlags Flags)=0
PVOID GetFocusedItemData()
Definition: appview.cpp:2104
HWND Create(HWND hwndParent)
Definition: appview.cpp:2028
VOID GetRestoreListSelectionData(RESTORELISTSELECTION &Restore)
Definition: appview.cpp:2126
VOID RestoreListSelection(const RESTORELISTSELECTION &Restore)
Definition: appview.cpp:2143
void RefreshAvailableItem(PCWSTR PackageName)
Definition: appview.cpp:1816
BOOL AddApplication(CAppInfo *InstAppInfo, BOOL InitialCheckState)
Definition: appview.cpp:2086
BOOL SetDisplayAppType(APPLICATION_VIEW_TYPE AppType)
Definition: appview.cpp:2039
void SetFocusOnSearchBar()
Definition: appview.cpp:1832
void SetRedraw(BOOL bRedraw)
Definition: appview.cpp:1809
VOID AppendTabOrderWindow(int Direction, ATL::CSimpleArray< HWND > &TabOrderList)
Definition: appview.cpp:2116
VOID SetWatermark(const CStringW &Text)
Definition: appview.cpp:2092
BOOL RemoveSelectedAppFromRegistry()
Definition: gui.cpp:271
AppsCategories SelectedEnumType
Definition: gui.h:65
BOOL m_bAppwizMode
Definition: gui.h:61
HTREEITEM hRootItemInstalled
Definition: gui.h:62
VOID UpdateStatusBarText()
Definition: gui.cpp:647
BOOL CreateLayout()
Definition: gui.cpp:189
BOOL CreateTreeView()
Definition: gui.cpp:149
CSideTreeView * m_TreeView
Definition: gui.h:51
CStringW szSearchPattern
Definition: gui.h:64
CUiSplitPanel * m_VSplitter
Definition: gui.h:49
VOID AddApplicationsToView(CAtlList< CAppInfo * > &List)
Definition: gui.cpp:667
BOOL CreateVSplitter()
Definition: gui.cpp:171
BOOL SearchTextChanged(CStringW &SearchText)
Definition: gui.cpp:849
VOID CheckAvailable()
Definition: gui.cpp:305
LRESULT OnSize(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: main.cpp:767
VOID UpdateApplicationsList(AppsCategories EnumType, BOOL bReload=FALSE, BOOL bCheckAvailable=FALSE)
Definition: gui.cpp:684
static ATL::CWndClassInfo & GetWndClassInfo()
Definition: gui.cpp:780
BOOL bUpdating
Definition: gui.h:60
static bool m_PendingInstalledViewRefresh
Definition: gui.h:69
~CMainWindow()
Definition: gui.cpp:91
CMainWindow()
Definition: main.h:30
void HandleTabOrder(int direction)
Definition: gui.cpp:866
BOOL InstallApplication(CAppInfo *Info)
Definition: gui.cpp:843
LRESULT OnCommand(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: main.cpp:819
CAtlList< CAppInfo * > m_Selected
Definition: gui.h:58
VOID ShowAboutDlg()
Definition: gui.cpp:544
BOOL InitControls()
Definition: gui.cpp:233
friend class CApplicationView
Definition: gui.h:55
VOID InitCategoriesList()
Definition: gui.cpp:97
VOID ItemCheckStateChanged(BOOL bChecked, LPVOID CallbackParam)
Definition: gui.cpp:815
CAppDB * m_Db
Definition: gui.h:57
CUiWindow< CStatusBar > * m_StatusBar
Definition: gui.h:52
HWND Create()
Definition: gui.cpp:797
BOOL ProcessWindowMessage(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam, LRESULT &theResult, DWORD dwMapId)
Definition: gui.cpp:316
CUiPanel * m_ClientPanel
Definition: gui.h:48
VOID LayoutCleanup()
Definition: gui.cpp:223
static HWND m_hLastFocus
Definition: gui.h:68
BOOL CreateStatusBar()
Definition: gui.cpp:138
BOOL UninstallSelectedApp(BOOL bModify)
Definition: gui.cpp:292
BOOL CreateApplicationView()
Definition: gui.cpp:160
CApplicationView * m_ApplicationView
Definition: gui.h:54
INT Append(T *ptr)
Definition: rosui.h:87
HIMAGELIST hImageTreeView
Definition: gui.h:26
CSideTreeView()
Definition: gui.cpp:33
HTREEITEM AddCategory(HTREEITEM hRootItem, UINT TextIndex, UINT IconIndex)
Definition: gui.cpp:46
HTREEITEM AddItem(HTREEITEM hParent, CStringW &Text, INT Image, INT SelectedImage, LPARAM lParam)
Definition: gui.cpp:40
~CSideTreeView()
Definition: gui.cpp:77
VOID DestroyImageList()
Definition: gui.cpp:71
HIMAGELIST SetImageList()
Definition: gui.cpp:65
VOID SetText(LPCWSTR lpszText)
Definition: rosctrls.h:457
HWND Create(HWND hwndParent, HMENU hMenu)
Definition: rosctrls.h:462
BOOL Expand(HTREEITEM item, DWORD action)
Definition: rosctrls.h:599
HWND Create(HWND hwndParent)
Definition: rosctrls.h:483
BOOL SelectItem(HTREEITEM item, DWORD action=TVGN_CARET)
Definition: rosctrls.h:604
CUiAlignment m_HorizontalAlignment
Definition: rosui.h:257
CUiAlignment m_VerticalAlignment
Definition: rosui.h:258
CUiMargin m_Margin
Definition: rosui.h:255
CUiCollection & Children()
Definition: rosui.h:384
virtual DWORD_PTR CountSizableChildren()
Definition: rosui.h:439
virtual HDWP OnParentSize(RECT parentRect, HDWP hDwp)
Definition: rosui.h:454
INT m_Pos
Definition: rosui.h:584
BOOL m_Horizontal
Definition: rosui.h:585
CUiCollection & First()
Definition: rosui.h:618
BOOL m_DynamicFirst
Definition: rosui.h:586
CUiCollection & Second()
Definition: rosui.h:623
INT m_MinSecond
Definition: rosui.h:588
HWND Create(HWND hwndParent)
Definition: rosui.h:867
INT m_MinFirst
Definition: rosui.h:587
virtual VOID AppendTabOrderWindow(int Direction, ATL::CSimpleArray< HWND > &TabOrderList)
Definition: rosui.h:546
WPARAM wParam
Definition: combotst.c:138
char * Text
Definition: combotst.c:136
LPARAM lParam
Definition: combotst.c:139
struct @1666 Msg[]
ush Pos
Definition: deflate.h:92
#define ERROR_SUCCESS
Definition: deptool.c:10
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
BOOL WINAPI ImageList_Destroy(HIMAGELIST himl)
Definition: imagelist.c:941
HIMAGELIST WINAPI ImageList_Create(INT cx, INT cy, UINT flags, INT cInitial, INT cGrow)
Definition: imagelist.c:814
const WCHAR * action
Definition: action.c:7509
const WCHAR * text
Definition: package.c:1794
static const WCHAR IconIndex[]
Definition: install.c:52
HINSTANCE hInst
Definition: dxdiag.c:13
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned short WORD
Definition: ntddk_ex.h:93
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
VOID MainWindowLoop(CMainWindow *wnd, INT nShowCmd)
Definition: gui.cpp:899
#define TREEVIEW_ICON_SIZE
Definition: gui.cpp:29
#define b
Definition: ke_i.h:79
HWND hMainWnd
Definition: magnifier.c:32
const TCHAR szWindowClass[]
Definition: magnifier.c:28
static HICON
Definition: imagelist.c:80
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:63
HICON hIcon
Definition: msconfig.c:44
unsigned int UINT
Definition: ndis.h:50
#define L(x)
Definition: ntvdm.h:50
#define LOWORD(l)
Definition: pedump.c:82
#define WS_OVERLAPPEDWINDOW
Definition: pedump.c:637
#define WS_CLIPSIBLINGS
Definition: pedump.c:618
#define WS_CLIPCHILDREN
Definition: pedump.c:619
#define TVN_SELCHANGED
Definition: commctrl.h:3740
#define TVSIL_NORMAL
Definition: commctrl.h:3448
#define LPNMTREEVIEW
Definition: commctrl.h:3648
#define TVE_EXPAND
Definition: commctrl.h:3428
#define TVI_ROOT
Definition: commctrl.h:3373
#define TVE_TOGGLE
Definition: commctrl.h:3429
#define TVE_COLLAPSE
Definition: commctrl.h:3427
#define ImageList_AddIcon(himl, hicon)
Definition: commctrl.h:415
#define TVN_ITEMEXPANDING
Definition: commctrl.h:3743
#define ILC_MASK
Definition: commctrl.h:351
BOOL DownloadApplication(CAppInfo *pAppInfo)
Definition: loaddlg.cpp:1151
VOID CreateSettingsDlg(HWND hwnd)
BOOL DownloadListOfApplications(const CAtlList< CAppInfo * > &AppsList, BOOL bIsModal)
Definition: loaddlg.cpp:1132
#define WM_NOTIFY_OPERATIONCOMPLETED
Definition: rapps.h:19
#define WM_NOTIFY_INSTALLERFINISHED
Definition: rapps.h:20
LONG g_Busy
Definition: winmain.cpp:17
#define WM_NOTIFY
Definition: richedit.h:61
@ UiAlign_Stretch
Definition: rosui.h:249
@ UiAlign_RightBtm
Definition: rosui.h:248
BOOL WINAPI ShellAboutW(HWND hWnd, LPCWSTR szApp, LPCWSTR szOtherStuff, HICON hIcon)
BOOL Maximized
Definition: settings.h:14
BOOL bSaveWndPos
Definition: settings.h:7
LONG right
Definition: windef.h:308
LONG bottom
Definition: windef.h:309
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
rwlock_t lock
Definition: tcpcore.h:0
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1829
const uint16_t * PCWSTR
Definition: typedefs.h:57
int32_t INT
Definition: typedefs.h:58
#define MAKELONG(a, b)
Definition: typedefs.h:249
#define HIWORD(l)
Definition: typedefs.h:247
#define AddItem
Definition: userenv.h:209
#define _T(x)
Definition: vfdio.h:22
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
Definition: wdfchildlist.h:690
_In_ WDFCOLLECTION _In_ ULONG Index
_Must_inspect_result_ _In_ WDFCMRESLIST List
Definition: wdfresource.h:550
#define LPRECT
Definition: precomp.h:28
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
LONG_PTR LPARAM
Definition: windef.h:208
LONG_PTR LRESULT
Definition: windef.h:209
UINT_PTR WPARAM
Definition: windef.h:207
HICON HCURSOR
Definition: windef.h:299
HWND WINAPI GetFocus(void)
Definition: window.c:1875
#define CS_VREDRAW
Definition: winuser.h:658
#define SW_HIDE
Definition: winuser.h:771
#define WM_CLOSE
Definition: winuser.h:1624
#define VK_TAB
Definition: winuser.h:2202
BOOL WINAPI TranslateMessage(_In_ const MSG *)
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
BOOL WINAPI GetMessageW(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT)
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define IMAGE_ICON
Definition: winuser.h:212
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
#define WM_CREATE
Definition: winuser.h:1611
__analysis_noreturn void WINAPI PostQuitMessage(_In_ int)
#define WM_SIZE
Definition: winuser.h:1614
#define LR_CREATEDIBSECTION
Definition: winuser.h:1101
#define WM_COMMAND
Definition: winuser.h:1743
#define CS_HREDRAW
Definition: winuser.h:653
HANDLE WINAPI LoadImageW(_In_opt_ HINSTANCE hInst, _In_ LPCWSTR name, _In_ UINT type, _In_ int cx, _In_ int cy, _In_ UINT fuLoad)
Definition: cursoricon.c:2289
#define IDC_ARROW
Definition: winuser.h:687
#define WM_SETFOCUS
Definition: winuser.h:1616
HCURSOR WINAPI SetCursor(_In_opt_ HCURSOR)
#define WM_MOUSEMOVE
Definition: winuser.h:1778
#define SIZE_MINIMIZED
Definition: winuser.h:2509
#define WA_INACTIVE
Definition: winuser.h:2625
#define MB_YESNO
Definition: winuser.h:820
BOOL WINAPI EndDeferWindowPos(_In_ HDWP)
#define WM_SYSCOLORCHANGE
Definition: winuser.h:1629
HCURSOR WINAPI LoadCursorW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
Definition: cursoricon.c:2191
int WINAPI MessageBoxW(_In_opt_ HWND hWnd, _In_opt_ LPCWSTR lpText, _In_opt_ LPCWSTR lpCaption, _In_ UINT uType)
#define WM_NEXTDLGCTL
Definition: winuser.h:1646
UINT_PTR WINAPI SetTimer(_In_opt_ HWND, _In_ UINT_PTR, _In_ UINT, _In_opt_ TIMERPROC)
#define WM_ACTIVATE
Definition: winuser.h:1615
#define WM_SETTINGCHANGE
Definition: winuser.h:1632
#define RDW_ALLCHILDREN
Definition: winuser.h:1224
#define WM_TIMER
Definition: winuser.h:1745
#define IDC_APPSTARTING
Definition: winuser.h:699
struct tagNMHDR * LPNMHDR
#define HTCLIENT
Definition: winuser.h:2478
#define SendMessage
Definition: winuser.h:5855
#define WS_EX_WINDOWEDGE
Definition: winuser.h:407
#define LoadCursor
Definition: winuser.h:5824
WNDCLASSEXA WNDCLASSEX
Definition: winuser.h:5731
#define MB_OK
Definition: winuser.h:793
BOOL WINAPI SystemParametersInfoW(_In_ UINT uiAction, _In_ UINT uiParam, _Inout_opt_ PVOID pvParam, _In_ UINT fWinIni)
#define WM_CHAR
Definition: winuser.h:1720
#define PostMessage
Definition: winuser.h:5844
#define CW_USEDEFAULT
Definition: winuser.h:225
HACCEL WINAPI LoadAcceleratorsW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
#define WM_SIZING
Definition: winuser.h:1810
LRESULT WINAPI DispatchMessageW(_In_ const MSG *)
#define MB_ICONQUESTION
Definition: winuser.h:792
int WINAPI TranslateAcceleratorW(_In_ HWND, _In_ HACCEL, _In_ LPMSG)
#define WM_SETCURSOR
Definition: winuser.h:1639
#define VK_SHIFT
Definition: winuser.h:2205
#define WM_DESTROY
Definition: winuser.h:1612
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
#define IDYES
Definition: winuser.h:838
#define SW_MAXIMIZE
Definition: winuser.h:775
BOOL WINAPI KillTimer(_In_opt_ HWND, _In_ UINT_PTR)
#define DM_REPOSITION
Definition: winuser.h:2103
#define MAKEINTRESOURCE
Definition: winuser.h:591
HICON WINAPI LoadIconW(_In_opt_ HINSTANCE hInstance, _In_ LPCWSTR lpIconName)
Definition: cursoricon.c:2161
#define RDW_INVALIDATE
Definition: winuser.h:1217
SHORT WINAPI GetKeyState(_In_ int)
#define COLOR_BTNFACE
Definition: winuser.h:931
HDWP WINAPI BeginDeferWindowPos(_In_ int)
BOOL WINAPI DestroyIcon(_In_ HICON)
Definition: cursoricon.c:2139
WCHAR * LPWSTR
Definition: xmlstorage.h:184