diff --git a/indra/llplugin/slplugin/CMakeLists.txt b/indra/llplugin/slplugin/CMakeLists.txt index 81d929969..e3950f68f 100755 --- a/indra/llplugin/slplugin/CMakeLists.txt +++ b/indra/llplugin/slplugin/CMakeLists.txt @@ -79,4 +79,8 @@ if (DARWIN) ) endif (DARWIN) +if (LINUX) + SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lrt") +endif (LINUX) + #ll_deploy_sharedlibs_command(SLPlugin) diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp index c496b91d3..abd60c564 100644 --- a/indra/llui/llview.cpp +++ b/indra/llui/llview.cpp @@ -161,10 +161,7 @@ LLView::~LLView() gFocusMgr.removeMouseCaptureWithoutCallback( this ); } - // TESTZONE DERF - //deleteAllChildren(); - deleteAllChildren(mDelayedDelete); - // + deleteAllChildren(); if (mParentView != NULL) { @@ -596,26 +593,8 @@ BOOL LLView::focusPrev(LLView::child_list_t & result) // delete all children. Override this function if you need to // perform any extra clean up such as cached pointers to selected // children, etc. -// -//void LLView::deleteAllChildren() -void LLView::deleteAllChildren(BOOL delay_delete) -// +void LLView::deleteAllChildren() { - // TESTZONE DERF - if(delay_delete) - { - child_list_t::iterator end = mChildList.end(); - for(child_list_t::iterator iter = mChildList.begin(); iter != end; ++iter) - { - if((*iter)->getParent() == this) - (*iter)->mParentView = NULL; - } - mCtrlOrder.clear(); - std::list children(mChildList); - gDeleteScheduler->addViewDeleteJob(children); - return; - } - // // clear out the control ordering mCtrlOrder.clear(); diff --git a/indra/llui/llview.h b/indra/llui/llview.h index 9c088ca47..7e8c8668a 100644 --- a/indra/llui/llview.h +++ b/indra/llui/llview.h @@ -328,13 +328,7 @@ public: BOOL focusNextRoot(); BOOL focusPrevRoot(); - // delete all children. Override this function if you need to - // perform any extra clean up such as cached pointers to selected - // children, etc. - // - //virtual void deleteAllChildren(); - virtual void deleteAllChildren(BOOL delay_delete = FALSE); - // + virtual void deleteAllChildren(); virtual void setTentative(BOOL b); virtual BOOL getTentative() const; diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp index 7edaa0f4d..6eec5fde9 100644 --- a/indra/newview/llfolderview.cpp +++ b/indra/newview/llfolderview.cpp @@ -162,7 +162,6 @@ LLFolderViewItem::LLFolderViewItem( const std::string& name, LLUIImagePtr icon, mIcon(icon), mHasVisibleChildren(FALSE), mIndentation(0), - mNumDescendantsSelected(0), mFiltered(FALSE), mLastFilterGeneration(-1), mStringMatchOffset(std::string::npos), @@ -282,40 +281,7 @@ void LLFolderViewItem::refreshFromListener() { if(mListener) { - //Super crazy hack to build the creator search label - RK - LLInventoryItem* item = gInventory.getItem(mListener->getUUID()); - std::string creator_name; - if(item) - { - if(item->getCreatorUUID().notNull()) - { - gCacheName->getFullName(item->getCreatorUUID(), creator_name); - } - } - mLabelCreator = creator_name; - /*if(creator_name == "(Loading...)") - mLabelCreator = ""; - else - mLabelCreator = creator_name;*/ - - //Label for desc search - std::string desc; - if (item) - { - if (!item->getDescription().empty()) - { - desc = item->getDescription(); - LLStringUtil::toUpper(desc); - } - } - mLabelDesc = desc; - - //Label for name search mLabel = mListener->getDisplayName(); - - //Build label for combined search - RK - mLabelAll = mLabel + " " + mLabelCreator + " " + mLabelDesc; - setIcon(mListener->getIcon()); time_t creation_date = mListener->getCreationDate(); if (mCreationDate != creation_date) @@ -325,6 +291,30 @@ void LLFolderViewItem::refreshFromListener() } mLabelStyle = mListener->getLabelStyle(); mLabelSuffix = mListener->getLabelSuffix(); + + LLInventoryItem* item = gInventory.getItem(mListener->getUUID()); + + std::string desc; + if (item) + { + if (!item->getDescription().empty()) + { + desc = item->getDescription(); + LLStringUtil::toUpper(desc); + } + } + mSearchableLabelDesc = desc; + + std::string creator_name; + if (item) + { + if (item->getCreatorUUID().notNull()) + { + gCacheName->getFullName(item->getCreatorUUID(), creator_name); + LLStringUtil::toUpper(creator_name); + } + } + mSearchableLabelCreator = creator_name; } } @@ -333,32 +323,12 @@ void LLFolderViewItem::refresh() refreshFromListener(); std::string searchable_label(mLabel); - std::string searchable_label_creator(mLabelCreator); - std::string searchable_label_desc(mLabelDesc); - std::string searchable_label_all(mLabelAll); - - //add the (no modify), (no transfer) etc stuff to each label. searchable_label.append(mLabelSuffix); - searchable_label_creator.append(mLabelSuffix); - searchable_label_desc.append(mLabelSuffix); - searchable_label_all.append(mLabelSuffix); - - //all labels need to be uppercase. LLStringUtil::toUpper(searchable_label); - LLStringUtil::toUpper(searchable_label_creator); - LLStringUtil::toUpper(searchable_label_desc); - LLStringUtil::toUpper(searchable_label_all); - if (mSearchableLabel.compare(searchable_label) || - mSearchableLabelCreator.compare(searchable_label_creator) || - mSearchableLabelDesc.compare(searchable_label_desc) || - mSearchableLabelAll.compare(searchable_label_all)) + if (mSearchableLabel.compare(searchable_label)) { mSearchableLabel.assign(searchable_label); - mSearchableLabelCreator.assign(searchable_label_creator); - mSearchableLabelDesc.assign(searchable_label_desc); - mSearchableLabelAll.assign(searchable_label_all); - dirtyFilter(); // some part of label has changed, so overall width has potentially changed if (mParentFolder) @@ -520,9 +490,16 @@ BOOL LLFolderViewItem::setSelection(LLFolderViewItem* selection, BOOL openitem, BOOL LLFolderViewItem::changeSelection(LLFolderViewItem* selection, BOOL selected) { - if(selection == this && mIsSelected != selected) + if (selection == this && mIsSelected != selected) { - mIsSelected = selected; + if (mIsSelected) + { + deselectItem(); + } + else + { + selectItem(); + } if(mListener) { mListener->selectItem(); @@ -532,22 +509,6 @@ BOOL LLFolderViewItem::changeSelection(LLFolderViewItem* selection, BOOL selecte return FALSE; } -void LLFolderViewItem::recursiveDeselect(BOOL deselect_self) -{ - if (mIsSelected && deselect_self) - { - mIsSelected = FALSE; - - // update ancestors' count of selected descendents - LLFolderViewFolder* parent_folder = getParentFolder(); - while(parent_folder) - { - parent_folder->mNumDescendantsSelected--; - parent_folder = parent_folder->getParentFolder(); - } - } -} - void LLFolderViewItem::deselectItem(void) { llassert(mIsSelected); @@ -650,16 +611,6 @@ void LLFolderViewItem::preview( void ) } } - - - - - - - - - - void LLFolderViewItem::rename(const std::string& new_name) { if( !new_name.empty() ) @@ -677,20 +628,31 @@ void LLFolderViewItem::rename(const std::string& new_name) } } -const std::string& LLFolderViewItem::getSearchableLabel() const +std::string& LLFolderViewItem::getSearchableLabel() { - U32 type = mRoot->getFilter()->getSearchType(); - switch(type) + mSearchable = ""; + U32 flags = mRoot->getSearchType(); + if (flags == 0 || (flags & 1)) { - case 1: - return mSearchableLabelCreator; - case 2: - return mSearchableLabelDesc; - case 3: - return mSearchableLabelAll; - default: - return mSearchableLabel; + mSearchable = mSearchableLabel; } + if (flags & 2) + { + if (mSearchable.length()) + { + mSearchable += " "; + } + mSearchable += mSearchableLabelDesc; + } + if (flags & 4) + { + if (mSearchable.length()) + { + mSearchable += " "; + } + mSearchable += mSearchableLabelCreator; + } + return mSearchable; } const std::string& LLFolderViewItem::getName( void ) const @@ -776,12 +738,6 @@ BOOL LLFolderViewItem::handleHover( S32 x, S32 y, MASK mask ) { src = LLToolDragAndDrop::SOURCE_LIBRARY; } - // - else if(mListener && gInventory.isObjectDescendentOf(mListener->getUUID(), gSystemFolderRoot)) - { // Note: this is only ok if all future pretend folders are subcategories of Pretend Inventory - src = LLToolDragAndDrop::SOURCE_LIBRARY; - } - // can_drag = root->startDrag(src); if (can_drag) @@ -1054,16 +1010,13 @@ void LLFolderViewItem::draw() if (sBoxImage.notNull() && mStringMatchOffset != std::string::npos) { // don't draw backgrounds for zero-length strings - S32 filter_string_length = mRoot->getFilterSubString().size(); std::string combined_string = mLabel + mLabelSuffix; - - //fix so that highlighting works properly again - rkeast - std::string check = combined_string; - LLStringUtil::toUpper(check); - - if ((filter_string_length > 0) && (check.find(mRoot->getFilterSubString()) != -1)) + S32 filter_string_length = mRoot->getFilterSubString().size(); + std::string combined_string_upper = combined_string; + LLStringUtil::toUpper(combined_string_upper); + if (filter_string_length > 0 && (mRoot->getSearchType() & 1) && + combined_string_upper.find(mRoot->getFilterSubString()) == mStringMatchOffset) { -// llinfos << "mLabel " << mLabel<< " mLabelSuffix " << mLabelSuffix << " mLabel " << mLabel << " mLabel " << mLabel << llendl; S32 left = llround(text_left) + sFont->getWidth(combined_string, 0, mStringMatchOffset) - 1; S32 right = left + sFont->getWidth(combined_string, mStringMatchOffset, filter_string_length) + 2; S32 bottom = llfloor(getRect().getHeight() - sFont->getLineHeight() - 3); @@ -1486,7 +1439,10 @@ BOOL LLFolderViewFolder::setSelection(LLFolderViewItem* selection, BOOL openitem BOOL rv = FALSE; if( selection == this ) { - mIsSelected = TRUE; + if (!isSelected()) + { + selectItem(); + } if(mListener) { mListener->selectItem(); @@ -1495,7 +1451,10 @@ BOOL LLFolderViewFolder::setSelection(LLFolderViewItem* selection, BOOL openitem } else { - mIsSelected = FALSE; + if (isSelected()) + { + deselectItem(); + } rv = FALSE; } BOOL child_selected = FALSE; @@ -1508,7 +1467,6 @@ BOOL LLFolderViewFolder::setSelection(LLFolderViewItem* selection, BOOL openitem { rv = TRUE; child_selected = TRUE; - mNumDescendantsSelected++; } } for (items_t::iterator iter = mItems.begin(); @@ -1519,7 +1477,6 @@ BOOL LLFolderViewFolder::setSelection(LLFolderViewItem* selection, BOOL openitem { rv = TRUE; child_selected = TRUE; - mNumDescendantsSelected++; } } if(openitem && child_selected) @@ -1538,28 +1495,30 @@ BOOL LLFolderViewFolder::changeSelection(LLFolderViewItem* selection, BOOL selec BOOL rv = FALSE; if(selection == this) { - mIsSelected = selected; + if (isSelected() != selected) + { + rv = TRUE; + if (selected) + { + selectItem(); + } + else + { + deselectItem(); + } + } if(mListener && selected) { mListener->selectItem(); } - rv = TRUE; } for (folders_t::iterator iter = mFolders.begin(); iter != mFolders.end();) { folders_t::iterator fit = iter++; - if((*fit)->changeSelection(selection, selected)) + if ((*fit)->changeSelection(selection, selected)) { - if (selected) - { - mNumDescendantsSelected++; - } - else - { - mNumDescendantsSelected--; - } rv = TRUE; } } @@ -1567,33 +1526,22 @@ BOOL LLFolderViewFolder::changeSelection(LLFolderViewItem* selection, BOOL selec iter != mItems.end();) { items_t::iterator iit = iter++; - if((*iit)->changeSelection(selection, selected)) + if ((*iit)->changeSelection(selection, selected)) { - if (selected) - { - mNumDescendantsSelected++; - } - else - { - mNumDescendantsSelected--; - } rv = TRUE; } } return rv; } -S32 LLFolderViewFolder::extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray& selected_items) +void LLFolderViewFolder::extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray& selected_items) { - S32 num_selected = 0; - // pass on to child folders first for (folders_t::iterator iter = mFolders.begin(); iter != mFolders.end();) { folders_t::iterator fit = iter++; - num_selected += (*fit)->extendSelection(selection, last_selected, selected_items); - mNumDescendantsSelected += num_selected; + (*fit)->extendSelection(selection, last_selected, selected_items); } // handle selection of our immediate children... @@ -1686,8 +1634,6 @@ S32 LLFolderViewFolder::extendSelection(LLFolderViewItem* selection, LLFolderVie if (item->changeSelection(item, TRUE)) { selected_items.put(item); - mNumDescendantsSelected++; - num_selected++; } } } @@ -1697,30 +1643,15 @@ S32 LLFolderViewFolder::extendSelection(LLFolderViewItem* selection, LLFolderVie if (selection->changeSelection(selection, TRUE)) { selected_items.put(selection); - mNumDescendantsSelected++; - num_selected++; } } - - return num_selected; } void LLFolderViewFolder::recursiveDeselect(BOOL deselect_self) { - // make sure we don't have negative values - llassert(mNumDescendantsSelected >= 0); - - if (mIsSelected && deselect_self) + if (isSelected() && deselect_self) { - mIsSelected = FALSE; - - // update ancestors' count of selected descendents - LLFolderViewFolder* parent_folder = getParentFolder(); - while(parent_folder) - { - parent_folder->mNumDescendantsSelected--; - parent_folder = parent_folder->getParentFolder(); - } + deselectItem(); } if (0 == mNumDescendantsSelected) @@ -1728,14 +1659,19 @@ void LLFolderViewFolder::recursiveDeselect(BOOL deselect_self) return; } + // Deselect all items in this folder. for (items_t::iterator iter = mItems.begin(); iter != mItems.end();) { items_t::iterator iit = iter++; LLFolderViewItem* item = (*iit); - item->recursiveDeselect(TRUE); + if (item->isSelected()) + { + item->deselectItem(); + } } + // Recursively deselect all folders in this folder. for (folders_t::iterator iter = mFolders.begin(); iter != mFolders.end();) { @@ -2795,6 +2731,59 @@ U32 LLFolderView::getSortOrder() const return mSortOrder; } +U32 LLFolderView::toggleSearchType(std::string toggle) +{ + if (toggle == "name") + { + if (mSearchType & 1) + { + mSearchType &= 6; + } + else + { + mSearchType |= 1; + } + } + else if (toggle == "description") + { + if (mSearchType & 2) + { + mSearchType &= 5; + } + else + { + mSearchType |= 2; + } + } + else if (toggle == "creator") + { + if (mSearchType & 4) + { + mSearchType &= 3; + } + else + { + mSearchType |= 4; + } + } + if (mSearchType == 0) + { + mSearchType = 1; + } + + if (getFilterSubString().length()) + { + mFilter.setModified(LLInventoryFilter::FILTER_RESTART); + } + + return mSearchType; +} + +U32 LLFolderView::getSearchType() const +{ + return mSearchType; +} + BOOL LLFolderView::addFolder( LLFolderViewFolder* folder) { // enforce sort order of My Inventory followed by Library @@ -2939,8 +2928,7 @@ const std::string LLFolderView::getFilterSubString(BOOL trim) void LLFolderView::filter( LLInventoryFilter& filter ) { LLFastTimer t2(LLFastTimer::FTM_FILTER); - static const LLCachedControl filter_items_per_frame("FilterItemsPerFrame",500); - filter.setFilterCount(llclamp((S32)filter_items_per_frame, 1, 5000)); + filter.setFilterCount(llclamp(gSavedSettings.getS32("FilterItemsPerFrame"), 1, 5000)); if (getCompletedFilterGeneration() < filter.getCurrentGeneration()) { @@ -3092,29 +3080,24 @@ BOOL LLFolderView::changeSelection(LLFolderViewItem* selection, BOOL selected) return rv; } -S32 LLFolderView::extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray& items) +void LLFolderView::extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray& items) { - S32 rv = 0; - // now store resulting selection if (mAllowMultiSelect) { LLFolderViewItem *cur_selection = getCurSelectedItem(); - rv = LLFolderViewFolder::extendSelection(selection, cur_selection, items); + LLFolderViewFolder::extendSelection(selection, cur_selection, items); for (S32 i = 0; i < items.count(); i++) { addToSelectionList(items[i]); - rv++; } } else { setSelection(selection, FALSE, FALSE); - rv++; } mSignalSelectCallback = SIGNAL_KEYBOARD_FOCUS; - return rv; } void LLFolderView::sanitizeSelection() @@ -3847,15 +3830,12 @@ BOOL LLFolderView::handleKeyHere( KEY key, MASK mask ) break; case KEY_ESCAPE: - if (mask == MASK_NONE) + if( mRenameItem && mRenamer->getVisible() ) { - if( mRenameItem && mRenamer->getVisible() ) - { - closeRenamer(); - handled = TRUE; - } - mSearchString.clear(); + closeRenamer(); + handled = TRUE; } + mSearchString.clear(); break; case KEY_PAGE_UP: @@ -4260,7 +4240,7 @@ BOOL LLFolderView::handleScrollWheel(S32 x, S32 y, S32 clicks) return FALSE; } -void LLFolderView::deleteAllChildren(BOOL delayed_delete) +void LLFolderView::deleteAllChildren() { if(mRenamer == gFocusMgr.getTopCtrl()) { @@ -4271,7 +4251,7 @@ void LLFolderView::deleteAllChildren(BOOL delayed_delete) mRenamer = NULL; mRenameItem = NULL; clearSelection(); - LLView::deleteAllChildren(delayed_delete); + LLView::deleteAllChildren(); } void LLFolderView::scrollToShowSelection() @@ -4395,8 +4375,8 @@ void LLFolderView::doIdle() { LLFastTimer t2(LLFastTimer::FTM_INVENTORY); - static const LLCachedControl debug_filters("DebugInventoryFilters",false); - if (debug_filters != (bool)getDebugFilters()) + BOOL debug_filters = gSavedSettings.getBOOL("DebugInventoryFilters"); + if (debug_filters != getDebugFilters()) { mDebugFilters = debug_filters; arrangeAll(); @@ -4637,10 +4617,6 @@ LLInventoryFilter::LLInventoryFilter(const std::string& name) : mModified(FALSE), mNeedTextRebuild(TRUE) { - //fix to get rid of gSavedSettings use - rkeast - mSearchType = 0; - mPartialSearch = false; - mFilterOps.mFilterTypes = 0xffffffff; mFilterOps.mMinDate = time_min(); mFilterOps.mMaxDate = time_max(); @@ -4692,50 +4668,13 @@ BOOL LLInventoryFilter::check(LLFolderViewItem* item) { earliest = 0; } - - //When searching for all labels, we need to explode the filter string - //Into an array, and then compare each string to the label seperately - //Otherwise the filter substring needs to be - //formatted in the same order as the label - rkeast - - BOOL passed; - //Added ability to toggle this type of searching for all labels cause it's convienient - RKeast - if(mSearchType == 3 || mPartialSearch) - { - std::istringstream i(mFilterSubString); - std::string blah; - - LLDynamicArray search_array; - - while(i >> blah) - { - search_array.put(blah); - } - - BOOL subStringMatch = true; - for(int i = 0; i < search_array.getLength(); i++) - { - mSubStringMatchOffset = (search_array.get(i)).size() ? item->getSearchableLabel().find(search_array.get(i)) : std::string::npos; - subStringMatch = subStringMatch && ((search_array.get(i)).size() == 0 || mSubStringMatchOffset != std::string::npos); - } - - passed = (0x1 << listener->getInventoryType() & mFilterOps.mFilterTypes || listener->getInventoryType() == LLInventoryType::IT_NONE) - && (subStringMatch) + mSubStringMatchOffset = mFilterSubString.size() ? item->getSearchableLabel().find(mFilterSubString) : std::string::npos; + BOOL passed = (0x1 << listener->getInventoryType() & mFilterOps.mFilterTypes || listener->getInventoryType() == LLInventoryType::IT_NONE) + && (mFilterSubString.size() == 0 || mSubStringMatchOffset != std::string::npos) && (mFilterWorn == false || gAgent.isWearingItem(item_id) || (gAgent.getAvatarObject() && gAgent.getAvatarObject()->isWearingAttachment(item_id))) && ((listener->getPermissionMask() & mFilterOps.mPermissions) == mFilterOps.mPermissions) && (listener->getCreationDate() >= earliest && listener->getCreationDate() <= mFilterOps.mMaxDate); - } - else - { - mSubStringMatchOffset = mFilterSubString.size() ? item->getSearchableLabel().find(mFilterSubString) : std::string::npos; - passed = (0x1 << listener->getInventoryType() & mFilterOps.mFilterTypes || listener->getInventoryType() == LLInventoryType::IT_NONE) - && (mFilterSubString.size() == 0 || mSubStringMatchOffset != std::string::npos) - && (mFilterWorn == false || gAgent.isWearingItem(item_id) || - (gAgent.getAvatarObject() && gAgent.getAvatarObject()->isWearingAttachment(item_id))) - && ((listener->getPermissionMask() & mFilterOps.mPermissions) == mFilterOps.mPermissions) - && (listener->getCreationDate() >= earliest && listener->getCreationDate() <= mFilterOps.mMaxDate); - } return passed; } @@ -4753,7 +4692,7 @@ std::string::size_type LLInventoryFilter::getStringMatchOffset() const BOOL LLInventoryFilter::isNotDefault() { return mFilterOps.mFilterTypes != mDefaultFilterOps.mFilterTypes - || mFilterSubString.size() + || mFilterSubString.size() || mFilterWorn || mFilterOps.mPermissions != mDefaultFilterOps.mPermissions || mFilterOps.mMinDate != mDefaultFilterOps.mMinDate @@ -4784,31 +4723,6 @@ BOOL LLInventoryFilter::isModifiedAndClear() return ret; } -//fix to get rid of gSavedSettings use - rkeast -void LLInventoryFilter::setPartialSearch(bool toggle) -{ - - mPartialSearch = toggle; -} - -//fix to get rid of gSavedSettings use - rkeast -bool LLInventoryFilter::getPartialSearch() -{ - return mPartialSearch; -} - -//fix to get rid of gSavedSettings use - rkeast -void LLInventoryFilter::setSearchType(U32 type) -{ - mSearchType = type; -} - -//fix to get rid of gSavedSettings use - rkeast -U32 LLInventoryFilter::getSearchType() -{ - return mSearchType; -} - void LLInventoryFilter::setFilterTypes(U32 types) { if (mFilterOps.mFilterTypes != types) diff --git a/indra/newview/llfolderview.h b/indra/newview/llfolderview.h index 2726aa15d..bbc1060c7 100644 --- a/indra/newview/llfolderview.h +++ b/indra/newview/llfolderview.h @@ -167,14 +167,7 @@ public: class LLInventoryFilter { - public: - //fix to get rid of gSavedSettings use - rkeast - void setPartialSearch(bool toggle); - bool getPartialSearch(); - void setSearchType(U32 type); - U32 getSearchType(); - typedef enum e_folder_show { SHOW_ALL_FOLDERS, @@ -254,10 +247,6 @@ public: void fromLLSD(LLSD& data); protected: - //fix to get rid of gSavedSettings use - rkeast - U32 mSearchType; - bool mPartialSearch; - struct filter_ops { U32 mFilterTypes; @@ -332,10 +321,12 @@ class LLFolderView; class LLFolderViewItem : public LLUICtrl { -protected: friend class LLFolderViewEventListener; +private: + BOOL mIsSelected; +protected: static const LLFontGL* sFont; static const LLFontGL* sSmallFont; static LLColor4 sFgColor; @@ -350,21 +341,14 @@ protected: std::string mLabel; std::string mSearchableLabel; - std::string mLabelCreator; - std::string mSearchableLabelCreator; - - std::string mLabelDesc; std::string mSearchableLabelDesc; - - std::string mLabelAll; - std::string mSearchableLabelAll; - + std::string mSearchableLabelCreator; + std::string mSearchable; std::string mType; S32 mLabelWidth; U32 mCreationDate; LLFolderViewFolder* mParentFolder; LLFolderViewEventListener* mListener; - BOOL mIsSelected; BOOL mIsCurSelection; BOOL mSelectPending; LLFontGL::StyleFlags mLabelStyle; @@ -373,7 +357,6 @@ protected: std::string mStatusText; BOOL mHasVisibleChildren; S32 mIndentation; - S32 mNumDescendantsSelected; BOOL mFiltered; S32 mLastFilterGeneration; std::string::size_type mStringMatchOffset; @@ -438,18 +421,13 @@ public: // Returns TRUE if this item ends up being selected. virtual BOOL setSelection(LLFolderViewItem* selection, BOOL openitem, BOOL take_keyboard_focus); - - // This method is used to set the selection state of an item. // If 'selection' is 'this' then note selection. // Returns TRUE if the selection state of this item was changed. virtual BOOL changeSelection(LLFolderViewItem* selection, BOOL selected); // this method is used to group select items - virtual S32 extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray& items){ return FALSE; } - - // this method is used to group select items - virtual void recursiveDeselect(BOOL deselect_self); + virtual void extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray& items) { } // this method is used to deselect this element void deselectItem(); @@ -469,8 +447,6 @@ public: // destroys this item recursively virtual void destroyView(); - S32 getNumSelectedDescendants() { return mNumDescendantsSelected; } - BOOL isSelected() const { return mIsSelected; } void setIsCurSelection(BOOL select) { mIsCurSelection = select; } @@ -491,7 +467,7 @@ public: // viewed. This method will ask the viewed object itself. const std::string& getName( void ) const; - const std::string& getSearchableLabel() const; + std::string& getSearchableLabel( void ); // This method returns the label displayed on the view. This // method was primarily added to allow sorting on the folder @@ -579,7 +555,7 @@ public: UNKNOWN, TRASH, NOT_TRASH } ETrash; - +private: S32 mNumDescendantsSelected; public: // Accessed needed by LLFolderViewItem @@ -659,10 +635,10 @@ public: virtual BOOL changeSelection(LLFolderViewItem* selection, BOOL selected); // this method is used to group select items - virtual S32 extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray& items); + virtual void extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray& items); // Deselect this folder and all folder/items it contains recursively. - virtual void recursiveDeselect(BOOL deselect_self); + void recursiveDeselect(BOOL deselect_self); // Returns true is this object and all of its children can be removed. virtual BOOL isRemovable(); @@ -826,7 +802,7 @@ public: // children, and keeps track of selected objects. virtual BOOL changeSelection(LLFolderViewItem* selection, BOOL selected); - virtual S32 extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray& items); + virtual void extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray& items); virtual BOOL getSelectionList(std::set &selection); @@ -894,7 +870,7 @@ public: /*virtual*/ void onFocusLost(); virtual BOOL handleScrollWheel(S32 x, S32 y, S32 clicks); virtual void draw(); - virtual void deleteAllChildren(BOOL delayed_delete=FALSE); + virtual void deleteAllChildren(); void scrollToShowSelection(); void scrollToShowItem(LLFolderViewItem* item); diff --git a/indra/newview/llinventoryactions.cpp b/indra/newview/llinventoryactions.cpp index a0998e7b7..0941728f5 100644 --- a/indra/newview/llinventoryactions.cpp +++ b/indra/newview/llinventoryactions.cpp @@ -498,98 +498,6 @@ class LLDoCreateFloater : public inventory_listener_t } }; -//Handles the search type buttons - RKeast -class SetSearchType : public inventory_listener_t -{ - bool handleEvent(LLPointer event, const LLSD& userdata) - { - std::string search_type = userdata.asString(); - if(search_type == "name") - { - mPtr->getActivePanel()->setSearchType(0); - - gSavedPerAccountSettings.setU32("rkeastInventorySearchType",0); - - mPtr->getControl("Inventory.SearchByName")->setValue(TRUE); - mPtr->getControl("Inventory.SearchByCreator")->setValue(FALSE); - mPtr->getControl("Inventory.SearchByDesc")->setValue(FALSE); - mPtr->getControl("Inventory.SearchByAll")->setValue(FALSE); - } - else if(search_type == "creator") - { - mPtr->getActivePanel()->setSearchType(1); - - gSavedPerAccountSettings.setU32("rkeastInventorySearchType",1); - - mPtr->getControl("Inventory.SearchByName")->setValue(FALSE); - mPtr->getControl("Inventory.SearchByCreator")->setValue(TRUE); - mPtr->getControl("Inventory.SearchByDesc")->setValue(FALSE); - mPtr->getControl("Inventory.SearchByAll")->setValue(FALSE); - } - else if(search_type == "desc") - { - mPtr->getActivePanel()->setSearchType(2); - - gSavedPerAccountSettings.setU32("rkeastInventorySearchType",2); - - mPtr->getControl("Inventory.SearchByName")->setValue(FALSE); - mPtr->getControl("Inventory.SearchByCreator")->setValue(FALSE); - mPtr->getControl("Inventory.SearchByDesc")->setValue(TRUE); - mPtr->getControl("Inventory.SearchByAll")->setValue(FALSE); - } - else if(search_type == "all") - { - mPtr->getActivePanel()->setSearchType(3); - - gSavedPerAccountSettings.setU32("rkeastInventorySearchType",3); - - mPtr->getControl("Inventory.SearchByName")->setValue(FALSE); - mPtr->getControl("Inventory.SearchByCreator")->setValue(FALSE); - mPtr->getControl("Inventory.SearchByDesc")->setValue(FALSE); - mPtr->getControl("Inventory.SearchByAll")->setValue(TRUE); - } - - //Clear search when switching modes. - mPtr->getActivePanel()->setFilterSubString(LLStringUtil::null); - mPtr->getActivePanel()->setFilterTypes(0xffffffff); - return true; - } -}; - -//Handles the partial search result button - RKeast -class SetPartialSearch : public inventory_listener_t -{ - bool handleEvent(LLPointer event, const LLSD& userdata) - { - std::string data = userdata.asString(); - if(data == "toggle") - { - BOOL current = mPtr->getActivePanel()->getPartialSearch(); - mPtr->getActivePanel()->setPartialSearch(!current); - - if(current == false) - { - mPtr->getActivePanel()->setPartialSearch(true); - mPtr->getControl("Inventory.PartialSearchToggle")->setValue(TRUE); - - gSavedPerAccountSettings.setBOOL("rkeastInventoryPartialSearch",TRUE); - } - else - { - mPtr->getActivePanel()->setPartialSearch(false); - mPtr->getControl("Inventory.PartialSearchToggle")->setValue(FALSE); - - gSavedPerAccountSettings.setBOOL("rkeastInventoryPartialSearch",FALSE); - } - } - - //Clear search when switching modes. - mPtr->getActivePanel()->setFilterSubString(LLStringUtil::null); - mPtr->getActivePanel()->setFilterTypes(0xffffffff); - return true; - } -}; - class LLSetSortBy : public inventory_listener_t { bool handleEvent(LLPointer event, const LLSD& userdata) @@ -679,6 +587,18 @@ class LLRefreshInvModel : public inventory_listener_t } }; +class LLSetSearchType : public inventory_listener_t +{ + bool handleEvent(LLPointer event, const LLSD& userdata) + { + std::string toggle = userdata.asString(); + U32 flags = mPtr->getActivePanel()->getRootFolder()->toggleSearchType(toggle); + mPtr->getControl("Inventory.SearchName")->setValue((BOOL)(flags & 1)); + mPtr->getControl("Inventory.SearchDesc")->setValue((BOOL)(flags & 2)); + mPtr->getControl("Inventory.SearchCreator")->setValue((BOOL)(flags & 4)); + return true; + } +}; class LLBeginIMSession : public inventory_panel_listener_t { @@ -869,8 +789,8 @@ void init_inventory_actions(LLInventoryView *floater) (new LLResetFilter())->registerListener(floater, "Inventory.ResetFilter"); (new LLSetSortBy())->registerListener(floater, "Inventory.SetSortBy"); - (new SetSearchType())->registerListener(floater, "Inventory.SetSearchBy"); - (new SetPartialSearch())->registerListener(floater, "Inventory.PartialSearch"); + (new LLSetSearchType())->registerListener(floater, "Inventory.SetSearchType"); + } void init_inventory_panel_actions(LLInventoryPanel *panel) diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index f5ec001a9..ba27e343e 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -240,13 +240,6 @@ time_t LLInvFVBridge::getCreationDate() const // Can be destroyed (or moved to trash) BOOL LLInvFVBridge::isItemRemovable() { - // derf - if(std::find(LLInventoryPanel::sInstances.begin(), LLInventoryPanel::sInstances.end(), mInventoryPanel) == LLInventoryPanel::sInstances.end()) - { - llwarns << "scheduled for delayed delete" << llendl; - return FALSE; - } - // LLInventoryModel* model = mInventoryPanel->getModel(); if (!model) { @@ -278,13 +271,6 @@ void LLInvFVBridge::showProperties() void LLInvFVBridge::removeBatch(LLDynamicArray& batch) { - // derf - if(std::find(LLInventoryPanel::sInstances.begin(), LLInventoryPanel::sInstances.end(), mInventoryPanel) == LLInventoryPanel::sInstances.end()) - { - llwarns << "scheduled for delayed delete" << llendl; - return; - } - // // Deactivate gestures when moving them into Trash LLInvFVBridge* bridge; LLInventoryModel* model = mInventoryPanel->getModel(); @@ -329,13 +315,6 @@ void LLInvFVBridge::removeBatch(LLDynamicArray& batc void LLInvFVBridge::removeBatchNoCheck(LLDynamicArray& batch) { - // derf - if(std::find(LLInventoryPanel::sInstances.begin(), LLInventoryPanel::sInstances.end(), mInventoryPanel) == LLInventoryPanel::sInstances.end()) - { - llwarns << "scheduled for delayed delete" << llendl; - return; - } - // // this method moves a bunch of items and folders to the trash. As // per design guidelines for the inventory model, the message is // built and the accounting is performed first. After all of that, @@ -505,13 +484,6 @@ void LLInvFVBridge::removeBatchNoCheck(LLDynamicArray derf - if(std::find(LLInventoryPanel::sInstances.begin(), LLInventoryPanel::sInstances.end(), mInventoryPanel) == LLInventoryPanel::sInstances.end()) - { - llwarns << "scheduled for delayed delete" << llendl; - return FALSE; - } - // LLInventoryModel* model = mInventoryPanel->getModel(); if (!model) { @@ -789,13 +761,6 @@ BOOL LLInvFVBridge::startDrag(EDragAndDropType* type, LLUUID* id) const LLInventoryObject* LLInvFVBridge::getInventoryObject() const { - // derf - if(std::find(LLInventoryPanel::sInstances.begin(), LLInventoryPanel::sInstances.end(), mInventoryPanel) == LLInventoryPanel::sInstances.end()) - { - llwarns << "scheduled for delayed delete" << llendl; - return NULL; - } - // LLInventoryObject* obj = NULL; LLInventoryModel* model = mInventoryPanel->getModel(); if(model) @@ -807,13 +772,6 @@ LLInventoryObject* LLInvFVBridge::getInventoryObject() const BOOL LLInvFVBridge::isInTrash() const { - // derf - if(std::find(LLInventoryPanel::sInstances.begin(), LLInventoryPanel::sInstances.end(), mInventoryPanel) == LLInventoryPanel::sInstances.end()) - { - llwarns << "scheduled for delayed delete" << llendl; - return FALSE; - } - // LLInventoryModel* model = mInventoryPanel->getModel(); if(!model) return FALSE; LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH); @@ -852,13 +810,6 @@ BOOL LLInvFVBridge::isLinkedObjectMissing() const BOOL LLInvFVBridge::isAgentInventory() const { - // derf - if(std::find(LLInventoryPanel::sInstances.begin(), LLInventoryPanel::sInstances.end(), mInventoryPanel) == LLInventoryPanel::sInstances.end()) - { - llwarns << "scheduled for delayed delete" << llendl; - return FALSE; - } - // LLInventoryModel* model = mInventoryPanel->getModel(); if(!model) return FALSE; if(gAgent.getInventoryRootID() == mUUID) return TRUE; @@ -1187,13 +1138,6 @@ void LLItemBridge::selectItem() void LLItemBridge::restoreItem() { - // derf - if(std::find(LLInventoryPanel::sInstances.begin(), LLInventoryPanel::sInstances.end(), mInventoryPanel) == LLInventoryPanel::sInstances.end()) - { - llwarns << "scheduled for delayed delete" << llendl; - return; - } - // LLViewerInventoryItem* item = (LLViewerInventoryItem*)getItem(); if(item) { @@ -1371,13 +1315,6 @@ BOOL LLItemBridge::renameItem(const std::string& new_name) { if(!isItemRenameable()) return FALSE; LLPreview::rename(mUUID, getPrefix() + new_name); - // derf - if(std::find(LLInventoryPanel::sInstances.begin(), LLInventoryPanel::sInstances.end(), mInventoryPanel) == LLInventoryPanel::sInstances.end()) - { - llwarns << "scheduled for delayed delete" << llendl; - return FALSE; - } - // LLInventoryModel* model = mInventoryPanel->getModel(); if(!model) return FALSE; LLViewerInventoryItem* item = getItem(); @@ -1404,13 +1341,6 @@ BOOL LLItemBridge::removeItem() } // move it to the trash LLPreview::hide(mUUID, TRUE); - // derf - if(std::find(LLInventoryPanel::sInstances.begin(), LLInventoryPanel::sInstances.end(), mInventoryPanel) == LLInventoryPanel::sInstances.end()) - { - llwarns << "scheduled for delayed delete" << llendl; - return FALSE; - } - // LLInventoryModel* model = mInventoryPanel->getModel(); if(!model) return FALSE; LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH); @@ -1467,13 +1397,6 @@ BOOL LLItemBridge::copyToClipboard() const LLViewerInventoryItem* LLItemBridge::getItem() const { - // derf - if(std::find(LLInventoryPanel::sInstances.begin(), LLInventoryPanel::sInstances.end(), mInventoryPanel) == LLInventoryPanel::sInstances.end()) - { - llwarns << "scheduled for delayed delete" << llendl; - return NULL; - } - // LLViewerInventoryItem* item = NULL; LLInventoryModel* model = mInventoryPanel->getModel(); if(model) @@ -1522,13 +1445,6 @@ void LLFolderBridge::selectItem() // Can be destroyed (or moved to trash) BOOL LLFolderBridge::isItemRemovable() { - // derf - if(std::find(LLInventoryPanel::sInstances.begin(), LLInventoryPanel::sInstances.end(), mInventoryPanel) == LLInventoryPanel::sInstances.end()) - { - llwarns << "scheduled for delayed delete" << llendl; - return FALSE; - } - // LLInventoryModel* model = mInventoryPanel->getModel(); if(!model) { @@ -1602,13 +1518,6 @@ BOOL LLFolderBridge::isItemRemovable() BOOL LLFolderBridge::isUpToDate() const { - // derf - if(std::find(LLInventoryPanel::sInstances.begin(), LLInventoryPanel::sInstances.end(), mInventoryPanel) == LLInventoryPanel::sInstances.end()) - { - llwarns << "scheduled for delayed delete" << llendl; - return FALSE; - } - // LLInventoryModel* model = mInventoryPanel->getModel(); if(!model) return FALSE; LLViewerInventoryCategory* category = (LLViewerInventoryCategory*)model->getCategory(mUUID); @@ -1688,13 +1597,6 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat, // the UI will get confused and pass in a NULL. if(!inv_cat) return FALSE; - // derf - if(std::find(LLInventoryPanel::sInstances.begin(), LLInventoryPanel::sInstances.end(), mInventoryPanel) == LLInventoryPanel::sInstances.end()) - { - llwarns << "scheduled for delayed delete" << llendl; - return FALSE; - } - // LLInventoryModel* model = mInventoryPanel->getModel(); if(!model) return FALSE; @@ -2152,13 +2054,6 @@ void LLFolderBridge::performAction(LLFolderView* folder, LLInventoryModel* model } else if ("removefromoutfit" == action) { - // derf - if(std::find(LLInventoryPanel::sInstances.begin(), LLInventoryPanel::sInstances.end(), mInventoryPanel) == LLInventoryPanel::sInstances.end()) - { - llwarns << "scheduled for delayed delete" << llendl; - return; - } - // LLInventoryModel* model = mInventoryPanel->getModel(); if(!model) return; LLViewerInventoryCategory* cat = getCategory(); @@ -2190,13 +2085,6 @@ void LLFolderBridge::performAction(LLFolderView* folder, LLInventoryModel* model void LLFolderBridge::openItem() { lldebugs << "LLFolderBridge::openItem()" << llendl; - // derf - if(std::find(LLInventoryPanel::sInstances.begin(), LLInventoryPanel::sInstances.end(), mInventoryPanel) == LLInventoryPanel::sInstances.end()) - { - llwarns << "scheduled for delayed delete" << llendl; - return; - } - // LLInventoryModel* model = mInventoryPanel->getModel(); if(!model) return; model->fetchDescendentsOf(mUUID); @@ -2215,13 +2103,6 @@ BOOL LLFolderBridge::isItemRenameable() const void LLFolderBridge::restoreItem() { - // derf - if(std::find(LLInventoryPanel::sInstances.begin(), LLInventoryPanel::sInstances.end(), mInventoryPanel) == LLInventoryPanel::sInstances.end()) - { - llwarns << "scheduled for delayed delete" << llendl; - return; - } - // LLViewerInventoryCategory* cat; cat = (LLViewerInventoryCategory*)getCategory(); if(cat) @@ -2300,13 +2181,6 @@ LLUIImagePtr LLFolderBridge::getIcon() const BOOL LLFolderBridge::renameItem(const std::string& new_name) { - // derf - if(std::find(LLInventoryPanel::sInstances.begin(), LLInventoryPanel::sInstances.end(), mInventoryPanel) == LLInventoryPanel::sInstances.end()) - { - llwarns << "scheduled for delayed delete" << llendl; - return FALSE; - } - // if(!isItemRenameable()) return FALSE; LLInventoryModel* model = mInventoryPanel->getModel(); if(!model) return FALSE; @@ -2332,13 +2206,6 @@ BOOL LLFolderBridge::removeItem() } // move it to the trash LLPreview::hide(mUUID); - // derf - if(std::find(LLInventoryPanel::sInstances.begin(), LLInventoryPanel::sInstances.end(), mInventoryPanel) == LLInventoryPanel::sInstances.end()) - { - llwarns << "scheduled for delayed delete" << llendl; - return FALSE; - } - // LLInventoryModel* model = mInventoryPanel->getModel(); if(!model) return FALSE; @@ -2418,13 +2285,6 @@ BOOL LLFolderBridge::isClipboardPasteable() const void LLFolderBridge::pasteFromClipboard() { - // derf - if(std::find(LLInventoryPanel::sInstances.begin(), LLInventoryPanel::sInstances.end(), mInventoryPanel) == LLInventoryPanel::sInstances.end()) - { - llwarns << "scheduled for delayed delete" << llendl; - return; - } - // LLInventoryModel* model = mInventoryPanel->getModel(); if(model && isClipboardPasteable()) { @@ -2491,13 +2351,6 @@ void LLFolderBridge::folderOptionsMenu() // *TODO: Translate - // derf - if(std::find(LLInventoryPanel::sInstances.begin(), LLInventoryPanel::sInstances.end(), mInventoryPanel) == LLInventoryPanel::sInstances.end()) - { - llwarns << "scheduled for delayed delete" << llendl; - return; - } - // LLInventoryModel* model = mInventoryPanel->getModel(); if(!model) return; @@ -2569,13 +2422,6 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags) // *TODO: Translate lldebugs << "LLFolderBridge::buildContextMenu()" << llendl; // std::vector disabled_items; - // derf - if(std::find(LLInventoryPanel::sInstances.begin(), LLInventoryPanel::sInstances.end(), mInventoryPanel) == LLInventoryPanel::sInstances.end()) - { - llwarns << "scheduled for delayed delete" << llendl; - return; - } - // LLInventoryModel* model = mInventoryPanel->getModel(); if(!model) return; LLUUID cof_id = LLCOFMgr::instance().getCOF(); @@ -2712,13 +2558,6 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags) BOOL LLFolderBridge::hasChildren() const { - // derf - if(std::find(LLInventoryPanel::sInstances.begin(), LLInventoryPanel::sInstances.end(), mInventoryPanel) == LLInventoryPanel::sInstances.end()) - { - llwarns << "scheduled for delayed delete" << llendl; - return FALSE; - } - // LLInventoryModel* model = mInventoryPanel->getModel(); if(!model) return FALSE; LLInventoryModel::EHasChildren has_children; @@ -2761,13 +2600,6 @@ BOOL LLFolderBridge::dragOrDrop(MASK mask, BOOL drop, LLViewerInventoryCategory* LLFolderBridge::getCategory() const { - // derf - if(std::find(LLInventoryPanel::sInstances.begin(), LLInventoryPanel::sInstances.end(), mInventoryPanel) == LLInventoryPanel::sInstances.end()) - { - llwarns << "scheduled for delayed delete" << llendl; - return NULL; - } - // LLViewerInventoryCategory* cat = NULL; LLInventoryModel* model = mInventoryPanel->getModel(); if(model) @@ -2789,13 +2621,6 @@ void LLFolderBridge::createNewCategory(void* user_data) { LLFolderBridge* bridge = (LLFolderBridge*)user_data; if(!bridge) return; - // derf - if(std::find(LLInventoryPanel::sInstances.begin(), LLInventoryPanel::sInstances.end(), bridge->mInventoryPanel) == LLInventoryPanel::sInstances.end()) - { - llwarns << "scheduled for delayed delete" << llendl; - return; - } - // LLInventoryPanel* panel = bridge->mInventoryPanel; LLInventoryModel* model = panel->getModel(); if(!model) return; @@ -2910,13 +2735,6 @@ void LLFolderBridge::createWearable(LLUUID parent_id, EWearableType type) void LLFolderBridge::modifyOutfit(BOOL append, BOOL replace) { - // derf - if(std::find(LLInventoryPanel::sInstances.begin(), LLInventoryPanel::sInstances.end(), mInventoryPanel) == LLInventoryPanel::sInstances.end()) - { - llwarns << "scheduled for delayed delete" << llendl; - return; - } - // LLInventoryModel* model = mInventoryPanel->getModel(); if(!model) return; LLViewerInventoryCategory* cat = getCategory(); @@ -2968,13 +2786,6 @@ bool move_task_inventory_callback(const LLSD& notification, const LLSD& response BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item, BOOL drop) { - // derf - if(std::find(LLInventoryPanel::sInstances.begin(), LLInventoryPanel::sInstances.end(), mInventoryPanel) == LLInventoryPanel::sInstances.end()) - { - llwarns << "scheduled for delayed delete" << llendl; - return FALSE; - } - // LLInventoryModel* model = mInventoryPanel->getModel(); if(!model) return FALSE; @@ -3513,13 +3324,6 @@ LLCallingCardBridge::~LLCallingCardBridge() void LLCallingCardBridge::refreshFolderViewItem() { - // derf - if(std::find(LLInventoryPanel::sInstances.begin(), LLInventoryPanel::sInstances.end(), mInventoryPanel) == LLInventoryPanel::sInstances.end()) - { - llwarns << "scheduled for delayed delete" << llendl; - return; - } - // LLFolderViewItem* itemp = mInventoryPanel->getRootFolder()->getItemByID(mUUID); if (itemp) { @@ -4424,37 +4228,17 @@ void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags) // [/RLVa:KB] } - // derf - if(std::find(LLInventoryPanel::sInstances.begin(), LLInventoryPanel::sInstances.end(), mInventoryPanel) == LLInventoryPanel::sInstances.end()) + LLSimpleListener* callback = mInventoryPanel->getListenerByName("Inventory.AttachObject"); + + if (callback) { - llwarns << "scheduled for delayed delete" << llendl; + new_item->addListener(callback, "on_click", LLSD(attachment->getName())); } - else - { - // - LLSimpleListener* callback = mInventoryPanel->getListenerByName("Inventory.AttachObject"); - - if (callback) - { - new_item->addListener(callback, "on_click", LLSD(attachment->getName())); - } - // derf - } - // } - // LLMenuItemCallGL *new_item = new LLMenuItemCallGL("Custom...", NULL, NULL); attach_menu->append(new_item); - if(std::find(LLInventoryPanel::sInstances.begin(), LLInventoryPanel::sInstances.end(), mInventoryPanel) == LLInventoryPanel::sInstances.end()) - { - llwarns << "scheduled for delayed delete" << llendl; - } - else - { - LLSimpleListener* callback = mInventoryPanel->getListenerByName("Inventory.AttachCustom"); - new_item->addListener(callback, "on_click", LLSD()); - } - // + LLSimpleListener* callback = mInventoryPanel->getListenerByName("Inventory.AttachCustom"); + new_item->addListener(callback, "on_click", LLSD()); } } } @@ -4466,13 +4250,6 @@ BOOL LLObjectBridge::renameItem(const std::string& new_name) { if(!isItemRenameable()) return FALSE; LLPreview::rename(mUUID, getPrefix() + new_name); - // derf - if(std::find(LLInventoryPanel::sInstances.begin(), LLInventoryPanel::sInstances.end(), mInventoryPanel) == LLInventoryPanel::sInstances.end()) - { - llwarns << "scheduled for delayed delete" << llendl; - return FALSE; - } - // LLInventoryModel* model = mInventoryPanel->getModel(); if(!model) return FALSE; LLViewerInventoryItem* item = getItem(); diff --git a/indra/newview/llinventoryview.cpp b/indra/newview/llinventoryview.cpp index b6edd0b22..c9ec3d6a7 100644 --- a/indra/newview/llinventoryview.cpp +++ b/indra/newview/llinventoryview.cpp @@ -45,7 +45,6 @@ #include "llradiogroup.h" #include "llspinctrl.h" #include "lltextbox.h" - #include "llui.h" #include "llfirstuse.h" @@ -86,10 +85,6 @@ #include "llsdserialize.h" -// -#include "llbuildnewviewsscheduler.h" -// - // [RLVa:KB] #include "rlvhandler.h" // [/RLVa:KB] @@ -491,32 +486,16 @@ void LLInventoryView::init(LLInventoryModel* inventory) init_inventory_actions(this); // Controls - U32 sort_order = gSavedSettings.getU32("InventorySortOrder"); - BOOL sort_by_name = ! ( sort_order & LLInventoryFilter::SO_DATE ); - BOOL sort_folders_by_name = ( sort_order & LLInventoryFilter::SO_FOLDERS_BY_NAME ); - BOOL sort_system_folders_to_top = ( sort_order & LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP ); - addBoolControl("Inventory.ShowFilters", FALSE); - addBoolControl("Inventory.SortByName", sort_by_name ); - addBoolControl("Inventory.SortByDate", ! sort_by_name ); - addBoolControl("Inventory.FoldersAlwaysByName", sort_folders_by_name ); - addBoolControl("Inventory.SystemFoldersToTop", sort_system_folders_to_top ); - - //Search Controls - RKeast - U32 search_type = gSavedPerAccountSettings.getU32("rkeastInventorySearchType"); - BOOL search_by_name = (search_type == 0); + addBoolControl("Inventory.SortByName", FALSE); + addBoolControl("Inventory.SortByDate", TRUE); + addBoolControl("Inventory.FoldersAlwaysByName", TRUE); + addBoolControl("Inventory.SystemFoldersToTop", TRUE); + updateSortControls(); - addBoolControl("Inventory.SearchByName", search_by_name); - addBoolControl("Inventory.SearchByCreator", !search_by_name); - addBoolControl("Inventory.SearchByDesc", !search_by_name); - addBoolControl("Inventory.SearchByUUID", !search_by_name); - - addBoolControl("Inventory.SearchByAll", !search_by_name); - - //Bool for toggling the partial search results - RKeast - BOOL partial_search = gSavedPerAccountSettings.getBOOL("rkeastInventoryPartialSearch"); - - addBoolControl("Inventory.PartialSearchToggle", partial_search); + addBoolControl("Inventory.SearchName", TRUE); + addBoolControl("Inventory.SearchDesc", FALSE); + addBoolControl("Inventory.SearchCreator", FALSE); mSavedFolderState = new LLSaveFolderState(); mSavedFolderState->setApply(FALSE); @@ -530,12 +509,7 @@ void LLInventoryView::init(LLInventoryModel* inventory) if (mActivePanel) { // "All Items" is the previous only view, so it gets the InventorySortOrder - - //Fix for gSavedSettings use - rkeast - mActivePanel->getFilter()->setSearchType(search_type); - mActivePanel->getFilter()->setPartialSearch(partial_search); - - mActivePanel->setSortOrder(gSavedSettings.getU32("InventorySortOrder")); + mActivePanel->setSortOrder(gSavedSettings.getU32(LLInventoryPanel::DEFAULT_SORT_ORDER)); mActivePanel->getFilter()->markDefault(); mActivePanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState); mActivePanel->setSelectCallback(onSelectionChange, mActivePanel); @@ -544,16 +518,15 @@ void LLInventoryView::init(LLInventoryModel* inventory) if (recent_items_panel) { recent_items_panel->setSinceLogoff(TRUE); - recent_items_panel->setSortOrder(LLInventoryFilter::SO_DATE); + recent_items_panel->setSortOrder(gSavedSettings.getU32(LLInventoryPanel::RECENTITEMS_SORT_ORDER)); recent_items_panel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS); recent_items_panel->getFilter()->markDefault(); recent_items_panel->setSelectCallback(onSelectionChange, recent_items_panel); } - LLInventoryPanel* worn_items_panel = getChild("Worn Items"); if (worn_items_panel) { - worn_items_panel->setSortOrder(gSavedSettings.getU32("InventorySortOrder")); + worn_items_panel->setSortOrder(gSavedSettings.getU32(LLInventoryPanel::WORNITEMS_SORT_ORDER)); worn_items_panel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS); worn_items_panel->getFilter()->markDefault(); worn_items_panel->setFilterWorn(true); @@ -585,16 +558,12 @@ void LLInventoryView::init(LLInventoryModel* inventory) } - //Initialize item count - rkeast - mItemCount = gSavedPerAccountSettings.getS32("rkeastInventoryPreviousCount"); - - mSearchEditor = getChild("inventory search editor"); if (mSearchEditor) { mSearchEditor->setSearchCallback(onSearchEdit, this); } - + mQuickFilterCombo = getChild("Quick Filter"); if (mQuickFilterCombo) @@ -602,6 +571,7 @@ void LLInventoryView::init(LLInventoryModel* inventory) mQuickFilterCombo->setCommitCallback(onQuickFilterCommit); } + sActiveViews.put(this); gInventory.addObserver(this); @@ -671,34 +641,24 @@ void LLInventoryView::draw() { if (LLInventoryModel::isEverythingFetched()) { - S32 item_count = gInventory.getItemCount(); - - //don't let llfloater work more than necessary - if (item_count != mOldItemCount || mOldFilterText != mFilterText) - { - LLLocale locale(LLLocale::USER_LOCALE); - std::ostringstream title; - title << "Inventory"; //*TODO: make translatable - std::string item_count_string; - LLResMgr::getInstance()->getIntegerString(item_count_string, item_count); - title << " (" << item_count_string << " items)"; - title << mFilterText; - setTitle(title.str()); - } - - mOldFilterText = mFilterText; - mOldItemCount = item_count; - + LLLocale locale(LLLocale::USER_LOCALE); + std::ostringstream title; + title << "Inventory"; + std::string item_count_string; + LLResMgr::getInstance()->getIntegerString(item_count_string, gInventory.getItemCount()); + title << " (" << item_count_string << " items)"; + title << mFilterText; + setTitle(title.str()); } if (mActivePanel && mSearchEditor) { mSearchEditor->setText(mActivePanel->getFilterSubString()); } - - if (mActivePanel && mQuickFilterCombo) - { - refreshQuickFilter( mQuickFilterCombo ); - } + + if (mActivePanel && mQuickFilterCombo) + { + refreshQuickFilter( mQuickFilterCombo ); + } LLFloater::draw(); } @@ -859,26 +819,7 @@ void LLInventoryView::changed(U32 mask) LLLocale locale(LLLocale::USER_LOCALE); std::string item_count_string; LLResMgr::getInstance()->getIntegerString(item_count_string, gInventory.getItemCount()); - - //Displays a progress indication for loading the inventory, but not if it hasn't been loaded before on this PC, or we load more than expected - rkeast - if(mItemCount == -1) - { - title << " (Fetched " << item_count_string << " items...)"; - } - else - { - S32 remaining = mItemCount - gInventory.getItemCount(); - std::string total_items; - std::string items_remaining; - LLResMgr::getInstance()->getIntegerString(total_items, mItemCount); - LLResMgr::getInstance()->getIntegerString(items_remaining, remaining); - if(remaining < 0) title << " (Fetched " << item_count_string << " items...)"; - else title << " (Fetched " << item_count_string << " items of ~" << total_items << " - ~" << items_remaining << " remaining...)"; - } - } - else - { - gSavedPerAccountSettings.setS32("rkeastInventoryPreviousCount", gInventory.getItemCount()); + title << " (Fetched " << item_count_string << " items...)"; } title << mFilterText; setTitle(title.str()); @@ -1343,6 +1284,7 @@ void LLInventoryView::refreshQuickFilter(LLUICtrl* ctrl) } + // static // BOOL LLInventoryView::incrementalFind(LLFolderViewItem* first_item, const char *find_text, BOOL backward) // { @@ -1378,8 +1320,6 @@ void LLInventoryView::refreshQuickFilter(LLUICtrl* ctrl) // return FALSE; // } - -//static void LLInventoryView::onResetAll(void* userdata) { LLInventoryView* self = (LLInventoryView*) userdata; @@ -1410,6 +1350,7 @@ void LLInventoryView::onExpandAll(void* userdata) self->mActivePanel->openAllFolders(); } + //static void LLInventoryView::onFilterSelected(void* userdata, bool from_click) { @@ -1615,10 +1556,6 @@ const std::string LLInventoryPanel::RECENTITEMS_SORT_ORDER = std::string("Recent const std::string LLInventoryPanel::WORNITEMS_SORT_ORDER = std::string("WornItemsSortOrder"); const std::string LLInventoryPanel::INHERIT_SORT_ORDER = std::string(""); -// -std::list LLInventoryPanel::sInstances; -// - LLInventoryPanel::LLInventoryPanel(const std::string& name, const std::string& sort_order_setting, const LLRect& rect, @@ -1633,9 +1570,6 @@ LLInventoryPanel::LLInventoryPanel(const std::string& name, mAllowMultiSelect(allow_multi_select), mSortOrderSetting(sort_order_setting) { - // - sInstances.push_back(this); - // setBackgroundColor(gColors.getColor("InventoryBackgroundColor")); setBackgroundVisible(TRUE); setBackgroundOpaque(TRUE); @@ -1688,10 +1622,6 @@ BOOL LLInventoryPanel::postBuild() LLInventoryPanel::~LLInventoryPanel() { - // - sInstances.remove(this); - gBuildNewViewsScheduler->cancel(this); - // // should this be a global setting? U32 sort_order = mFolders->getSortOrder(); if (mSortOrderSetting != INHERIT_SORT_ORDER) @@ -1754,30 +1684,6 @@ void LLInventoryPanel::draw() LLPanel::draw(); } -//fix to get rid of gSavedSettings use - rkeast -void LLInventoryPanel::setPartialSearch(bool toggle) -{ - mFolders->getFilter()->setPartialSearch(toggle); -} - -//fix to get rid of gSavedSettings use - rkeast -bool LLInventoryPanel::getPartialSearch() -{ - return mFolders->getFilter()->getPartialSearch(); -} - -//fix to get rid of gSavedSettings use - rkeast -void LLInventoryPanel::setSearchType(U32 type) -{ - mFolders->getFilter()->setSearchType(type); -} - -//fix to get rid of gSavedSettings use - rkeast -U32 LLInventoryPanel::getSearchType() -{ - return mFolders->getFilter()->getSearchType(); -} - void LLInventoryPanel::setFilterTypes(U32 filter_types) { mFolders->getFilter()->setFilterTypes(filter_types); @@ -1968,7 +1874,6 @@ void LLInventoryPanel::buildNewViews(const LLUUID& id) { llwarns << "LLInventoryPanel::buildNewViews called with objectp->mType == " << ((S32) objectp->getType()) - << " for object " << objectp->getName() << " (shouldn't happen)" << llendl; } else if ((objectp->getType() == LLAssetType::AT_CATEGORY) && @@ -2015,9 +1920,6 @@ void LLInventoryPanel::buildNewViews(const LLUUID& id) if (itemp) { - // - itemp->mDelayedDelete = TRUE; - // if (parent_folder) { itemp->addToFolder(parent_folder, mFolders); @@ -2043,9 +1945,7 @@ void LLInventoryPanel::buildNewViews(const LLUUID& id) for(S32 i = 0; i < count; ++i) { LLInventoryCategory* cat = categories->get(i); - // - gBuildNewViewsScheduler->addJob(this, cat); - // + buildNewViews(cat->getUUID()); } } if(items) @@ -2054,117 +1954,13 @@ void LLInventoryPanel::buildNewViews(const LLUUID& id) for(S32 i = 0; i < count; ++i) { LLInventoryItem* item = items->get(i); - // - gBuildNewViewsScheduler->addJob(this, item); - // + buildNewViews(item->getUUID()); } } mInventory->unlockDirectDescendentArrays(id); } } -// -void LLInventoryPanel::buildNewViews(const LLInventoryObject* objectp) -{ - LLFolderViewItem* itemp = NULL; - - if (objectp) - { - if (objectp->getType() <= LLAssetType::AT_NONE || - objectp->getType() >= LLAssetType::AT_COUNT) - { - llwarns << "LLInventoryPanel::buildNewViews called with objectp->mType == " - << ((S32) objectp->getType()) - << "Named " << objectp->getName() - << " (shouldn't happen)" << llendl; - } - else if (objectp->getType() == LLAssetType::AT_CATEGORY) // build new view for category - { - LLInvFVBridge* new_listener = LLInvFVBridge::createBridge(objectp->getType(), - objectp->getType(), - LLInventoryType::IT_CATEGORY, - this, - objectp->getUUID()); - - if (new_listener) - { - LLFolderViewFolder* folderp = new LLFolderViewFolder(new_listener->getDisplayName(), - new_listener->getIcon(), - mFolders, - new_listener); - - folderp->setItemSortOrder(mFolders->getSortOrder()); - itemp = folderp; - } - } - else // build new view for item - { - LLInventoryItem* item = (LLInventoryItem*)objectp; - LLInvFVBridge* new_listener = LLInvFVBridge::createBridge( - item->getType(), - item->getActualType(), - item->getInventoryType(), - this, - item->getUUID(), - item->getFlags()); - if (new_listener) - { - itemp = new LLFolderViewItem(new_listener->getDisplayName(), - new_listener->getIcon(), - new_listener->getCreationDate(), - mFolders, - new_listener); - } - } - - LLFolderViewFolder* parent_folder = (LLFolderViewFolder*)mFolders->getItemByID(objectp->getParentUUID()); - - if (itemp) - { - // - itemp->mDelayedDelete = TRUE; - // - if (parent_folder) - { - itemp->addToFolder(parent_folder, mFolders); - } - else - { - llwarns << "Couldn't find parent folder for child " << itemp->getLabel() << llendl; - delete itemp; - } - } - } - - if (!objectp || (objectp && (objectp->getType() == LLAssetType::AT_CATEGORY))) - { - LLViewerInventoryCategory::cat_array_t* categories; - LLViewerInventoryItem::item_array_t* items; - - mInventory->lockDirectDescendentArrays((objectp != NULL) ? objectp->getUUID() : LLUUID::null, categories, items); - if(categories) - { - S32 count = categories->count(); - for(S32 i = 0; i < count; ++i) - { - LLInventoryCategory* cat = categories->get(i); - buildNewViews(cat); - } - } - if(items) - { - S32 count = items->count(); - for(S32 i = 0; i < count; ++i) - { - LLInventoryItem* item = items->get(i); - buildNewViews(item); - } - } - mInventory->unlockDirectDescendentArrays(objectp->getUUID()); - } -} -// - struct LLConfirmPurgeData { LLUUID mID; diff --git a/indra/newview/llinventoryview.h b/indra/newview/llinventoryview.h index 68c5dc0b3..d9c8e4c07 100644 --- a/indra/newview/llinventoryview.h +++ b/indra/newview/llinventoryview.h @@ -41,6 +41,7 @@ #include "llfolderview.h" #include "llinventorymodel.h" #include "llmemberlistener.h" +#include "llcombobox.h" #include "lluictrlfactory.h" #include @@ -59,7 +60,6 @@ class LLCheckBoxCtrl; class LLSpinCtrl; class LLScrollableContainerView; class LLTextBox; -class LLComboBox; class LLIconCtrl; class LLSaveFolderState; class LLSearchEditor; @@ -81,10 +81,6 @@ public: LLView *parent_view = NULL); ~LLInventoryPanel(); - // - static std::list sInstances; - // - LLInventoryModel* getModel() { return mInventory; } BOOL postBuild(); @@ -101,12 +97,6 @@ public: EAcceptance* accept, std::string& tooltip_msg); - //fix to get rid of gSavedSettings use - rkeast - void setPartialSearch(bool toggle); - bool getPartialSearch(); - void setSearchType(U32 type); - U32 getSearchType(); - // Call this method to set the selection. void openAllFolders(); void closeAllFolders(); @@ -149,9 +139,6 @@ protected: // Given the id and the parent, build all of the folder views. void rebuildViewsFor(const LLUUID& id, U32 mask); void buildNewViews(const LLUUID& id); - // - void buildNewViews(const LLInventoryObject* objectp); - // public: // TomY TODO: Move this elsewhere? @@ -264,7 +251,7 @@ public: } // [/RLVa:KB] -// Final cleanup, destroy all open inventory views. + // Final cleanup, destroy all open inventory views. static void cleanup(); // LLView & LLFloater functionality @@ -289,9 +276,9 @@ public: static BOOL checkFoldersByName(void *user_data); static void onSearchEdit(const std::string& search_string, void* user_data ); - static void onQuickFilterCommit(LLUICtrl* ctrl, void* user_data); - static void refreshQuickFilter(LLUICtrl* ctrl); - + static void onQuickFilterCommit(LLUICtrl* ctrl, void* user_data); + static void refreshQuickFilter(LLUICtrl* ctrl); + static void onFilterSelected(void* userdata, bool from_click); static void onResetAll(void* userdata); static void onExpandAll(void* userdata); @@ -315,17 +302,14 @@ protected: protected: LLSearchEditor* mSearchEditor; - LLComboBox* mQuickFilterCombo; + LLComboBox* mQuickFilterCombo; LLTabContainer* mFilterTabs; - LLHandle mFinderHandle; + LLHandle mFinderHandle; LLInventoryPanel* mActivePanel; LLSaveFolderState* mSavedFolderState; std::string mFilterText; - std::string mOldFilterText; - S32 mItemCount; - S32 mOldItemCount; // This container is used to hold all active inventory views. This // is here to support the inventory toggle show button. diff --git a/indra/newview/llpanelinventory.cpp b/indra/newview/llpanelinventory.cpp index 72776f41c..8821ecf0c 100644 --- a/indra/newview/llpanelinventory.cpp +++ b/indra/newview/llpanelinventory.cpp @@ -2078,11 +2078,11 @@ void LLPanelInventory::draw() } } -void LLPanelInventory::deleteAllChildren(BOOL delayed_delete) +void LLPanelInventory::deleteAllChildren() { mScroller = NULL; mFolders = NULL; - LLView::deleteAllChildren(delayed_delete); + LLView::deleteAllChildren(); } BOOL LLPanelInventory::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, EDragAndDropType cargo_type, void *cargo_data, EAcceptance *accept, std::string& tooltip_msg) diff --git a/indra/newview/llpanelinventory.h b/indra/newview/llpanelinventory.h index df3ce7278..e5b72afe5 100644 --- a/indra/newview/llpanelinventory.h +++ b/indra/newview/llpanelinventory.h @@ -101,7 +101,7 @@ public: LLFolderView* getRootFolder() const { return mFolders; } virtual void draw(); - virtual void deleteAllChildren(BOOL delayed_delete=FALSE); + virtual void deleteAllChildren(); virtual BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, EDragAndDropType cargo_type, void *cargo_data, EAcceptance *accept, std::string& tooltip_msg); static void idle(void* user_data); diff --git a/indra/newview/skins/default/textures/inv_link_Item.tga b/indra/newview/skins/default/textures/inv_link_Item.tga new file mode 100644 index 000000000..0fdd4bc7c Binary files /dev/null and b/indra/newview/skins/default/textures/inv_link_Item.tga differ diff --git a/indra/newview/skins/default/textures/inv_link_Item_broken.tga b/indra/newview/skins/default/textures/inv_link_Item_broken.tga new file mode 100644 index 000000000..bbfadb1d4 Binary files /dev/null and b/indra/newview/skins/default/textures/inv_link_Item_broken.tga differ diff --git a/indra/newview/skins/default/textures/inv_link_folder.tga b/indra/newview/skins/default/textures/inv_link_folder.tga new file mode 100644 index 000000000..f686e3d35 Binary files /dev/null and b/indra/newview/skins/default/textures/inv_link_folder.tga differ diff --git a/indra/newview/skins/default/xui/en-us/floater_inventory.xml b/indra/newview/skins/default/xui/en-us/floater_inventory.xml index 27829020c..d1dc7608a 100644 --- a/indra/newview/skins/default/xui/en-us/floater_inventory.xml +++ b/indra/newview/skins/default/xui/en-us/floater_inventory.xml @@ -208,30 +208,19 @@ - - - - - - - - - - - - - - - - - + + + + + + + + + +