From db036d997c801e22fe3ca2e3a2b51146709e65fb Mon Sep 17 00:00:00 2001 From: David Kelly Date: Mon, 6 Mar 2017 15:18:35 -0700 Subject: [PATCH 1/5] first pass --- interface/resources/qml/hifi/Pal.qml | 30 ++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/interface/resources/qml/hifi/Pal.qml b/interface/resources/qml/hifi/Pal.qml index 28384f9c1c..670a29c82d 100644 --- a/interface/resources/qml/hifi/Pal.qml +++ b/interface/resources/qml/hifi/Pal.qml @@ -63,7 +63,16 @@ Rectangle { } function refreshWithFilter() { // We should just be able to set settings.filtered to filter.checked, but see #3249, so send to .js for saving. - pal.sendToScript({method: 'refresh', params: {filter: filter.checked && {distance: settings.nearDistance}}}); + var userIds = []; + table.selection.forEach(function (userIndex) { + userIds.push(userModelData[userIndex].sessionId); + }); + table.selection.clear(); + var params = {filter: filter.checked && {distance: settings.nearDistance}}; + if (userIds.length > 0) { + params.selected = [[userIds[0]], true, true]; + } + pal.sendToScript({method: 'refresh', params: params}); } // This is the container for the PAL @@ -286,7 +295,7 @@ Rectangle { HifiControls.GlyphButton { function getGlyph() { var fileName = "vol_"; - if (model["personalMute"]) { + if (model && model["personalMute"]) { fileName += "x_"; } fileName += (4.0*(model ? model.avgAudioLevel : 0.0)).toFixed(0); @@ -611,10 +620,20 @@ Rectangle { console.log('Unrecognized message:', JSON.stringify(message)); } } + function getSelectedSessionIDs() { + var sessionIDs = []; + table.selection.forEach(function (userIndex) { + sessionIDs.push(userModelData[userIndex].sessionId); + }); + return sessionIDs; + } function sortModel() { var sortProperty = table.getColumn(table.sortIndicatorColumn).role; var before = (table.sortIndicatorOrder === Qt.AscendingOrder) ? -1 : 1; var after = -1 * before; + + // get selection(s) before sorting + var selectedIDs = getSelectedSessionIDs(); userModelData.sort(function (a, b) { var aValue = a[sortProperty].toString().toLowerCase(), bValue = b[sortProperty].toString().toLowerCase(); switch (true) { @@ -627,6 +646,7 @@ Rectangle { userModel.clear(); var userIndex = 0; + var newSelectedIndexes=[]; userModelData.forEach(function (datum) { function init(property) { if (datum[property] === undefined) { @@ -636,7 +656,13 @@ Rectangle { ['personalMute', 'ignore', 'mute', 'kick'].forEach(init); datum.userIndex = userIndex++; userModel.append(datum); + if (selectedIDs.indexOf(datum.sessionId) != -1) { + newSelectedIndexes.push(datum.userIndex); + } }); + if (newSelectedIndexes.length > 0) { + table.selection.select(newSelectedIndexes); + } } signal sendToScript(var message); function noticeSelection() { From e14a1ad1af19cc4cbdd480f09ca24d5c22f44a68 Mon Sep 17 00:00:00 2001 From: David Kelly Date: Mon, 6 Mar 2017 15:26:03 -0700 Subject: [PATCH 2/5] minor cleanup --- interface/resources/qml/hifi/Pal.qml | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/interface/resources/qml/hifi/Pal.qml b/interface/resources/qml/hifi/Pal.qml index 670a29c82d..9de7817d1b 100644 --- a/interface/resources/qml/hifi/Pal.qml +++ b/interface/resources/qml/hifi/Pal.qml @@ -61,13 +61,16 @@ Rectangle { property int sortIndicatorColumn: 1 property int sortIndicatorOrder: Qt.AscendingOrder } + function getSelectedSessionIDs() { + var sessionIDs = []; + table.selection.forEach(function (userIndex) { + sessionIDs.push(userModelData[userIndex].sessionId); + }); + return sessionIDs; + } function refreshWithFilter() { // We should just be able to set settings.filtered to filter.checked, but see #3249, so send to .js for saving. - var userIds = []; - table.selection.forEach(function (userIndex) { - userIds.push(userModelData[userIndex].sessionId); - }); - table.selection.clear(); + var userIds = getSelectedSessionIDs(); var params = {filter: filter.checked && {distance: settings.nearDistance}}; if (userIds.length > 0) { params.selected = [[userIds[0]], true, true]; @@ -620,13 +623,6 @@ Rectangle { console.log('Unrecognized message:', JSON.stringify(message)); } } - function getSelectedSessionIDs() { - var sessionIDs = []; - table.selection.forEach(function (userIndex) { - sessionIDs.push(userModelData[userIndex].sessionId); - }); - return sessionIDs; - } function sortModel() { var sortProperty = table.getColumn(table.sortIndicatorColumn).role; var before = (table.sortIndicatorOrder === Qt.AscendingOrder) ? -1 : 1; From 3d39aae35b0e91a594c9a3aedf8d6548938b8654 Mon Sep 17 00:00:00 2001 From: David Kelly Date: Mon, 6 Mar 2017 15:52:33 -0700 Subject: [PATCH 3/5] minor tweak - just in case --- interface/resources/qml/hifi/Pal.qml | 1 + 1 file changed, 1 insertion(+) diff --git a/interface/resources/qml/hifi/Pal.qml b/interface/resources/qml/hifi/Pal.qml index 9de7817d1b..db975f3d8a 100644 --- a/interface/resources/qml/hifi/Pal.qml +++ b/interface/resources/qml/hifi/Pal.qml @@ -658,6 +658,7 @@ Rectangle { }); if (newSelectedIndexes.length > 0) { table.selection.select(newSelectedIndexes); + table.positionViewAtRow(userIndex, ListView.Beginning); } } signal sendToScript(var message); From c6dbfc85f055bc95646b04b36b38c7b3526a00ad Mon Sep 17 00:00:00 2001 From: David Kelly Date: Tue, 7 Mar 2017 09:54:00 -0700 Subject: [PATCH 4/5] cr feedback --- interface/resources/qml/hifi/Pal.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/resources/qml/hifi/Pal.qml b/interface/resources/qml/hifi/Pal.qml index db975f3d8a..3608c03e79 100644 --- a/interface/resources/qml/hifi/Pal.qml +++ b/interface/resources/qml/hifi/Pal.qml @@ -658,7 +658,7 @@ Rectangle { }); if (newSelectedIndexes.length > 0) { table.selection.select(newSelectedIndexes); - table.positionViewAtRow(userIndex, ListView.Beginning); + table.positionViewAtRow(newSelectedIndexes[0], ListView.Beginning); } } signal sendToScript(var message); From b760e8622606c91be1eac4995c30426ff56fb30a Mon Sep 17 00:00:00 2001 From: David Kelly Date: Tue, 7 Mar 2017 10:17:32 -0700 Subject: [PATCH 5/5] rest of cr feedback --- interface/resources/qml/hifi/Pal.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/resources/qml/hifi/Pal.qml b/interface/resources/qml/hifi/Pal.qml index 3608c03e79..7f9de35c90 100644 --- a/interface/resources/qml/hifi/Pal.qml +++ b/interface/resources/qml/hifi/Pal.qml @@ -642,7 +642,7 @@ Rectangle { userModel.clear(); var userIndex = 0; - var newSelectedIndexes=[]; + var newSelectedIndexes = []; userModelData.forEach(function (datum) { function init(property) { if (datum[property] === undefined) {