mirror of
https://github.com/overte-org/overte.git
synced 2025-04-08 07:12:40 +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);
|
||||
allAvatars.move(avatarIndex, 0, 1);
|
||||
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) {
|
||||
var getAvatarsReply = message.reply;
|
||||
allAvatars.populate(getAvatarsReply.bookmarks);
|
||||
|
@ -144,10 +169,6 @@ Rectangle {
|
|||
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 avatarUrl: selectedAvatar ? selectedAvatar.url : null
|
||||
property int avatarWearablesCount: selectedAvatar ? selectedAvatar.wearables.count : 0
|
||||
|
@ -525,28 +546,12 @@ Rectangle {
|
|||
emitSendToScript({'method' : 'selectAvatar', 'name' : avatar.name})
|
||||
}
|
||||
|
||||
function deleteAvatar(avatar) {
|
||||
emitSendToScript({'method' : 'deleteAvatar', 'name' : avatar.name})
|
||||
}
|
||||
|
||||
AvatarsModel {
|
||||
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
|
||||
|
@ -593,25 +598,12 @@ Rectangle {
|
|||
pageOfAvatars.isUpdating = false;
|
||||
}
|
||||
|
||||
model: ListModel {
|
||||
model: AvatarsModel {
|
||||
id: pageOfAvatars
|
||||
|
||||
property bool isUpdating: false;
|
||||
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() {
|
||||
append(getMoreAvatarsEntry);
|
||||
}
|
||||
|
@ -682,31 +674,7 @@ Rectangle {
|
|||
if(isInManageState) {
|
||||
var currentItem = delegateRoot.GridView.view.model.get(index);
|
||||
popup.showDeleteFavorite(currentItem.name, function() {
|
||||
pageOfAvatars.isUpdating = true;
|
||||
|
||||
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;
|
||||
view.deleteAvatar(currentItem);
|
||||
});
|
||||
} else {
|
||||
if(delegateRoot.GridView.view.currentIndex !== index) {
|
||||
|
|
|
@ -31,4 +31,25 @@ ListModel {
|
|||
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) {
|
||||
enableMenuItems(false);
|
||||
}
|
||||
|
||||
emit bookmarkDeleted(bookmarkName);
|
||||
}
|
||||
|
||||
void AvatarBookmarks::updateAvatarEntities(const QVariantList &avatarEntities)
|
||||
|
|
|
@ -48,6 +48,7 @@ public slots:
|
|||
|
||||
signals:
|
||||
void bookmarkLoaded(const QString& bookmarkName);
|
||||
void bookmarkDeleted(const QString& bookmarkName);
|
||||
|
||||
protected:
|
||||
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);
|
||||
AvatarBookmarks.loadBookmark(message.name);
|
||||
break;
|
||||
case 'deleteAvatar':
|
||||
console.debug('avatarapp.js: deleting avatar: ', message.name);
|
||||
AvatarBookmarks.removeBookmark(message.name);
|
||||
break;
|
||||
case 'adjustWearablesOpened':
|
||||
currentAvatarWearablesBackup = getMyAvatarWearables();
|
||||
adjustWearables.setOpened(true);
|
||||
|
@ -254,6 +258,11 @@ function onBookmarkLoaded(bookmarkName) {
|
|||
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.
|
||||
//
|
||||
|
@ -272,6 +281,7 @@ function startup() {
|
|||
button.clicked.connect(onTabletButtonClicked);
|
||||
tablet.screenChanged.connect(onTabletScreenChanged);
|
||||
AvatarBookmarks.bookmarkLoaded.connect(onBookmarkLoaded);
|
||||
AvatarBookmarks.bookmarkDeleted.connect(onBookmarkDeleted);
|
||||
|
||||
// Window.domainChanged.connect(clearLocalQMLDataAndClosePAL);
|
||||
// Window.domainConnectionRefused.connect(clearLocalQMLDataAndClosePAL);
|
||||
|
@ -373,6 +383,7 @@ function shutdown() {
|
|||
tablet.removeButton(button);
|
||||
tablet.screenChanged.disconnect(onTabletScreenChanged);
|
||||
AvatarBookmarks.bookmarkLoaded.disconnect(onBookmarkLoaded);
|
||||
AvatarBookmarks.bookmarkDeleted.disconnect(onBookmarkDeleted);
|
||||
|
||||
// Window.domainChanged.disconnect(clearLocalQMLDataAndClosePAL);
|
||||
// Window.domainConnectionRefused.disconnect(clearLocalQMLDataAndClosePAL);
|
||||
|
|
Loading…
Reference in a new issue