From 8785c7077633e8cfe46f4aea2d861bfa813d79b7 Mon Sep 17 00:00:00 2001 From: Paul ProductEngine Date: Thu, 14 Apr 2011 18:09:49 +0300 Subject: STORM-898 Filter settings do not reset after unchecking 'Since Logoff' checkbox - Corrected logic in inventory filter. Calculation of whether filter is more or less restrictive depending on time parameters was wrong. --- indra/newview/llpanelmaininventory.cpp | 22 +--------------------- 1 file changed, 1 insertion(+), 21 deletions(-) (limited to 'indra/newview/llpanelmaininventory.cpp') diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index 0c3f2f3e31..90617b7dc7 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -81,7 +81,6 @@ public: BOOL getCheckSinceLogoff(); static void onTimeAgo(LLUICtrl*, void *); - static void onCheckSinceLogoff(LLUICtrl*, void *); static void onCloseBtn(void* user_data); static void selectAllTypes(void* user_data); static void selectNoTypes(void* user_data); @@ -619,20 +618,6 @@ LLFloaterInventoryFinder::LLFloaterInventoryFinder(LLPanelMainInventory* invento updateElementsFromFilter(); } - -void LLFloaterInventoryFinder::onCheckSinceLogoff(LLUICtrl *ctrl, void *user_data) -{ - LLFloaterInventoryFinder *self = (LLFloaterInventoryFinder *)user_data; - if (!self) return; - - bool since_logoff= self->getChild("check_since_logoff")->getValue(); - - if (!since_logoff && - !( self->mSpinSinceDays->get() || self->mSpinSinceHours->get() ) ) - { - self->mSpinSinceHours->set(1.0f); - } -} BOOL LLFloaterInventoryFinder::postBuild() { const LLRect& viewrect = mPanelMainInventory->getRect(); @@ -647,9 +632,6 @@ BOOL LLFloaterInventoryFinder::postBuild() mSpinSinceDays = getChild("spin_days_ago"); childSetCommitCallback("spin_days_ago", onTimeAgo, this); - // mCheckSinceLogoff = getChild("check_since_logoff"); - childSetCommitCallback("check_since_logoff", onCheckSinceLogoff, this); - childSetAction("Close", onCloseBtn, this); updateElementsFromFilter(); @@ -660,12 +642,10 @@ void LLFloaterInventoryFinder::onTimeAgo(LLUICtrl *ctrl, void *user_data) LLFloaterInventoryFinder *self = (LLFloaterInventoryFinder *)user_data; if (!self) return; - bool since_logoff=true; if ( self->mSpinSinceDays->get() || self->mSpinSinceHours->get() ) { - since_logoff = false; + self->getChild("check_since_logoff")->setValue(false); } - self->getChild("check_since_logoff")->setValue(since_logoff); } void LLFloaterInventoryFinder::changeFilter(LLInventoryFilter* filter) -- cgit v1.3 From 64b192ed6274349a4b8844a9e0165e8b25f3a6ad Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Tue, 3 May 2011 13:18:16 -0700 Subject: EXP-756 : Fix inventory folder ordering on launch --- indra/newview/llfolderview.cpp | 12 ------------ indra/newview/llfolderview.h | 1 - indra/newview/llfolderviewitem.cpp | 2 +- indra/newview/llinventoryfilter.h | 11 +++++++---- indra/newview/llpanelmaininventory.cpp | 10 ++++++++++ 5 files changed, 18 insertions(+), 18 deletions(-) (limited to 'indra/newview/llpanelmaininventory.cpp') diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp index b3b1ce5743..3884b94b60 100644 --- a/indra/newview/llfolderview.cpp +++ b/indra/newview/llfolderview.cpp @@ -301,18 +301,6 @@ BOOL LLFolderView::canFocusChildren() const return FALSE; } -void LLFolderView::checkTreeResortForModelChanged() -{ - if (mSortOrder & LLInventoryFilter::SO_DATE && !(mSortOrder & LLInventoryFilter::SO_FOLDERS_BY_NAME)) - { - // This is the case where something got added or removed. If we are date sorting - // everything including folders, then we need to rebuild the whole tree. - // Just set to something not SO_DATE to force the folder most resent date resort. - mSortOrder = mSortOrder & ~LLInventoryFilter::SO_DATE; - setSortOrder(mSortOrder | LLInventoryFilter::SO_DATE); - } -} - static LLFastTimer::DeclareTimer FTM_SORT("Sort Inventory"); void LLFolderView::setSortOrder(U32 order) diff --git a/indra/newview/llfolderview.h b/indra/newview/llfolderview.h index 210ba9eb3c..1464a058d8 100644 --- a/indra/newview/llfolderview.h +++ b/indra/newview/llfolderview.h @@ -101,7 +101,6 @@ public: // FolderViews default to sort by name. This will change that, // and resort the items if necessary. void setSortOrder(U32 order); - void checkTreeResortForModelChanged(); void setFilterPermMask(PermissionMask filter_perm_mask); void setAllowMultiSelect(BOOL allow) { mAllowMultiSelect = allow; } diff --git a/indra/newview/llfolderviewitem.cpp b/indra/newview/llfolderviewitem.cpp index 3c36248c1f..e9d1ad3a9e 100644 --- a/indra/newview/llfolderviewitem.cpp +++ b/indra/newview/llfolderviewitem.cpp @@ -1835,7 +1835,7 @@ void LLFolderViewFolder::sortBy(U32 order) return; } - // Propegate this change to sub folders + // Propagate this change to sub folders for (folders_t::iterator iter = mFolders.begin(); iter != mFolders.end();) { diff --git a/indra/newview/llinventoryfilter.h b/indra/newview/llinventoryfilter.h index f488b2ed1b..39e6f797a2 100644 --- a/indra/newview/llinventoryfilter.h +++ b/indra/newview/llinventoryfilter.h @@ -66,10 +66,13 @@ public: FILTERLINK_ONLY_LINKS // only show links }; - // REFACTOR: Change this to an enum. - static const U32 SO_DATE = 1; - static const U32 SO_FOLDERS_BY_NAME = 2; - static const U32 SO_SYSTEM_FOLDERS_TO_TOP = 4; + enum ESortOrderType + { + SO_NAME = 0, // Sort inventory by name + SO_DATE = 0x1, // Sort inventory by date + SO_FOLDERS_BY_NAME = 0x1 << 1, // Force folder sort by name + SO_SYSTEM_FOLDERS_TO_TOP = 0x1 << 2 // Force system folders to be on top + }; LLInventoryFilter(const std::string& name); virtual ~LLInventoryFilter(); diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index 90617b7dc7..b9a6938492 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -192,6 +192,16 @@ BOOL LLPanelMainInventory::postBuild() mMenuAdd->getChild("Upload Animation")->setLabelArg("[COST]", upload_cost); mMenuAdd->getChild("Bulk Upload")->setLabelArg("[COST]", upload_cost); + // EXP-756: Force resorting of the list: in the case of date sorting, one didn't have enough information at + // the beginning to correctly sort the folders. Later resort didn't do anything as the order value was + // set correctly. The workaround is to reset the order to alphabetical (or anything) then to the correct order. + if (mActivePanel) + { + U32 order = mActivePanel->getSortOrder(); + mActivePanel->setSortOrder(LLInventoryFilter::SO_NAME); + mActivePanel->setSortOrder(order); + } + return TRUE; } -- cgit v1.3 From 45145fe7e2b6855b08b2ab94f07e852ef7ffffa3 Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Tue, 3 May 2011 17:34:53 -0700 Subject: EXP-756 : Move the folder resort to first draw and do it only once --- indra/newview/llpanelmaininventory.cpp | 22 ++++++++++++---------- indra/newview/llpanelmaininventory.h | 1 + 2 files changed, 13 insertions(+), 10 deletions(-) (limited to 'indra/newview/llpanelmaininventory.cpp') diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index b9a6938492..f79a1bb5ab 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -139,6 +139,7 @@ BOOL LLPanelMainInventory::postBuild() mActivePanel->getFilter()->markDefault(); mActivePanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState); mActivePanel->setSelectCallback(boost::bind(&LLPanelMainInventory::onSelectionChange, this, mActivePanel, _1, _2)); + mResortActivePanel = true; } LLInventoryPanel* recent_items_panel = getChild("Recent Items"); if (recent_items_panel) @@ -192,16 +193,6 @@ BOOL LLPanelMainInventory::postBuild() mMenuAdd->getChild("Upload Animation")->setLabelArg("[COST]", upload_cost); mMenuAdd->getChild("Bulk Upload")->setLabelArg("[COST]", upload_cost); - // EXP-756: Force resorting of the list: in the case of date sorting, one didn't have enough information at - // the beginning to correctly sort the folders. Later resort didn't do anything as the order value was - // set correctly. The workaround is to reset the order to alphabetical (or anything) then to the correct order. - if (mActivePanel) - { - U32 order = mActivePanel->getSortOrder(); - mActivePanel->setSortOrder(LLInventoryFilter::SO_NAME); - mActivePanel->setSortOrder(order); - } - return TRUE; } @@ -538,6 +529,17 @@ void LLPanelMainInventory::draw() { mFilterEditor->setText(mFilterSubString); } + if (mActivePanel && mResortActivePanel) + { + // EXP-756: Force resorting of the list the first time we draw the list: + // In the case of date sorting, we don't have enough information at initialization time + // to correctly sort the folders. Later manual resort doesn't do anything as the order value is + // set correctly. The workaround is to reset the order to alphabetical (or anything) then to the correct order. + U32 order = mActivePanel->getSortOrder(); + mActivePanel->setSortOrder(LLInventoryFilter::SO_NAME); + mActivePanel->setSortOrder(order); + mResortActivePanel = false; + } LLPanel::draw(); updateItemcountText(); } diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h index c2b78ff9ea..2b2ee1c0c9 100644 --- a/indra/newview/llpanelmaininventory.h +++ b/indra/newview/llpanelmaininventory.h @@ -121,6 +121,7 @@ private: LLTabContainer* mFilterTabs; LLHandle mFinderHandle; LLInventoryPanel* mActivePanel; + bool mResortActivePanel; LLSaveFolderState* mSavedFolderState; std::string mFilterText; std::string mFilterSubString; -- cgit v1.3