mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-09 09:09:56 +02:00
integrate deleting favorite avatars with backend
This commit is contained in:
parent
6ff397e9e0
commit
512e72d6d1
5 changed files with 66 additions and 63 deletions
|
@ -79,6 +79,31 @@ Rectangle {
|
||||||
var avatarIndex = allAvatars.findAvatarIndex(selectedAvatarId);
|
var avatarIndex = allAvatars.findAvatarIndex(selectedAvatarId);
|
||||||
allAvatars.move(avatarIndex, 0, 1);
|
allAvatars.move(avatarIndex, 0, 1);
|
||||||
view.setPage(0);
|
view.setPage(0);
|
||||||
|
} else if(message.method === 'bookmarkDeleted') {
|
||||||
|
pageOfAvatars.isUpdating = true;
|
||||||
|
|
||||||
|
var index = pageOfAvatars.findAvatarIndex(message.name);
|
||||||
|
var absoluteIndex = view.currentPage * view.itemsPerPage + index
|
||||||
|
console.debug('removed ', absoluteIndex, 'view.currentPage', view.currentPage,
|
||||||
|
'view.itemsPerPage: ', view.itemsPerPage, 'index', index, 'pageOfAvatars', pageOfAvatars, 'pageOfAvatars.count', pageOfAvatars)
|
||||||
|
|
||||||
|
allAvatars.remove(absoluteIndex)
|
||||||
|
pageOfAvatars.remove(index);
|
||||||
|
|
||||||
|
var itemsOnPage = pageOfAvatars.count;
|
||||||
|
var newItemIndex = view.currentPage * view.itemsPerPage + itemsOnPage;
|
||||||
|
|
||||||
|
console.debug('newItemIndex: ', newItemIndex, 'allAvatars.count - 1: ', allAvatars.count - 1, 'pageOfAvatars.count:', pageOfAvatars.count);
|
||||||
|
|
||||||
|
if(newItemIndex <= (allAvatars.count - 1)) {
|
||||||
|
pageOfAvatars.append(allAvatars.get(newItemIndex));
|
||||||
|
} else {
|
||||||
|
if(!pageOfAvatars.hasGetAvatars())
|
||||||
|
pageOfAvatars.appendGetAvatars();
|
||||||
|
}
|
||||||
|
|
||||||
|
console.debug('removed ', absoluteIndex, 'newItemIndex: ', newItemIndex, 'allAvatars.count:', allAvatars.count, 'pageOfAvatars.count:', pageOfAvatars.count)
|
||||||
|
pageOfAvatars.isUpdating = false;
|
||||||
} else if(message.method === getAvatarsMethod) {
|
} else if(message.method === getAvatarsMethod) {
|
||||||
var getAvatarsReply = message.reply;
|
var getAvatarsReply = message.reply;
|
||||||
allAvatars.populate(getAvatarsReply.bookmarks);
|
allAvatars.populate(getAvatarsReply.bookmarks);
|
||||||
|
@ -144,10 +169,6 @@ Rectangle {
|
||||||
console.debug('onSelectedAvatarChanged.selectedAvatar: ', JSON.stringify(selectedAvatar, null, '\t'));
|
console.debug('onSelectedAvatarChanged.selectedAvatar: ', JSON.stringify(selectedAvatar, null, '\t'));
|
||||||
}
|
}
|
||||||
|
|
||||||
function isEqualById(avatar, avatarId) {
|
|
||||||
return (avatar.name) === avatarId
|
|
||||||
}
|
|
||||||
|
|
||||||
property string avatarName: selectedAvatar ? selectedAvatar.name : ''
|
property string avatarName: selectedAvatar ? selectedAvatar.name : ''
|
||||||
property string avatarUrl: selectedAvatar ? selectedAvatar.url : null
|
property string avatarUrl: selectedAvatar ? selectedAvatar.url : null
|
||||||
property int avatarWearablesCount: selectedAvatar ? selectedAvatar.wearables.count : 0
|
property int avatarWearablesCount: selectedAvatar ? selectedAvatar.wearables.count : 0
|
||||||
|
@ -525,28 +546,12 @@ Rectangle {
|
||||||
emitSendToScript({'method' : 'selectAvatar', 'name' : avatar.name})
|
emitSendToScript({'method' : 'selectAvatar', 'name' : avatar.name})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function deleteAvatar(avatar) {
|
||||||
|
emitSendToScript({'method' : 'deleteAvatar', 'name' : avatar.name})
|
||||||
|
}
|
||||||
|
|
||||||
AvatarsModel {
|
AvatarsModel {
|
||||||
id: allAvatars
|
id: allAvatars
|
||||||
|
|
||||||
function findAvatarIndex(avatarId) {
|
|
||||||
for(var i = 0; i < count; ++i) {
|
|
||||||
if(isEqualById(get(i), avatarId)) {
|
|
||||||
console.debug('avatar found by index: ', i)
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
function findAvatar(avatarId) {
|
|
||||||
console.debug('AvatarsModel: find avatar by', avatarId);
|
|
||||||
|
|
||||||
var avatarIndex = findAvatarIndex(avatarId);
|
|
||||||
if(avatarIndex === -1)
|
|
||||||
return undefined;
|
|
||||||
|
|
||||||
return get(avatarIndex);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
property int itemsPerPage: 8
|
property int itemsPerPage: 8
|
||||||
|
@ -593,25 +598,12 @@ Rectangle {
|
||||||
pageOfAvatars.isUpdating = false;
|
pageOfAvatars.isUpdating = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
model: ListModel {
|
model: AvatarsModel {
|
||||||
id: pageOfAvatars
|
id: pageOfAvatars
|
||||||
|
|
||||||
property bool isUpdating: false;
|
property bool isUpdating: false;
|
||||||
property var getMoreAvatarsEntry: {'url' : '', 'name' : '', 'getMoreAvatars' : true}
|
property var getMoreAvatarsEntry: {'url' : '', 'name' : '', 'getMoreAvatars' : true}
|
||||||
|
|
||||||
function findAvatar(avatarId) {
|
|
||||||
console.debug('pageOfAvatars.findAvatar: ', avatarId);
|
|
||||||
|
|
||||||
for(var i = 0; i < count; ++i) {
|
|
||||||
if(isEqualById(get(i), avatarId)) {
|
|
||||||
console.debug('avatar found by index: ', i)
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
function appendGetAvatars() {
|
function appendGetAvatars() {
|
||||||
append(getMoreAvatarsEntry);
|
append(getMoreAvatarsEntry);
|
||||||
}
|
}
|
||||||
|
@ -682,31 +674,7 @@ Rectangle {
|
||||||
if(isInManageState) {
|
if(isInManageState) {
|
||||||
var currentItem = delegateRoot.GridView.view.model.get(index);
|
var currentItem = delegateRoot.GridView.view.model.get(index);
|
||||||
popup.showDeleteFavorite(currentItem.name, function() {
|
popup.showDeleteFavorite(currentItem.name, function() {
|
||||||
pageOfAvatars.isUpdating = true;
|
view.deleteAvatar(currentItem);
|
||||||
|
|
||||||
console.debug('removing ', index)
|
|
||||||
|
|
||||||
var absoluteIndex = view.currentPage * view.itemsPerPage + index
|
|
||||||
console.debug('removed ', absoluteIndex, 'view.currentPage', view.currentPage,
|
|
||||||
'view.itemsPerPage: ', view.itemsPerPage, 'index', index, 'pageOfAvatars', pageOfAvatars, 'pageOfAvatars.count', pageOfAvatars)
|
|
||||||
|
|
||||||
allAvatars.remove(absoluteIndex)
|
|
||||||
pageOfAvatars.remove(index);
|
|
||||||
|
|
||||||
var itemsOnPage = pageOfAvatars.count;
|
|
||||||
var newItemIndex = view.currentPage * view.itemsPerPage + itemsOnPage;
|
|
||||||
|
|
||||||
console.debug('newItemIndex: ', newItemIndex, 'allAvatars.count - 1: ', allAvatars.count - 1, 'pageOfAvatars.count:', pageOfAvatars.count);
|
|
||||||
|
|
||||||
if(newItemIndex <= (allAvatars.count - 1)) {
|
|
||||||
pageOfAvatars.append(allAvatars.get(newItemIndex));
|
|
||||||
} else {
|
|
||||||
if(!pageOfAvatars.hasGetAvatars())
|
|
||||||
pageOfAvatars.appendGetAvatars();
|
|
||||||
}
|
|
||||||
|
|
||||||
console.debug('removed ', absoluteIndex, 'newItemIndex: ', newItemIndex, 'allAvatars.count:', allAvatars.count, 'pageOfAvatars.count:', pageOfAvatars.count)
|
|
||||||
pageOfAvatars.isUpdating = false;
|
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
if(delegateRoot.GridView.view.currentIndex !== index) {
|
if(delegateRoot.GridView.view.currentIndex !== index) {
|
||||||
|
|
|
@ -31,4 +31,25 @@ ListModel {
|
||||||
append(avatarEntry);
|
append(avatarEntry);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function findAvatarIndex(avatarName) {
|
||||||
|
for(var i = 0; i < count; ++i) {
|
||||||
|
if(get(i).name === avatarName) {
|
||||||
|
console.debug('avatar found by index: ', i)
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
function findAvatar(avatarName) {
|
||||||
|
console.debug('AvatarsModel: find avatar by', avatarName);
|
||||||
|
|
||||||
|
var avatarIndex = findAvatarIndex(avatarName);
|
||||||
|
if(avatarIndex === -1)
|
||||||
|
return undefined;
|
||||||
|
|
||||||
|
return get(avatarIndex);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -134,6 +134,8 @@ void AvatarBookmarks::removeBookmark(const QString& bookmarkName) {
|
||||||
if (_bookmarksMenu->actions().count() == 0) {
|
if (_bookmarksMenu->actions().count() == 0) {
|
||||||
enableMenuItems(false);
|
enableMenuItems(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
emit bookmarkDeleted(bookmarkName);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AvatarBookmarks::updateAvatarEntities(const QVariantList &avatarEntities)
|
void AvatarBookmarks::updateAvatarEntities(const QVariantList &avatarEntities)
|
||||||
|
|
|
@ -48,6 +48,7 @@ public slots:
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void bookmarkLoaded(const QString& bookmarkName);
|
void bookmarkLoaded(const QString& bookmarkName);
|
||||||
|
void bookmarkDeleted(const QString& bookmarkName);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void addBookmarkToMenu(Menu* menubar, const QString& name, const QVariant& bookmark) override;
|
void addBookmarkToMenu(Menu* menubar, const QString& name, const QVariant& bookmark) override;
|
||||||
|
|
|
@ -128,6 +128,10 @@ function fromQml(message) { // messages are {method, params}, like json-rpc. See
|
||||||
console.debug('avatarapp.js: selecting avatar: ', message.name);
|
console.debug('avatarapp.js: selecting avatar: ', message.name);
|
||||||
AvatarBookmarks.loadBookmark(message.name);
|
AvatarBookmarks.loadBookmark(message.name);
|
||||||
break;
|
break;
|
||||||
|
case 'deleteAvatar':
|
||||||
|
console.debug('avatarapp.js: deleting avatar: ', message.name);
|
||||||
|
AvatarBookmarks.removeBookmark(message.name);
|
||||||
|
break;
|
||||||
case 'adjustWearablesOpened':
|
case 'adjustWearablesOpened':
|
||||||
currentAvatarWearablesBackup = getMyAvatarWearables();
|
currentAvatarWearablesBackup = getMyAvatarWearables();
|
||||||
adjustWearables.setOpened(true);
|
adjustWearables.setOpened(true);
|
||||||
|
@ -254,6 +258,11 @@ function onBookmarkLoaded(bookmarkName) {
|
||||||
sendToQml({'method' : 'bookmarkLoaded', 'reply' : {'name' : bookmarkName, 'currentAvatar' : currentAvatar} });
|
sendToQml({'method' : 'bookmarkLoaded', 'reply' : {'name' : bookmarkName, 'currentAvatar' : currentAvatar} });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function onBookmarkDeleted(bookmarkName) {
|
||||||
|
console.debug('avatarapp.js: onBookmarkDeleted: ', bookmarkName);
|
||||||
|
sendToQml({'method' : 'bookmarkDeleted', 'name' : bookmarkName});
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Manage the connection between the button and the window.
|
// Manage the connection between the button and the window.
|
||||||
//
|
//
|
||||||
|
@ -272,6 +281,7 @@ function startup() {
|
||||||
button.clicked.connect(onTabletButtonClicked);
|
button.clicked.connect(onTabletButtonClicked);
|
||||||
tablet.screenChanged.connect(onTabletScreenChanged);
|
tablet.screenChanged.connect(onTabletScreenChanged);
|
||||||
AvatarBookmarks.bookmarkLoaded.connect(onBookmarkLoaded);
|
AvatarBookmarks.bookmarkLoaded.connect(onBookmarkLoaded);
|
||||||
|
AvatarBookmarks.bookmarkDeleted.connect(onBookmarkDeleted);
|
||||||
|
|
||||||
// Window.domainChanged.connect(clearLocalQMLDataAndClosePAL);
|
// Window.domainChanged.connect(clearLocalQMLDataAndClosePAL);
|
||||||
// Window.domainConnectionRefused.connect(clearLocalQMLDataAndClosePAL);
|
// Window.domainConnectionRefused.connect(clearLocalQMLDataAndClosePAL);
|
||||||
|
@ -373,6 +383,7 @@ function shutdown() {
|
||||||
tablet.removeButton(button);
|
tablet.removeButton(button);
|
||||||
tablet.screenChanged.disconnect(onTabletScreenChanged);
|
tablet.screenChanged.disconnect(onTabletScreenChanged);
|
||||||
AvatarBookmarks.bookmarkLoaded.disconnect(onBookmarkLoaded);
|
AvatarBookmarks.bookmarkLoaded.disconnect(onBookmarkLoaded);
|
||||||
|
AvatarBookmarks.bookmarkDeleted.disconnect(onBookmarkDeleted);
|
||||||
|
|
||||||
// Window.domainChanged.disconnect(clearLocalQMLDataAndClosePAL);
|
// Window.domainChanged.disconnect(clearLocalQMLDataAndClosePAL);
|
||||||
// Window.domainConnectionRefused.disconnect(clearLocalQMLDataAndClosePAL);
|
// Window.domainConnectionRefused.disconnect(clearLocalQMLDataAndClosePAL);
|
||||||
|
|
Loading…
Reference in a new issue