diff --git a/reactos/dll/win32/devmgr/devmgmt/DeviceView.cpp b/reactos/dll/win32/devmgr/devmgmt/DeviceView.cpp index 03ef16191a0..85f77e1bdb6 100644 --- a/reactos/dll/win32/devmgr/devmgmt/DeviceView.cpp +++ b/reactos/dll/win32/devmgr/devmgmt/DeviceView.cpp @@ -570,37 +570,37 @@ CDeviceView::ListDevicesByType() bool CDeviceView::ListDevicesByConnection() { - BOOL bSuccess; + bool bSuccess; // Start by adding the root node to the tree bSuccess = AddRootDevice(); if (bSuccess == false) return false; // Walk the device tree and add all the devices - RecurseChildDevices(m_RootDevInst, m_hTreeRoot); + (void)RecurseChildDevices(m_RootDevInst, m_hTreeRoot); // Expand the root item - (VOID)TreeView_Expand(m_hTreeView, + (void)TreeView_Expand(m_hTreeView, m_hTreeRoot, TVE_EXPAND); return true; } -VOID +bool CDeviceView::RecurseChildDevices( _In_ DEVINST ParentDevice, _In_ HTREEITEM hParentTreeItem ) { - HTREEITEM hDevItem = NULL; DEVINST Device; - BOOL bSuccess; + bool HasProblem = false; + bool bSuccess; // Check if the parent has any child devices if (GetChildDevice(ParentDevice, &Device) == FALSE) - return; + return true; // Get the cached device node CDeviceNode *DeviceNode; @@ -608,26 +608,30 @@ CDeviceView::RecurseChildDevices( if (DeviceNode == NULL) { ATLASSERT(FALSE); - return; + return false; } - - // Check if this is a hidden device + // Don't show hidden devices if not requested if ((m_ShowHidden == TRUE) || (!(DeviceNode->IsHidden()))) { // Add this device to the tree under its parent hDevItem = InsertIntoTreeView(hParentTreeItem, DeviceNode); - - if (hDevItem) { // Check if this child has any children itself - RecurseChildDevices(Device, hDevItem); + if (!RecurseChildDevices(Device, hDevItem)) + HasProblem = true; + } + + if (DeviceNode->HasProblem()) + { + HasProblem = true; } } + // Check for siblings for (;;) { // Check if the parent device has anything at the same level @@ -647,20 +651,39 @@ CDeviceView::RecurseChildDevices( continue; } + if (DeviceNode->HasProblem()) + { + HasProblem = true; + } + // Add this device to the tree under its parent hDevItem = InsertIntoTreeView(hParentTreeItem, DeviceNode); if (hDevItem) { // Check if this child has any children itself - RecurseChildDevices(Device, hDevItem); + if (!RecurseChildDevices(Device, hDevItem)) + HasProblem = true; } + } (void)TreeView_SortChildren(m_hTreeView, hParentTreeItem, 0); + // Expand the class if it has a problem device + if (HasProblem == true) + { + (void)TreeView_Expand(m_hTreeView, + hParentTreeItem, + TVE_EXPAND); + } + + // If there was a problem, expand the ancestors + if (HasProblem) return false; + + return true; } bool @@ -860,29 +883,19 @@ CNode* CDeviceView::GetSelectedNode() void CDeviceView::EmptyLists() { - POSITION Pos; - CNode *Node; + CClassNode *ClassNode; + CDeviceNode *DeviceNode; - if (!m_ClassNodeList.IsEmpty()) + while (!m_ClassNodeList.IsEmpty()) { - Pos = m_ClassNodeList.GetHeadPosition(); - do - { - Node = m_ClassNodeList.GetNext(Pos); - delete Node; - - } while (Pos != NULL); + ClassNode = m_ClassNodeList.RemoveTail(); + delete ClassNode; } - if (!m_DeviceNodeList.IsEmpty()) + while (!m_DeviceNodeList.IsEmpty()) { - Pos = m_DeviceNodeList.GetHeadPosition(); - do - { - Node = m_DeviceNodeList.GetNext(Pos); - delete Node; - - } while (Pos != NULL); + DeviceNode = m_DeviceNodeList.RemoveTail(); + delete DeviceNode; } } diff --git a/reactos/dll/win32/devmgr/devmgmt/DeviceView.h b/reactos/dll/win32/devmgr/devmgmt/DeviceView.h index fd0159ca178..d874b1a327c 100644 --- a/reactos/dll/win32/devmgr/devmgmt/DeviceView.h +++ b/reactos/dll/win32/devmgr/devmgmt/DeviceView.h @@ -99,7 +99,7 @@ private: _Out_ HDEVINFO *hDevInfo ); - VOID RecurseChildDevices( + bool RecurseChildDevices( _In_ DEVINST ParentDevice, _In_ HTREEITEM hParentTreeItem ); diff --git a/reactos/dll/win32/devmgr/devmgmt/MainWindow.cpp b/reactos/dll/win32/devmgr/devmgmt/MainWindow.cpp index 59e28be922f..bb76e1e0cfa 100644 --- a/reactos/dll/win32/devmgr/devmgmt/MainWindow.cpp +++ b/reactos/dll/win32/devmgr/devmgmt/MainWindow.cpp @@ -509,6 +509,36 @@ CMainWindow::OnCommand(WPARAM wParam, break; } + case IDC_ENABLE_DRV: + { + MessageBox(m_hMainWnd, L"Not yet implemented", L"Enable Driver", MB_OK); + break; + } + + case IDC_DISABLE_DRV: + { + MessageBox(m_hMainWnd, L"Not yet implemented", L"Disable Driver", MB_OK); + break; + } + + case IDC_UPDATE_DRV: + { + MessageBox(m_hMainWnd, L"Not yet implemented", L"Update Driver", MB_OK); + break; + } + + case IDC_UNINSTALL_DRV: + { + MessageBox(m_hMainWnd, L"Not yet implemented", L"Uninstall Driver", MB_OK); + break; + } + + case IDC_ADD_HARDWARE: + { + MessageBox(m_hMainWnd, L"Not yet implemented", L"Add Hardware", MB_OK); + break; + } + case IDC_DEVBYTYPE: { RefreshView(DevicesByType); @@ -523,31 +553,18 @@ CMainWindow::OnCommand(WPARAM wParam, case IDC_SHOWHIDDEN: { - UINT CurCheckState, NewCheckState; - // Get the current state - CurCheckState = GetMenuState(m_hMenu, IDC_SHOWHIDDEN, MF_BYCOMMAND); - + UINT CurCheckState = GetMenuState(m_hMenu, IDC_SHOWHIDDEN, MF_BYCOMMAND); if (CurCheckState == MF_CHECKED) { - // Inform the device view of the change m_DeviceView->SetHiddenDevices(false); - NewCheckState = MF_UNCHECKED; + CheckMenuItem(m_hMenu, IDC_SHOWHIDDEN, MF_BYCOMMAND | MF_UNCHECKED); } else if (CurCheckState == MF_UNCHECKED) { m_DeviceView->SetHiddenDevices(true); - NewCheckState = MF_CHECKED; + CheckMenuItem(m_hMenu, IDC_SHOWHIDDEN, MF_BYCOMMAND | MF_CHECKED); } - else - { - ATLASSERT(FALSE); - break; - } - - // Set the new check state - CheckMenuItem(m_hMenu, IDC_SHOWHIDDEN, MF_BYCOMMAND | NewCheckState); - // Refresh the device view m_DeviceView->Refresh(m_DeviceView->GetCurrentView(), false, @@ -688,14 +705,16 @@ CMainWindow::MainWndProc(HWND hwnd, // Hand it off to the default message handler goto HandleDefaultMessage; } + break; } case WM_CLOSE: { // Destroy the main window DestroyWindow(hwnd); + break; } - break; + case WM_DESTROY: {