mirror of
https://github.com/overte-org/overte.git
synced 2025-04-16 16:26:17 +02:00
Merge pull request #9815 from davidkelly/dk/3377
Retain selection in PAL when sorting or reloading
This commit is contained in:
commit
f0fd29abd3
1 changed files with 25 additions and 2 deletions
|
@ -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() {
|
||||
|
|
Loading…
Reference in a new issue