EXT-7963 FIXED (Edit Outfit > Add More > Do not switch to next item type after add/replace)
- Added selected item type (in flat list view) as criterion when determining filter type in 'Add More' panel - Fixed LLAccordionCtrl::getSelectedTab() method. When 'selection_enabled = false' for LLAccordionCtrlTab, LLAccordionCtrl::getSelectedTab() returned NULL, even if some accordion tab was selected. Now it's OK. Method returns currently selected LLAccordionCtrlTab. Reviewed by Mike Antipov, Neal Orman and Richard Nelson at https://codereview.productengine.com/secondlife/r/790/ --HG-- branch : product-enginemaster
parent
002bbd885b
commit
bdacad23bb
|
|
@ -765,6 +765,17 @@ S32 LLAccordionCtrl::notifyParent(const LLSD& info)
|
|||
}
|
||||
return 0;
|
||||
}
|
||||
else if(str_action == "deselect_current")
|
||||
{
|
||||
// Reset selection to the currently selected tab.
|
||||
if (mSelectedTab)
|
||||
{
|
||||
mSelectedTab->setSelected(false);
|
||||
mSelectedTab = NULL;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else if (info.has("scrollToShowRect"))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -371,9 +371,11 @@ LLAccordionCtrlTab::LLAccordionCtrlTab(const LLAccordionCtrlTab::Params&p)
|
|||
mHeader = LLUICtrlFactory::create<LLAccordionCtrlTabHeader>(headerParams);
|
||||
addChild(mHeader, 1);
|
||||
|
||||
if (p.selection_enabled)
|
||||
LLFocusableElement::setFocusReceivedCallback(boost::bind(&LLAccordionCtrlTab::selectOnFocusReceived, this));
|
||||
|
||||
if (!p.selection_enabled)
|
||||
{
|
||||
LLFocusableElement::setFocusReceivedCallback(boost::bind(&LLAccordionCtrlTab::selectOnFocusReceived, this));
|
||||
LLFocusableElement::setFocusLostCallback(boost::bind(&LLAccordionCtrlTab::deselectOnFocusLost, this));
|
||||
}
|
||||
|
||||
reshape(100, 200,FALSE);
|
||||
|
|
@ -598,6 +600,15 @@ void LLAccordionCtrlTab::selectOnFocusReceived()
|
|||
getParent()->notifyParent(LLSD().with("action", "select_current"));
|
||||
}
|
||||
|
||||
void LLAccordionCtrlTab::deselectOnFocusLost()
|
||||
{
|
||||
if(getParent()) // A parent may not be set if tabs are added dynamically.
|
||||
{
|
||||
getParent()->notifyParent(LLSD().with("action", "deselect_current"));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
S32 LLAccordionCtrlTab::getHeaderHeight()
|
||||
{
|
||||
return mHeaderVisible?HEADER_HEIGHT:0;
|
||||
|
|
|
|||
|
|
@ -220,6 +220,7 @@ protected:
|
|||
LLView* findContainerView ();
|
||||
|
||||
void selectOnFocusReceived();
|
||||
void deselectOnFocusLost();
|
||||
|
||||
private:
|
||||
|
||||
|
|
|
|||
|
|
@ -841,15 +841,38 @@ void LLPanelOutfitEdit::filterWearablesBySelectedItem(void)
|
|||
bool more_than_one_selected = ids.size() > 1;
|
||||
bool is_dummy_item = (ids.size() && dynamic_cast<LLPanelDummyClothingListItem*>(mCOFWearables->getSelectedItem()));
|
||||
|
||||
//selected and expanded accordion tabs determine filtering when no item is selected
|
||||
// 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)
|
||||
{
|
||||
showWearablesListView();
|
||||
|
||||
//selected accordion tab is more priority than expanded tab when determining filtering
|
||||
//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();
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue