Merge pull request #9815 from davidkelly/dk/3377

Retain selection in PAL when sorting or reloading
This commit is contained in:
Howard Stearns 2017-03-07 09:38:07 -08:00 committed by GitHub
commit f0fd29abd3

View file

@ -61,9 +61,21 @@ Rectangle {
property int sortIndicatorColumn: 1 property int sortIndicatorColumn: 1
property int sortIndicatorOrder: Qt.AscendingOrder property int sortIndicatorOrder: Qt.AscendingOrder
} }
function getSelectedSessionIDs() {
var sessionIDs = [];
table.selection.forEach(function (userIndex) {
sessionIDs.push(userModelData[userIndex].sessionId);
});
return sessionIDs;
}
function refreshWithFilter() { function refreshWithFilter() {
// We should just be able to set settings.filtered to filter.checked, but see #3249, so send to .js for saving. // 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 = getSelectedSessionIDs();
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 // This is the container for the PAL
@ -286,7 +298,7 @@ Rectangle {
HifiControls.GlyphButton { HifiControls.GlyphButton {
function getGlyph() { function getGlyph() {
var fileName = "vol_"; var fileName = "vol_";
if (model["personalMute"]) { if (model && model["personalMute"]) {
fileName += "x_"; fileName += "x_";
} }
fileName += (4.0*(model ? model.avgAudioLevel : 0.0)).toFixed(0); fileName += (4.0*(model ? model.avgAudioLevel : 0.0)).toFixed(0);
@ -615,6 +627,9 @@ Rectangle {
var sortProperty = table.getColumn(table.sortIndicatorColumn).role; var sortProperty = table.getColumn(table.sortIndicatorColumn).role;
var before = (table.sortIndicatorOrder === Qt.AscendingOrder) ? -1 : 1; var before = (table.sortIndicatorOrder === Qt.AscendingOrder) ? -1 : 1;
var after = -1 * before; var after = -1 * before;
// get selection(s) before sorting
var selectedIDs = getSelectedSessionIDs();
userModelData.sort(function (a, b) { userModelData.sort(function (a, b) {
var aValue = a[sortProperty].toString().toLowerCase(), bValue = b[sortProperty].toString().toLowerCase(); var aValue = a[sortProperty].toString().toLowerCase(), bValue = b[sortProperty].toString().toLowerCase();
switch (true) { switch (true) {
@ -627,6 +642,7 @@ Rectangle {
userModel.clear(); userModel.clear();
var userIndex = 0; var userIndex = 0;
var newSelectedIndexes = [];
userModelData.forEach(function (datum) { userModelData.forEach(function (datum) {
function init(property) { function init(property) {
if (datum[property] === undefined) { if (datum[property] === undefined) {
@ -636,7 +652,14 @@ Rectangle {
['personalMute', 'ignore', 'mute', 'kick'].forEach(init); ['personalMute', 'ignore', 'mute', 'kick'].forEach(init);
datum.userIndex = userIndex++; datum.userIndex = userIndex++;
userModel.append(datum); userModel.append(datum);
if (selectedIDs.indexOf(datum.sessionId) != -1) {
newSelectedIndexes.push(datum.userIndex);
}
}); });
if (newSelectedIndexes.length > 0) {
table.selection.select(newSelectedIndexes);
table.positionViewAtRow(newSelectedIndexes[0], ListView.Beginning);
}
} }
signal sendToScript(var message); signal sendToScript(var message);
function noticeSelection() { function noticeSelection() {