ReactOS 0.4.17-dev-784-g3812a95
CAddDialog.h
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#pragma once
10
12 public CDialogImpl<CAddDialog>
13{
14public:
15 enum { IDD = IDD_DIALOG_ADD };
16
19
24
29
30private:
33 CWindow m_BtnAdd;
34 CWindow m_BtnRemove;
36
39 CAtlList<CSnapin*> m_Snapins;
40
41public:
42 CAddDialog(CMainWnd *MainWnd, CConsoleWnd* console)
43 {
44 m_MainWnd = MainWnd;
45 m_Console = console;
46 }
47
49 {
50 m_Snapins.RemoveAll();
51 }
52
53 void InitLV(CListView& listView)
54 {
55 listView.DeleteAllItems();
56
58 listView.InsertColumn(0, (LPWSTR)module.GetString(), LVCFMT_LEFT, 130, 0);
59
61 listView.InsertColumn(1, (LPWSTR)vendor.GetString(), LVCFMT_LEFT, 120, 1);
62
64 }
65
66 void InsertListItem(CListView& listView, CSnapinCacheEntry *CacheEntry)
67 {
68 LVITEM lvi = { 0 };
69 lvi.mask = LVIF_TEXT | LVIF_PARAM | LVIF_IMAGE;
70 lvi.lParam = (LPARAM)CacheEntry;
71 lvi.pszText = (LPWSTR)CacheEntry->Name().GetString();
72 lvi.iItem = INT_MAX;
73 lvi.iImage = CacheEntry->NormalImageIndex();
74 int item = listView.InsertItem(&lvi);
75
76 listView.SetItemText(item, 1, (LPWSTR)CacheEntry->Provider().GetString());
77 }
78
79 void InitTV(CTreeView& treeView)
80 {
82 }
83
84 HTREEITEM InsertTreeItem(CTreeView& treeView, CSnapin *Snapin, HTREEITEM hInsertAfter)
85 {
86 TVINSERTSTRUCTW Insert;
87
88 ZeroMemory(&Insert, sizeof(TVINSERTSTRUCTW));
89
91 Insert.item.pszText = (LPWSTR)Snapin->GetCacheEntry()->Name().GetString();
92 Insert.item.iImage = Snapin->GetCacheEntry()->NormalImageIndex();
93 Insert.item.iSelectedImage = Snapin->GetCacheEntry()->OpenImageIndex();
94 Insert.item.lParam = (LPARAM)Snapin;
95
96 Insert.hParent = NULL;
97 Insert.hInsertAfter = hInsertAfter;
98
99 return treeView.InsertItem(&Insert);
100 }
101
103 {
104 CenterWindow(m_Console->m_hWnd);
105
111
114
115 /* Get Snapins from the Cache */
116 for (int i = 0; i < m_MainWnd->GetSnapinCacheCount(); i++)
117 {
119 }
120
122
123 return TRUE;
124 }
125
126 LRESULT OnCommand(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
127 {
128 switch (wID)
129 {
130 case IDC_BUTTON_ADD:
131 {
132 int iItem = m_Available.GetNextItem(-1, LVNI_SELECTED);
133 if (iItem != -1)
134 {
136 if (CacheEntry)
137 {
138 CSnapin *Snapin = new CSnapin(CacheEntry);
139 m_Snapins.AddTail(Snapin);
140 Snapin->OnAdd(m_Console);
142 }
143 }
144 }
145 break;
146
148 {
149 HTREEITEM hTreeItem = m_Selected.GetSelection();
150 if (hTreeItem != NULL)
151 {
152 CSnapin *Snapin = (CSnapin *)m_Selected.GetItemData(hTreeItem);
153 if (Snapin)
154 {
155 m_Snapins.RemoveAt(m_Snapins.Find(Snapin));
156 m_Selected.DeleteItem(hTreeItem);
157 delete Snapin;
158 }
159 }
160 }
161 break;
162
163 case IDOK:
164 {
165#if 0
167 for (int n = 0; n < items; ++n)
168 {
169 CSnapin* snapin;
170 if ((snapin = (CSnapin*)m_Selected.GetItemData(n)))
171 {
172 snapin->OnAccept(m_Console);
173 }
174 }
175#endif
176 }
177 // save stuff
178 case IDCANCEL:
179 EndDialog(0);
180 return 0;
181 }
182
184
185 return 0;
186 }
187
189 {
190 int iItem = m_Available.GetNextItem(-1, LVNI_SELECTED);
191 CSnapinCacheEntry *CacheEntry;
192 if (iItem != -1 && (CacheEntry = (CSnapinCacheEntry*)m_Available.GetItemData(iItem)))
193 {
194 m_Description.SetWindowText((LPWSTR)CacheEntry->Description().GetString());
195 }
196 else
197 {
198 m_Description.SetWindowText(NULL);
199 }
200
202
203 return TRUE;
204 }
205
207 {
209 return TRUE;
210 }
211
213 {
214 if (hdr->hwndFrom == m_Available.m_hWnd)
215 {
217 if (lpnmitem->iItem != -1)
218 {
220 if (CacheEntry)
221 {
222 CSnapin *Snapin = new CSnapin(CacheEntry);
223 m_Snapins.AddTail(Snapin);
224 Snapin->OnAdd(m_Console);
226 }
227 }
228 }
229 return TRUE;
230 }
231
233 {
234 m_BtnAdd.EnableWindow(ListView_GetSelectedCount(m_Available.m_hWnd) > 0);
235
237 m_BtnRemove.EnableWindow(hItem != NULL);
238 }
239};
#define IDC_BUTTON_ADD
Definition: resource.h:72
#define IDC_DESCRIPTION
Definition: resource.h:17
#define IDC_LIST_SELECTED
Definition: resource.h:39
#define IDS_MODULE
Definition: resource.h:13
#define IDS_VENDOR
Definition: resource.h:14
#define IDC_BUTTON_REMOVE
Definition: resource.h:37
#define IDC_LIST_AVAILABLE
Definition: resource.h:38
#define IDD_DIALOG_ADD
Definition: resource.h:35
static VOID CenterWindow(HWND hWnd)
Definition: reactos.c:45
void UpdateButtons()
Definition: CAddDialog.h:232
void InitTV(CTreeView &treeView)
Definition: CAddDialog.h:79
CListView m_Available
Definition: CAddDialog.h:31
LRESULT OnInitDialog(UINT nMessage, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CAddDialog.h:102
CMainWnd * m_MainWnd
Definition: CAddDialog.h:37
LRESULT OnItemChanged(INT uCode, LPNMHDR hdr, BOOL &bHandled)
Definition: CAddDialog.h:188
CWindow m_BtnRemove
Definition: CAddDialog.h:34
LRESULT OnItemDblClicked(INT uCode, LPNMHDR hdr, BOOL &bHandled)
Definition: CAddDialog.h:212
CAtlList< CSnapin * > m_Snapins
Definition: CAddDialog.h:39
CComPtr< CConsoleWnd > m_Console
Definition: CAddDialog.h:38
void InsertListItem(CListView &listView, CSnapinCacheEntry *CacheEntry)
Definition: CAddDialog.h:66
void InitLV(CListView &listView)
Definition: CAddDialog.h:53
CWindow m_Description
Definition: CAddDialog.h:35
LRESULT OnCommand(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
Definition: CAddDialog.h:126
CTreeView m_Selected
Definition: CAddDialog.h:32
LRESULT OnSelectionChanged(INT uCode, LPNMHDR hdr, BOOL &bHandled)
Definition: CAddDialog.h:206
CWindow m_BtnAdd
Definition: CAddDialog.h:33
HTREEITEM InsertTreeItem(CTreeView &treeView, CSnapin *Snapin, HTREEITEM hInsertAfter)
Definition: CAddDialog.h:84
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:252
CSnapinCacheEntry * GetSnapinCacheEntry(int nIndex)
Definition: CMainWnd.cpp:258
HIMAGELIST SnapinImageList()
Definition: CMainWnd.cpp:276
const CAtlString & Description() const
const CAtlString & Provider() const
const CAtlString & Name() const
void OnAccept(IConsole *console)
Definition: CSnapin.h:98
void OnAdd(IConsole *console)
Definition: CSnapin.h:84
CSnapinCacheEntry * GetCacheEntry()
Definition: CSnapin.h:49
HIMAGELIST SetImageList(HIMAGELIST himl, int iImageList)
Definition: rosctrls.h:535
BOOL DeleteItem(HTREEITEM i)
Definition: rosctrls.h:545
int GetItemCount()
Definition: rosctrls.h:560
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 INT_MAX
Definition: limits.h:26
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned int BOOL
Definition: ntddk_ex.h:94
GLdouble n
Definition: glext.h:7729
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 MESSAGE_HANDLER(msg, func)
Definition: atlwin.h:1926
#define NOTIFY_CODE_HANDLER(cd, func)
Definition: atlwin.h:1980
#define BEGIN_MSG_MAP(theClass)
Definition: atlwin.h:1898
#define COMMAND_ID_HANDLER(id, func)
Definition: atlwin.h:1953
#define END_MSG_MAP()
Definition: atlwin.h:1917
#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
static TCHAR * items[]
Definition: page1.c:45
#define LVSIL_SMALL
Definition: commctrl.h:2304
#define TVN_SELCHANGED
Definition: commctrl.h:3740
#define TVIF_TEXT
Definition: commctrl.h:3271
#define NM_DBLCLK
Definition: commctrl.h:131
#define LVNI_SELECTED
Definition: commctrl.h:2429
#define TVIF_IMAGE
Definition: commctrl.h:3272
#define TVSIL_NORMAL
Definition: commctrl.h:3448
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 LVN_ITEMCHANGED
Definition: commctrl.h:3136
#define TVIF_SELECTEDIMAGE
Definition: commctrl.h:3276
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
#define IDCANCEL
Definition: winuser.h:842
#define WM_INITDIALOG
Definition: winuser.h:1767
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
#define IDOK
Definition: winuser.h:841
BOOL WINAPI EndDialog(_In_ HWND, _In_ INT_PTR)