introduce reverting avatar wearables on cancel

This commit is contained in:
Alexander Ivash 2018-05-09 21:47:41 +03:00
parent 9914a1d523
commit 51c8248463
5 changed files with 44 additions and 29 deletions

View file

@ -56,11 +56,22 @@ Rectangle {
adjustWearables.refreshWearable(message.entityID, message.wearableIndex, message.properties);
} else if(message.method === 'wearablesUpdated') {
var wearablesModel = currentAvatarModel.get(0).wearables;
console.debug('handling wearablesUpdated, new wearables count:', message.wearables.length, ': old wearables: ');
for(var i = 0; i < wearablesModel.count; ++i) {
console.debug('wearable: ', wearablesModel.get(i).properties.id);
}
wearablesModel.clear();
message.wearables.forEach(function(wearable) {
wearablesModel.append(wearable);
});
console.debug('wearablesUpdated: ', JSON.stringify(wearablesModel, 0, 4), '*****', JSON.stringify(message.wearables, 0, 4));
console.debug('handling wearablesUpdated: new wearables: ');
for(var i = 0; i < wearablesModel.count; ++i) {
console.debug('wearable: ', wearablesModel.get(i).properties.id);
}
adjustWearables.refresh(root.currentAvatar);
} else if(message.method === 'bookmarkLoaded') {
setCurrentAvatar(message.reply.currentAvatar);
@ -210,10 +221,10 @@ Rectangle {
emitSendToScript({'method' : 'deleteWearable', 'entityID' : id, 'avatarName' : avatarName});
}
onAdjustWearablesOpened: {
emitSendToScript({'method' : 'adjustWearablesOpened'});
emitSendToScript({'method' : 'adjustWearablesOpened', 'avatarName' : avatarName});
}
onAdjustWearablesClosed: {
emitSendToScript({'method' : 'adjustWearablesClosed'});
emitSendToScript({'method' : 'adjustWearablesClosed', 'save' : status, 'avatarName' : avatarName});
}
onWearableSelected: {
emitSendToScript({'method' : 'selectWearable', 'entityID' : id});

View file

@ -16,7 +16,7 @@ Rectangle {
signal wearableDeleted(string avatarName, var id);
signal adjustWearablesOpened();
signal adjustWearablesClosed();
signal adjustWearablesClosed(bool status);
property bool modified: false;
Component.onCompleted: {
@ -27,20 +27,10 @@ Rectangle {
console.debug('modified: ', modified)
}
property var onButton2Clicked;
property var onButton1Clicked;
property var jointNames;
property var wearables: ({})
property string avatarName: ''
property var wearablesModel;
function backupWearables(avatar) {
for(var i = 0; i < avatar.wearables.count; ++i) {
var wearable = avatar.wearables.get(i).properties;
wearables[wearable.id] = JSON.stringify(wearable)
}
}
function open(avatar) {
adjustWearablesOpened();
console.debug('AdjustWearables.qml: open: ', JSON.stringify(avatar, null, '\t'));
@ -48,13 +38,15 @@ Rectangle {
visible = true;
avatarName = avatar.name;
wearablesModel = avatar.wearables;
wearables = {};
refresh(avatar);
backupWearables(avatar);
}
function refresh(avatar) {
console.debug('refresh: ');
for(var i = 0; i < avatar.wearables.count; ++i) {
console.debug('wearable: ', avatar.wearables.get(i).properties.id);
}
wearablesCombobox.model.clear();
console.debug('AdjustWearables.qml: open: avatar.wearables.count: ', avatar.wearables.count);
for(var i = 0; i < avatar.wearables.count; ++i) {
@ -109,9 +101,9 @@ Rectangle {
}
}
function close() {
function close(status) {
visible = false;
adjustWearablesClosed();
adjustWearablesClosed(status);
}
HifiConstants { id: hifi }
@ -324,19 +316,11 @@ Rectangle {
noText: "CANCEL"
onYesClicked: function() {
if(onButton2Clicked) {
onButton2Clicked();
} else {
root.close();
}
root.close(true);
}
onNoClicked: function() {
if(onButton1Clicked) {
onButton1Clicked();
} else {
root.close();
}
root.close(false);
}
}
}

View file

@ -136,6 +136,14 @@ void AvatarBookmarks::removeBookmark(const QString& bookmarkName) {
}
}
void AvatarBookmarks::updateAvatarEntities(const QVariantList &avatarEntities)
{
auto myAvatar = DependencyManager::get<AvatarManager>()->getMyAvatar();
myAvatar->removeAvatarEntities();
addAvatarEntities(avatarEntities);
}
void AvatarBookmarks::loadBookmark(const QString& bookmarkName) {
if (QThread::currentThread() != thread()) {
BLOCKING_INVOKE_METHOD(this, "loadBookmark", Q_ARG(QString, bookmarkName));

View file

@ -43,6 +43,7 @@ public slots:
void saveBookmark(const QString& bookmarkName);
void loadBookmark(const QString& bookmarkName);
void removeBookmark(const QString& bookmarkName);
void updateAvatarEntities(const QVariantList& avatarEntities);
QVariantMap getBookmarks() { return _bookmarks; }
signals:

View file

@ -96,6 +96,7 @@ var adjustWearables = {
}
}
var currentAvatarWearablesBackup = null;
var currentAvatar = getMyAvatar();
var selectedAvatarEntityGrabbable = false;
var selectedAvatarEntity = null;
@ -128,10 +129,20 @@ function fromQml(message) { // messages are {method, params}, like json-rpc. See
AvatarBookmarks.loadBookmark(message.name);
break;
case 'adjustWearablesOpened':
currentAvatarWearablesBackup = getMyAvatarWearables();
adjustWearables.setOpened(true);
Entities.mousePressOnEntity.connect(onSelectedEntity);
break;
case 'adjustWearablesClosed':
if(!message.save) {
// revert changes using snapshot of wearables
console.debug('reverting... ');
if(currentAvatarWearablesBackup !== null) {
AvatarBookmarks.updateAvatarEntities(currentAvatarWearablesBackup);
sendToQml({'method' : 'wearablesUpdated', 'wearables' : currentAvatarWearablesBackup, 'avatarName' : message.avatarName})
}
}
adjustWearables.setOpened(false);
ensureWearableSelected(null);
Entities.mousePressOnEntity.disconnect(onSelectedEntity);