mirror of
https://github.com/reactos/reactos.git
synced 2025-06-05 17:30:32 +00:00
[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 svn path=/trunk/; revision=68182
This commit is contained in:
parent
38dbc4f271
commit
f36c37f8d9
3 changed files with 82 additions and 50 deletions
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -99,7 +99,7 @@ private:
|
|||
_Out_ HDEVINFO *hDevInfo
|
||||
);
|
||||
|
||||
VOID RecurseChildDevices(
|
||||
bool RecurseChildDevices(
|
||||
_In_ DEVINST ParentDevice,
|
||||
_In_ HTREEITEM hParentTreeItem
|
||||
);
|
||||
|
|
|
@ -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:
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue