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 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.
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
@ -286,7 +298,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);
@ -615,6 +627,9 @@ Rectangle {
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 +642,7 @@ Rectangle {
userModel.clear();
var userIndex = 0;
var newSelectedIndexes = [];
userModelData.forEach(function (datum) {
function init(property) {
if (datum[property] === undefined) {
@ -636,7 +652,14 @@ 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);
table.positionViewAtRow(newSelectedIndexes[0], ListView.Beginning);
}
}
signal sendToScript(var message);
function noticeSelection() {