Example #1
0
/*!
    Sets the given model to be used as the data provider for the list to \a playlist
*/
void QMediaList::setModel(const QMediaPlaylist& playlist)
{
    if(d->mediaPlaylist != playlist) {
        d->mediaPlaylist = playlist;
        d->needsRefresh = true;
        connect(&playlist, SIGNAL(dataChanged(QModelIndex,QModelIndex)), d, SLOT(setNeedsRefresh()));
        connect(&playlist, SIGNAL(layoutChanged()), d, SLOT(setNeedsRefresh()));
        connect(&playlist, SIGNAL(modelReset()), d, SLOT(setNeedsRefresh()));
        connect(&playlist, SIGNAL(rowsInserted(QModelIndex,int,int)), d, SLOT(setNeedsRefresh()));
        connect(&playlist, SIGNAL(rowsRemoved(QModelIndex,int,int)), d, SLOT(setNeedsRefresh()));
        reset();
    }
S32 LLPanelInventoryListItemBase::notify(const LLSD& info)
{
	S32 rv = 0;
	if(info.has("match_filter"))
	{
		mHighlightedText = info["match_filter"].asString();

		std::string test(mTitleCtrl->getText());
		LLStringUtil::toUpper(test);

		if(mHighlightedText.empty() || std::string::npos != test.find(mHighlightedText))
		{
			rv = 0; // substring is found
		}
		else
		{
			rv = -1;
		}

		setNeedsRefresh(true);
	}
	else
	{
		rv = LLPanel::notify(info);
	}
	return rv;
}
BOOL LLPanelInventoryListItemBase::postBuild()
{
	LLViewerInventoryItem* inv_item = getItem();
	if (inv_item)
	{
		mIconImage = LLInventoryIcon::getIcon(inv_item->getType(), inv_item->getInventoryType(), inv_item->getFlags(), FALSE);
		updateItem(inv_item->getName());
	}

	setNeedsRefresh(true);

	setWidgetsVisible(false);
	reshapeWidgets();

	return TRUE;
}
void LLInventoryItemsList::refresh()
{
	LLFastTimer _(FTM_INVENTORY_ITEMS_REFRESH);
	static const unsigned ADD_LIMIT = 20;

	uuid_vec_t added_items;
	uuid_vec_t removed_items;

	computeDifference(getIDs(), added_items, removed_items);

	bool add_limit_exceeded = false;
	unsigned int nadded = 0;

	uuid_vec_t::const_iterator it = added_items.begin();
	for( ; added_items.end() != it; ++it)
	{
		if(nadded >= ADD_LIMIT)
		{
			add_limit_exceeded = true;
			break;
		}
		LLViewerInventoryItem* item = gInventory.getItem(*it);
		// Do not rearrange items on each adding, let's do that on filter call
		llassert(item);
		if (item)
		{
			addNewItem(item, false);
			++nadded;
		}
	}

	it = removed_items.begin();
	for( ; removed_items.end() != it; ++it)
	{
		// don't filter items right away
		removeItemByUUID(*it, false);
	}

	// Filter, rearrange and notify parent about shape changes
	filterItems();

	bool needs_refresh = add_limit_exceeded;
	setNeedsRefresh(needs_refresh);
	setForceRefresh(needs_refresh);
}
void LLPanelInventoryListItemBase::draw()
{
	if (getNeedsRefresh())
	{
		LLViewerInventoryItem* inv_item = getItem();
		if (inv_item)
		{
			updateItem(inv_item->getName());
		}
		setNeedsRefresh(false);
	}

	if (mHovered && mHoverImage)
	{
		mHoverImage->draw(getLocalRect());
	}

	if (mSelected && mSelectedImage)
	{
		mSelectedImage->draw(getLocalRect());
	}

	if (mSeparatorVisible && mSeparatorImage)
	{
		// place under bottom of listitem, using image height
		// item_pad in list using the item should be >= image height
		// to avoid cropping of top of the next item.
		LLRect separator_rect = getLocalRect();
		separator_rect.mTop = separator_rect.mBottom;
		separator_rect.mBottom -= mSeparatorImage->getHeight();
		F32 alpha = getCurrentTransparency();
		mSeparatorImage->draw(separator_rect, UI_VERTEX_COLOR % alpha);
	}
	
	LLPanel::draw();
}