Author: gedmurphy Date: Thu Jun 18 10:26:30 2015 New Revision: 68182
URL: http://svn.reactos.org/svn/reactos?rev=68182&view=rev Log: [DEVMGR] - In 'Devices by Connection, if a device has a problem, expand the treeview to to show that problem device. - Add a missing break in WM_COMMAND to stop the app from closing - Fix clearing the lists
Modified: trunk/reactos/dll/win32/devmgr/devmgmt/DeviceView.cpp trunk/reactos/dll/win32/devmgr/devmgmt/DeviceView.h trunk/reactos/dll/win32/devmgr/devmgmt/MainWindow.cpp
Modified: trunk/reactos/dll/win32/devmgr/devmgmt/DeviceView.cpp URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/devmgr/devmgmt/De... ============================================================================== --- trunk/reactos/dll/win32/devmgr/devmgmt/DeviceView.cpp [iso-8859-1] (original) +++ trunk/reactos/dll/win32/devmgr/devmgmt/DeviceView.cpp [iso-8859-1] Thu Jun 18 10:26:30 2015 @@ -570,37 +570,37 @@ 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,59 +608,82 @@ if (DeviceNode == NULL) { ATLASSERT(FALSE); - return; - } - - - // Check if this is a hidden device + return false; + } + + // 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); - } - } - - - for (;;) - { - // Check if the parent device has anything at the same level - bSuccess = GetSiblingDevice(Device, &Device); - if (bSuccess == FALSE) break; - - DeviceNode = dynamic_cast<CDeviceNode *>(GetDeviceNode(Device)); - if (DeviceNode == NULL) - { - ATLASSERT(FALSE); - } - - // Check if this is a hidden device - if (DeviceNode->IsHidden()) - { - if (m_ShowHidden == FALSE) - continue; - } - // 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 + bSuccess = GetSiblingDevice(Device, &Device); + if (bSuccess == FALSE) break; + + DeviceNode = dynamic_cast<CDeviceNode *>(GetDeviceNode(Device)); + if (DeviceNode == NULL) + { + ATLASSERT(FALSE); + } + + // Check if this is a hidden device + if (DeviceNode->IsHidden()) + { + if (m_ShowHidden == FALSE) + 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 + 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 @@ void CDeviceView::EmptyLists() { - POSITION Pos; - CNode *Node; - - if (!m_ClassNodeList.IsEmpty()) - { - Pos = m_ClassNodeList.GetHeadPosition(); - do - { - Node = m_ClassNodeList.GetNext(Pos); - delete Node; - - } while (Pos != NULL); - } - - if (!m_DeviceNodeList.IsEmpty()) - { - Pos = m_DeviceNodeList.GetHeadPosition(); - do - { - Node = m_DeviceNodeList.GetNext(Pos); - delete Node; - - } while (Pos != NULL); + CClassNode *ClassNode; + CDeviceNode *DeviceNode; + + while (!m_ClassNodeList.IsEmpty()) + { + ClassNode = m_ClassNodeList.RemoveTail(); + delete ClassNode; + } + + while (!m_DeviceNodeList.IsEmpty()) + { + DeviceNode = m_DeviceNodeList.RemoveTail(); + delete DeviceNode; } }
Modified: trunk/reactos/dll/win32/devmgr/devmgmt/DeviceView.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/devmgr/devmgmt/De... ============================================================================== --- trunk/reactos/dll/win32/devmgr/devmgmt/DeviceView.h [iso-8859-1] (original) +++ trunk/reactos/dll/win32/devmgr/devmgmt/DeviceView.h [iso-8859-1] Thu Jun 18 10:26:30 2015 @@ -99,7 +99,7 @@ _Out_ HDEVINFO *hDevInfo );
- VOID RecurseChildDevices( + bool RecurseChildDevices( _In_ DEVINST ParentDevice, _In_ HTREEITEM hParentTreeItem );
Modified: trunk/reactos/dll/win32/devmgr/devmgmt/MainWindow.cpp URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/devmgr/devmgmt/Ma... ============================================================================== --- trunk/reactos/dll/win32/devmgr/devmgmt/MainWindow.cpp [iso-8859-1] (original) +++ trunk/reactos/dll/win32/devmgr/devmgmt/MainWindow.cpp [iso-8859-1] Thu Jun 18 10:26:30 2015 @@ -509,6 +509,36 @@ 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 @@
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 @@ // 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: {