[haiku-development] Re: Query about BOutlineListView

  • From: "Máximo Castañeda" <dmarc-noreply@xxxxxxxxxxxxx> ("antiswen")
  • To: "haiku-development@xxxxxxxxxxxxx" <haiku-development@xxxxxxxxxxxxx>
  • Date: Sat, 6 Apr 2024 14:54:29 +0000 (UTC)

 En sábado, 6 de abril de 2024, 16:05:50 CEST, Zenja Solaja <solaja@xxxxxxxxx> 
escribió: 

This wont work since BOutlineListView is a tree, so the full list index (eg. 
22) doesnt map to a branch BListView subindex with a smaller number of 
elements. This was the first thing I tried and immediate got an out of bounds 
access error. 

BListView Select(idx) wont work for trees. I’m only limited to 
BOutlineListView::FullListItemAt(idx) pointers, but that wont allow me to set 
the private fLastSelected which is used to remove highlight when the mouse 
selects another item.

On Sat, 6 Apr 2024 at 13:23, Máximo Castañeda <dmarc-noreply@xxxxxxxxxxxxx> 
wrote:

BListItem* itemToSelect = list.FullListItemAt(fullIndex);
int32 showIndex = list.IndexOf(itemToSelect);
list.Select(showIndex);

You may want to check return values, and maybe call list.Expand(item) before 
getting its index.



BOutlineListView is a BListView, so its methods should work. In fact, it keeps 
its data as a list with its items having the "depth" information, not as a tree 
with items containing a list of children.

Select() checks the index and just returns false if out of bounds, so if you 
got an out of bounds error there must be a bug somewhere. Can you share your 
code?

Notice in the sample code the index with which you call Select() is not the 
same one you started with. If you start with a "full tree" index: you first get 
the item with FullListItemAt, the you find the "visible list" index with 
IndexOf (a method from BListView) and then you Select using that index. And you 
will have to make sure its path is expanded, of course, or its "visible list" 
will be -1.

Other related posts: