[DEVMGR]
authorGed Murphy <gedmurphy@reactos.org>
Thu, 18 Jun 2015 10:26:30 +0000 (10:26 +0000)
committerGed Murphy <gedmurphy@reactos.org>
Thu, 18 Jun 2015 10:26:30 +0000 (10:26 +0000)
- 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

svn path=/trunk/; revision=68182

reactos/dll/win32/devmgr/devmgmt/DeviceView.cpp
reactos/dll/win32/devmgr/devmgmt/DeviceView.h
reactos/dll/win32/devmgr/devmgmt/MainWindow.cpp

index 03ef161..85f77e1 100644 (file)
@@ -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;
     }
 }
 
index fd0159c..d874b1a 100644 (file)
@@ -99,7 +99,7 @@ private:
         _Out_ HDEVINFO *hDevInfo
         );
 
-    VOID RecurseChildDevices(
+    bool RecurseChildDevices(
         _In_ DEVINST ParentDevice,
         _In_ HTREEITEM hParentTreeItem
         );
index 59e28be..bb76e1e 100644 (file)
@@ -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:
         {