From 6f7684ca9754084d682ff31b58bc522695c15cf1 Mon Sep 17 00:00:00 2001 From: Simon Wendlandt Date: Wed, 4 Jun 2025 13:33:26 +0200 Subject: [PATCH] Right-positioned MultiSelectMode for sap.m.ListBase --- src/sap.m/src/sap/m/ListBase.js | 14 +++++++------- src/sap.m/src/sap/m/ListBaseRenderer.js | 1 + src/sap.m/src/sap/m/ListItemBase.js | 9 +++++---- src/sap.m/src/sap/m/library.js | 6 ++++++ src/sap.m/test/sap/m/Tree.js | 1 + 5 files changed, 20 insertions(+), 11 deletions(-) diff --git a/src/sap.m/src/sap/m/ListBase.js b/src/sap.m/src/sap/m/ListBase.js index cc3a35fd6b5a..351d2b3efb58 100644 --- a/src/sap.m/src/sap/m/ListBase.js +++ b/src/sap.m/src/sap/m/ListBase.js @@ -1183,7 +1183,7 @@ function( if (aSelecteds.length > 1) { // remove selection if there are more than one item is selected this.removeSelections(true); - } else if (sOldMode === ListMode.MultiSelect) { + } else if (sOldMode === ListMode.MultiSelect || sOldMode === ListMode.MultiSelectRight) { // if old mode is multi select then we need to remember selected item // in case of new item selection right after setMode call this._oSelectedItem = aSelecteds[0]; @@ -1249,7 +1249,7 @@ function( * @protected */ ListBase.prototype.isAllSelectableSelected = function() { - if (this.getMode() != ListMode.MultiSelect) { + if (this.getMode() != ListMode.MultiSelect && this.getMode() != ListMode.MultiSelectRight) { return false; } @@ -1324,7 +1324,7 @@ function( // this gets called when selected property of the ListItem is changed ListBase.prototype.onItemSelectedChange = function(oListItem, bSelected) { - if (this.getMode() == ListMode.MultiSelect) { + if (this.getMode() == ListMode.MultiSelect || this.getMode() === ListMode.MultiSelectRight) { this._updateSelectedPaths(oListItem, bSelected); return; } @@ -1682,7 +1682,7 @@ function( return; } - if (sMode === ListMode.MultiSelect || (this._bSelectionMode && bSelected)) { + if (sMode === ListMode.MultiSelect || sMode === ListMode.MultiSelectRight || (this._bSelectionMode && bSelected)) { this._fireSelectionChangeEvent([oListItem]); // announce the selection state changes @@ -1751,7 +1751,7 @@ function( oEvent.altKey || oEvent.metaKey || oEvent.code == "Tab" || - this.getMode() !== ListMode.MultiSelect || + (this.getMode() !== ListMode.MultiSelect && this.getMode() !== ListMode.MultiSelectRight) || !oItem.isSelectable() || oEvent.key === "F6") { if (this._mRangeSelection) { @@ -2585,7 +2585,7 @@ function( }; // Ctrl + (Shift) + A: select/deselect all - if (oEvent.code == "KeyA" && (oEvent.metaKey || oEvent.ctrlKey) && bItemEvent && this.getMode() == ListMode.MultiSelect) { + if (oEvent.code == "KeyA" && (oEvent.metaKey || oEvent.ctrlKey) && bItemEvent && (this.getMode() == ListMode.MultiSelect || this.getMode() == ListMode.MultiSelectRight)) { var bClearAll = (this.getMultiSelectMode() == MultiSelectMode.ClearAll); if (oEvent.shiftKey) { if (bClearAll) { @@ -3200,4 +3200,4 @@ function( return ListBase; -}); \ No newline at end of file +}); diff --git a/src/sap.m/src/sap/m/ListBaseRenderer.js b/src/sap.m/src/sap/m/ListBaseRenderer.js index 94cb9e6b4d79..baafa0825bf0 100644 --- a/src/sap.m/src/sap/m/ListBaseRenderer.js +++ b/src/sap.m/src/sap/m/ListBaseRenderer.js @@ -35,6 +35,7 @@ sap.ui.define(["sap/m/library", "sap/ui/core/library", "sap/ui/Device", "sap/ui/ None : 0, Delete : 1, MultiSelect : -1, + MultiSelectRight: 1, SingleSelect : 1, SingleSelectLeft : -1, SingleSelectMaster : 0 diff --git a/src/sap.m/src/sap/m/ListItemBase.js b/src/sap.m/src/sap/m/ListItemBase.js index 3c4557718f24..23c548f89585 100644 --- a/src/sap.m/src/sap/m/ListItemBase.js +++ b/src/sap.m/src/sap/m/ListItemBase.js @@ -684,7 +684,7 @@ function( return this.getDeleteControl(bCreateIfNotExist); } - if (sMode == ListMode.MultiSelect) { + if (sMode == ListMode.MultiSelect || sMode == ListMode.MultiSelectRight) { return this.getMultiSelectControl(bCreateIfNotExist); } @@ -890,7 +890,8 @@ function( this.getListProperty("includeItemInSelection") && ( sMode == ListMode.SingleSelectLeft || sMode == ListMode.SingleSelect || - sMode == ListMode.MultiSelect + sMode == ListMode.MultiSelect || + sMode == ListMode.MultiSelectRight ) ); }; @@ -987,7 +988,7 @@ function( if (this.isIncludedIntoSelection()) { // update selected property - if (this.getMode() == ListMode.MultiSelect) { + if (this.getMode() == ListMode.MultiSelect || ListMode.MultiSelectRight) { this.setSelected(!this.getSelected()); this.informList("Select", this.getSelected()); } else if (!this.getSelected()) { @@ -1110,7 +1111,7 @@ function( } // update selected property - if (this.getMode() == ListMode.MultiSelect) { + if (this.getMode() == ListMode.MultiSelect || ListMode.MultiSelectRight) { this.setSelected(!this.getSelected()); this.informList("Select", this.getSelected()); } else if (!this.getSelected()) { diff --git a/src/sap.m/src/sap/m/library.js b/src/sap.m/src/sap/m/library.js index 449c869d733a..13e6cf2df84a 100644 --- a/src/sap.m/src/sap/m/library.js +++ b/src/sap.m/src/sap/m/library.js @@ -3171,6 +3171,12 @@ sap.ui.define([ */ MultiSelect : "MultiSelect", + /** + * Right-positioned multi selection mode (more than one list item can be selected). + * @public + */ + MultiSelectRight : "MultiSelectRight", + /** * Delete mode (only one list item can be deleted via provided delete button) * @public diff --git a/src/sap.m/test/sap/m/Tree.js b/src/sap.m/test/sap/m/Tree.js index 20b5d9a0f54b..65e67a9a183e 100644 --- a/src/sap.m/test/sap/m/Tree.js +++ b/src/sap.m/test/sap/m/Tree.js @@ -894,6 +894,7 @@ sap.ui.define([ new Item({ key: "2", text: ListMode.SingleSelectLeft }), new Item({ key: "3", text: ListMode.SingleSelectMaster}), new Item({ key: "4", text: ListMode.MultiSelect }), + new Item({key: "5", text: ListMode.MultiSelectRight}), new Item({ key: "5", text: ListMode.Delete }) ], selectedItem: "0",