bool BListView::_DeselectAll(int32 exceptFrom, int32 exceptTo) { if (fFirstSelected == -1) return false; BAutolock locker(Window()); if (Window() && !locker.IsLocked()) return false; bool changed = false; for (int32 index = fFirstSelected; index <= fLastSelected; index++) { // don't deselect the items we shouldn't deselect if (exceptFrom != -1 && exceptFrom <= index && exceptTo >= index) continue; BListItem *item = ItemAt(index); if (item && item->IsSelected()) { item->Deselect(); InvalidateItem(index); changed = true; } } if (!changed) return false; if (exceptFrom != -1) { fFirstSelected = _CalcFirstSelected(exceptFrom); fLastSelected = _CalcLastSelected(exceptTo); } else fFirstSelected = fLastSelected = -1; return true; }
bool BListView::_Deselect(int32 index) { if (index < 0 || index >= CountItems()) return false; BWindow *window = Window(); BAutolock locker(window); if (window && !locker.IsLocked()) return false; BListItem *item = ItemAt(index); if (item && item->IsSelected()) { BRect frame(ItemFrame(index)); BRect bounds(Bounds()); item->Deselect(); if (fFirstSelected == index && fLastSelected == index) { fFirstSelected = -1; fLastSelected = -1; } else { if (fFirstSelected == index) fFirstSelected = _CalcFirstSelected(index); if (fLastSelected == index) fLastSelected = _CalcLastSelected(index); } if (window && bounds.Intersects(frame)) DrawItem(ItemAt(index), frame, true); } return true; }