EXT-8061 FIXED resetting selection inside accordion (panel outfit edit)
- added resetting lists selection on tabs state changes - added committing on tab selection change - added filtering wearables by at first by a selected tab and then by an expended tab Reviewed by Vadim Savchuk at https://codereview.productengine.com/secondlife/r/696 --HG-- branch : product-enginemaster
parent
3e7af3244f
commit
979dc6257a
|
|
@ -281,7 +281,11 @@ LLCOFWearables::LLCOFWearables() : LLPanel(),
|
|||
mAttachments(NULL),
|
||||
mClothing(NULL),
|
||||
mBodyParts(NULL),
|
||||
mLastSelectedList(NULL)
|
||||
mLastSelectedList(NULL),
|
||||
mClothingTab(NULL),
|
||||
mAttachmentsTab(NULL),
|
||||
mBodyPartsTab(NULL),
|
||||
mLastSelectedTab(NULL)
|
||||
{
|
||||
mClothingMenu = new CofClothingContextMenu(this);
|
||||
mAttachmentMenu = new CofAttachmentContextMenu(this);
|
||||
|
|
@ -319,6 +323,16 @@ BOOL LLCOFWearables::postBuild()
|
|||
mAttachments->setComparator(&WEARABLE_NAME_COMPARATOR);
|
||||
mBodyParts->setComparator(&WEARABLE_NAME_COMPARATOR);
|
||||
|
||||
|
||||
mClothingTab = getChild<LLAccordionCtrlTab>("tab_clothing");
|
||||
mClothingTab->setDropDownStateChangedCallback(boost::bind(&LLCOFWearables::onAccordionTabStateChanged, this, _1, _2));
|
||||
|
||||
mAttachmentsTab = getChild<LLAccordionCtrlTab>("tab_attachments");
|
||||
mAttachmentsTab->setDropDownStateChangedCallback(boost::bind(&LLCOFWearables::onAccordionTabStateChanged, this, _1, _2));
|
||||
|
||||
mBodyPartsTab = getChild<LLAccordionCtrlTab>("tab_body_parts");
|
||||
mBodyPartsTab->setDropDownStateChangedCallback(boost::bind(&LLCOFWearables::onAccordionTabStateChanged, this, _1, _2));
|
||||
|
||||
return LLPanel::postBuild();
|
||||
}
|
||||
|
||||
|
|
@ -338,6 +352,28 @@ void LLCOFWearables::onSelectionChange(LLFlatListView* selected_list)
|
|||
onCommit();
|
||||
}
|
||||
|
||||
void LLCOFWearables::onAccordionTabStateChanged(LLUICtrl* ctrl, const LLSD& expanded)
|
||||
{
|
||||
bool had_selected_items = mClothing->numSelected() || mAttachments->numSelected() || mBodyParts->numSelected();
|
||||
mClothing->resetSelection(true);
|
||||
mAttachments->resetSelection(true);
|
||||
mBodyParts->resetSelection(true);
|
||||
|
||||
bool tab_selection_changed = false;
|
||||
LLAccordionCtrlTab* tab = dynamic_cast<LLAccordionCtrlTab*>(ctrl);
|
||||
if (tab && tab != mLastSelectedTab)
|
||||
{
|
||||
mLastSelectedTab = tab;
|
||||
tab_selection_changed = true;
|
||||
}
|
||||
|
||||
if (had_selected_items || tab_selection_changed)
|
||||
{
|
||||
//sending commit signal to indicate selection changes
|
||||
onCommit();
|
||||
}
|
||||
}
|
||||
|
||||
void LLCOFWearables::refresh()
|
||||
{
|
||||
typedef std::vector<LLSD> values_vector_t;
|
||||
|
|
@ -617,6 +653,30 @@ LLAssetType::EType LLCOFWearables::getExpandedAccordionAssetType()
|
|||
return result;
|
||||
}
|
||||
|
||||
LLAssetType::EType LLCOFWearables::getSelectedAccordionAssetType()
|
||||
{
|
||||
//*TODO share the code with ::getExpandedAccordionAssetType(...)
|
||||
static LLAccordionCtrl* accordion_ctrl = getChild<LLAccordionCtrl>("cof_wearables_accordion");
|
||||
const LLAccordionCtrlTab* selected_tab = accordion_ctrl->getSelectedTab();
|
||||
|
||||
if (selected_tab == mClothingTab)
|
||||
{
|
||||
return LLAssetType::AT_CLOTHING;
|
||||
}
|
||||
else if (selected_tab == mAttachmentsTab)
|
||||
{
|
||||
return LLAssetType::AT_OBJECT;
|
||||
}
|
||||
else if (selected_tab == mBodyPartsTab)
|
||||
{
|
||||
return LLAssetType::AT_BODYPART;
|
||||
}
|
||||
else
|
||||
{
|
||||
return LLAssetType::AT_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
void LLCOFWearables::onListRightClick(LLUICtrl* ctrl, S32 x, S32 y, LLListContextMenu* menu)
|
||||
{
|
||||
if(menu)
|
||||
|
|
|
|||
|
|
@ -40,6 +40,7 @@
|
|||
#include "llappearancemgr.h"
|
||||
#include "llinventorymodel.h"
|
||||
|
||||
class LLAccordionCtrlTab;
|
||||
class LLListContextMenu;
|
||||
class LLPanelClothingListItem;
|
||||
class LLPanelBodyPartsListItem;
|
||||
|
|
@ -84,6 +85,7 @@ public:
|
|||
void clear();
|
||||
|
||||
LLAssetType::EType getExpandedAccordionAssetType();
|
||||
LLAssetType::EType getSelectedAccordionAssetType();
|
||||
|
||||
LLCOFCallbacks& getCOFCallbacks() { return mCOFCallbacks; }
|
||||
|
||||
|
|
@ -94,6 +96,7 @@ protected:
|
|||
|
||||
void addClothingTypesDummies(const LLAppearanceMgr::wearables_by_type_t& clothing_by_type);
|
||||
void onSelectionChange(LLFlatListView* selected_list);
|
||||
void onAccordionTabStateChanged(LLUICtrl* ctrl, const LLSD& expanded);
|
||||
|
||||
LLPanelClothingListItem* buildClothingListItem(LLViewerInventoryItem* item, bool first, bool last);
|
||||
LLPanelBodyPartsListItem* buildBodypartListItem(LLViewerInventoryItem* item);
|
||||
|
|
@ -107,6 +110,12 @@ protected:
|
|||
|
||||
LLFlatListView* mLastSelectedList;
|
||||
|
||||
LLAccordionCtrlTab* mClothingTab;
|
||||
LLAccordionCtrlTab* mAttachmentsTab;
|
||||
LLAccordionCtrlTab* mBodyPartsTab;
|
||||
|
||||
LLAccordionCtrlTab* mLastSelectedTab;
|
||||
|
||||
LLCOFCallbacks mCOFCallbacks;
|
||||
|
||||
LLListContextMenu* mClothingMenu;
|
||||
|
|
|
|||
|
|
@ -731,12 +731,19 @@ void LLPanelOutfitEdit::filterWearablesBySelectedItem(void)
|
|||
bool more_than_one_selected = ids.size() > 1;
|
||||
bool is_dummy_item = (ids.size() && dynamic_cast<LLPanelDummyClothingListItem*>(mCOFWearables->getSelectedItem()));
|
||||
|
||||
//expanded accordion tab determines filtering when no item is selected
|
||||
//selected and expanded accordion tabs determine filtering when no item is selected
|
||||
if (nothing_selected)
|
||||
{
|
||||
showWearablesListView();
|
||||
|
||||
switch (mCOFWearables->getExpandedAccordionAssetType())
|
||||
//selected accordion tab is more priority than expanded tab when determining filtering
|
||||
LLAssetType::EType type = mCOFWearables->getSelectedAccordionAssetType();
|
||||
if (type == LLAssetType::AT_NONE)
|
||||
{
|
||||
type = mCOFWearables->getExpandedAccordionAssetType();
|
||||
}
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case LLAssetType::AT_OBJECT:
|
||||
applyListViewFilter(LVIT_ATTACHMENT);
|
||||
|
|
|
|||
Loading…
Reference in New Issue