From 89fe5dab825a62a0e3fd8d248cbc91c65eb2a426 Mon Sep 17 00:00:00 2001 From: Jacek Antonelli Date: Fri, 15 Aug 2008 23:44:50 -0500 Subject: Second Life viewer sources 1.14.0.0 --- linden/indra/newview/lltexturectrl.cpp | 127 ++++++++++++++++++++------------- 1 file changed, 78 insertions(+), 49 deletions(-) (limited to 'linden/indra/newview/lltexturectrl.cpp') diff --git a/linden/indra/newview/lltexturectrl.cpp b/linden/indra/newview/lltexturectrl.cpp index 9edd0ad..666b5d2 100644 --- a/linden/indra/newview/lltexturectrl.cpp +++ b/linden/indra/newview/lltexturectrl.cpp @@ -114,6 +114,7 @@ public: EAcceptance *accept, LLString& tooltip_msg); virtual void draw(); + virtual BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent); // LLFloater overrides virtual void onClose(bool app_quitting); @@ -175,6 +176,7 @@ protected: BOOL mCanApplyImmediately; BOOL mNoCopyTextureSelected; F32 mContextConeOpacity; + LLSaveFolderState mSavedFolderState; }; LLFloaterTexturePicker::LLFloaterTexturePicker( @@ -229,12 +231,16 @@ LLFloaterTexturePicker::LLFloaterTexturePicker( filter_types |= 0x1 << LLInventoryType::IT_TEXTURE; filter_types |= 0x1 << LLInventoryType::IT_SNAPSHOT; - mInventoryPanel->setAutoSelectOverride(true); mInventoryPanel->setFilterTypes(filter_types); - mInventoryPanel->setFilterPermMask(getFilterPermMask()); + //mInventoryPanel->setFilterPermMask(getFilterPermMask()); //Commented out due to no-copy texture loss. + mInventoryPanel->setFilterPermMask(immediate_filter_perm_mask); mInventoryPanel->setSelectCallback(onSelectionChange, this); mInventoryPanel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS); mInventoryPanel->setAllowMultiSelect(FALSE); + + // store this filter as the default one + mInventoryPanel->getRootFolder()->getFilter()->markDefault(); + // Commented out to stop opening all folders with textures // mInventoryPanel->openDefaultFolderForType(LLAssetType::AT_TEXTURE); @@ -262,6 +268,8 @@ LLFloaterTexturePicker::LLFloaterTexturePicker( updateFilterPermMask(); setCanMinimize(FALSE); + + mSavedFolderState.setApply(FALSE); } LLFloaterTexturePicker::~LLFloaterTexturePicker() @@ -315,7 +323,7 @@ void LLFloaterTexturePicker::setCanApplyImmediately(BOOL b) void LLFloaterTexturePicker::stopUsingPipette() { - if (gToolMgr && gToolMgr->getCurrentTool(gKeyboard->currentMask(TRUE)) == gToolPipette) + if (gToolMgr && gToolMgr->getCurrentTool() == gToolPipette) { gToolMgr->clearTransientTool(); } @@ -338,7 +346,8 @@ void LLFloaterTexturePicker::updateImageStats() } if (gAgent.isGodlike()) { - LLString tstring = "Pick: " + mTexturep->getID().getString(); + LLString tstring = "Pick: "; + tstring.append(mTexturep->getID().asString()); setTitle(tstring); } } @@ -368,7 +377,8 @@ BOOL LLFloaterTexturePicker::handleDragAndDrop( if (mod) item_perm_mask |= PERM_MODIFY; if (xfer) item_perm_mask |= PERM_TRANSFER; - PermissionMask filter_perm_mask = getFilterPermMask(); + //PermissionMask filter_perm_mask = getFilterPermMask(); Commented out due to no-copy texture loss. + PermissionMask filter_perm_mask = mImmediateFilterPermMask; if ( (item_perm_mask & filter_perm_mask) == filter_perm_mask ) { if (drop) @@ -395,6 +405,41 @@ BOOL LLFloaterTexturePicker::handleDragAndDrop( return handled; } +BOOL LLFloaterTexturePicker::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent) +{ + LLFolderView* root_folder = mInventoryPanel->getRootFolder(); + + if (!called_from_parent && root_folder && + mSearchEdit && mSearchEdit->hasFocus() && + (key == KEY_RETURN || key == KEY_DOWN) && mask == MASK_NONE) + { + if (!root_folder->getCurSelectedItem()) + { + LLFolderViewItem* itemp = root_folder->getItemByID(gAgent.getInventoryRootID()); + if (itemp) + { + root_folder->setSelection(itemp, FALSE, FALSE); + } + } + root_folder->scrollToShowSelection(); + + // move focus to inventory proper + root_folder->setFocus(TRUE); + + // treat this as a user selection of the first filtered result + commitIfImmediateSet(); + + return TRUE; + } + + if (root_folder->hasFocus() && key == KEY_UP) + { + mSearchEdit->focusFirstItem(TRUE); + } + + return LLFloater::handleKeyHere(key, mask, called_from_parent); +} + // virtual void LLFloaterTexturePicker::onClose(bool app_quitting) { @@ -469,7 +514,7 @@ void LLFloaterTexturePicker::draw() childSetEnabled("show_folders_check", mActive && mCanApplyImmediately && !mNoCopyTextureSelected); childSetEnabled("Select", mActive); childSetEnabled("Pipette", gToolMgr != NULL && mActive); - childSetValue("Pipette", gToolMgr && gToolMgr->getCurrentTool(gKeyboard->currentMask(TRUE)) == gToolPipette); + childSetValue("Pipette", gToolMgr && gToolMgr->getCurrentTool() == gToolPipette); //RN: reset search bar to reflect actual search query (all caps, for example) mSearchEdit->setText(mInventoryPanel->getFilterSubString()); @@ -747,60 +792,43 @@ void LLFloaterTexturePicker::onApplyImmediateCheck(LLUICtrl* ctrl, void *user_da void LLFloaterTexturePicker::updateFilterPermMask() { - mInventoryPanel->setFilterPermMask( getFilterPermMask() ); + //mInventoryPanel->setFilterPermMask( getFilterPermMask() ); Commented out due to no-copy texture loss. } void LLFloaterTexturePicker::onSearchEdit(const LLString& search_string, void* user_data ) { LLFloaterTexturePicker* picker = (LLFloaterTexturePicker*)user_data; - std::string filter_text = search_string; - - if (filter_text.empty()&& picker->mInventoryPanel->getFilterSubString().empty()) - { - // current filter and new filter empty, do nothing - return; - } - std::string upper_case_search_string = filter_text; + std::string upper_case_search_string = search_string; LLString::toUpper(upper_case_search_string); - picker->mInventoryPanel->setFilterSubString(upper_case_search_string); - - LLFolderView* root_folder = picker->mInventoryPanel->getRootFolder(); - - //if (search_string.size()) - //{ - // LLSelectFirstFilteredItem filter; - // root_folder->applyFunctorRecursively(filter); - // //...and scroll to show it - // root_folder->scrollToShowSelection(); - //} - - KEY key = gKeyboard->currentKey(); - - if ((key == KEY_RETURN || key == KEY_DOWN) && gKeyboard->currentMask(FALSE) == MASK_NONE) + if (upper_case_search_string.empty()) { - if (search_string.size()) + if (picker->mInventoryPanel->getFilterSubString().empty()) { - LLSelectFirstFilteredItem filter; - root_folder->applyFunctorRecursively(filter); - //...and scroll to show it - root_folder->scrollToShowSelection(); + // current filter and new filter empty, do nothing + return; } - if (!root_folder->getCurSelectedItem()) + picker->mSavedFolderState.setApply(TRUE); + picker->mInventoryPanel->getRootFolder()->applyFunctorRecursively(picker->mSavedFolderState); + // add folder with current item to list of previously opened folders + LLOpenFoldersWithSelection opener; + picker->mInventoryPanel->getRootFolder()->applyFunctorRecursively(opener); + picker->mInventoryPanel->getRootFolder()->scrollToShowSelection(); + + } + else if (picker->mInventoryPanel->getFilterSubString().empty()) + { + // first letter in search term, save existing folder open state + if (!picker->mInventoryPanel->getRootFolder()->isFilterActive()) { - LLFolderViewItem* itemp = root_folder->getItemByID(gAgent.getInventoryRootID()); - if (itemp) - { - root_folder->setSelection(itemp, FALSE, FALSE); - } + picker->mSavedFolderState.setApply(FALSE); + picker->mInventoryPanel->getRootFolder()->applyFunctorRecursively(picker->mSavedFolderState); } - - // move focus to inventory proper - root_folder->setFocus(TRUE); - root_folder->scrollToShowSelection(); } + + picker->mInventoryPanel->setFilterSubString(upper_case_search_string); } //static @@ -1039,7 +1067,7 @@ void LLTextureCtrl::showPicker(BOOL take_focus) // Show the dialog if( floaterp ) { - floaterp->open( ); + floaterp->open( ); /* Flawfinder: ignore */ } else { @@ -1060,7 +1088,7 @@ void LLTextureCtrl::showPicker(BOOL take_focus) mFloaterHandle = floaterp->getHandle(); gFloaterView->getParentFloater(this)->addDependentFloater(floaterp); - floaterp->open(); + floaterp->open(); /* Flawfinder: ignore */ } if (take_focus) @@ -1270,8 +1298,9 @@ BOOL LLTextureCtrl::allowDrop(LLInventoryItem* item) if (mod) item_perm_mask |= PERM_MODIFY; if (xfer) item_perm_mask |= PERM_TRANSFER; - PermissionMask filter_perm_mask = mCanApplyImmediately ? - mImmediateFilterPermMask : mNonImmediateFilterPermMask; +// PermissionMask filter_perm_mask = mCanApplyImmediately ? commented out due to no-copy texture loss. +// mImmediateFilterPermMask : mNonImmediateFilterPermMask; + PermissionMask filter_perm_mask = mImmediateFilterPermMask; if ( (item_perm_mask & filter_perm_mask) == filter_perm_mask ) { if(mDragCallback) -- cgit v1.1