ReactOS  0.4.14-dev-77-gd9e7c48
gui.cpp
Go to the documentation of this file.
1 /*
2  * PROJECT: ReactOS Applications Manager
3  * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
4  * FILE: base/applications/rapps/gui.cpp
5  * PURPOSE: GUI classes for RAPPS
6  * COPYRIGHT: Copyright 2015 David Quintana (gigaherz@gmail.com)
7  * Copyright 2017 Alexander Shaposhnikov (sanchaez@reactos.org)
8  */
9 #include "rapps.h"
10 
11 #include "rapps.h"
12 #include "rosui.h"
13 #include "crichedit.h"
14 
15 #include <shlobj_undoc.h>
16 #include <shlguid_undoc.h>
17 
18 #include <atlbase.h>
19 #include <atlcom.h>
20 #include <atlwin.h>
21 #include <wininet.h>
22 #include <shellutils.h>
23 #include <rosctrls.h>
24 
25 #define SEARCH_TIMER_ID 'SR'
26 #define LISTVIEW_ICON_SIZE 24
27 #define TREEVIEW_ICON_SIZE 24
28 
30 {
31  DEVMODEW pDevMode;
32  INT ColorDepth;
33 
34  pDevMode.dmSize = sizeof(pDevMode);
35  pDevMode.dmDriverExtra = 0;
36 
38  {
39  /* TODO: Error message */
40  return ILC_COLOR;
41  }
42 
43  switch (pDevMode.dmBitsPerPel)
44  {
45  case 32: ColorDepth = ILC_COLOR32; break;
46  case 24: ColorDepth = ILC_COLOR24; break;
47  case 16: ColorDepth = ILC_COLOR16; break;
48  case 8: ColorDepth = ILC_COLOR8; break;
49  case 4: ColorDepth = ILC_COLOR4; break;
50  default: ColorDepth = ILC_COLOR; break;
51  }
52 
53  return ColorDepth;
54 }
55 
56 class CAppRichEdit:
57  public CUiWindow<CRichEdit>
58 {
59 private:
61  const ATL::CStringW& szText,
62  DWORD StringFlags,
63  DWORD TextFlags)
64  {
65  ATL::CStringW szLoadedText;
66  if (!szText.IsEmpty() && szLoadedText.LoadStringW(uStringID))
67  {
68  InsertText(szLoadedText, StringFlags);
69  InsertText(szText, TextFlags);
70  }
71  }
72 
74  DWORD StringFlags)
75  {
76  ATL::CStringW szLoadedText;
77  if (szLoadedText.LoadStringW(uStringID))
78  {
79  InsertText(L"\n", 0);
80  InsertText(szLoadedText, StringFlags);
81  InsertText(L"\n", 0);
82  }
83  }
84 
86  {
87  if (Info->IsInstalled())
88  {
89  if (Info->HasInstalledVersion())
90  {
91  if (Info->HasUpdate())
93  else
95 
96  LoadAndInsertText(IDS_AINFO_VERSION, Info->m_szInstalledVersion, CFE_BOLD, 0);
97  }
98  else
99  {
101  }
102  }
103  else
104  {
106  }
107 
109  }
110 
112  {
113  ATL::CStringW szLicense;
114  switch (Info->m_LicenseType)
115  {
116  case LICENSE_OPENSOURCE:
117  szLicense.LoadStringW(IDS_LICENSE_OPENSOURCE);
118  break;
119  case LICENSE_FREEWARE:
120  szLicense.LoadStringW(IDS_LICENSE_FREEWARE);
121  break;
122  case LICENSE_TRIAL:
123  szLicense.LoadStringW(IDS_LICENSE_TRIAL);
124  break;
125  default:
127  return;
128  }
129 
130  szLicense += L" (" + Info->m_szLicense + L")";
132  }
133 
135  {
136  if (!Info->HasLanguageInfo())
137  {
138  return;
139  }
140 
141  const INT nTranslations = Info->m_LanguageLCIDs.GetSize();
142  ATL::CStringW szLangInfo;
143  ATL::CStringW szLoadedTextAvailability;
144  ATL::CStringW szLoadedAInfoText;
145 
146  szLoadedAInfoText.LoadStringW(IDS_AINFO_LANGUAGES);
147 
148  if (Info->HasNativeLanguage())
149  {
150  szLoadedTextAvailability.LoadStringW(IDS_LANGUAGE_AVAILABLE_TRANSLATION);
151  if (nTranslations > 1)
152  {
154  buf.LoadStringW(IDS_LANGUAGE_MORE_PLACEHOLDER);
155  szLangInfo.Format(buf, nTranslations - 1);
156  }
157  else
158  {
159  szLangInfo.LoadStringW(IDS_LANGUAGE_SINGLE);
160  szLangInfo = L" (" + szLangInfo + L")";
161  }
162  }
163  else if (Info->HasEnglishLanguage())
164  {
165  szLoadedTextAvailability.LoadStringW(IDS_LANGUAGE_ENGLISH_TRANSLATION);
166  if (nTranslations > 1)
167  {
170  szLangInfo.Format(buf, nTranslations - 1);
171  }
172  else
173  {
174  szLangInfo.LoadStringW(IDS_LANGUAGE_SINGLE);
175  szLangInfo = L" (" + szLangInfo + L")";
176  }
177  }
178  else
179  {
180  szLoadedTextAvailability.LoadStringW(IDS_LANGUAGE_NO_TRANSLATION);
181  }
182 
183  InsertText(szLoadedAInfoText, CFE_BOLD);
184  InsertText(szLoadedTextAvailability, NULL);
185  InsertText(szLangInfo, CFE_ITALIC);
186  }
187 
188 public:
190  {
191  if (!Info) return FALSE;
192 
193  SetText(Info->m_szName, CFE_BOLD);
197 
202 
203  return TRUE;
204  }
205 
207  {
209  ATL::CStringW szInfo;
210 
211  if (!Info || !Info->hSubKey)
212  return FALSE;
213 
214  Info->GetApplicationString(L"DisplayName", szText);
216  InsertText(L"\n", 0);
217 
218 #define GET_INFO(a, b, c, d) \
219  if (Info->GetApplicationString(a, szInfo)) \
220  { \
221  LoadAndInsertText(b, szInfo, c, d); \
222  }
223 
224  GET_INFO(L"DisplayVersion", IDS_INFO_VERSION, CFE_BOLD, 0);
225  GET_INFO(L"Publisher", IDS_INFO_PUBLISHER, CFE_BOLD, 0);
226  GET_INFO(L"RegOwner", IDS_INFO_REGOWNER, CFE_BOLD, 0);
227  GET_INFO(L"ProductID", IDS_INFO_PRODUCTID, CFE_BOLD, 0);
229  GET_INFO(L"HelpTelephone", IDS_INFO_HELPPHONE, CFE_BOLD, 0);
230  GET_INFO(L"Readme", IDS_INFO_README, CFE_BOLD, 0);
231  GET_INFO(L"Contact", IDS_INFO_CONTACT, CFE_BOLD, 0);
232  GET_INFO(L"URLUpdateInfo", IDS_INFO_UPDATEINFO, CFE_BOLD, CFM_LINK);
233  GET_INFO(L"URLInfoAbout", IDS_INFO_INFOABOUT, CFE_BOLD, CFM_LINK);
234  GET_INFO(L"Comments", IDS_INFO_COMMENTS, CFE_BOLD, 0);
235  GET_INFO(L"InstallDate", IDS_INFO_INSTALLDATE, CFE_BOLD, 0);
236  GET_INFO(L"InstallLocation", IDS_INFO_INSTLOCATION, CFE_BOLD, 0);
237  GET_INFO(L"InstallSource", IDS_INFO_INSTALLSRC, CFE_BOLD, 0);
238  GET_INFO(L"UninstallString", IDS_INFO_UNINSTALLSTR, CFE_BOLD, 0);
239  GET_INFO(L"InstallSource", IDS_INFO_INSTALLSRC, CFE_BOLD, 0);
240  GET_INFO(L"ModifyPath", IDS_INFO_MODIFYPATH, CFE_BOLD, 0);
241 
242  return TRUE;
243  }
244 
246  {
248 
249  szText.LoadStringW(IDS_WELCOME_TITLE);
251 
252  szText.LoadStringW(IDS_WELCOME_TEXT);
253  InsertText(szText, 0);
254 
255  szText.LoadStringW(IDS_WELCOME_URL);
257  }
258 };
259 
261  public CUiWindow< CToolbar<> >
262 {
265 
270 
271  VOID AddImageToImageList(HIMAGELIST hImageList, UINT ImageIndex)
272  {
273  HICON hImage;
274 
275  if (!(hImage = (HICON) LoadImageW(hInst,
276  MAKEINTRESOURCE(ImageIndex),
277  IMAGE_ICON,
280  0)))
281  {
282  /* TODO: Error message */
283  }
284 
285  ImageList_AddIcon(hImageList, hImage);
286  DeleteObject(hImage);
287  }
288 
290  {
291  HIMAGELIST hImageList;
292 
293  /* Create the toolbar icon image list */
294  hImageList = ImageList_Create(m_iToolbarHeight,//GetSystemMetrics(SM_CXSMICON),
295  m_iToolbarHeight,//GetSystemMetrics(SM_CYSMICON),
297  1, 1);
298  if (!hImageList)
299  {
300  /* TODO: Error message */
301  return NULL;
302  }
303 
304  AddImageToImageList(hImageList, IDI_INSTALL);
305  AddImageToImageList(hImageList, IDI_UNINSTALL);
306  AddImageToImageList(hImageList, IDI_MODIFY);
307  AddImageToImageList(hImageList, IDI_CHECK_ALL);
308  AddImageToImageList(hImageList, IDI_REFRESH);
309  AddImageToImageList(hImageList, IDI_UPDATE_DB);
310  AddImageToImageList(hImageList, IDI_SETTINGS);
311  AddImageToImageList(hImageList, IDI_EXIT);
312 
313  return hImageList;
314  }
315 
316 public:
318  {
319  }
320 
322  {
323  UINT idButton = (UINT) lpttt->hdr.idFrom;
324 
325  switch (idButton)
326  {
327  case ID_EXIT:
328  lpttt->lpszText = MAKEINTRESOURCEW(IDS_TOOLTIP_EXIT);
329  break;
330 
331  case ID_INSTALL:
332  lpttt->lpszText = MAKEINTRESOURCEW(IDS_TOOLTIP_INSTALL);
333  break;
334 
335  case ID_UNINSTALL:
336  lpttt->lpszText = MAKEINTRESOURCEW(IDS_TOOLTIP_UNINSTALL);
337  break;
338 
339  case ID_MODIFY:
340  lpttt->lpszText = MAKEINTRESOURCEW(IDS_TOOLTIP_MODIFY);
341  break;
342 
343  case ID_SETTINGS:
344  lpttt->lpszText = MAKEINTRESOURCEW(IDS_TOOLTIP_SETTINGS);
345  break;
346 
347  case ID_REFRESH:
348  lpttt->lpszText = MAKEINTRESOURCEW(IDS_TOOLTIP_REFRESH);
349  break;
350 
351  case ID_RESETDB:
352  lpttt->lpszText = MAKEINTRESOURCEW(IDS_TOOLTIP_UPDATE_DB);
353  break;
354  }
355  }
356 
358  {
359  /* Create buttons */
360  TBBUTTON Buttons[] =
361  { /* iBitmap, idCommand, fsState, fsStyle, bReserved[2], dwData, iString */
366  { -1, 0, TBSTATE_ENABLED, BTNS_SEP, { 0 }, 0, 0 },
367  { 4, ID_REFRESH, TBSTATE_ENABLED, BTNS_BUTTON | BTNS_AUTOSIZE, { 0 }, 0, 0 },
368  { 5, ID_RESETDB, TBSTATE_ENABLED, BTNS_BUTTON | BTNS_AUTOSIZE, { 0 }, 0, 0 },
369  { -1, 0, TBSTATE_ENABLED, BTNS_SEP, { 0 }, 0, 0 },
370  { 6, ID_SETTINGS, TBSTATE_ENABLED, BTNS_BUTTON | BTNS_AUTOSIZE, { 0 }, 0, 0 },
371  { 7, ID_EXIT, TBSTATE_ENABLED, BTNS_BUTTON | BTNS_AUTOSIZE, { 0 }, 0, 0 },
372  };
373 
378 
381  0, 0, 0, 0,
382  hwndParent,
383  0, hInst, NULL);
384 
385  if (!m_hWnd)
386  {
387  /* TODO: Show error message */
388  return FALSE;
389  }
390 
393 
394  /* Set image list */
395  HIMAGELIST hImageList = InitImageList();
396 
397  if (!hImageList)
398  {
399  /* TODO: Show error message */
400  return FALSE;
401  }
402 
403  ImageList_Destroy(SetImageList(hImageList));
404 
406 
407  /* Remember ideal width to use as a max width of buttons */
408  SIZE size;
411 
412  return m_hWnd;
413  }
414 
416  {
417  DWORD dCurrentExStyle = (DWORD) SendMessageW(TB_GETEXTENDEDSTYLE, 0, 0);
419  }
420 
422  {
423  DWORD dCurrentExStyle = (DWORD) SendMessageW(TB_GETEXTENDEDSTYLE, 0, 0);
425  }
426 
428  {
429  return m_dButtonsWidthMax;
430  }
431 };
432 
434  public CUiWindow<CListView>
435 {
436  struct SortContext
437  {
440  };
441 
445 
447 
448 public:
453  nLastHeaderID(-1)
454  {
455  }
456 
458  {
459  if (bIsVisible)
460  {
462  }
463  else
464  {
466  }
467 
468  bHasCheckboxes = bIsVisible;
469  }
470 
472  {
473  HWND hHeader;
474  HDITEMW hColumn;
475  INT nHeaderID = pnmv->iSubItem;
476 
478  return;
479 
480  hHeader = (HWND) SendMessage(LVM_GETHEADER, 0, 0);
481  ZeroMemory(&hColumn, sizeof(hColumn));
482 
483  /* If the sorting column changed, remove the sorting style from the old column */
484  if ((nLastHeaderID != -1) && (nLastHeaderID != nHeaderID))
485  {
486  hColumn.mask = HDI_FORMAT;
487  Header_GetItem(hHeader, nLastHeaderID, &hColumn);
488  hColumn.fmt &= ~(HDF_SORTUP | HDF_SORTDOWN);
489  Header_SetItem(hHeader, nLastHeaderID, &hColumn);
490  }
491 
492  /* Set the sorting style to the new column */
493  hColumn.mask = HDI_FORMAT;
494  Header_GetItem(hHeader, nHeaderID, &hColumn);
495 
496  hColumn.fmt &= (bIsAscending ? ~HDF_SORTDOWN : ~HDF_SORTUP);
497  hColumn.fmt |= (bIsAscending ? HDF_SORTUP : HDF_SORTDOWN);
498  Header_SetItem(hHeader, nHeaderID, &hColumn);
499 
500  /* Sort the list, using the current values of nHeaderID and bIsAscending */
501  SortContext ctx = {this, nHeaderID};
502  SortItems(s_CompareFunc, &ctx);
503 
504  /* Save new values */
505  nLastHeaderID = nHeaderID;
507  }
508 
510  {
511  return AddColumn(Index, const_cast<LPWSTR>(Text.GetString()), Width, Format);
512  }
513 
515  {
516  LVCOLUMNW Column;
517 
518  ZeroMemory(&Column, sizeof(Column));
519 
521  Column.iSubItem = Index;
522  Column.pszText = lpText;
523  Column.cx = Width;
524  Column.fmt = Format;
525 
526  return (InsertColumn(Index, &Column) == -1) ? FALSE : TRUE;
527  }
528 
530  {
531  LVITEMW Item;
532 
533  ZeroMemory(&Item, sizeof(Item));
534 
536  Item.pszText = const_cast<LPWSTR>(lpText);
537  Item.lParam = lParam;
538  Item.iItem = ItemIndex;
539  Item.iImage = IconIndex;
540 
541  return InsertItem(&Item);
542  }
543 
544  static INT CALLBACK s_CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
545  {
546  SortContext * ctx = ((SortContext*) lParamSort);
547  return ctx->lvw->CompareFunc(lParam1, lParam2, ctx->iSubItem);
548  }
549 
550  INT CompareFunc(LPARAM lParam1, LPARAM lParam2, INT iSubItem)
551  {
552  ATL::CStringW Item1, Item2;
553  LVFINDINFOW IndexInfo;
554  INT Index;
555 
556  IndexInfo.flags = LVFI_PARAM;
557 
558  IndexInfo.lParam = lParam1;
559  Index = FindItem(-1, &IndexInfo);
560  GetItemText(Index, iSubItem, Item1.GetBuffer(MAX_STR_LEN), MAX_STR_LEN);
561  Item1.ReleaseBuffer();
562 
563  IndexInfo.lParam = lParam2;
564  Index = FindItem(-1, &IndexInfo);
565  GetItemText(Index, iSubItem, Item2.GetBuffer(MAX_STR_LEN), MAX_STR_LEN);
566  Item2.ReleaseBuffer();
567 
568  return bIsAscending ? Item1.Compare(Item2) : Item2.Compare(Item1);
569  }
570 
572  {
573  RECT r = {205, 28, 465, 250};
576 
578 
579  if (hwnd)
580  {
582  }
583 
584  return hwnd;
585  }
586 
588  {
589  return (BOOL) (GetItemState(item, LVIS_STATEIMAGEMASK) >> 12) - 1;
590  }
591 
593  {
594  if (bHasCheckboxes)
595  {
597  SetSelected(item, fCheck);
598  }
599  }
600 
602  {
603  if (item < 0)
604  {
605  for (INT i = 0; i >= 0; i = GetNextItem(i, LVNI_ALL))
606  {
608  if (pAppInfo)
609  {
610  pAppInfo->m_IsSelected = value;
611  }
612  }
613  }
614  else
615  {
617  if (pAppInfo)
618  {
619  pAppInfo->m_IsSelected = value;
620  }
621  }
622  }
623 
625  {
626  if (bHasCheckboxes)
627  {
630  }
631  }
632 
634  {
635  if (!bHasCheckboxes)
636  {
638  }
639 
641  for (INT i = 0; i >= 0; i = GetNextItem(i, LVNI_ALL))
642  {
643  if (GetCheckState(i) != FALSE)
644  {
646  list.Add(*pAppInfo);
647  }
648  }
649  return list;
650  }
651 
653  {
656  }
657 };
658 
660  public CUiWindow<CTreeView>
661 {
663 
664 public:
666  CUiWindow(),
669  0, 1))
670  {
671  }
672 
674  {
675  return CUiWindow<CTreeView>::AddItem(hParent, const_cast<LPWSTR>(Text.GetString()), Image, SelectedImage, lParam);
676  }
677 
679  {
681  INT Index;
682  HICON hIcon;
683 
686  IMAGE_ICON,
690  if (hIcon)
691  {
694  }
695 
696  szText.LoadStringW(TextIndex);
697  return AddItem(hRootItem, szText, Index, Index, TextIndex);
698  }
699 
701  {
703  }
704 
706  {
707  if (hImageTreeView)
709  }
710 
712  {
714  }
715 };
716 
717 class CSearchBar :
718  public CWindow
719 {
720 public:
721  const INT m_Width;
722  const INT m_Height;
723 
725  {
726  }
727 
728  VOID SetText(LPCWSTR lpszText)
729  {
731  }
732 
734  {
735  ATL::CStringW szBuf;
738  0, 0, m_Width, m_Height,
739  hwndParent, (HMENU) NULL,
740  hInst, 0);
741 
743  szBuf.LoadStringW(IDS_SEARCH_TEXT);
744  SetWindowTextW(szBuf);
745  return m_hWnd;
746  }
747 
748 };
749 
750 class CMainWindow :
751  public CWindowImpl<CMainWindow, CWindow, CFrameWinTraits>
752 {
756 
759 
763 
766 
768 
770 
773 
776 
777 public:
780  pLink(NULL),
783  {
784  }
785 
786 private:
788  {
790 
791  /* Add columns to ListView */
792  szText.LoadStringW(IDS_APP_NAME);
794 
795  szText.LoadStringW(IDS_APP_INST_VERSION);
797 
798  szText.LoadStringW(IDS_APP_DESCRIPTION);
800 
801  // Unnesesary since the list updates on every TreeView selection
802  // UpdateApplicationsList(ENUM_ALL_COMPONENTS);
803  }
804 
806  {
807  HTREEITEM hRootItemInstalled, hRootItemAvailable;
808 
809  hRootItemInstalled = m_TreeView->AddCategory(TVI_ROOT, IDS_INSTALLED, IDI_CATEGORY);
810  m_TreeView->AddCategory(hRootItemInstalled, IDS_APPLICATIONS, IDI_APPS);
811  m_TreeView->AddCategory(hRootItemInstalled, IDS_UPDATES, IDI_APPUPD);
812 
814 
816  m_TreeView->AddCategory(hRootItemAvailable, IDS_CAT_AUDIO, IDI_CAT_AUDIO);
817  m_TreeView->AddCategory(hRootItemAvailable, IDS_CAT_VIDEO, IDI_CAT_VIDEO);
819  m_TreeView->AddCategory(hRootItemAvailable, IDS_CAT_GAMES, IDI_CAT_GAMES);
821  m_TreeView->AddCategory(hRootItemAvailable, IDS_CAT_OFFICE, IDI_CAT_OFFICE);
822  m_TreeView->AddCategory(hRootItemAvailable, IDS_CAT_DEVEL, IDI_CAT_DEVEL);
823  m_TreeView->AddCategory(hRootItemAvailable, IDS_CAT_EDU, IDI_CAT_EDU);
825  m_TreeView->AddCategory(hRootItemAvailable, IDS_CAT_FINANCE, IDI_CAT_FINANCE);
826  m_TreeView->AddCategory(hRootItemAvailable, IDS_CAT_SCIENCE, IDI_CAT_SCIENCE);
827  m_TreeView->AddCategory(hRootItemAvailable, IDS_CAT_TOOLS, IDI_CAT_TOOLS);
828  m_TreeView->AddCategory(hRootItemAvailable, IDS_CAT_DRIVERS, IDI_CAT_DRIVERS);
829  m_TreeView->AddCategory(hRootItemAvailable, IDS_CAT_LIBS, IDI_CAT_LIBS);
830  m_TreeView->AddCategory(hRootItemAvailable, IDS_CAT_THEMES, IDI_CAT_THEMES);
831  m_TreeView->AddCategory(hRootItemAvailable, IDS_CAT_OTHER, IDI_CAT_OTHER);
832 
834  m_TreeView->Expand(hRootItemInstalled, TVE_EXPAND);
835  m_TreeView->Expand(hRootItemAvailable, TVE_EXPAND);
836  m_TreeView->SelectItem(hRootItemAvailable);
837  }
838 
840  {
845 
847  }
848 
850  {
851  m_Toolbar = new CMainToolbar();
855 
856  return m_Toolbar->Create(m_hWnd) != NULL;
857  }
858 
860  {
861  m_TreeView = new CSideTreeView();
865 
866  return m_TreeView->Create(m_hWnd) != NULL;
867  }
868 
870  {
871  m_ListView = new CAppsListView();
875 
876  return m_ListView->Create(m_hWnd) != NULL;
877  }
878 
880  {
881  m_RichEdit = new CAppRichEdit();
885 
886  return m_RichEdit->Create(m_hWnd) != NULL;
887  }
888 
890  {
891  m_VSplitter = new CUiSplitPanel();
896  m_VSplitter->m_MinFirst = 0;
897  m_VSplitter->m_MinSecond = 320;
898  m_VSplitter->m_Pos = 240;
900 
901  return m_VSplitter->Create(m_hWnd) != NULL;
902  }
903 
905  {
906  m_HSplitter = new CUiSplitPanel();
911  m_HSplitter->m_Pos = INT_MAX; //set INT_MAX to use lowest possible position (m_MinSecond)
912  m_HSplitter->m_MinFirst = 10;
913  m_HSplitter->m_MinSecond = 140;
915 
916  return m_HSplitter->Create(m_hWnd) != NULL;
917  }
918 
920  {
924  m_SearchBar->m_Margin.top = 4;
926 
927  return m_SearchBar->Create(m_Toolbar->m_hWnd) != NULL;
928  }
929 
931  {
932  BOOL b = TRUE;
933  bUpdating = TRUE;
934 
935  m_ClientPanel = new CUiPanel();
938 
939  // Top level
940  b = b && CreateStatusBar();
941  b = b && CreateToolbar();
942  b = b && CreateSearchBar();
943  b = b && CreateVSplitter();
944 
945  // Inside V Splitter
946  b = b && CreateHSplitter();
947  b = b && CreateTreeView();
948 
949  // Inside H Splitter
950  b = b && CreateListView();
951  b = b && CreateRichEdit();
952 
953  if (b)
954  {
955  RECT rTop;
956  RECT rBottom;
957 
958  /* Size status bar */
959  m_StatusBar->SendMessageW(WM_SIZE, 0, 0);
960 
961  /* Size tool bar */
962  m_Toolbar->AutoSize();
963 
964  ::GetWindowRect(m_Toolbar->m_hWnd, &rTop);
965  ::GetWindowRect(m_StatusBar->m_hWnd, &rBottom);
966 
967  m_VSplitter->m_Margin.top = rTop.bottom - rTop.top;
968  m_VSplitter->m_Margin.bottom = rBottom.bottom - rBottom.top;
969  }
970 
971  bUpdating = FALSE;
972  return b;
973  }
974 
976  {
977  if (CreateLayout())
978  {
979 
982 
983  nSelectedApps = 0;
985 
986  return TRUE;
987  }
988 
989  return FALSE;
990  }
991 
993  {
995  {
996  if (Index == -1)
998 
1000 
1002  }
1004  {
1005  if (Index == -1)
1006  return;
1007 
1009 
1011  }
1012  }
1013 
1015  {
1016  if (wParam == SIZE_MINIMIZED)
1017  return;
1018 
1019  /* Size status bar */
1020  m_StatusBar->SendMessage(WM_SIZE, 0, 0);
1021 
1022  /* Size tool bar */
1023  m_Toolbar->AutoSize();
1024 
1025  /* Automatically hide captions */
1026  DWORD dToolbarTreshold = m_Toolbar->GetMaxButtonsWidth();
1027  DWORD dSearchbarMargin = (LOWORD(lParam) - m_SearchBar->m_Width);
1028 
1029  if (dSearchbarMargin > dToolbarTreshold)
1030  {
1032  }
1033  else if (dSearchbarMargin < dToolbarTreshold)
1034  {
1036  }
1037 
1038  RECT r = {0, 0, LOWORD(lParam), HIWORD(lParam)};
1039  HDWP hdwp = NULL;
1041 
1042  hdwp = BeginDeferWindowPos(count);
1043  if (hdwp)
1044  {
1045  hdwp = m_ClientPanel->OnParentSize(r, hdwp);
1046  if (hdwp)
1047  {
1048  EndDeferWindowPos(hdwp);
1049  }
1050 
1051  }
1052 
1053  // TODO: Sub-layouts for children of children
1055  hdwp = BeginDeferWindowPos(count);
1056  if (hdwp)
1057  {
1058  hdwp = m_SearchBar->OnParentSize(r, hdwp);
1059  if (hdwp)
1060  {
1061  EndDeferWindowPos(hdwp);
1062  }
1063  }
1064 
1065  }
1066 
1068  {
1070  WCHAR szFullName[MAX_PATH] = L"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\";
1071  ATL::CStringW szMsgText, szMsgTitle;
1072  INT ItemIndex = m_ListView->GetNextItem(-1, LVNI_FOCUSED);
1073 
1075  return;
1076 
1077  Info = reinterpret_cast<PINSTALLED_INFO>(m_ListView->GetItemData(ItemIndex));
1078  if (!Info || !Info->hSubKey || (ItemIndex == -1))
1079  return;
1080 
1081  if (!szMsgText.LoadStringW(IDS_APP_REG_REMOVE) ||
1082  !szMsgTitle.LoadStringW(IDS_INFORMATION))
1083  return;
1084 
1085  if (MessageBoxW(szMsgText, szMsgTitle, MB_YESNO | MB_ICONQUESTION) == IDYES)
1086  {
1087  ATL::CStringW::CopyChars(szFullName,
1088  MAX_PATH,
1089  Info->szKeyName.GetString(),
1090  MAX_PATH - wcslen(szFullName));
1091 
1092  if (RegDeleteKeyW(Info->hRootKey, szFullName) == ERROR_SUCCESS)
1093  {
1094  m_ListView->DeleteItem(ItemIndex);
1095  return;
1096  }
1097 
1098  if (!szMsgText.LoadStringW(IDS_UNABLE_TO_REMOVE))
1099  return;
1100 
1101  MessageBoxW(szMsgText.GetString(), NULL, MB_OK | MB_ICONERROR);
1102  }
1103  }
1104 
1106  {
1108 
1110  return FALSE;
1111 
1112  INT ItemIndex = m_ListView->GetNextItem(-1, LVNI_FOCUSED);
1113  if (ItemIndex == -1)
1114  return FALSE;
1115 
1117  WriteLogMessage(EVENTLOG_SUCCESS, MSG_SUCCESS_REMOVE, szAppName);
1118 
1119  PINSTALLED_INFO ItemInfo = (PINSTALLED_INFO)m_ListView->GetItemData(ItemIndex);
1120  return UninstallApplication(ItemInfo, bModify);
1121  }
1123  {
1124  theResult = 0;
1125  switch (Msg)
1126  {
1127  case WM_CREATE:
1128  if (!InitControls())
1129  ::PostMessageW(hwnd, WM_CLOSE, 0, 0);
1130  break;
1131 
1132  case WM_DESTROY:
1133  {
1135  SaveSettings(hwnd);
1136 
1137  FreeLogs();
1139 
1142 
1143  delete m_ClientPanel;
1144 
1145  PostQuitMessage(0);
1146  return 0;
1147  }
1148 
1149  case WM_COMMAND:
1151  break;
1152 
1153  case WM_NOTIFY:
1154  {
1155  LPNMHDR data = (LPNMHDR) lParam;
1156 
1157  switch (data->code)
1158  {
1159  case TVN_SELCHANGED:
1160  {
1161  if (data->hwndFrom == m_TreeView->m_hWnd)
1162  {
1163  switch (((LPNMTREEVIEW) lParam)->itemNew.lParam)
1164  {
1165  case IDS_INSTALLED:
1167  break;
1168 
1169  case IDS_APPLICATIONS:
1171  break;
1172 
1173  case IDS_UPDATES:
1175  break;
1176 
1177  case IDS_AVAILABLEFORINST:
1179  break;
1180 
1181  case IDS_CAT_AUDIO:
1183  break;
1184 
1185  case IDS_CAT_DEVEL:
1187  break;
1188 
1189  case IDS_CAT_DRIVERS:
1191  break;
1192 
1193  case IDS_CAT_EDU:
1195  break;
1196 
1197  case IDS_CAT_ENGINEER:
1199  break;
1200 
1201  case IDS_CAT_FINANCE:
1203  break;
1204 
1205  case IDS_CAT_GAMES:
1207  break;
1208 
1209  case IDS_CAT_GRAPHICS:
1211  break;
1212 
1213  case IDS_CAT_INTERNET:
1215  break;
1216 
1217  case IDS_CAT_LIBS:
1219  break;
1220 
1221  case IDS_CAT_OFFICE:
1223  break;
1224 
1225  case IDS_CAT_OTHER:
1227  break;
1228 
1229  case IDS_CAT_SCIENCE:
1231  break;
1232 
1233  case IDS_CAT_TOOLS:
1235  break;
1236 
1237  case IDS_CAT_VIDEO:
1239  break;
1240 
1241  case IDS_CAT_THEMES:
1243  break;
1244 
1245  case IDS_SELECTEDFORINST:
1247  break;
1248  }
1249  }
1250 
1251  HMENU mainMenu = ::GetMenu(hwnd);
1252  HMENU lvwMenu = ::GetMenu(m_ListView->m_hWnd);
1253 
1254  /* Disable/enable items based on treeview selection */
1256  {
1258  EnableMenuItem(mainMenu, ID_INSTALL, MF_GRAYED);
1260  EnableMenuItem(mainMenu, ID_MODIFY, MF_ENABLED);
1261 
1263  EnableMenuItem(lvwMenu, ID_INSTALL, MF_GRAYED);
1265  EnableMenuItem(lvwMenu, ID_MODIFY, MF_ENABLED);
1266 
1267  m_Toolbar->SendMessageW(TB_ENABLEBUTTON, ID_REGREMOVE, TRUE);
1268  m_Toolbar->SendMessageW(TB_ENABLEBUTTON, ID_INSTALL, FALSE);
1269  m_Toolbar->SendMessageW(TB_ENABLEBUTTON, ID_UNINSTALL, TRUE);
1270  m_Toolbar->SendMessageW(TB_ENABLEBUTTON, ID_MODIFY, TRUE);
1271  }
1272  else
1273  {
1275  EnableMenuItem(mainMenu, ID_INSTALL, MF_ENABLED);
1277  EnableMenuItem(mainMenu, ID_MODIFY, MF_GRAYED);
1278 
1282  EnableMenuItem(lvwMenu, ID_MODIFY, MF_GRAYED);
1283 
1284  m_Toolbar->SendMessageW(TB_ENABLEBUTTON, ID_REGREMOVE, FALSE);
1285  m_Toolbar->SendMessageW(TB_ENABLEBUTTON, ID_INSTALL, TRUE);
1286  m_Toolbar->SendMessageW(TB_ENABLEBUTTON, ID_UNINSTALL, FALSE);
1287  m_Toolbar->SendMessageW(TB_ENABLEBUTTON, ID_MODIFY, FALSE);
1288  }
1289  }
1290  break;
1291 
1292  case LVN_ITEMCHANGED:
1293  {
1294  LPNMLISTVIEW pnic = (LPNMLISTVIEW) lParam;
1295 
1296  if (pnic->hdr.hwndFrom == m_ListView->m_hWnd)
1297  {
1298  /* Check if this is a valid item
1299  * (technically, it can be also an unselect) */
1300  INT ItemIndex = pnic->iItem;
1301  if (ItemIndex == -1 ||
1302  ItemIndex >= ListView_GetItemCount(pnic->hdr.hwndFrom))
1303  {
1304  break;
1305  }
1306 
1307  /* Check if the focus has been moved to another item */
1308  if ((pnic->uChanged & LVIF_STATE) &&
1309  (pnic->uNewState & LVIS_FOCUSED) &&
1310  !(pnic->uOldState & LVIS_FOCUSED))
1311  {
1312  ShowAppInfo(ItemIndex);
1313  }
1314  /* Check if the item is checked */
1315  if ((pnic->uNewState & LVIS_STATEIMAGEMASK) && !bUpdating)
1316  {
1317  BOOL checked = m_ListView->GetCheckState(pnic->iItem);
1318  /* FIXME: HAX!
1319  - preventing decremention below zero as a safeguard for ReactOS
1320  In ReactOS this action is triggered whenever user changes *selection*, but should be only when *checkbox* state toggled
1321  Maybe LVIS_STATEIMAGEMASK is set incorrectly
1322  */
1323  nSelectedApps +=
1324  (checked)
1325  ? 1
1326  : ((nSelectedApps > 0)
1327  ? -1
1328  : 0);
1329 
1330  /* Update item's selection status */
1331  m_ListView->SetSelected(pnic->iItem, checked);
1332 
1334  }
1335  }
1336  }
1337  break;
1338 
1339  case LVN_COLUMNCLICK:
1340  {
1341  LPNMLISTVIEW pnmv = (LPNMLISTVIEW) lParam;
1342 
1343  m_ListView->ColumnClick(pnmv);
1344  }
1345  break;
1346 
1347  case NM_CLICK:
1348  {
1349  if (data->hwndFrom == m_ListView->m_hWnd && ((LPNMLISTVIEW) lParam)->iItem != -1)
1350  {
1351  ShowAppInfo(-1);
1352  }
1353  }
1354  break;
1355 
1356  case NM_DBLCLK:
1357  {
1358  if (data->hwndFrom == m_ListView->m_hWnd && ((LPNMLISTVIEW) lParam)->iItem != -1)
1359  {
1360  /* this won't do anything if the program is already installed */
1362  }
1363  }
1364  break;
1365 
1366  case NM_RCLICK:
1367  {
1368  if (data->hwndFrom == m_ListView->m_hWnd && ((LPNMLISTVIEW) lParam)->iItem != -1)
1369  {
1370  ShowPopupMenu(m_ListView->m_hWnd, 0, ID_INSTALL);
1371  }
1372  }
1373  break;
1374 
1375  case EN_LINK:
1376  OnLink((ENLINK*) lParam);
1377  break;
1378 
1379  case TTN_GETDISPINFO:
1381  break;
1382  }
1383  }
1384  break;
1385 
1386  case WM_SIZE:
1387  OnSize(hwnd, wParam, lParam);
1388  break;
1389 
1390  case WM_SIZING:
1391  {
1392  LPRECT pRect = (LPRECT) lParam;
1393 
1394  if (pRect->right - pRect->left < 565)
1395  pRect->right = pRect->left + 565;
1396 
1397  if (pRect->bottom - pRect->top < 300)
1398  pRect->bottom = pRect->top + 300;
1399 
1400  return TRUE;
1401  }
1402 
1403  case WM_SYSCOLORCHANGE:
1404  {
1405  /* Forward WM_SYSCOLORCHANGE to common controls */
1406  m_ListView->SendMessageW(WM_SYSCOLORCHANGE, 0, 0);
1407  m_TreeView->SendMessageW(WM_SYSCOLORCHANGE, 0, 0);
1408  m_Toolbar->SendMessageW(WM_SYSCOLORCHANGE, 0, 0);
1410  }
1411  break;
1412 
1413  case WM_TIMER:
1414  if (wParam == SEARCH_TIMER_ID)
1415  {
1417  if (bSearchEnabled)
1419  }
1420  break;
1421  }
1422 
1423  return FALSE;
1424  }
1425 
1427  {
1428  switch (Link->msg)
1429  {
1430  case WM_LBUTTONUP:
1431  case WM_RBUTTONUP:
1432  {
1433  if (pLink) HeapFree(GetProcessHeap(), 0, pLink);
1434 
1436  (max(Link->chrg.cpMin, Link->chrg.cpMax) -
1437  min(Link->chrg.cpMin, Link->chrg.cpMax) + 1) * sizeof(WCHAR));
1438  if (!pLink)
1439  {
1440  /* TODO: Error message */
1441  return;
1442  }
1443 
1444  m_RichEdit->SendMessageW(EM_SETSEL, Link->chrg.cpMin, Link->chrg.cpMax);
1445  m_RichEdit->SendMessageW(EM_GETSELTEXT, 0, (LPARAM) pLink);
1446 
1447  ShowPopupMenu(m_RichEdit->m_hWnd, IDR_LINKMENU, -1);
1448  }
1449  break;
1450  }
1451  }
1452 
1454  {
1455  HTREEITEM hSelectedItem = m_TreeView->GetSelection();
1456  TV_ITEM tItem;
1457 
1458  tItem.mask = TVIF_PARAM | TVIF_HANDLE;
1459  tItem.hItem = hSelectedItem;
1460  m_TreeView->GetItem(&tItem);
1461  switch (tItem.lParam)
1462  {
1463  case IDS_INSTALLED:
1464  case IDS_APPLICATIONS:
1465  case IDS_UPDATES:
1466  return TRUE;
1467  default:
1468  return FALSE;
1469  }
1470  }
1471 
1473  {
1474  WORD wCommand = LOWORD(wParam);
1475 
1476  if (lParam == (LPARAM) m_SearchBar->m_hWnd)
1477  {
1478  ATL::CStringW szBuf;
1479 
1480  switch (HIWORD(wParam))
1481  {
1482  case EN_SETFOCUS:
1483  {
1484  ATL::CStringW szWndText;
1485 
1486  szBuf.LoadStringW(IDS_SEARCH_TEXT);
1487  m_SearchBar->GetWindowTextW(szWndText);
1488  if (szBuf == szWndText)
1489  {
1491  m_SearchBar->SetWindowTextW(L"");
1492  }
1493  }
1494  break;
1495 
1496  case EN_KILLFOCUS:
1497  {
1498  m_SearchBar->GetWindowTextW(szBuf);
1499  if (szBuf.IsEmpty())
1500  {
1501  szBuf.LoadStringW(IDS_SEARCH_TEXT);
1503  m_SearchBar->SetWindowTextW(szBuf.GetString());
1504  }
1505  }
1506  break;
1507 
1508  case EN_CHANGE:
1509  {
1510  ATL::CStringW szWndText;
1511 
1512  if (!bSearchEnabled)
1513  {
1514  bSearchEnabled = TRUE;
1515  break;
1516  }
1517 
1518  szBuf.LoadStringW(IDS_SEARCH_TEXT);
1519  m_SearchBar->GetWindowTextW(szWndText);
1520  if (szBuf == szWndText)
1521  {
1523  }
1524  else
1525  {
1526  szSearchPattern = szWndText;
1527  }
1528 
1529  DWORD dwDelay;
1530  SystemParametersInfoW(SPI_GETMENUSHOWDELAY, 0, &dwDelay, 0);
1531  SetTimer(SEARCH_TIMER_ID, dwDelay);
1532  }
1533  break;
1534  }
1535 
1536  return;
1537  }
1538 
1539  switch (wCommand)
1540  {
1541  case ID_OPEN_LINK:
1543  HeapFree(GetProcessHeap(), 0, pLink);
1544  break;
1545 
1546  case ID_COPY_LINK:
1548  HeapFree(GetProcessHeap(), 0, pLink);
1549  break;
1550 
1551  case ID_SETTINGS:
1553  break;
1554 
1555  case ID_EXIT:
1556  PostMessageW(WM_CLOSE, 0, 0);
1557  break;
1558 
1559  case ID_SEARCH:
1560  m_SearchBar->SetFocus();
1561  break;
1562 
1563  case ID_INSTALL:
1565  {
1566  if (nSelectedApps > 0)
1567  {
1571  }
1573  {
1575  }
1576 
1577  }
1578  break;
1579 
1580  case ID_UNINSTALL:
1583  break;
1584 
1585  case ID_MODIFY:
1588  break;
1589 
1590  case ID_REGREMOVE:
1592  break;
1593 
1594  case ID_REFRESH:
1596  break;
1597 
1598  case ID_RESETDB:
1601  break;
1602 
1603  case ID_HELP:
1604  MessageBoxW(L"Help not implemented yet", NULL, MB_OK);
1605  break;
1606 
1607  case ID_ABOUT:
1608  ShowAboutDialog();
1609  break;
1610 
1611  case ID_CHECK_ALL:
1612  m_ListView->CheckAll();
1613  break;
1614  }
1615  }
1616 
1618  {
1619  INT Count = m_ListView->GetItemCount() - 1;
1621 
1622  while (Count >= 0)
1623  {
1625  if (Info)
1626  {
1627  RegCloseKey(Info->hSubKey);
1628  delete Info;
1629  }
1630  Count--;
1631  }
1632  }
1633 
1634  static BOOL SearchPatternMatch(LPCWSTR szHaystack, LPCWSTR szNeedle)
1635  {
1636  if (!*szNeedle)
1637  return TRUE;
1638  /* TODO: Improve pattern search beyond a simple case-insensitive substring search. */
1639  return StrStrIW(szHaystack, szNeedle) != NULL;
1640  }
1641 
1643  {
1644  PINSTALLED_INFO ItemInfo;
1646  INT Index;
1647 
1648  if (!SearchPatternMatch(m_szName.GetString(), szSearchPattern))
1649  {
1650  RegCloseKey(Info->hSubKey);
1651  return TRUE;
1652  }
1653 
1654  ItemInfo = new INSTALLED_INFO(*Info);
1655  if (!ItemInfo)
1656  {
1657  RegCloseKey(Info->hSubKey);
1658  return FALSE;
1659  }
1660 
1661  Index = m_ListView->AddItem(ItemIndex, 0, m_szName.GetString(), (LPARAM) ItemInfo);
1662 
1663  /* Get version info */
1664  ItemInfo->GetApplicationString(L"DisplayVersion", szText);
1665  m_ListView->SetItemText(Index, 1, szText.GetString());
1666 
1667  /* Get comments */
1668  ItemInfo->GetApplicationString(L"Comments", szText);
1669  m_ListView->SetItemText(Index, 2, szText.GetString());
1670 
1671  return TRUE;
1672  }
1673 
1675  {
1676  INT Index;
1677  HICON hIcon = NULL;
1678 
1679  HIMAGELIST hImageListView = (HIMAGELIST)m_ListView->SendMessage(LVM_GETIMAGELIST, LVSIL_SMALL, 0);
1680 
1681  if (!SearchPatternMatch(Info->m_szName.GetString(), szSearchPattern) &&
1683  {
1684  return TRUE;
1685  }
1686 
1687  /* Load icon from file */
1688  ATL::CStringW szIconPath;
1689  szIconPath.Format(L"%lsicons\\%ls.ico", szFolderPath, Info->m_szName.GetString());
1690  hIcon = (HICON) LoadImageW(NULL,
1691  szIconPath.GetString(),
1692  IMAGE_ICON,
1695  LR_LOADFROMFILE);
1696 
1697  if (!hIcon || GetLastError() != ERROR_SUCCESS)
1698  {
1699  /* Load default icon */
1701  }
1702 
1703  Index = ImageList_AddIcon(hImageListView, hIcon);
1704  DestroyIcon(hIcon);
1705 
1706  Index = m_ListView->AddItem(Info->m_Category, Index, Info->m_szName.GetString(), (LPARAM) Info);
1707  m_ListView->SetImageList(hImageListView, LVSIL_SMALL);
1708  m_ListView->SetItemText(Index, 1, Info->m_szVersion.GetString());
1709  m_ListView->SetItemText(Index, 2, Info->m_szDesc.GetString());
1710  m_ListView->SetCheckState(Index, Info->m_IsSelected);
1711 
1712  return TRUE;
1713  }
1714 
1716  {
1717  CMainWindow* pThis = (CMainWindow*)param;
1718  return pThis->EnumInstalledAppProc(ItemIndex, m_szName, Info);
1719  }
1720 
1722  {
1723  CMainWindow* pThis = (CMainWindow*)param;
1724  return pThis->EnumAvailableAppProc(Info, szFolderPath);
1725  }
1726 
1728  {
1729  if (m_StatusBar)
1730  {
1731  ATL::CStringW szBuffer;
1732 
1734  m_StatusBar->SetText(szBuffer);
1735  }
1736  }
1737 
1739  {
1740  ATL::CStringW szBuffer1, szBuffer2;
1741  HIMAGELIST hImageListView;
1742  BOOL bWasInInstalled = IsInstalledEnum(SelectedEnumType);
1743 
1744  bUpdating = TRUE;
1746 
1747  if (EnumType < 0)
1748  {
1749  EnumType = SelectedEnumType;
1750  }
1751 
1752  //if previous one was INSTALLED purge the list
1753  //TODO: make the Installed category a separate class to avoid doing this
1754  if (bWasInInstalled)
1755  {
1757  }
1758 
1760 
1761  // Create new ImageList
1762  hImageListView = ImageList_Create(LISTVIEW_ICON_SIZE,
1765  0, 1);
1766  HIMAGELIST hImageListBuf = m_ListView->SetImageList(hImageListView, LVSIL_SMALL);
1767  if (hImageListBuf)
1768  {
1769  ImageList_Destroy(hImageListBuf);
1770  }
1771 
1772  if (IsInstalledEnum(EnumType))
1773  {
1774  if (!bWasInInstalled)
1775  {
1777  }
1778 
1780  ImageList_AddIcon(hImageListView, hIcon);
1781  DestroyIcon(hIcon);
1782 
1783  // Enum installed applications and updates
1786  }
1787  else if (IsAvailableEnum(EnumType))
1788  {
1789  if (bWasInInstalled)
1790  {
1792  }
1793 
1794  // Enum available applications
1795  m_AvailableApps.Enum(EnumType, s_EnumAvailableAppProc, this);
1796  }
1797 
1798  SelectedEnumType = EnumType;
1801 
1802  // Set automatic column width for program names if the list is not empty
1803  if (m_ListView->GetItemCount() > 0)
1804  {
1806  }
1807 
1808  bUpdating = FALSE;
1810  }
1811 
1812 public:
1814  {
1815  DWORD csStyle = CS_VREDRAW | CS_HREDRAW;
1816  static ATL::CWndClassInfo wc =
1817  {
1818  {
1819  sizeof(WNDCLASSEX),
1820  csStyle,
1822  0,
1823  0,
1824  NULL,
1825  LoadIconW(_AtlBaseModule.GetModuleInstance(), MAKEINTRESOURCEW(IDI_MAIN)),
1827  (HBRUSH) (COLOR_BTNFACE + 1),
1829  L"RAppsWnd",
1830  NULL
1831  },
1832  NULL, NULL, IDC_ARROW, TRUE, 0, _T("")
1833  };
1834  return wc;
1835  }
1836 
1838  {
1839  ATL::CStringW szWindowName;
1840  szWindowName.LoadStringW(IDS_APPTITLE);
1841 
1842  RECT r = {
1847  };
1848  r.right += r.left;
1849  r.bottom += r.top;
1850 
1852  }
1853 };
1854 
1856 {
1857  HACCEL KeyBrd;
1858  MSG Msg;
1859 
1860  CMainWindow* wnd = new CMainWindow();
1861  if (!wnd)
1862  return;
1863 
1864  hMainWnd = wnd->Create();
1865  if (!hMainWnd)
1866  return;
1867 
1868  /* Maximize it if we must */
1870  wnd->UpdateWindow();
1871 
1872  /* Load the menu hotkeys */
1874 
1875  /* Message Loop */
1876  while (GetMessageW(&Msg, NULL, 0, 0))
1877  {
1878  if (!TranslateAcceleratorW(hMainWnd, KeyBrd, &Msg))
1879  {
1882  }
1883  }
1884 
1885  delete wnd;
1886 }
BOOL bIsAscending
Definition: gui.cpp:443
HGDIOBJ WINAPI GetStockObject(_In_ int)
#define IDS_AINFO_VERSION
Definition: resource.h:151
#define WS_CLIPSIBLINGS
Definition: pedump.c:618
DWORD GetMaxButtonsWidth() const
Definition: gui.cpp:427
#define IDS_INFO_INSTALLDATE
Definition: resource.h:148
VOID ShowPopupMenu(HWND hwnd, UINT MenuID, UINT DefaultItem)
Definition: misc.cpp:74
CUiSplitPanel * m_VSplitter
Definition: gui.cpp:754
DWORD_PTR GetItemData(int i)
Definition: rosctrls.h:204
#define IDI_UNINSTALL
Definition: resource.h:7
INT GetSystemColorDepth()
Definition: gui.cpp:29
#define IDS_INFO_PUBLISHER
Definition: resource.h:134
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
static INT CALLBACK s_CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
Definition: gui.cpp:544
#define ILC_COLOR16
Definition: commctrl.h:341
#define MAKEINTRESOURCE
Definition: winuser.h:591
#define WS_EX_WINDOWEDGE
Definition: winuser.h:407
#define IDR_MAINMENU
Definition: resource.h:40
#define WM_SYSCOLORCHANGE
Definition: winuser.h:1608
VOID OnGetDispInfo(LPTOOLTIPTEXT lpttt)
Definition: gui.cpp:321
#define max(a, b)
Definition: svc.c:63
BOOL WINAPI TranslateMessage(_In_ const MSG *)
static HICON
Definition: imagelist.c:84
int iImage
Definition: commctrl.h:2339
HDWP WINAPI BeginDeferWindowPos(_In_ int)
#define TRUE
Definition: types.h:120
HWND SetFocus()
Definition: atlwin.h:1130
#define ID_REFRESH
Definition: resource.h:18
VOID ShowMainWindow(INT nShowCmd)
Definition: gui.cpp:1855
#define IMAGE_ICON
Definition: winuser.h:212
INT nLastHeaderID
Definition: gui.cpp:446
#define IDC_STATUSBAR
Definition: resource.h:14
#define IDS_STATUS_INSTALLED
Definition: resource.h:183
#define ID_SETTINGS
Definition: resource.h:78
#define LVCF_WIDTH
Definition: commctrl.h:2559
BOOL InitControls()
Definition: gui.cpp:975
#define LVSIL_SMALL
Definition: commctrl.h:2271
ATL::CStringW szSearchPattern
Definition: gui.cpp:774
#define SW_SHOWNOACTIVATE
Definition: winuser.h:768
CUiCollection & Second()
Definition: rosui.h:555
#define ERROR_SUCCESS
Definition: deptool.c:10
UINT uNewState
Definition: commctrl.h:3008
#define INT_MAX
Definition: limits.h:40
#define IDYES
Definition: winuser.h:829
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
#define TBSTYLE_EX_HIDECLIPPEDBUTTONS
Definition: commctrl.h:985
#define ID_REGREMOVE
Definition: resource.h:80
#define IDS_LANGUAGE_SINGLE
Definition: resource.h:201
#define LVCF_TEXT
Definition: commctrl.h:2560
VOID ShowButtonCaption()
Definition: gui.cpp:421
#define IDS_APPTITLE
Definition: resource.h:3
#define LVM_GETIMAGELIST
Definition: commctrl.h:2267
#define IDS_AINFO_AVAILABLEVERSION
Definition: resource.h:157
#define LVS_SHOWSELALWAYS
Definition: commctrl.h:2239
int GetSelectionMark()
Definition: rosctrls.h:156
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
BOOL WINAPI DestroyIcon(_In_ HICON)
Definition: cursoricon.c:2022
BOOL CreateStatusBar()
Definition: gui.cpp:839
#define SW_HIDE
Definition: winuser.h:762
#define IDS_CAT_DEVEL
Definition: resource.h:166
#define IDS_SELECT_ALL
Definition: resource.h:111
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
_In_ BOOLEAN Create
Definition: pstypes.h:511
#define LR_LOADFROMFILE
Definition: winuser.h:1082
#define IDS_APPS_COUNT
Definition: resource.h:91
#define LVS_REPORT
Definition: commctrl.h:2234
BOOL bUpdating
Definition: gui.cpp:772
#define _countof(array)
Definition: fontsub.cpp:30
#define IDS_AINFO_LICENSE
Definition: resource.h:155
virtual DWORD_PTR CountSizableChildren()
Definition: rosui.h:472
GLuint GLuint GLsizei count
Definition: gl.h:1545
#define IDS_INFO_INSTALLSRC
Definition: resource.h:145
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1827
BOOL CreateTreeView()
Definition: gui.cpp:859
#define LVN_ITEMCHANGED
Definition: commctrl.h:3103
VOID InsertLicenseInfo(CAvailableApplicationInfo *Info)
Definition: gui.cpp:111
#define IDS_AINFO_URLSITE
Definition: resource.h:154
INT Height
Definition: winmain.h:17
void SetRedraw(BOOL redraw)
Definition: rosctrls.h:27
#define LVCFMT_RIGHT
Definition: commctrl.h:2571
INT m_MinFirst
Definition: rosui.h:531
LPARAM lParam
Definition: commctrl.h:2430
#define CALLBACK
Definition: compat.h:27
LONG WINAPI RegDeleteKeyW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey)
Definition: reg.c:1237
#define TOOLBARCLASSNAMEW
Definition: commctrl.h:915
#define IDS_UNABLE_TO_REMOVE
Definition: resource.h:103
ATL::CSimpleArray< CAvailableApplicationInfo > GetCheckedItems()
Definition: gui.cpp:633
#define LVS_EX_FULLROWSELECT
Definition: commctrl.h:2706
LONG top
Definition: windef.h:292
HANDLE HWND
Definition: compat.h:13
WORD dmDriverExtra
Definition: wingdi.h:1616
const INT m_Width
Definition: gui.cpp:721
#define IDS_TOOLTIP_EXIT
Definition: resource.h:123
static BOOL CALLBACK s_EnumInstalledAppProc(INT ItemIndex, ATL::CStringW &m_szName, PINSTALLED_INFO Info, PVOID param)
Definition: gui.cpp:1715
#define IDS_INFO_README
Definition: resource.h:137
#define IDS_WELCOME_TITLE
Definition: resource.h:92
int GetNextItem(int i, WORD flags)
Definition: rosctrls.h:161
#define IDS_WELCOME_TEXT
Definition: resource.h:93
#define LVCFMT_LEFT
Definition: commctrl.h:2570
#define LPNMTREEVIEW
Definition: commctrl.h:3615
~CSideTreeView()
Definition: gui.cpp:711
HTREEITEM AddCategory(HTREEITEM hRootItem, UINT TextIndex, UINT IconIndex)
Definition: gui.cpp:678
#define IDS_CAT_OFFICE
Definition: resource.h:175
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1059
_Inout_ __drv_aliasesMem PSLIST_ENTRY _Inout_ PSLIST_ENTRY _In_ ULONG Count
Definition: exfuncs.h:1015
#define ZeroMemory
Definition: winbase.h:1635
#define CS_HREDRAW
Definition: winuser.h:648
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
VOID SetWelcomeText()
Definition: gui.cpp:245
void __cdecl Format(UINT nFormatID,...)
Definition: cstringt.h:668
#define IDI_CAT_DEVEL
Definition: resource.h:20
#define IDI_CATEGORY
Definition: resource.h:13
#define HDF_SORTUP
Definition: commctrl.h:709
#define CFE_LINK
Definition: richedit.h:411
BOOL CreateHSplitter()
Definition: gui.cpp:904
BOOL WINAPI SetWindowTextW(_In_ HWND, _In_opt_ LPCWSTR)
#define BTNS_AUTOSIZE
Definition: commctrl.h:976
UINT_PTR WPARAM
Definition: windef.h:207
#define ID_RESETDB
Definition: resource.h:81
#define WS_CHILD
Definition: pedump.c:617
INT SelectedEnumType
Definition: gui.cpp:775
LONG left
Definition: windef.h:291
DWORD GetIdealSize(BOOL useHeight, LPSIZE size)
Definition: rosctrls.h:381
DWORD dmBitsPerPel
Definition: wingdi.h:1642
#define IDS_SEARCH_TEXT
Definition: resource.h:87
#define IDS_CAT_VIDEO
Definition: resource.h:179
BOOL GetApplicationString(LPCWSTR lpKeyName, ATL::CStringW &String)
Definition: installed.cpp:15
int32_t INT_PTR
Definition: typedefs.h:62
int GetItemCount()
Definition: rosctrls.h:121
#define WS_CLIPCHILDREN
Definition: pedump.c:619
CSideTreeView()
Definition: gui.cpp:665
CAvailableApplicationInfo * GetSelectedData()
Definition: gui.cpp:652
VOID FreeLogs()
Definition: misc.cpp:232
LONG right
Definition: windef.h:293
BOOL Maximized
Definition: winmain.h:13
#define IDS_CAT_FINANCE
Definition: resource.h:170
HWND Create(HWND hWndParent, _U_RECT rect, LPCTSTR szWindowName=NULL, DWORD dwStyle=0, DWORD dwExStyle=0, _U_MENUorID MenuOrID=0U, LPVOID lpCreateParam=NULL)
Definition: rosctrls.h:8
const INT m_Height
Definition: gui.cpp:722
DWORD SetButtonStructSize()
Definition: rosctrls.h:284
#define ID_UNINSTALL
Definition: resource.h:72
DWORD m_dButtonsWidthMax
Definition: gui.cpp:264
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
#define DWORD
Definition: nt_native.h:44
int32_t INT
Definition: typedefs.h:56
static int Link(const char **args)
Definition: vfdcmd.c:2414
DWORD WINAPI GetSysColor(_In_ int)
WPARAM wParam
Definition: combotst.c:138
#define IDS_AVAILABLEFORINST
Definition: resource.h:96
#define IDR_APPLICATIONMENU
Definition: resource.h:67
struct TraceInfo Info
struct tagNMHDR * LPNMHDR
#define ENUM_CURRENT_SETTINGS
Definition: winuser.h:179
BOOL ShowInstalledAppInfo(PINSTALLED_INFO Info)
Definition: gui.cpp:206
#define IDI_UPDATE_DB
Definition: resource.h:14
#define ILC_COLOR4
Definition: commctrl.h:339
#define IDS_INSTALLED
Definition: resource.h:95
#define LVFI_PARAM
Definition: commctrl.h:2408
BOOL CALLBACK EnumInstalledAppProc(INT ItemIndex, ATL::CStringW &m_szName, PINSTALLED_INFO Info)
Definition: gui.cpp:1642
BOOL ProcessWindowMessage(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam, LRESULT &theResult, DWORD dwMapId)
Definition: gui.cpp:1122
VOID ColumnClick(LPNMLISTVIEW pnmv)
Definition: gui.cpp:471
BOOL WINAPI ImageList_Destroy(HIMAGELIST himl)
Definition: imagelist.c:928
DWORD SetExtendedListViewStyle(DWORD dw, DWORD dwMask=0)
Definition: rosctrls.h:47
#define ILC_COLOR32
Definition: commctrl.h:343
#define CFE_BOLD
Definition: richedit.h:406
BOOL IsSelectedNodeInstalled()
Definition: gui.cpp:1453
#define IDS_INFO_COMMENTS
Definition: resource.h:143
#define IDI_CAT_ENGINEER
Definition: resource.h:23
virtual HDWP OnParentSize(RECT parentRect, HDWP hDwp)
Definition: rosui.h:417
#define LVIF_TEXT
Definition: commctrl.h:2281
#define LVCF_SUBITEM
Definition: commctrl.h:2561
ATL::CSimpleArray< CAvailableApplicationInfo > GetSelected() const
Definition: available.cpp:427
BOOL bSearchEnabled
Definition: gui.cpp:771
void SaveSettings(void)
Definition: settings.c:113
VOID InitApplicationsList()
Definition: gui.cpp:787
LPWSTR pLink
Definition: gui.cpp:767
VOID RemoveSelectedAppFromRegistry()
Definition: gui.cpp:1067
VOID FreeInstalledAppList()
Definition: gui.cpp:1617
VOID OnSize(HWND hwnd, WPARAM wParam, LPARAM lParam)
Definition: gui.cpp:1014
#define IDS_INSTALL
Definition: resource.h:9
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define BTNS_BUTTON
Definition: commctrl.h:970
HWND Create(HWND hwndParent)
Definition: gui.cpp:357
#define EN_KILLFOCUS
Definition: winuser.h:2007
BOOL WINAPI EnableMenuItem(_In_ HMENU, _In_ UINT, _In_ UINT)
#define IDS_MODIFY
Definition: resource.h:90
#define EN_SETFOCUS
Definition: winuser.h:2009
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
BOOL CreateSearchBar()
Definition: gui.cpp:919
struct @1576 Msg[]
HIMAGELIST WINAPI ImageList_Create(INT cx, INT cy, UINT flags, INT cInitial, INT cGrow)
Definition: imagelist.c:804
DWORD AddButtons(int count, TBBUTTON *buttons)
Definition: rosctrls.h:325
BOOL DeleteAllItems()
Definition: rosctrls.h:126
INT Append(T *ptr)
Definition: rosui.h:79
void ReleaseBuffer(_In_ int nNewLength=-1)
Definition: atlsimpstr.h:372
#define IDI_CAT_OFFICE
Definition: resource.h:29
BOOL SetItemText(int i, int subItem, LPCWSTR text)
Definition: rosctrls.h:186
#define MB_YESNO
Definition: winuser.h:811
static const WCHAR szText[]
Definition: dialog.c:139
#define ListView_SetColumnWidth(hwnd, iCol, cx)
Definition: commctrl.h:2620
LRESULT WINAPI DispatchMessageW(_In_ const MSG *)
#define IDI_CAT_VIDEO
Definition: resource.h:33
const INT m_iToolbarHeight
Definition: gui.cpp:263
BOOL EnumAvailableAppProc(CAvailableApplicationInfo *Info, LPCWSTR szFolderPath)
Definition: gui.cpp:1674
unsigned int BOOL
Definition: ntddk_ex.h:94
LPWSTR WINAPI StrStrIW(LPCWSTR lpszStr, LPCWSTR lpszSearch)
Definition: string.c:384
HANDLE WINAPI LoadImageW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _In_ UINT, _In_ int, _In_ int, _In_ UINT)
Definition: cursoricon.c:2172
VOID InsertLanguageInfo(CAvailableApplicationInfo *Info)
Definition: gui.cpp:134
HIMAGELIST hImageTreeView
Definition: gui.cpp:662
#define IDS_STATUS_UPDATE_AVAILABLE
Definition: resource.h:186
UINT_PTR SetTimer(UINT_PTR nIDEvent, UINT nElapse, void(CALLBACK *lpfnTimer)(HWND, UINT, UINT_PTR, DWORD)=NULL)
Definition: atlwin.h:1190
BOOL WINAPI EndDeferWindowPos(_In_ HDWP)
HTREEITEM AddItem(HTREEITEM hParent, ATL::CStringW &Text, INT Image, INT SelectedImage, LPARAM lParam)
Definition: gui.cpp:673
#define HDI_FORMAT
Definition: commctrl.h:690
BOOL Expand(HTREEITEM item, DWORD action)
Definition: rosctrls.h:592
LPARAM lParam
Definition: commctrl.h:2340
#define ILC_COLOR
Definition: commctrl.h:337
CUiAlignment m_HorizontalAlignment
Definition: rosui.h:238
#define Header_GetItem(hwndHD, i, phdi)
Definition: commctrl.h:736
INT AddItem(INT ItemIndex, INT IconIndex, LPCWSTR lpText, LPARAM lParam)
Definition: gui.cpp:529
#define LISTVIEW_ICON_SIZE
Definition: gui.cpp:26
#define TTN_GETDISPINFO
Definition: commctrl.h:1850
#define TB_ENABLEBUTTON
Definition: commctrl.h:1014
#define CW_USEDEFAULT
Definition: winuser.h:225
BOOL KillTimer(UINT_PTR nIDEvent)
Definition: atlwin.h:908
BOOL GetWindowRect(LPRECT lpRect) const
Definition: atlwin.h:764
VOID FreeCachedEntries()
Definition: available.cpp:249
#define WM_SIZING
Definition: winuser.h:1789
HACCEL WINAPI LoadAcceleratorsW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
virtual VOID OnLink(ENLINK *Link)
Definition: gui.cpp:1426
#define IDS_UNINSTALL
Definition: resource.h:89
CAppsListView()
Definition: gui.cpp:449
BOOL GetCheckState(INT item)
Definition: gui.cpp:587
#define TB_GETEXTENDEDSTYLE
Definition: commctrl.h:1163
#define LVS_SORTASCENDING
Definition: commctrl.h:2240
INT nSelectedApps
Definition: gui.cpp:769
smooth NULL
Definition: ftsmooth.c:416
BOOL EnumInstalledApplications(INT EnumType, BOOL IsUserKey, APPENUMPROC lpEnumProc, PVOID param)
Definition: installed.cpp:62
static HWND hwndParent
Definition: cryptui.c:300
#define MB_ICONQUESTION
Definition: winuser.h:783
VOID SetSelected(INT item, BOOL value)
Definition: gui.cpp:601
SETTINGS_INFO SettingsInfo
Definition: winmain.cpp:18
UINT uOldState
Definition: commctrl.h:3009
LONG_PTR LPARAM
Definition: windef.h:208
#define LPRECT
Definition: precomp.h:28
#define ListView_GetItemCount(hwnd)
Definition: commctrl.h:2279
DWORD AutoSize()
Definition: rosctrls.h:371
#define IDS_SELECTEDFORINST
Definition: resource.h:114
BOOL IsAvailableEnum(INT x)
Definition: defines.h:64
#define IDS_INFO_CONTACT
Definition: resource.h:140
VOID InsertVersionInfo(CAvailableApplicationInfo *Info)
Definition: gui.cpp:85
BOOL WINAPI EnumDisplaySettingsW(LPCWSTR lpszDeviceName, DWORD iModeNum, LPDEVMODEW lpDevMode)
Definition: display.c:408
#define ID_ABOUT
Definition: charmap.c:18
#define EM_SETBKGNDCOLOR
Definition: richedit.h:100
#define LVNI_FOCUSED
Definition: commctrl.h:2395
switch(r->id)
Definition: btrfs.c:2932
#define IDS_CAT_INTERNET
Definition: resource.h:173
#define LVIS_STATEIMAGEMASK
Definition: commctrl.h:2298
HIMAGELIST SetImageList(HIMAGELIST himl)
Definition: rosctrls.h:417
INT m_MinSecond
Definition: rosui.h:532
void GetItemText(int iItem, int iSubItem, LPTSTR pszText, int cchTextMax)
Definition: rosctrls.h:221
BOOL CreateToolbar()
Definition: gui.cpp:849
HIMAGELIST SetImageList()
Definition: gui.cpp:700
#define b
Definition: ke_i.h:79
static ATL::CWndClassInfo & GetWndClassInfo()
Definition: gui.cpp:1813
#define WM_DESTROY
Definition: winuser.h:1591
WCHAR szSelectAll[MAX_STR_LEN]
Definition: gui.cpp:269
#define IDS_APP_DESCRIPTION
Definition: resource.h:129
WCHAR szModifyBtn[MAX_STR_LEN]
Definition: gui.cpp:268
#define IDS_CAT_DRIVERS
Definition: resource.h:167
HWND Create(HWND hwndParent, HMENU hMenu)
Definition: rosctrls.h:455
#define IDI_CAT_OTHER
Definition: resource.h:30
CUiSplitPanel * m_HSplitter
Definition: gui.cpp:755
BOOL SelectItem(HTREEITEM item, DWORD action=TVGN_CARET)
Definition: rosctrls.h:597
HWND Create(HWND hwndParent)
Definition: rosui.h:790
#define LPTOOLTIPTEXT
Definition: commctrl.h:1862
#define CS_VREDRAW
Definition: winuser.h:653
BOOL WINAPI SystemParametersInfoW(_In_ UINT, _In_ UINT, _Inout_opt_ PVOID, _In_ UINT)
#define IDS_TOOLTIP_MODIFY
Definition: resource.h:120
HMENU GetMenu() const
Definition: atlwin.h:636
HWND GetWindow()
Definition: rosui.h:454
#define EVENTLOG_SUCCESS
Definition: winnt_old.h:2629
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
#define _T(x)
Definition: vfdio.h:22
VOID OnCommand(WPARAM wParam, LPARAM lParam)
Definition: gui.cpp:1472
static const TBBUTTON Buttons[]
Definition: mplay32.c:41
GLsizeiptr size
Definition: glext.h:5919
#define GetProcessHeap()
Definition: compat.h:395
#define BTNS_SEP
Definition: commctrl.h:971
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
BOOL WriteLogMessage(WORD wType, DWORD dwEventID, LPCWSTR lpMsg)
Definition: misc.cpp:241
VOID AddImageToImageList(HIMAGELIST hImageList, UINT ImageIndex)
Definition: gui.cpp:271
VOID ShowAboutDialog()
Definition: aboutdlg.cpp:22
BOOL m_DynamicFirst
Definition: rosui.h:530
#define IDS_CAT_OTHER
Definition: resource.h:176
BOOL Enum(INT EnumType, AVAILENUMPROC lpEnumProc, PVOID param)
Definition: available.cpp:323
int WINAPI MessageBoxW(_In_opt_ HWND, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _In_ UINT)
__wchar_t WCHAR
Definition: xmlstorage.h:180
VOID SetCheckState(INT item, BOOL fCheck)
Definition: gui.cpp:592
#define WM_SIZE
Definition: winuser.h:1593
#define IDS_STATUS_NOTINSTALLED
Definition: resource.h:184
#define IDS_TOOLTIP_REFRESH
Definition: resource.h:50
BOOL bHasCheckboxes
Definition: gui.cpp:444
#define ILC_COLOR24
Definition: commctrl.h:342
#define TVN_SELCHANGED
Definition: commctrl.h:3707
#define WM_TIMER
Definition: winuser.h:1724
LPWSTR pszText
Definition: commctrl.h:2337
BOOL CreateLayout()
Definition: gui.cpp:930
#define MF_ENABLED
Definition: winuser.h:128
#define WM_CLOSE
Definition: winuser.h:1603
#define INDEXTOSTATEIMAGEMASK(i)
Definition: commctrl.h:2300
#define IDS_AINFO_LANGUAGES
Definition: resource.h:158
WORD dmSize
Definition: wingdi.h:1615
BOOL AddColumn(INT Index, ATL::CStringW &Text, INT Width, INT Format)
Definition: gui.cpp:509
#define IDI_CAT_TOOLS
Definition: resource.h:32
GLfloat param
Definition: glext.h:5796
#define MAX_PATH
Definition: compat.h:26
BOOL UpdateWindow()
Definition: atlwin.h:1277
#define IDI_CAT_EDU
Definition: resource.h:22
HWND Create(HWND hwndParent)
Definition: gui.cpp:733
PCXSTR GetString() const
Definition: atlsimpstr.h:361
#define EM_SETSEL
Definition: winuser.h:2000
CUiCollection & First()
Definition: rosui.h:554
#define LVIF_IMAGE
Definition: commctrl.h:2282
static const UCHAR Index[8]
Definition: usbohci.c:18
LPWSTR pszText
Definition: commctrl.h:2539
#define LVS_SINGLESEL
Definition: commctrl.h:2238
unsigned short WORD
Definition: ntddk_ex.h:93
#define HDF_SORTDOWN
Definition: commctrl.h:710
VOID GetWindowTextW(ATL::CStringW &szText)
Definition: rosui.h:501
unsigned long DWORD
Definition: ntddk_ex.h:95
#define ID_COPY_LINK
Definition: resource.h:77
#define IDS_INFO_VERSION
Definition: resource.h:132
#define IDI_CAT_INTERNET
Definition: resource.h:27
HCURSOR WINAPI LoadCursorW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
Definition: cursoricon.c:2074
#define HOTKEYS
Definition: resource.h:210
#define SIZE_MINIMIZED
Definition: winuser.h:2481
#define TBSTYLE_TOOLTIPS
Definition: commctrl.h:961
BOOL m_Horizontal
Definition: rosui.h:529
#define IDS_LANGUAGE_AVAILABLE_TRANSLATION
Definition: resource.h:198
VOID LoadAndInsertText(UINT uStringID, DWORD StringFlags)
Definition: gui.cpp:73
UINT GetItemState(int i, UINT mask)
Definition: rosctrls.h:173
INT WINAPI ImageList_AddIcon(HIMAGELIST himl, HICON hIcon)
Definition: imagelist.c:540
#define WM_RBUTTONUP
Definition: winuser.h:1762
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
BOOL IsInstalledEnum(INT x)
Definition: defines.h:69
#define ID_CHECK_ALL
Definition: resource.h:82
#define TVE_EXPAND
Definition: commctrl.h:3395
#define TVI_ROOT
Definition: commctrl.h:3340
#define DEFAULT_GUI_FONT
Definition: wingdi.h:908
CUiWindow< CSearchBar > * m_SearchBar
Definition: gui.cpp:764
INT CompareFunc(LPARAM lParam1, LPARAM lParam2, INT iSubItem)
Definition: gui.cpp:550
UINT mask
Definition: commctrl.h:2332
#define IDI_MODIFY
Definition: resource.h:9
static const WCHAR IconIndex[]
Definition: install.c:51
#define IDS_CAT_LIBS
Definition: resource.h:174
int WINAPI TranslateAcceleratorW(_In_ HWND, _In_ HACCEL, _In_ LPMSG)
void AddItem(DWORD, DWORD, DWORD, DWORD, int)
Definition: toolspage.c:25
HWND hMainWnd
Definition: magnifier.c:32
LRESULT OnSize(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: winproc.cpp:317
int InsertItem(const LV_ITEM *pitem)
Definition: rosctrls.h:96
WCHAR szInstallBtn[MAX_STR_LEN]
Definition: gui.cpp:266
VOID DestroyImageList()
Definition: gui.cpp:705
static const WCHAR L[]
Definition: oid.c:1250
#define IDS_TOOLTIP_UNINSTALL
Definition: resource.h:119
static BOOL SearchPatternMatch(LPCWSTR szHaystack, LPCWSTR szNeedle)
Definition: gui.cpp:1634
HWND WINAPI CreateWindowExW(_In_ DWORD dwExStyle, _In_opt_ LPCWSTR lpClassName, _In_opt_ LPCWSTR lpWindowName, _In_ DWORD dwStyle, _In_ int X, _In_ int Y, _In_ int nWidth, _In_ int nHeight, _In_opt_ HWND hWndParent, _In_opt_ HMENU hMenu, _In_opt_ HINSTANCE hInstance, _In_opt_ LPVOID lpParam)
#define LVS_EX_CHECKBOXES
Definition: commctrl.h:2703
#define IDS_CAT_THEMES
Definition: resource.h:180
#define CFE_ITALIC
Definition: richedit.h:407
#define IDI_MAIN
Definition: resource.h:4
#define SB_SETTEXT
Definition: commctrl.h:1921
struct _IMAGELIST * HIMAGELIST
Definition: commctrl.h:309
HWND Create()
Definition: gui.cpp:1837
#define COLOR_BTNFACE
Definition: winuser.h:918
#define MB_ICONERROR
Definition: winuser.h:781
const DOCKBAR PVOID HWND hParent
Definition: tooldock.h:22
VOID HideButtonCaption()
Definition: gui.cpp:415
VOID UpdateStatusBarText()
Definition: gui.cpp:1727
#define ILC_MASK
Definition: commctrl.h:336
static VOID SetImageList(HWND hwnd)
Definition: mplay32.c:238
#define IDS_CAT_SCIENCE
Definition: resource.h:177
static LRESULT CALLBACK StartWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: atlwin.h:1529
VOID InsertText(LPCWSTR lpszText, DWORD dwEffects)
Definition: crichedit.h:72
HWND m_hWnd
Definition: atlwin.h:268
#define IDS_CAT_GRAPHICS
Definition: resource.h:172
BOOL UninstallSelectedApp(BOOL bModify)
Definition: gui.cpp:1105
HWND Create(HWND hwndParent)
Definition: crichedit.h:95
#define IDS_LICENSE_FREEWARE
Definition: resource.h:194
BOOL GetItem(TV_ITEM *pitem)
Definition: rosctrls.h:538
HMENU WINAPI GetSubMenu(_In_ HMENU, _In_ int)
VOID CreateSettingsDlg(HWND hwnd)
#define CFM_LINK
Definition: richedit.h:337
#define WM_COMMAND
Definition: winuser.h:1722
#define IDS_CAT_AUDIO
Definition: resource.h:165
CAppsListView * lvw
Definition: gui.cpp:438
BOOL FindItem(int iStart, const LV_FINDINFO *plvfi)
Definition: rosctrls.h:116
HWND hwndFrom
Definition: winuser.h:3131
#define NM_CLICK
Definition: commctrl.h:130
#define IDI_EXIT
Definition: resource.h:5
CSearchBar()
Definition: gui.cpp:724
GLsizei const GLfloat * value
Definition: glext.h:6069
#define IDS_INFO_UNINSTALLSTR
Definition: resource.h:146
static BOOL ForceUpdateAppsDB()
Definition: available.cpp:317
CUiAlignment m_VerticalAlignment
Definition: rosui.h:239
#define IDS_AINFO_SIZE
Definition: resource.h:153
#define ID_EXIT
Definition: resource.h:10
VOID CopyTextToClipboard(LPCWSTR lpszText)
Definition: misc.cpp:48
#define IDS_CAT_EDU
Definition: resource.h:168
BOOL AddColumn(INT Index, LPWSTR lpText, INT Width, INT Format)
Definition: gui.cpp:514
#define TVIF_HANDLE
Definition: commctrl.h:3242
#define IDS_CAT_ENGINEER
Definition: resource.h:169
CAvailableApps m_AvailableApps
Definition: gui.cpp:765
TCHAR szAppName[128]
Definition: solitaire.cpp:16
#define IDS_APPLICATIONS
Definition: resource.h:98
#define IDS_LICENSE_TRIAL
Definition: resource.h:195
#define IDS_LANGUAGE_AVAILABLE_PLACEHOLDER
Definition: resource.h:203
#define IDS_AINFO_URLDOWNLOAD
Definition: resource.h:156
#define IDS_INFO_UPDATEINFO
Definition: resource.h:141
#define GWL_STYLE
Definition: winuser.h:846
#define LVNI_ALL
Definition: commctrl.h:2394
bool IsEmpty() const
Definition: atlsimpstr.h:379
BOOL CreateListView()
Definition: gui.cpp:869
VOID SetText(LPCWSTR lpszText)
Definition: rosctrls.h:450
#define SEARCH_TIMER_ID
Definition: gui.cpp:25
INSTALLED_INFO * PINSTALLED_INFO
Definition: installed.h:15
INT m_Pos
Definition: rosui.h:528
#define TV_ITEM
Definition: commctrl.h:3272
#define LVCF_FMT
Definition: commctrl.h:2558
#define IDS_APP_REG_REMOVE
Definition: resource.h:101
#define ID_SEARCH
Definition: resource.h:83
VOID UpdateApplicationsList(INT EnumType)
Definition: gui.cpp:1738
HINSTANCE hInst
Definition: dxdiag.c:13
HWND Create(HWND hwndParent)
Definition: gui.cpp:571
#define IDI_CAT_LIBS
Definition: resource.h:28
static ATOM item
Definition: dde.c:856
#define WS_EX_CLIENTEDGE
Definition: winuser.h:384
BOOL ShowWindow(int nCmdShow)
Definition: atlwin.h:1265
HIMAGELIST InitImageList()
Definition: gui.cpp:289
void SetItemState(int i, UINT state, UINT mask)
Definition: rosctrls.h:178
#define NM_DBLCLK
Definition: commctrl.h:131
#define ID_INSTALL
Definition: resource.h:71
#define LVSCW_AUTOSIZE
Definition: commctrl.h:2616
VOID LoadAndInsertText(UINT uStringID, const ATL::CStringW &szText, DWORD StringFlags, DWORD TextFlags)
Definition: gui.cpp:60
#define IDS_TOOLTIP_UPDATE_DB
Definition: resource.h:124
#define IDS_LANGUAGE_MORE_PLACEHOLDER
Definition: resource.h:202
CMainToolbar * m_Toolbar
Definition: gui.cpp:757
struct tagNMLISTVIEW * LPNMLISTVIEW
HICON hIcon
Definition: msconfig.c:44
#define IDI_CAT_GRAPHICS
Definition: resource.h:26
#define NM_RCLICK
Definition: commctrl.h:133
#define IDS_WELCOME_URL
Definition: resource.h:94
#define EN_LINK
Definition: richedit.h:202
#define IDS_INFO_PRODUCTID
Definition: resource.h:139
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define WM_LBUTTONUP
Definition: winuser.h:1759
#define LR_CREATEDIBSECTION
Definition: winuser.h:1088
#define IDS_TOOLTIP_SETTINGS
Definition: resource.h:121
#define IDI_INSTALL
Definition: resource.h:6
#define GET_INFO(a, b, c, d)
#define IDI_CHECK_ALL
Definition: resource.h:15
#define list
Definition: rosglue.h:35
#define IDS_INFO_HELPPHONE
Definition: resource.h:136
#define IDI_CAT_THEMES
Definition: resource.h:34
HRESULT GetString(REFGUID guidKey, [out, size_is(cchBufSize)] LPWSTR pwszValue, UINT32 cchBufSize, [in, out, ptr] UINT32 *pcchLength)
CAppsListView * m_ListView
Definition: gui.cpp:758
static void __cdecl CopyChars(_Out_writes_to_(nDestLen, nChars) XCHAR *pchDest, _In_ size_t nDestLen, _In_reads_opt_(nChars) const XCHAR *pchSrc, _In_ int nChars)
Definition: atlsimpstr.h:423
#define min(a, b)
Definition: monoChain.cc:55
#define IDI_CAT_FINANCE
Definition: resource.h:24
unsigned int UINT
Definition: ndis.h:50
#define IDS_UPDATES
Definition: resource.h:97
LRESULT OnCommand(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: winproc.cpp:385
#define IDI_CAT_DRIVERS
Definition: resource.h:21
#define IDR_LINKMENU
Definition: resource.h:66
#define MB_OK
Definition: winuser.h:784
#define IDS_LANGUAGE_NO_TRANSLATION
Definition: resource.h:199
#define LVN_COLUMNCLICK
Definition: commctrl.h:3111
#define IDS_LANGUAGE_ENGLISH_TRANSLATION
Definition: resource.h:200
#define IDS_INFORMATION
Definition: resource.h:102
#define IDS_APP_NAME
Definition: resource.h:127
BOOL WINAPI GetMessageW(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT)
#define ID_OPEN_LINK
Definition: resource.h:76
#define IDS_LICENSE_OPENSOURCE
Definition: resource.h:193
CMainToolbar()
Definition: gui.cpp:317
CUiCollection & Children()
Definition: rosui.h:355
#define WM_SETFONT
Definition: winuser.h:1632
BOOL DownloadListOfApplications(const ATL::CSimpleArray< CAvailableApplicationInfo > &AppsList, BOOL bIsModal)
Definition: loaddlg.cpp:868
#define MAX_STR_LEN
Definition: defines.h:33
CMainWindow()
Definition: gui.cpp:778
BOOL ShowAvailableAppInfo(CAvailableApplicationInfo *Info)
Definition: gui.cpp:189
#define IDI_CAT_AUDIO
Definition: resource.h:19
UINT mask
Definition: commctrl.h:669
HWND Create(HWND hwndParent)
Definition: rosctrls.h:476
#define IDI_CAT_GAMES
Definition: resource.h:25
#define IDC_ARROW
Definition: winuser.h:682
#define IDS_APP_INST_VERSION
Definition: resource.h:128
VOID CheckAll()
Definition: gui.cpp:624
VOID ShowAppInfo(INT Index)
Definition: gui.cpp:992
#define TVSIL_NORMAL
Definition: commctrl.h:3415
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define LVM_GETHEADER
Definition: commctrl.h:2622
#define IDS_CAT_TOOLS
Definition: resource.h:178
#define SendMessage
Definition: winuser.h:5744
#define LVIF_PARAM
Definition: commctrl.h:2283
#define TBSTATE_ENABLED
Definition: commctrl.h:946
#define WM_CREATE
Definition: winuser.h:1590
HINSTANCE WINAPI ShellExecuteW(HWND hwnd, LPCWSTR lpVerb, LPCWSTR lpFile, LPCWSTR lpParameters, LPCWSTR lpDirectory, INT nShowCmd)
Definition: shlexec.cpp:2208
HMENU WINAPI LoadMenuW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
#define IDS_INFO_MODIFYPATH
Definition: resource.h:147
#define WS_OVERLAPPEDWINDOW
Definition: pedump.c:637
BOOL bSaveWndPos
Definition: winmain.h:7
#define HIWORD(l)
Definition: typedefs.h:246
#define IDS_INFO_INSTLOCATION
Definition: resource.h:144
#define TBSTYLE_EX_MIXEDBUTTONS
Definition: commctrl.h:984
#define ILC_COLOR8
Definition: commctrl.h:340
#define IDI_CAT_SCIENCE
Definition: resource.h:31
HICON WINAPI LoadIconW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
Definition: cursoricon.c:2044
VOID InitCategoriesList()
Definition: gui.cpp:805
LONG bottom
Definition: windef.h:294
int InsertColumn(int iCol, LV_COLUMN *pcol)
Definition: rosctrls.h:52
HIMAGELIST SetImageList(HIMAGELIST himl, int iImageList)
Definition: rosctrls.h:91
#define LVS_NOSORTHEADER
Definition: commctrl.h:2257
#define IDS_INFO_HELPLINK
Definition: resource.h:135
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
WNDCLASSEXA WNDCLASSEX
Definition: winuser.h:5620
#define TVIF_PARAM
Definition: commctrl.h:3240
#define GetWindowLongPtr
Definition: treelist.c:73
#define MF_GRAYED
Definition: winuser.h:129
static BOOL CALLBACK s_EnumAvailableAppProc(CAvailableApplicationInfo *Info, LPCWSTR szFolderPath, PVOID param)
Definition: gui.cpp:1721
#define Header_SetItem(hwndHD, i, phdi)
Definition: commctrl.h:743
int Compare(_In_z_ PCXSTR psz) const
Definition: cstringt.h:605
#define IDS_INFO_REGOWNER
Definition: resource.h:138
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define LVIF_STATE
Definition: commctrl.h:2284
#define IDI_APPS
Definition: resource.h:11
LONG_PTR LRESULT
Definition: windef.h:209
CUiMargin m_Margin
Definition: rosui.h:236
BOOL CreateVSplitter()
Definition: gui.cpp:889
#define ID_HELP
Definition: resource.h:28
Arabic default style
Definition: afstyles.h:93
#define EM_GETSELTEXT
Definition: richedit.h:95
WCHAR szUninstallBtn[MAX_STR_LEN]
Definition: gui.cpp:267
#define ES_LEFT
Definition: pedump.c:664
#define WS_VISIBLE
Definition: pedump.c:620
#define IDS_AINFO_DESCRIPTION
Definition: resource.h:152
BOOL CreateRichEdit()
Definition: gui.cpp:879
#define TREEVIEW_ICON_SIZE
Definition: gui.cpp:27
VOID SetText(LPCWSTR lpszText, DWORD dwEffects)
Definition: crichedit.h:84
#define IDI_REFRESH
Definition: resource.h:10
#define SW_MAXIMIZE
Definition: winuser.h:766
BOOL DownloadApplication(CAvailableApplicationInfo *pAppInfo, BOOL bIsModal)
Definition: loaddlg.cpp:885
VOID SetText(LPCWSTR lpszText)
Definition: gui.cpp:728
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:60
#define IDI_SETTINGS
Definition: resource.h:8
CUiPanel * m_ClientPanel
Definition: gui.cpp:753
virtual DWORD_PTR CountSizableChildren()
Definition: rosui.h:403
#define IDS_CAT_GAMES
Definition: resource.h:171
#define TBSTYLE_LIST
Definition: commctrl.h:965
LPARAM lParam
Definition: combotst.c:139
virtual HDWP OnParentSize(RECT parentRect, HDWP hDwp)
Definition: rosui.h:477
#define IDI_SELECTEDFORINST
Definition: resource.h:16
#define SBT_NOBORDERS
Definition: commctrl.h:1943
#define ES_AUTOHSCROLL
Definition: pedump.c:672
#define LOWORD(l)
Definition: pedump.c:82
#define ID_MODIFY
Definition: resource.h:75
size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define HeapFree(x, y, z)
Definition: compat.h:394
__analysis_noreturn void WINAPI PostQuitMessage(_In_ int)
int fmt
Definition: commctrl.h:674
#define TBSTYLE_FLAT
Definition: commctrl.h:964
#define LVIS_FOCUSED
Definition: commctrl.h:2290
#define TB_SETEXTENDEDSTYLE
Definition: commctrl.h:1162
BOOL bHasAllChecked
Definition: gui.cpp:442
#define WM_NOTIFY
Definition: richedit.h:61
BOOL UninstallApplication(PINSTALLED_INFO ItemInfo, BOOL bModify)
Definition: installed.cpp:40
BOOL SortItems(PFNLVCOMPARE pfnCompare, PVOID lParam)
Definition: rosctrls.h:141
#define IDS_INFO_INFOABOUT
Definition: resource.h:142
#define IDS_TOOLTIP_INSTALL
Definition: resource.h:118
VOID SetCheckboxesVisible(BOOL bIsVisible)
Definition: gui.cpp:457
char * Text
Definition: combotst.c:136
HTREEITEM GetSelection()
Definition: rosctrls.h:587
#define IDI_APPUPD
Definition: resource.h:12
CAppRichEdit * m_RichEdit
Definition: gui.cpp:762
BOOL DeleteItem(int i)
Definition: rosctrls.h:101
ACPI_BUFFER *RetBuffer ACPI_BUFFER *RetBuffer char ACPI_WALK_RESOURCE_CALLBACK void *Context ACPI_BUFFER *RetBuffer UINT16 ACPI_RESOURCE **ResourcePtr ACPI_GENERIC_ADDRESS *Reg UINT32 *ReturnValue UINT8 UINT8 *Slp_TypB ACPI_PHYSICAL_ADDRESS PhysicalAddress64 UINT32 UINT32 *TimeElapsed UINT32 ACPI_STATUS const char * Format
Definition: acpixf.h:1206
CSideTreeView * m_TreeView
Definition: gui.cpp:760
CUiWindow< CStatusBar > * m_StatusBar
Definition: gui.cpp:761
#define EN_CHANGE
Definition: winuser.h:2004