Example #1
0
// static
void LLWearableItemsList::ContextMenu::createNewWearable(const LLUUID& item_id)
{
    LLViewerInventoryItem* item = gInventory.getLinkedItem(item_id);
    if (!item || !item->isWearableType()) return;

    LLAgentWearables::createWearable(item->getWearableType(), true);
}
Example #2
0
bool LLFindWearablesEx::operator()(LLInventoryCategory* cat, LLInventoryItem* item)
{
	LLViewerInventoryItem *vitem = dynamic_cast<LLViewerInventoryItem*>(item);
	if (!vitem) return false;

	// Skip non-wearables.
	if (!vitem->isWearableType() && vitem->getType() != LLAssetType::AT_OBJECT)
	{
		return false;
	}

	// Skip body parts if requested.
	if (!mIncludeBodyParts && vitem->getType() == LLAssetType::AT_BODYPART)
	{
		return false;
	}

	// Skip broken links.
	if (vitem->getIsBrokenLink())
	{
		return false;
	}

	return (bool) get_is_item_worn(item->getUUID()) == mIsWorn;
}
void LLMakeOutfitDialog::getIncludedItems(LLInventoryModel::item_array_t& item_list)
{
	LLInventoryModel::cat_array_t *cats;
	LLInventoryModel::item_array_t *items;
	gInventory.getDirectDescendentsOf(LLAppearanceMgr::instance().getCOF(), cats, items);
	for (LLInventoryModel::item_array_t::const_iterator iter = items->begin(); iter != items->end(); ++iter)
	{
		LLViewerInventoryItem* item = (*iter);
		if (!item)
			continue;
		if (item->isWearableType())
		{
			LLWearableType::EType type = item->getWearableType();
			if (type < LLWearableType::WT_COUNT && childGetValue(mCheckBoxList[type].first).asBoolean())
			{
				item_list.push_back(item);
			}
		}
		else
		{
			LLViewerJointAttachment* attachment = gAgentAvatarp->getWornAttachmentPoint(item->getLinkedUUID());
			if (attachment && childGetValue(std::string("checkbox_")+attachment->getName()).asBoolean())
			{
				item_list.push_back(item);
			}
		}
	}
}
Example #4
0
void LLWearableItemsList::ContextMenu::updateItemsLabels(LLContextMenu* menu)
{
    llassert(menu);
    if (!menu) return;

    // Set proper label for the "Create new <WEARABLE_TYPE>" menu item.
    LLViewerInventoryItem* item = gInventory.getLinkedItem(mUUIDs.back());
    if (!item || !item->isWearableType()) return;

    LLWearableType::EType w_type = item->getWearableType();
    std::string new_label = LLTrans::getString("create_new_" + LLWearableType::getTypeName(w_type));

    LLMenuItemGL* menu_item = menu->getChild<LLMenuItemGL>("create_new");
    menu_item->setLabel(new_label);
}
Example #5
0
	// Get wearable type of the given item.
	//
	// There is a special case: so-called "dummy items"
	// (i.e. the ones that are there just to indicate that you're not wearing
	// any wearables of the corresponding type. They are currently grayed out
	// and suffixed with "not worn").
	// Those items don't have an UUID, but they do have an associated wearable type.
	// If the user has invoked context menu for such item,
	// we ignore the passed item_id and retrieve wearable type from the item.
	LLWearableType::EType getWearableType(const LLUUID& item_id)
	{
		if (!isDummyItem(item_id))
		{
			LLViewerInventoryItem* item = gInventory.getLinkedItem(item_id);
			if (item && item->isWearableType())
			{
				return item->getWearableType();
			}
		}
		else if (mCOFWearables) // dummy item selected
		{
			LLPanelDummyClothingListItem* item;

			item = dynamic_cast<LLPanelDummyClothingListItem*>(mCOFWearables->getSelectedItem());
			if (item)
			{
				return item->getWearableType();
			}
		}

		return LLWearableType::WT_NONE;
	}
void LLPanelOutfitEdit::filterWearablesBySelectedItem(void)
{
	if (!mAddWearablesPanel->getVisible()) return;
	
	uuid_vec_t ids;
	mCOFWearables->getSelectedUUIDs(ids);

	bool nothing_selected = ids.empty();
	bool one_selected = ids.size() == 1;
	bool more_than_one_selected = ids.size() > 1;
	bool is_dummy_item = (ids.size() && dynamic_cast<LLPanelDummyClothingListItem*>(mCOFWearables->getSelectedItem()));

	// selected, expanded accordion tabs and selection in flat list view determine filtering when no item is selected in COF
	// selection in flat list view participates in determining filtering because of EXT-7963
	// So the priority of criterions in is:
	//                   1. Selected accordion tab            |  IF (any accordion selected)
	//                                                        |     filter_type = selected_accordion_type
	//                   2. Selected item in flat list view   |  ELSEIF (any item in flat list view selected)
	//                                                        |     filter_type = selected_item_type
	//                   3. Expanded accordion tab            |  ELSEIF (any accordion expanded)
	//                                                        |      filter_type = expanded accordion_type
	if (nothing_selected)
	{
		if (mInventoryItemsPanel->getVisible())
		{
			return;
		}
		showWearablesListView();

		//selected accordion tab is more priority than expanded tab
		//and selected item in flat list view of 'Add more' panel when
		//determining filtering
		LLAssetType::EType type = mCOFWearables->getSelectedAccordionAssetType();
		if (type == LLAssetType::AT_NONE)
		{ //no accordion selected

			// when no accordion selected then selected item from flat list view
			// has more priority than expanded when determining filtering
			LLUUID selected_item_id = mWearableItemsList->getSelectedUUID();
			LLViewerInventoryItem* item = gInventory.getLinkedItem(selected_item_id);
			if(item)
		{
				showFilteredWearablesListView(item->getWearableType());
				return;
			}

			// when no accordion selected and no selected items in flat list view
			// determine filtering according to expanded accordion
			type = mCOFWearables->getExpandedAccordionAssetType();
		}

		switch (type)
		{
		case LLAssetType::AT_OBJECT:
			applyListViewFilter(LVIT_ATTACHMENT);
			break;
		case LLAssetType::AT_BODYPART:
			applyListViewFilter(LVIT_BODYPART);
			break;
		case LLAssetType::AT_CLOTHING:
		default:
			applyListViewFilter(LVIT_CLOTHING);
			break;
		}

		return;
	}

	//resetting selection if more than one item is selected
	if (more_than_one_selected)
	{
		if (mInventoryItemsPanel->getVisible())
		{
			applyFolderViewFilter(FVIT_ALL);
			return;
		}

		showWearablesListView();
		applyListViewFilter(LVIT_ALL);
		return;
	}


	//filter wearables by a type represented by a dummy item
	if (one_selected && is_dummy_item)
	{
		if (mInventoryItemsPanel->getVisible())
		{
			applyFolderViewFilter(FVIT_WEARABLE);
			return;
		}

		onAddWearableClicked();
		return;
	}

	LLViewerInventoryItem* item = gInventory.getItem(ids[0]);
	if (!item && ids[0].notNull())
	{
		if (mInventoryItemsPanel->getVisible())
		{
			applyFolderViewFilter(FVIT_ALL);
			return;
		}
		//Inventory misses an item with non-zero id
		showWearablesListView();
		applyListViewFilter(LVIT_ALL);
		return;
	}

	if (item && one_selected && !is_dummy_item)
	{
		if (item->isWearableType())
		{
			if (mInventoryItemsPanel->getVisible())
			{
				applyFolderViewFilter(FVIT_WEARABLE);
				return;
			}
			//single clothing or bodypart item is selected
			showFilteredWearablesListView(item->getWearableType());
			return;
		}
		else
		{
			if (mInventoryItemsPanel->getVisible())
			{
				applyFolderViewFilter(FVIT_ATTACHMENT);
				return;
			}
			//attachment is selected
			showWearablesListView();
			applyListViewFilter(LVIT_ATTACHMENT);
			return;
		}
	}

}