ReactOS 0.4.17-dev-940-g8bd6e85
CAddDialog.cpp
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS Management Console
3 * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
4 * PURPOSE: Snapin selection dialog
5 * COPYRIGHT: Copyright 2017-2020 Mark Jansen (mark.jansen@reactos.org)
6 * Copyright 2026 Eric Kohl (eric.kohl@reactos.org)
7 */
8
9#include "precomp.h"
10
12{
13 m_MainWnd = MainWnd;
15}
16
18{
19}
20
21void
23{
24 listView.DeleteAllItems();
25
27 listView.InsertColumn(0, (LPWSTR)module.GetString(), LVCFMT_LEFT, 130, 0);
28
30 listView.InsertColumn(1, (LPWSTR)vendor.GetString(), LVCFMT_LEFT, 120, 1);
31
33}
34
35void
37{
38 LVITEM lvi = { 0 };
39 lvi.mask = LVIF_TEXT | LVIF_PARAM | LVIF_IMAGE;
40 lvi.lParam = (LPARAM)CacheEntry;
41 lvi.pszText = (LPWSTR)CacheEntry->Name().GetString();
42 lvi.iItem = INT_MAX;
43 lvi.iImage = CacheEntry->NormalImageIndex();
44 int item = listView.InsertItem(&lvi);
45
46 listView.SetItemText(item, 1, (LPWSTR)CacheEntry->Provider().GetString());
47}
48
49void
51{
53}
54
56CAddDialog::InsertTreeItem(CTreeView& treeView, CSnapinAlias *Alias, HTREEITEM hParent, HTREEITEM hInsertAfter)
57{
58 TVINSERTSTRUCTW Insert;
59
60 ZeroMemory(&Insert, sizeof(TVINSERTSTRUCTW));
61
63 Insert.item.pszText = (LPWSTR)Alias->Snapin()->DisplayName().GetString();
64 Insert.item.iImage = Alias->Snapin()->CacheEntry()->NormalImageIndex();
65 Insert.item.iSelectedImage = Alias->Snapin()->CacheEntry()->OpenImageIndex();
66 Insert.item.lParam = (LPARAM)Alias;
67
68 Insert.hParent = hParent;
69 Insert.hInsertAfter = hInsertAfter;
70
71 return treeView.InsertItem(&Insert);
72}
73
76{
77 CenterWindow(m_Console->m_hWnd);
78
84
87
88 /* Get Snapins from the Cache */
89 for (int i = 0; i < m_MainWnd->GetSnapinCacheCount(); i++)
90 {
92 }
93
94 /* Create the snapin alias tree */
97
99
102
103 POSITION pos = m_RootAlias->m_SubNodes.GetHeadPosition();
104 while (pos)
105 {
107 if (Alias)
108 {
109 Alias->hTreeItem = InsertTreeItem(m_Selected, Alias, NULL /*m_RootAlias->hTreeItem*/);
110 m_Selected.Expand(Alias->hTreeItem, TVE_EXPAND);
111 }
112 }
113
115
116 return TRUE;
117}
118
120CAddDialog::OnCommand(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
121{
122 switch (wID)
123 {
124 case IDC_BUTTON_ADD:
125 {
126 int iItem = m_Available.GetNextItem(-1, LVNI_SELECTED);
127 if (iItem != -1)
128 {
130 if (CacheEntry)
131 {
132 CSnapinAlias *Alias = new CSnapinAlias(m_RootAlias, new CSnapin(CacheEntry));
133 m_RootAlias->m_SubNodes.AddTail(Alias);
134// Alias->Snapin()->OnAdd(m_Console);
135 Alias->hTreeItem = InsertTreeItem(m_Selected, Alias, NULL /*m_RootAlias->hTreeItem*/);
136 m_Selected.Expand(Alias->hTreeItem, TVE_EXPAND);
137 }
138 }
139 }
140 break;
141
143 {
144 HTREEITEM hTreeItem = m_Selected.GetSelection();
145 if (hTreeItem != NULL)
146 {
147 CSnapinAlias *Alias = (CSnapinAlias *)m_Selected.GetItemData(hTreeItem);
148 if (Alias)
149 {
150 Alias->Deleted();
151 m_Selected.DeleteItem(Alias->hTreeItem);
152 }
153 }
154 }
155 break;
156
157 case IDOK:
158 {
162 }
163 return 0;
164
165 case IDCANCEL:
166 {
169 }
170 return 0;
171 }
172
174
175 return 0;
176}
177
180{
181 int iItem = m_Available.GetNextItem(-1, LVNI_SELECTED);
182 CSnapinCacheEntry *CacheEntry;
183 if (iItem != -1 && (CacheEntry = (CSnapinCacheEntry*)m_Available.GetItemData(iItem)))
184 {
186 }
187 else
188 {
190 }
191
193
194 return TRUE;
195}
196
199{
201 return TRUE;
202}
203
206{
207 if (hdr->hwndFrom == m_Available.m_hWnd)
208 {
210 if (lpnmitem->iItem != -1)
211 {
213 if (CacheEntry)
214 {
215 CSnapinAlias *Alias = new CSnapinAlias(m_RootAlias, new CSnapin(CacheEntry));
216 m_RootAlias->m_SubNodes.AddTail(Alias);
217// Alias->Snapin()->OnAdd(m_Console);
218 Alias->hTreeItem = InsertTreeItem(m_Selected, Alias, NULL /*m_RootAlias->hTreeItem*/);
219 m_Selected.Expand(Alias->hTreeItem, TVE_EXPAND);
220 }
221 }
222 }
223 return TRUE;
224}
225
226void
228{
230
231 CSnapinAlias *ParentAlias = NULL;
233 if (hTreeItem)
234 {
235 CSnapinAlias *Alias = (CSnapinAlias *)m_Selected.GetItemData(hTreeItem);
236 if (Alias)
237 ParentAlias = Alias->Parent();
238 }
239
240 m_BtnRemove.EnableWindow((hTreeItem != NULL) && (ParentAlias != NULL));
241}
242
243void
245{
246 POSITION pos = ParentSnapin->m_SubNodes.GetHeadPosition();
247 while (pos)
248 {
249 CSnapin *Snapin = (CSnapin*)ParentSnapin->m_SubNodes.GetNext(pos);
250 if (Snapin)
251 {
252 CSnapinAlias *Alias = new CSnapinAlias(ParentAlias, Snapin);
253 ParentAlias->m_SubNodes.AddTail(Alias);
254 CreateSnapinAliases(Alias, Snapin);
255 }
256 }
257}
258
259void
261{
262 ParentSnapin->m_SubNodes.RemoveAll();
263
264 POSITION pos = ParentAlias->m_SubNodes.GetHeadPosition();
265 while (pos)
266 {
267 CSnapinAlias *Alias = (CSnapinAlias*)ParentAlias->m_SubNodes.GetNext(pos);
268 if (Alias)
269 {
270 if (!Alias->IsDeleted())
271 {
272 ParentSnapin->m_SubNodes.AddTail(Alias->Snapin());
273 ReconnectSnapins(Alias, Alias->Snapin());
274 }
275 }
276 }
277}
278
279void
281{
282 POSITION pos = ParentAlias->m_SubNodes.GetHeadPosition();
283 while (pos)
284 {
285 CSnapinAlias *Alias = (CSnapinAlias*)ParentAlias->m_SubNodes.GetNext(pos);
286 if (Alias)
287 {
288 DeleteSnapinAliasesRecursive(Alias, RemoveDeletedSnapins);
289 Alias->m_SubNodes.RemoveAll();
290 if (RemoveDeletedSnapins && (Alias->IsDeleted()))
291 delete Alias->Snapin();
292 delete Alias;
293 }
294 }
295}
296
297void
299{
300 if (m_RootAlias)
301 {
302 DeleteSnapinAliasesRecursive(m_RootAlias, RemoveDeletedSnapins);
303 m_RootAlias->m_SubNodes.RemoveAll();
304 delete m_RootAlias;
306 }
307}
CConsole Console
#define IDC_BUTTON_ADD
Definition: resource.h:72
#define IDC_DESCRIPTION
Definition: resource.h:17
#define IDC_LIST_SELECTED
Definition: resource.h:74
#define IDS_MODULE
Definition: resource.h:13
#define IDS_VENDOR
Definition: resource.h:14
#define IDC_BUTTON_REMOVE
Definition: resource.h:72
#define IDC_LIST_AVAILABLE
Definition: resource.h:73
static VOID CenterWindow(HWND hWnd)
Definition: reactos.c:45
PXSTR GetString() noexcept
Definition: atlsimpstr.h:367
BOOL SetWindowText(LPCTSTR lpszString)
Definition: atlwin.h:1300
void Attach(HWND hWndNew)
Definition: atlwin.h:298
BOOL EnableWindow(BOOL bEnable=TRUE)
Definition: atlwin.h:523
void UpdateButtons()
Definition: CAddDialog.cpp:227
void InitTV(CTreeView &treeView)
Definition: CAddDialog.cpp:50
CListView m_Available
Definition: CAddDialog.h:31
CSnapin * m_RootSnapin
Definition: CAddDialog.h:40
LRESULT OnInitDialog(UINT nMessage, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CAddDialog.cpp:75
CMainWnd * m_MainWnd
Definition: CAddDialog.h:37
LRESULT OnItemChanged(INT uCode, LPNMHDR hdr, BOOL &bHandled)
Definition: CAddDialog.cpp:179
void CreateSnapinAliases(CSnapinAlias *ParentAlias, CSnapin *ParentSnapin)
Definition: CAddDialog.cpp:244
void DeleteSnapinAliases(BOOL RemoveDeletedSnapins)
Definition: CAddDialog.cpp:298
CWindow m_BtnRemove
Definition: CAddDialog.h:34
LRESULT OnItemDblClicked(INT uCode, LPNMHDR hdr, BOOL &bHandled)
Definition: CAddDialog.cpp:205
CComPtr< CConsoleWnd > m_Console
Definition: CAddDialog.h:38
void DeleteSnapinAliasesRecursive(CSnapinAlias *ParentAlias, BOOL RemoveDeletedSnapins)
Definition: CAddDialog.cpp:280
void InsertListItem(CListView &listView, CSnapinCacheEntry *CacheEntry)
Definition: CAddDialog.cpp:36
void InitLV(CListView &listView)
Definition: CAddDialog.cpp:22
CWindow m_Description
Definition: CAddDialog.h:35
CSnapinAlias * m_RootAlias
Definition: CAddDialog.h:41
HTREEITEM InsertTreeItem(CTreeView &treeView, CSnapinAlias *Alias, HTREEITEM hParent=NULL, HTREEITEM hInsertAfter=TVI_LAST)
Definition: CAddDialog.cpp:56
LRESULT OnCommand(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
Definition: CAddDialog.cpp:120
CTreeView m_Selected
Definition: CAddDialog.h:32
CAddDialog(CMainWnd *MainWnd, CConsoleWnd *console)
Definition: CAddDialog.cpp:11
LRESULT OnSelectionChanged(INT uCode, LPNMHDR hdr, BOOL &bHandled)
Definition: CAddDialog.cpp:198
CWindow m_BtnAdd
Definition: CAddDialog.h:33
void ReconnectSnapins(CSnapinAlias *ParentAlias, CSnapin *ParentSnapin)
Definition: CAddDialog.cpp:260
int GetNextItem(int i, WORD flags)
Definition: rosctrls.h:161
BOOL DeleteAllItems()
Definition: rosctrls.h:126
int InsertItem(const LV_ITEM *pitem)
Definition: rosctrls.h:96
DWORD_PTR GetItemData(int i)
Definition: rosctrls.h:204
HIMAGELIST SetImageList(HIMAGELIST himl, int iImageList)
Definition: rosctrls.h:91
int InsertColumn(int iCol, LV_COLUMN *pcol)
Definition: rosctrls.h:52
BOOL SetItemText(int i, int subItem, LPCWSTR text)
Definition: rosctrls.h:186
int GetSnapinCacheCount()
Definition: CMainWnd.cpp:526
CSnapin * GetRootSnapin()
Definition: CMainWnd.cpp:556
CSnapinCacheEntry * GetSnapinCacheEntry(int nIndex)
Definition: CMainWnd.cpp:532
HIMAGELIST SnapinImageList()
Definition: CMainWnd.cpp:550
HTREEITEM hTreeItem
Definition: CSnapinAlias.h:19
CAtlList< CSnapinAlias * > m_SubNodes
Definition: CSnapinAlias.h:18
const CAtlString & Description() const
const CAtlString & Provider() const
const CAtlString & Name() const
CAtlList< CSnapin * > m_SubNodes
Definition: CSnapin.h:42
BOOL Expand(HTREEITEM item, DWORD action)
Definition: rosctrls.h:604
HIMAGELIST SetImageList(HIMAGELIST himl, int iImageList)
Definition: rosctrls.h:535
BOOL DeleteItem(HTREEITEM i)
Definition: rosctrls.h:545
DWORD_PTR GetItemData(HTREEITEM item)
Definition: rosctrls.h:590
HTREEITEM GetNextItem(HTREEITEM i, WORD flags)
Definition: rosctrls.h:575
HTREEITEM GetSelection()
Definition: rosctrls.h:599
HTREEITEM InsertItem(const TVINSERTSTRUCTW *pitem)
Definition: rosctrls.h:540
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
const WCHAR * vendor
Definition: db.cpp:873
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define INT_MAX
Definition: limits.h:26
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned int BOOL
Definition: ntddk_ex.h:94
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
unsigned int UINT
Definition: sysinfo.c:13
char hdr[14]
Definition: iptest.cpp:33
#define ZeroMemory
Definition: minwinbase.h:31
LONG_PTR LPARAM
Definition: minwindef.h:175
LONG_PTR LRESULT
Definition: minwindef.h:176
UINT_PTR WPARAM
Definition: minwindef.h:174
#define MAKEINTRESOURCE(i)
Definition: ntverrsrc.c:25
#define LVSIL_SMALL
Definition: commctrl.h:2304
#define TVIF_TEXT
Definition: commctrl.h:3271
#define LVNI_SELECTED
Definition: commctrl.h:2429
#define TVIF_IMAGE
Definition: commctrl.h:3272
#define TVSIL_NORMAL
Definition: commctrl.h:3448
#define TVE_EXPAND
Definition: commctrl.h:3428
struct tagNMITEMACTIVATE * LPNMITEMACTIVATE
#define ListView_GetSelectedCount(hwndLV)
Definition: commctrl.h:2714
#define LVITEM
Definition: commctrl.h:2380
#define LVIF_PARAM
Definition: commctrl.h:2316
#define LVIF_TEXT
Definition: commctrl.h:2314
#define LVCFMT_LEFT
Definition: commctrl.h:2603
#define TVGN_CARET
Definition: commctrl.h:3466
#define LVIF_IMAGE
Definition: commctrl.h:2315
#define TVIF_PARAM
Definition: commctrl.h:3273
#define TVIF_SELECTEDIMAGE
Definition: commctrl.h:3276
#define IDCANCEL
Definition: winuser.h:842
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
#define IDOK
Definition: winuser.h:841
BOOL WINAPI EndDialog(_In_ HWND, _In_ INT_PTR)
HTREEITEM hParent
Definition: commctrl.h:3398
HTREEITEM hInsertAfter
Definition: commctrl.h:3399
uint16_t * LPWSTR
Definition: typedefs.h:56
int32_t INT
Definition: typedefs.h:58