From c331607d97569be05f5f61abc93c6eac67ac070f Mon Sep 17 00:00:00 2001 From: Vadim Savchuk Date: Thu, 16 Sep 2010 22:01:40 +0300 Subject: STORM-185 FIXED Don't reset accordions in the Outfit Edit panel when a wearable gets worn. The fix consists of two parts: 1. Saving/restoring scrollbar position when refreshing the clothing/attachments/bodyparts lists (the lists get refreshed on COF change). 2. Not resetting expanded accordion tab upon wearing an item (which was introduced with the fix of EXT-8164). So, apart from preserving scrollbar position (which is what the bug reporter requests), I also fixed that when you wear something, the Clothing accordion was always expanded. --- indra/newview/llcofwearables.cpp | 19 ++++++++++++++++++- indra/newview/llsidepanelappearance.cpp | 2 ++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/indra/newview/llcofwearables.cpp b/indra/newview/llcofwearables.cpp index b1e11e1a2a..84c560639e 100644 --- a/indra/newview/llcofwearables.cpp +++ b/indra/newview/llcofwearables.cpp @@ -397,12 +397,20 @@ void LLCOFWearables::refresh() mCOFVersion = catp->getVersion(); + // Save current scrollbar position. + typedef std::map scroll_pos_map_t; + scroll_pos_map_t saved_scroll_pos; + + saved_scroll_pos[mAttachments] = mAttachments->getVisibleContentRect(); + saved_scroll_pos[mClothing] = mClothing->getVisibleContentRect(); + saved_scroll_pos[mBodyParts] = mBodyParts->getVisibleContentRect(); + + // Save current selection. typedef std::vector values_vector_t; typedef std::map selection_map_t; selection_map_t preserve_selection; - // Save current selection mAttachments->getSelectedValues(preserve_selection[mAttachments]); mClothing->getSelectedValues(preserve_selection[mClothing]); mBodyParts->getSelectedValues(preserve_selection[mBodyParts]); @@ -450,6 +458,15 @@ void LLCOFWearables::refresh() list->setCommitOnSelectionChange(true); } + + // Restore previous scrollbar position. + for (scroll_pos_map_t::const_iterator it = saved_scroll_pos.begin(); it != saved_scroll_pos.end(); ++it) + { + LLFlatListView* list = it->first; + LLRect scroll_pos = it->second; + + list->scrollToShowRect(scroll_pos); + } } diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp index 7206e4fcaf..a3c6a7b6f1 100644 --- a/indra/newview/llsidepanelappearance.cpp +++ b/indra/newview/llsidepanelappearance.cpp @@ -286,6 +286,8 @@ void LLSidepanelAppearance::showOutfitsInventoryPanel() void LLSidepanelAppearance::showOutfitEditPanel() { + if (mOutfitEdit && mOutfitEdit->getVisible()) return; + // Accordion's state must be reset in all cases except the one when user // is returning back to the mOutfitEdit panel from the mEditWearable panel. // The simplest way to control this is to check the visibility state of the mEditWearable -- cgit v1.2.3