diff options
| author | Maxim Nikolenko <maximnproductengine@lindenlab.com> | 2023-02-27 20:27:11 +0200 | 
|---|---|---|
| committer | Maxim Nikolenko <maximnproductengine@lindenlab.com> | 2023-02-27 20:27:11 +0200 | 
| commit | f377e27f0b8ddabf755c6efe71d6bc0e53e751c1 (patch) | |
| tree | 0bf40c271aa905a3bf8b50a96421df8b9a57aae9 | |
| parent | cb7debd70dc880a9cdeef983dc99281780c5e89a (diff) | |
SL-19274 Add new double-click option to Inventory settings
| -rw-r--r-- | indra/llui/llfolderviewitem.cpp | 9 | ||||
| -rw-r--r-- | indra/llui/llfolderviewmodel.h | 2 | ||||
| -rw-r--r-- | indra/newview/app_settings/settings.xml | 6 | ||||
| -rw-r--r-- | indra/newview/llconversationmodel.h | 2 | ||||
| -rw-r--r-- | indra/newview/llinventorybridge.cpp | 24 | ||||
| -rw-r--r-- | indra/newview/llinventorybridge.h | 2 | ||||
| -rw-r--r-- | indra/newview/llinventorypanel.cpp | 18 | ||||
| -rw-r--r-- | indra/newview/llinventorypanel.h | 2 | ||||
| -rw-r--r-- | indra/newview/llpanelmaininventory.cpp | 7 | ||||
| -rw-r--r-- | indra/newview/llpanelmaininventory.h | 2 | ||||
| -rw-r--r-- | indra/newview/llpanelobjectinventory.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/floater_inventory_settings.xml | 28 | 
12 files changed, 70 insertions, 34 deletions
diff --git a/indra/llui/llfolderviewitem.cpp b/indra/llui/llfolderviewitem.cpp index 4a9ac56d9f..6ddbf26639 100644 --- a/indra/llui/llfolderviewitem.cpp +++ b/indra/llui/llfolderviewitem.cpp @@ -2077,12 +2077,17 @@ BOOL LLFolderViewFolder::handleDoubleClick( S32 x, S32 y, MASK mask )  	}  	if( !handled )  	{ -        static LLUICachedControl<bool> double_click_new_window("MultiModeDoubleClickOpenWindow", false); -        if (double_click_new_window) +        static LLUICachedControl<U32> double_click_action("MultiModeDoubleClickFolder", false); +        if (double_click_action == 1)          {              getViewModelItem()->navigateToFolder(true);              return TRUE;          } +        if (double_click_action == 2) +        { +            getViewModelItem()->navigateToFolder(false, true); +            return TRUE; +        }  		if(mIndentation < x && x < mIndentation + (isCollapsed() ? 0 : mArrowSize) + mTextPad)  		{  			// don't select when user double-clicks plus sign diff --git a/indra/llui/llfolderviewmodel.h b/indra/llui/llfolderviewmodel.h index b1db9489fd..b5a765fab3 100644 --- a/indra/llui/llfolderviewmodel.h +++ b/indra/llui/llfolderviewmodel.h @@ -160,7 +160,7 @@ public:  	virtual void closeItem( void ) = 0;  	virtual void selectItem(void) = 0; -    virtual void navigateToFolder(bool new_window = false) = 0; +    virtual void navigateToFolder(bool new_window = false, bool change_mode = false) = 0;      virtual BOOL isItemWearable() const { return FALSE; } diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 3a896b4f5f..23521351ca 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -16909,14 +16909,14 @@      <key>Value</key>      <integer>0</integer>    </map> -<key>MultiModeDoubleClickOpenWindow</key> +<key>MultiModeDoubleClickFolder</key>  <map>    <key>Comment</key> -  <string>Sets the action for Double-click on folder in multi-folder view (0 - expands and collapses folder, 1 - opens a new window)</string> +  <string>Sets the action for Double-click on folder in multi-folder view (0 - expands and collapses folder, 1 - opens a new window, 2 – stays in current floater but switches to SFV)</string>    <key>Persist</key>    <integer>1</integer>    <key>Type</key> -  <string>Boolean</string> +  <string>U32</string>    <key>Value</key>    <integer>0</integer>  </map> diff --git a/indra/newview/llconversationmodel.h b/indra/newview/llconversationmodel.h index c7da060f33..22d2d60905 100644 --- a/indra/newview/llconversationmodel.h +++ b/indra/newview/llconversationmodel.h @@ -111,7 +111,7 @@ public:  	virtual void previewItem( void );  	virtual void selectItem(void) { }   	virtual void showProperties(void); -    virtual void navigateToFolder(bool new_window = false) {} +    virtual void navigateToFolder(bool new_window = false, bool change_mode = false) {}  	// Methods used in sorting (see LLConversationSort::operator())  	EConversationType const getType() const { return mConvType; } diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index f7b7a6635e..5f1db0895c 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -413,7 +413,7 @@ void LLInvFVBridge::showProperties()      }  } -void LLInvFVBridge::navigateToFolder(bool new_window) +void LLInvFVBridge::navigateToFolder(bool new_window, bool change_mode)  {      if(new_window)      { @@ -421,21 +421,21 @@ void LLInvFVBridge::navigateToFolder(bool new_window)      }      else      { -        LLInventorySingleFolderPanel* panel = dynamic_cast<LLInventorySingleFolderPanel*>(mInventoryPanel.get()); -        if (!panel) +        if(change_mode)          { -            return; -        } -        LLInventoryModel* model = getInventoryModel(); -        if (!model) -        { -            return; +            LLInventoryPanel::setSFViewAndOpenFolder(mInventoryPanel.get(), mUUID);          } -        if (mUUID.isNull()) +        else          { -            return; +            LLInventorySingleFolderPanel* panel = dynamic_cast<LLInventorySingleFolderPanel*>(mInventoryPanel.get()); +            if (!panel || !getInventoryModel() || mUUID.isNull()) +            { +                return; +            } + +            panel->changeFolderRoot(mUUID);          } -        panel->changeFolderRoot(mUUID); +      }  } diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h index b2cc33aadd..958d284854 100644 --- a/indra/newview/llinventorybridge.h +++ b/indra/newview/llinventorybridge.h @@ -107,7 +107,7 @@ public:  	virtual std::string getLabelSuffix() const { return LLStringUtil::null; }  	virtual void openItem() {}  	virtual void closeItem() {} -    virtual void navigateToFolder(bool new_window = false); +    virtual void navigateToFolder(bool new_window = false, bool change_mode = false);  	virtual void showProperties();  	virtual BOOL isItemRenameable() const { return TRUE; }  	virtual BOOL isMultiPreviewAllowed() { return TRUE; } diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index 77588c8716..82f791a171 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -1831,6 +1831,24 @@ void LLInventoryPanel::openInventoryPanelAndSetSelection(BOOL auto_open, const L  	}  } +void LLInventoryPanel::setSFViewAndOpenFolder(const LLInventoryPanel* panel, const LLUUID& folder_id) +{ + +    LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("inventory"); +    for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin(); iter != inst_list.end(); ++iter) +    { +        LLFloaterSidePanelContainer* inventory_floater = dynamic_cast<LLFloaterSidePanelContainer*>(*iter); +        LLSidepanelInventory* sidepanel_inventory = inventory_floater->findChild<LLSidepanelInventory>("main_panel"); + +        LLPanelMainInventory* main_inventory = sidepanel_inventory->getMainInventoryPanel(); +        if (main_inventory && panel->hasAncestor(main_inventory) && !main_inventory->isSingleFolderMode()) +        { +            main_inventory->onViewModeClick(); +            main_inventory->setSingleFolderViewRoot(folder_id, false); +        } +    } +} +  void LLInventoryPanel::addHideFolderType(LLFolderType::EType folder_type)  {  	getFilter().setFilterCategoryTypes(getFilter().getFilterCategoryTypes() & ~(1ULL << folder_type)); diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h index baaefe5dd7..e9eaaa232d 100644 --- a/indra/newview/llinventorypanel.h +++ b/indra/newview/llinventorypanel.h @@ -246,7 +246,7 @@ public:  													BOOL main_panel = FALSE,  													BOOL take_keyboard_focus = TAKE_FOCUS_YES,  													BOOL reset_filter = FALSE); - +    static void setSFViewAndOpenFolder(const LLInventoryPanel* panel, const LLUUID& folder_id);  	void addItemID(const LLUUID& id, LLFolderViewItem* itemp);  	void removeItemID(const LLUUID& id);  	LLFolderViewItem* getItemByID(const LLUUID& id); diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index 0fd4eb0c15..5da53cc928 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -1321,10 +1321,13 @@ void LLPanelMainInventory::onForwardFolderClicked()      mSingleFolderPanelInventory->onForwardFolder();  } -void LLPanelMainInventory::setSingleFolderViewRoot(const LLUUID& folder_id) +void LLPanelMainInventory::setSingleFolderViewRoot(const LLUUID& folder_id, bool clear_nav_history)  {      mSingleFolderPanelInventory->changeFolderRoot(folder_id); -    mSingleFolderPanelInventory->clearNavigationHistory(); +    if(clear_nav_history) +    { +        mSingleFolderPanelInventory->clearNavigationHistory(); +    }  }  void LLPanelMainInventory::showActionMenu(LLMenuGL* menu, std::string spawning_view_name) diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h index 85373d7de3..6382f44bc9 100644 --- a/indra/newview/llpanelmaininventory.h +++ b/indra/newview/llpanelmaininventory.h @@ -103,7 +103,7 @@ public:      void onUpFolderClicked();      void onBackFolderClicked();      void onForwardFolderClicked(); -    void setSingleFolderViewRoot(const LLUUID& folder_id); +    void setSingleFolderViewRoot(const LLUUID& folder_id, bool clear_nav_history = true);      bool isSingleFolderMode() { return mSingleFolderMode; }  protected: diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp index c22915c3ab..1348996136 100644 --- a/indra/newview/llpanelobjectinventory.cpp +++ b/indra/newview/llpanelobjectinventory.cpp @@ -125,7 +125,7 @@ public:  	virtual BOOL canOpenItem() const { return FALSE; }  	virtual void closeItem() {}  	virtual void selectItem() {} -    virtual void navigateToFolder(bool new_window = false) {} +    virtual void navigateToFolder(bool new_window = false, bool change_mode = false) {}  	virtual BOOL isItemRenameable() const;  	virtual BOOL renameItem(const std::string& new_name);  	virtual BOOL isItemMovable() const; diff --git a/indra/newview/skins/default/xui/en/floater_inventory_settings.xml b/indra/newview/skins/default/xui/en/floater_inventory_settings.xml index c3e81a5523..bfac79ac46 100644 --- a/indra/newview/skins/default/xui/en/floater_inventory_settings.xml +++ b/indra/newview/skins/default/xui/en/floater_inventory_settings.xml @@ -4,10 +4,10 @@   can_minimize="true"   can_resize="false"   save_rect="true" - height="350" + height="370"   width="370"   name="inventory_settings" - title="Inventory settings"> + title="INVENTORY SETTINGS">   <icon    follows="top|left"    height="18" @@ -33,14 +33,14 @@     Double-click on folder in multi-folder view:   </text>   <radio_group -  control_name="MultiModeDoubleClickOpenWindow" +  control_name="MultiModeDoubleClickFolder"    follows="left|top"    top_pad="8"    layout="topleft"    font="SansSerifMedium"    left="60" -  width="325" -  height="45" +  width="300" +  height="70"    name="multi_double_click_setting">       <radio_item        height="20" @@ -48,7 +48,7 @@        label_text.text_color="White"        follows="left|top"        layout="topleft" -      name="false" +      name="0"        width="200"/>       <radio_item        height="20" @@ -57,7 +57,17 @@        label_text.text_color="White"        layout="topleft"        left_delta="0" -      name="true" +      name="1" +      top_pad ="5" +      width="200" /> +     <radio_item +      height="20" +      follows="left|top" +      label="Switch view" +      label_text.text_color="White" +      layout="topleft" +      left_delta="0" +      name="2"        top_pad ="5"        width="200" />   </radio_group> @@ -92,7 +102,7 @@    layout="topleft"    font="SansSerifMedium"    left="60" -  width="325" +  width="300"    height="45"    name="single_double_click_setting">       <radio_item @@ -135,7 +145,7 @@    layout="topleft"    font="SansSerifMedium"    left="60" -  width="325" +  width="300"    height="45"    name="find_original_settings">       <radio_item  | 
