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/DeviceView.cpp?rev=68182&r1=68181&r2=68182&view=diff
==============================================================================
--- 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/DeviceView.h?rev=68182&r1=68181&r2=68182&view=diff
==============================================================================
--- 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/MainWindow.cpp?rev=68182&r1=68181&r2=68182&view=diff
==============================================================================
--- 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:
         {


Reply via email to