void MainWindow::_AdaptToSelectedPartition() { partition_id diskID = -1; partition_id partitionID = -1; partition_id parentID = -1; BRow* _selectedRow = fListView->CurrentSelection(); if (_selectedRow) { // go up to top level row BRow* _topLevelRow = _selectedRow; BRow* parent = NULL; while (fListView->FindParent(_topLevelRow, &parent, NULL)) _topLevelRow = parent; PartitionListRow* topLevelRow = dynamic_cast<PartitionListRow*>(_topLevelRow); PartitionListRow* selectedRow = dynamic_cast<PartitionListRow*>(_selectedRow); if (topLevelRow) diskID = topLevelRow->ID(); if (selectedRow) { partitionID = selectedRow->ID(); parentID = selectedRow->ParentID(); } } _SetToDiskAndPartition(diskID, partitionID, parentID); }
PartitionListRow* PartitionListView::FindRow(partition_id id, PartitionListRow* parent) { for (int32 i = 0; i < CountRows(parent); i++) { PartitionListRow* item = dynamic_cast<PartitionListRow*>(RowAt(i, parent)); if (item != NULL && item->ID() == id) return item; if (CountRows(item) > 0) { // recurse into child rows item = FindRow(id, item); if (item) return item; } } return NULL; }