void ListBox::SetSelectedItem(int index) { bool bChanged = (index != SelectedElement); if(index == -1) { SelectedElement = -1; UpdateList(); } else if((index >= 0) && (index < GetNumEntries())) { SelectedElement = index; int numVisibleElements = ((GetSize().y - 2) / GUIStyle::GetInstance().GetListBoxEntryHeight()) + 1; if(SelectedElement >= FirstVisibleElement+numVisibleElements - 1) { FirstVisibleElement = SelectedElement-(numVisibleElements-1) + 1; } else if(SelectedElement < FirstVisibleElement) { FirstVisibleElement = SelectedElement; } if(FirstVisibleElement > GetNumEntries() - numVisibleElements) { FirstVisibleElement = std::max(0,GetNumEntries() - numVisibleElements + 1); } scrollbar.SetCurrentValue(FirstVisibleElement); UpdateList(); } if(bChanged) { pOnSelectionChange(); } }
bool ListBox::HandleMouseLeft(Sint32 x, Sint32 y, bool pressed) { if((x>=0) && (x < GetSize().x - scrollbar.GetSize().x) && (y>=0) && (y < GetSize().y)) { if(pressed == true) { int index = ((y - 1) / GUIStyle::GetInstance().GetListBoxEntryHeight()) + FirstVisibleElement; if((index >= 0) && (index < GetNumEntries())) { SelectedElement = index; if(SDL_GetTicks() - LastClickTime < 200) { pOnDoubleClick(); } else { LastClickTime = SDL_GetTicks(); UpdateList(); pOnSelectionChange(); SetActive(); } } } scrollbar.HandleMouseLeft(x - GetSize().x + scrollbar.GetSize().x,y,pressed); return true; } else { return scrollbar.HandleMouseLeft(x - GetSize().x + scrollbar.GetSize().x,y,pressed); } }
void ListBox::SetActive() { Widget::SetActive(); if((SelectedElement == -1) && (GetNumEntries() > 0)) { SelectedElement = 0; UpdateList(); pOnSelectionChange(); } }
void DropDownBox::onSelectionChange(bool bInteractive) { invalidateForeground(); if(bAutocloseListBoxOnSelectionChange) { bShowListBox = false; } if(pOnSelectionChange) { pOnSelectionChange(bInteractive); } }