diff --git a/modules/juce_gui_basics/widgets/juce_TreeView.cpp b/modules/juce_gui_basics/widgets/juce_TreeView.cpp index 6ebace8207..c8f44bc34a 100644 --- a/modules/juce_gui_basics/widgets/juce_TreeView.cpp +++ b/modules/juce_gui_basics/widgets/juce_TreeView.cpp @@ -589,10 +589,7 @@ TreeViewItem* TreeView::getSelectedItem (const int index) const noexcept int TreeView::getNumRowsInTree() const { - if (rootItem != nullptr) - return rootItem->getNumRows() - (rootItemVisible ? 0 : 1); - - return 0; + return rootItem != nullptr ? (rootItem->getNumRows() - (rootItemVisible ? 0 : 1)) : 0; } TreeViewItem* TreeView::getItemOnRow (int index) const @@ -699,44 +696,45 @@ void TreeView::enablementChanged() void TreeView::moveSelectedRow (const int delta) { - int rowSelected = 0; + const int numRowsInTree = getNumRowsInTree(); - TreeViewItem* const firstSelected = getSelectedItem (0); - if (firstSelected != nullptr) - rowSelected = firstSelected->getRowNumberInTree(); + if (numRowsInTree > 0) + { + int rowSelected = 0; - rowSelected = jlimit (0, getNumRowsInTree() - 1, rowSelected + delta); + TreeViewItem* const firstSelected = getSelectedItem (0); + if (firstSelected != nullptr) + rowSelected = firstSelected->getRowNumberInTree(); - for (;;) - { - TreeViewItem* item = getItemOnRow (rowSelected); + rowSelected = jlimit (0, numRowsInTree - 1, rowSelected + delta); - if (item != nullptr) + for (;;) { - if (! item->canBeSelected()) - { - // if the row we want to highlight doesn't allow it, try skipping - // to the next item.. - const int nextRowToTry = jlimit (0, getNumRowsInTree() - 1, - rowSelected + (delta < 0 ? -1 : 1)); + TreeViewItem* const item = getItemOnRow (rowSelected); - if (rowSelected != nextRowToTry) - { - rowSelected = nextRowToTry; - continue; - } - else + if (item != nullptr) + { + if (! item->canBeSelected()) { + // if the row we want to highlight doesn't allow it, try skipping + // to the next item.. + const int nextRowToTry = jlimit (0, numRowsInTree - 1, rowSelected + (delta < 0 ? -1 : 1)); + + if (rowSelected != nextRowToTry) + { + rowSelected = nextRowToTry; + continue; + } + break; } - } - item->setSelected (true, true); + item->setSelected (true, true); + scrollToKeepItemVisible (item); + } - scrollToKeepItemVisible (item); + break; } - - break; } }