コード例 #1
0
ファイル: GUIBaseContainer.cpp プロジェクト: FernetMenta/xbmc
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();
  }
}
コード例 #2
0
ファイル: list.cpp プロジェクト: HonzaMD/Krkal2
void CGUIListBox::MoveUp() {
	if (markListItem) {
		CGUIListItem *item = items->GetPrev(markListItem);
		if (item)
			item->Mark();
	}
}
コード例 #3
0
ファイル: list.cpp プロジェクト: HonzaMD/Krkal2
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);
}
コード例 #4
0
ファイル: list.cpp プロジェクト: HonzaMD/Krkal2
void CGUIListBox::MoveDown() {
	if (markListItem) {
		CGUIListItem *item = items->GetNext(markListItem);
		if (item)
			item->Mark();
	}
}
コード例 #5
0
ファイル: MMDesktop.cpp プロジェクト: HonzaMD/Krkal2
int CMMDesktop::PlayLevel(int restart) {
	CGUIListItem *li = levBrowser->GetSelectedItem();
	if (li) {
		return PlayLevel(li->GetData(), restart);
	}
	return 0;
}
コード例 #6
0
ファイル: list.cpp プロジェクト: HonzaMD/Krkal2
void CGUIListBox::MoveRight() {
	if (markListItem) {
		CGUIListItem *item = markListItem;
		for (int f=0; f<numLines && items->GetNext(item); f++) {
			item = items->GetNext(item);
		}
		item->Mark();
	}
}
コード例 #7
0
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 );
    }
}
コード例 #8
0
ファイル: CGUIGridList_Impl.cpp プロジェクト: EagleShen/MTA
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 );
    }
}
コード例 #9
0
ファイル: CLocalServer.cpp プロジェクト: EagleShen/MTA
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;
}
コード例 #10
0
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();
    }
}
コード例 #11
0
ファイル: list.cpp プロジェクト: HonzaMD/Krkal2
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;
}
コード例 #12
0
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;
}
コード例 #13
0
ファイル: MMDesktop.cpp プロジェクト: HonzaMD/Krkal2
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);

}
コード例 #14
0
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;
    }
}
コード例 #15
0
CGUIListItemLayout *CGUIBaseContainer::GetFocusedLayout() const
{
    CGUIListItem *item = GetListItem(0);
    if (item) return item->GetFocusedLayout();
    return NULL;
}
コード例 #16
0
void* CGUIGridList_Impl::GetItemData ( int iRow, int hColumn )
{
    CGUIListItem* pItem = GetItem ( iRow, hColumn );

    return pItem ? pItem->GetData () : NULL;
}