backend integration from Dante

* adding some functionality to avatar bookmarks
* saving work
This commit is contained in:
Dante Ruiz 2018-05-04 12:03:06 -07:00 committed by Alexander Ivash
parent 5007c259bb
commit ce3015662e
5 changed files with 85 additions and 18 deletions

View file

@ -11,7 +11,6 @@ Rectangle {
width: 480
height: 706
color: style.colors.white
property string getAvatarsMethod: 'getAvatars'
signal sendToScript(var message);
@ -486,6 +485,7 @@ Rectangle {
property int verticalSpacing: 36
function selectAvatar(avatar) {
AvatarBookmarks.loadBookmark(avatar.name);
selectedAvatarId = avatar.name;
var avatarIndex = allAvatars.findAvatarIndex(selectedAvatarId);
allAvatars.move(avatarIndex, 0, 1);

View file

@ -17,7 +17,9 @@
#include <QStandardPaths>
#include <QQmlContext>
#include <QList>
#include <QtCore/QThread>
#include <shared/QtHelpers.h>
#include <Application.h>
#include <OffscreenUi.h>
#include <avatar/AvatarManager.h>
@ -96,6 +98,74 @@ AvatarBookmarks::AvatarBookmarks() {
readFromFile();
}
void AvatarBookmarks::addBookmark(const QString& bookmarkName) {
if (QThread::currentThread() != thread()) {
BLOCKING_INVOKE_METHOD(this, "addBookmark", Q_ARG(QString, bookmarkName));
return;
}
Menu* menubar = Menu::getInstance();
QVariantMap bookmark = getAvatarDataToBookmark();
addBookmarkToMenu(menubar, bookmarkName, bookmark);
insert(bookmarkName, bookmark);
enableMenuItems(true);
}
void AvatarBookmarks::saveBookmark(const QString& bookmarkName) {
if (QThread::currentThread() != thread()) {
BLOCKING_INVOKE_METHOD(this, "saveBookmark", Q_ARG(QString, bookmarkName));
return;
}
if (contains(bookmarkName)) {
QVariantMap bookmark = getAvatarDataToBookmark();
insert(bookmarkName, bookmark);
}
}
void AvatarBookmarks::removeBookmark(const QString& bookmarkName) {
if (QThread::currentThread() != thread()) {
BLOCKING_INVOKE_METHOD(this, "removeBookmark", Q_ARG(QString, bookmarkName));
return;
}
Menu* menubar = Menu::getInstance();
Bookmarks::removeBookmarkFromMenu(Menu::getInstance(), bookmarkName);
remove(bookmarkName);
if (_bookmarksMenu->actions().count() == 0) {
enableMenuItems(false);
}
}
void AvatarBookmarks::loadBookmark(const QString& bookmarkName) {
if (QThread::currentThread() != thread()) {
BLOCKING_INVOKE_METHOD(this, "reloadBookmark", Q_ARG(QString, bookmarkName));
return;
}
auto bookmarkEntry = _bookmarks.find(bookmarkName);
if (bookmarkEntry != _bookmarks.end()) {
QVariantMap bookmark = bookmarkEntry.value().toMap();
if (!bookmark.empty()) {
auto myAvatar = DependencyManager::get<AvatarManager>()->getMyAvatar();
myAvatar->removeAvatarEntities();
const QString& avatarUrl = bookmark.value(ENTRY_AVATAR_URL, "").toString();
myAvatar->useFullAvatarURL(avatarUrl);
qCDebug(interfaceapp) << "Avatar On " << avatarUrl;
const QList<QVariant>& attachments = bookmark.value(ENTRY_AVATAR_ATTACHMENTS, QList<QVariant>()).toList();
qCDebug(interfaceapp) << "Attach " << attachments;
myAvatar->setAttachmentsVariant(attachments);
const float& qScale = bookmark.value(ENTRY_AVATAR_SCALE, 1.0f).toFloat();
myAvatar->setAvatarScale(qScale);
const QVariantList& avatarEntities = bookmark.value(ENTRY_AVATAR_ENTITIES, QVariantList()).toList();
addAvatarEntities(avatarEntities);
}
}
}
void AvatarBookmarks::readFromFile() {
// migrate old avatarbookmarks.json, used to be in 'local' folder on windows
QString oldConfigPath = QStandardPaths::writableLocation(QStandardPaths::DataLocation) + "/" + AVATARBOOKMARKS_FILENAME;
@ -181,12 +251,12 @@ void AvatarBookmarks::addBookmark() {
return;
}
addBookmark(bookmarkName);
QVariantMap bookmark = getAvatarDataToBookmark();
Bookmarks::addBookmarkToFile(bookmarkName, bookmark);
});
}
void AvatarBookmarks::addBookmark(QString bookmarkName)
{
QVariantMap AvatarBookmarks::getAvatarDataToBookmark() {
auto myAvatar = DependencyManager::get<AvatarManager>()->getMyAvatar();
const QString& avatarUrl = myAvatar->getSkeletonModelURL().toString();
@ -199,13 +269,7 @@ void AvatarBookmarks::addBookmark(QString bookmarkName)
bookmark.insert(ENTRY_AVATAR_SCALE, avatarScale);
bookmark.insert(ENTRY_AVATAR_ATTACHMENTS, myAvatar->getAttachmentsVariant());
bookmark.insert(ENTRY_AVATAR_ENTITIES, myAvatar->getAvatarEntitiesVariant());
Bookmarks::addBookmarkToFile(bookmarkName, bookmark);
}
void AvatarBookmarks::removeBookmark(QString bookmarkName)
{
Bookmarks::deleteBookmark(bookmarkName);
return bookmark;
}
void AvatarBookmarks::addBookmarkToMenu(Menu* menubar, const QString& name, const QVariant& bookmark) {

View file

@ -39,13 +39,16 @@ public slots:
* @function AvatarBookmarks.addBookMark
*/
void addBookmark();
void addBookmark(QString bookmarkName);
void removeBookmark(QString bookmarkName);
void addBookmark(const QString& bookmarkName);
void saveBookmark(const QString& bookmarkName);
void loadBookmark(const QString& bookmarkName);
void removeBookmark(const QString& bookmarkName);
QVariantMap getBookmarks() { return _bookmarks; }
protected:
void addBookmarkToMenu(Menu* menubar, const QString& name, const QVariant& bookmark) override;
void readFromFile() override;
QVariantMap getAvatarDataToBookmark();
private:
const QString AVATARBOOKMARKS_FILENAME = "avatarbookmarks.json";

View file

@ -40,9 +40,10 @@ protected:
void insert(const QString& name, const QVariant& address); // Overwrites any existing entry with same name.
void sortActions(Menu* menubar, MenuWrapper* menu);
int getMenuItemLocation(QList<QAction*> actions, const QString& name) const;
void removeBookmarkFromMenu(Menu* menubar, const QString& name);
bool contains(const QString& name) const;
void remove(const QString& name);
QVariantMap _bookmarks; // { name: url, ... }
QPointer<MenuWrapper> _bookmarksMenu;
QPointer<QAction> _deleteBookmarksAction;
@ -59,12 +60,9 @@ protected slots:
void deleteBookmark();
private:
void remove(const QString& name);
static bool sortOrder(QAction* a, QAction* b);
void persistToFile();
void removeBookmarkFromMenu(Menu* menubar, const QString& name);
};
#endif // hifi_Bookmarks_h

View file

@ -42,6 +42,7 @@
#include "scripting/MenuScriptingInterface.h"
#include "scripting/SettingsScriptingInterface.h"
#include <Preferences.h>
#include <AvatarBookmarks.h>
#include <ScriptEngines.h>
#include "FileDialogHelper.h"
#include "avatar/AvatarManager.h"
@ -253,6 +254,7 @@ void Web3DOverlay::setupQmlSurface() {
_webSurface->getSurfaceContext()->setContextProperty("SoundCache", DependencyManager::get<SoundCache>().data());
_webSurface->getSurfaceContext()->setContextProperty("MenuInterface", MenuScriptingInterface::getInstance());
_webSurface->getSurfaceContext()->setContextProperty("Settings", SettingsScriptingInterface::getInstance());
_webSurface->getSurfaceContext()->setContextProperty("AvatarBookmarks", DependencyManager::get<AvatarBookmarks>().data());
_webSurface->getSurfaceContext()->setContextProperty("Render", AbstractViewStateInterface::instance()->getRenderEngine()->getConfiguration().get());
_webSurface->getSurfaceContext()->setContextProperty("Workload", qApp->getGameWorkload()._engine->getConfiguration().get());
_webSurface->getSurfaceContext()->setContextProperty("Controller", DependencyManager::get<controller::ScriptingInterface>().data());