SL-19310 Update navigation buttons in single-folder view

master
Maxim Nikolenko 2023-03-02 20:54:33 +02:00
parent cf901b5abb
commit c74658b19b
7 changed files with 48 additions and 3 deletions

View File

@ -1273,6 +1273,11 @@ BOOL LLFolderView::handleKeyHere( KEY key, MASK mask )
if(mSelectedItems.size())
{
LLFolderViewItem* last_selected = getCurSelectedItem();
if(last_selected && last_selected->isSingleFolderMode())
{
handled = FALSE;
break;
}
LLFolderViewItem* parent_folder = last_selected->getParentFolder();
if (!last_selected->isOpen() && parent_folder && parent_folder->getParentFolder())
{

View File

@ -279,6 +279,8 @@ public:
// Does not need filter update
virtual void refreshSuffix();
bool isSingleFolderMode() { return mSingleFolderMode; }
// LLView functionality
virtual BOOL handleRightMouseDown( S32 x, S32 y, MASK mask );
virtual BOOL handleMouseDown( S32 x, S32 y, MASK mask );

View File

@ -2107,7 +2107,7 @@ void LLInventorySingleFolderPanel::changeFolderRoot(const LLUUID& new_id)
void LLInventorySingleFolderPanel::onForwardFolder()
{
if(!mForwardFolders.empty() && (mFolderID != mForwardFolders.back()))
if(isForwardAvailable())
{
mBackwardFolders.push_back(mFolderID);
mFolderID = mForwardFolders.back();
@ -2118,7 +2118,7 @@ void LLInventorySingleFolderPanel::onForwardFolder()
void LLInventorySingleFolderPanel::onBackwardFolder()
{
if(!mBackwardFolders.empty() && (mFolderID != mBackwardFolders.back()))
if(isBackwardAvailable())
{
mForwardFolders.push_back(mFolderID);
mFolderID = mBackwardFolders.back();
@ -2133,6 +2133,16 @@ void LLInventorySingleFolderPanel::clearNavigationHistory()
mBackwardFolders.clear();
}
bool LLInventorySingleFolderPanel::isBackwardAvailable()
{
return (!mBackwardFolders.empty() && (mFolderID != mBackwardFolders.back()));
}
bool LLInventorySingleFolderPanel::isForwardAvailable()
{
return (!mForwardFolders.empty() && (mFolderID != mForwardFolders.back()));
}
boost::signals2::connection LLInventorySingleFolderPanel::setRootChangedCallback(root_changed_callback_t cb)
{
return mRootChangedSignal.connect(cb);
@ -2186,6 +2196,12 @@ void LLInventorySingleFolderPanel::updateSingleFolderRoot()
mFolderRoot.get()->setCallbackRegistrar(&mCommitCallbackRegistrar);
buildNewViews(mFolderID);
LLFloater* root_floater = gFloaterView->getParentFloater(this);
if(root_floater)
{
root_floater->setFocus(true);
}
}
}

View File

@ -403,6 +403,9 @@ public:
void clearNavigationHistory();
LLUUID getSingleFolderRoot() { return mFolderID; }
bool isBackwardAvailable();
bool isForwardAvailable();
void setSelectCallback(const boost::function<void (const std::deque<LLFolderViewItem*>& items, BOOL user_action)>& cb);
typedef boost::function<void()> root_changed_callback_t;

View File

@ -374,6 +374,10 @@ BOOL LLPanelMainInventory::handleKeyHere(KEY key, MASK mask)
{
startSearch();
}
if(mSingleFolderMode && key == KEY_LEFT)
{
onBackFolderClicked();
}
}
return LLPanel::handleKeyHere(key, mask);
@ -1327,6 +1331,7 @@ void LLPanelMainInventory::setSingleFolderViewRoot(const LLUUID& folder_id, bool
if(clear_nav_history)
{
mSingleFolderPanelInventory->clearNavigationHistory();
updateNavButtons();
}
}
@ -1756,6 +1761,17 @@ void LLPanelMainInventory::updateTitle()
inventory_floater->setTitle(getString("inventory_title"));
}
}
updateNavButtons();
}
void LLPanelMainInventory::updateNavButtons()
{
getChild<LLButton>("back_btn")->setEnabled(mSingleFolderPanelInventory->isBackwardAvailable());
getChild<LLButton>("forward_btn")->setEnabled(mSingleFolderPanelInventory->isForwardAvailable());
const LLViewerInventoryCategory* cat = gInventory.getCategory(mSingleFolderPanelInventory->getSingleFolderRoot());
bool up_enabled = (cat && cat->getParentUUID().notNull());
getChild<LLButton>("up_btn")->setEnabled(up_enabled);
}
LLSidepanelInventory* LLPanelMainInventory::getParentSidepanelInventory()

View File

@ -179,6 +179,7 @@ protected:
bool isActionVisible(const LLSD& userdata);
static bool hasSettingsInventory();
void updateTitle();
void updateNavButtons();
/**
* Set upload cost in "Upload" sub menu.
*/

View File

@ -293,7 +293,9 @@
border="false"
bevel_style="none"
scroll.reserve_scroll_corner="false">
<item folder_indentation="-8"/>
<item
single_folder_mode="true"
folder_indentation="-8"/>
<folder
single_folder_mode="true"
folder_indentation="-8"/>