void CGUIBaseContainer::UpdateListProvider(bool forceRefresh /* = false */) { if (m_listProvider) { if (m_listProvider->Update(forceRefresh)) { // save the current item int currentItem = GetSelectedItem(); CGUIListItem *current = (currentItem >= 0 && currentItem < (int)m_items.size()) ? m_items[currentItem].get() : NULL; const std::string prevSelectedPath((current && current->IsFileItem()) ? static_cast<CFileItem *>(current)->GetPath() : ""); Reset(); m_listProvider->Fetch(m_items); SetPageControlRange(); // update the newly selected item bool found = false; // first, try to re-identify selected item by comparing item pointers, though it is not guaranteed that item instances got not recreated on update. for (int i = 0; i < (int)m_items.size(); i++) { if (m_items[i].get() == current) { found = true; if (i != currentItem) { SelectItem(i); break; } } } if (!found && !prevSelectedPath.empty()) { // as fallback, try to re-identify selected item by comparing item paths. for (int i = 0; i < static_cast<int>(m_items.size()); i++) { const CGUIListItemPtr c(m_items[i]); if (c->IsFileItem()) { const std::string &selectedPath = static_cast<CFileItem *>(c.get())->GetPath(); if (selectedPath == prevSelectedPath) { found = true; if (i != currentItem) { SelectItem(i); break; } } } } } if (!found && currentItem >= (int)m_items.size()) SelectItem(m_items.size()-1); SetInvalid(); } // always update the scroll by letter, as the list provider may have altered labels // while not actually changing the list items. UpdateScrollByLetter(); } }
void CGUIListBox::MoveUp() { if (markListItem) { CGUIListItem *item = items->GetPrev(markListItem); if (item) item->Mark(); } }
void CGUIListBox::UpdateList() { CGUIListItem *e; CGUIListElement<CGUIListItem>* le = items->GetNextListElement(0); float px=-columnWidth-columnGap, py=0; int i=0; numColumns=0; while(le) { if((e=items->GetObjectFromListElement(le))) { if((i++)%numLines==0) { py=0; px+=columnWidth+columnGap; numColumns++; } e->Move(px,py); if(!e->IsVisible()) e->SetVisible(1); py+=listItemHeight; } le=items->GetNextListElement(le); } SetBackWindowNormalSize(numColumns * (columnWidth+columnGap), listItemHeight*numLines); }
void CGUIListBox::MoveDown() { if (markListItem) { CGUIListItem *item = items->GetNext(markListItem); if (item) item->Mark(); } }
int CMMDesktop::PlayLevel(int restart) { CGUIListItem *li = levBrowser->GetSelectedItem(); if (li) { return PlayLevel(li->GetData(), restart); } return 0; }
void CGUIListBox::MoveRight() { if (markListItem) { CGUIListItem *item = markListItem; for (int f=0; f<numLines && items->GetNext(item); f++) { item = items->GetNext(item); } item->Mark(); } }
void CGUIGridList_Impl::SetItemData ( int iRow, int hColumn, const char* pszData ) { // Get the current item at that offset and set the text CGUIListItem* pItem = GetItem ( iRow, hColumn ); if ( pItem ) { pItem->SetData ( pszData ); } }
void CGUIGridList_Impl::SetItemData ( int iRow, int hColumn, void* pData, CGUICallback<void,void*> deleteDataCallback ) { // Get the current item at that offset and set the text CGUIListItem* pItem = GetItem ( iRow, hColumn ); if ( pItem ) { pItem->SetData ( pData, deleteDataCallback ); } }
bool CLocalServer::OnDelButtonClick ( CGUIElement *pElement ) { CGUIListItem *pItem = m_pResourcesCur->GetSelectedItem (); if ( pItem ) { m_pResourcesAll->SetItemText ( m_pResourcesAll->AddRow (), m_hResourcesAll, &pItem->GetText().c_str()[3] ); m_pResourcesCur->RemoveRow ( m_pResourcesCur->GetItemRowIndex ( pItem ) ); } return true; }
void CGUIBaseContainer::DumpTextureUse() { CLog::Log(LOGDEBUG, "%s for container %u", __FUNCTION__, GetID()); for (unsigned int i = 0; i < m_items.size(); ++i) { CGUIListItem *item = m_items[i]; if (item->GetFocusedLayout()) item->GetFocusedLayout()->DumpTextureUse(); if (item->GetLayout()) item->GetLayout()->DumpTextureUse(); } }
CGUIListItem* CGUIListBox::AddItem(char *labelString, UINT color, CMMDirFile* dirFile) { CGUIListItem* ti; ti = new CGUIListItem(listIndex++,labelString,color,this); ti->AcceptEvent(GetID(),EClicked); ti->dirFile = dirFile; items->AddToBack(ti); AddBackElem(ti); return ti; }
CStdString CGUIBaseContainer::GetDescription() const { CStdString strLabel; int item = GetSelectedItem(); if (item >= 0 && item < (int)m_items.size()) { CGUIListItem *pItem = m_items[item]; if (pItem->m_bIsFolder) strLabel.Format("[%s]", pItem->GetLabel().c_str()); else strLabel = pItem->GetLabel(); } return strLabel; }
void CMMDesktop::EditLevel() { mainGUI->SetEditorLevelInit(0); CGUIListItem *li = levBrowser->GetSelectedItem(); if (li) { CMMDirFile *file = li->GetData(); if (file->Tags & eMMLTeditable) { mainGUI->SetEditorLevelInit(file->LevelPath); eventServer->SendPriorityEvent(ECommand,GetID(),mainGUI->handler->GetID(),2); } } // eventServer->SendPriorityEvent(ECommand,GetID(),mainGUI->handler->GetID(),2); }
void CGUIGridList_Impl::SetItemImage ( int iRow, int hColumn, CGUIStaticImage* pImage ) { // Get the current item at that offset CGUIListItem* pItem = GetItem ( iRow, hColumn ); if ( pItem != NULL ) { pItem->SetImage ( pImage ); } else { // If it doesn't, create it and set it in the gridlist CGUIListItem_Impl* pNewItem = new CGUIListItem_Impl ( "", CGUIListItem_Impl::Type::ImageItem, (CGUIStaticImage_Impl*) pImage ); CEGUI::ListboxItem* pListboxItem = pNewItem->GetListItem (); reinterpret_cast < CEGUI::MultiColumnList* > ( m_pWindow ) -> setItem ( pListboxItem, hColumn, iRow ); // Put our new item in the map m_Items [ pNewItem->GetListItem () ] = pNewItem; } }
CGUIListItemLayout *CGUIBaseContainer::GetFocusedLayout() const { CGUIListItem *item = GetListItem(0); if (item) return item->GetFocusedLayout(); return NULL; }
void* CGUIGridList_Impl::GetItemData ( int iRow, int hColumn ) { CGUIListItem* pItem = GetItem ( iRow, hColumn ); return pItem ? pItem->GetData () : NULL; }