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

View file

@ -17,7 +17,9 @@
#include <QStandardPaths> #include <QStandardPaths>
#include <QQmlContext> #include <QQmlContext>
#include <QList> #include <QList>
#include <QtCore/QThread>
#include <shared/QtHelpers.h>
#include <Application.h> #include <Application.h>
#include <OffscreenUi.h> #include <OffscreenUi.h>
#include <avatar/AvatarManager.h> #include <avatar/AvatarManager.h>
@ -96,6 +98,74 @@ AvatarBookmarks::AvatarBookmarks() {
readFromFile(); 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() { void AvatarBookmarks::readFromFile() {
// migrate old avatarbookmarks.json, used to be in 'local' folder on windows // migrate old avatarbookmarks.json, used to be in 'local' folder on windows
QString oldConfigPath = QStandardPaths::writableLocation(QStandardPaths::DataLocation) + "/" + AVATARBOOKMARKS_FILENAME; QString oldConfigPath = QStandardPaths::writableLocation(QStandardPaths::DataLocation) + "/" + AVATARBOOKMARKS_FILENAME;
@ -181,12 +251,12 @@ void AvatarBookmarks::addBookmark() {
return; return;
} }
addBookmark(bookmarkName); QVariantMap bookmark = getAvatarDataToBookmark();
Bookmarks::addBookmarkToFile(bookmarkName, bookmark);
}); });
} }
void AvatarBookmarks::addBookmark(QString bookmarkName) QVariantMap AvatarBookmarks::getAvatarDataToBookmark() {
{
auto myAvatar = DependencyManager::get<AvatarManager>()->getMyAvatar(); auto myAvatar = DependencyManager::get<AvatarManager>()->getMyAvatar();
const QString& avatarUrl = myAvatar->getSkeletonModelURL().toString(); 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_SCALE, avatarScale);
bookmark.insert(ENTRY_AVATAR_ATTACHMENTS, myAvatar->getAttachmentsVariant()); bookmark.insert(ENTRY_AVATAR_ATTACHMENTS, myAvatar->getAttachmentsVariant());
bookmark.insert(ENTRY_AVATAR_ENTITIES, myAvatar->getAvatarEntitiesVariant()); bookmark.insert(ENTRY_AVATAR_ENTITIES, myAvatar->getAvatarEntitiesVariant());
return bookmark;
Bookmarks::addBookmarkToFile(bookmarkName, bookmark);
}
void AvatarBookmarks::removeBookmark(QString bookmarkName)
{
Bookmarks::deleteBookmark(bookmarkName);
} }
void AvatarBookmarks::addBookmarkToMenu(Menu* menubar, const QString& name, const QVariant& bookmark) { void AvatarBookmarks::addBookmarkToMenu(Menu* menubar, const QString& name, const QVariant& bookmark) {

View file

@ -39,13 +39,16 @@ public slots:
* @function AvatarBookmarks.addBookMark * @function AvatarBookmarks.addBookMark
*/ */
void addBookmark(); void addBookmark();
void addBookmark(QString bookmarkName); void addBookmark(const QString& bookmarkName);
void removeBookmark(QString bookmarkName); void saveBookmark(const QString& bookmarkName);
void loadBookmark(const QString& bookmarkName);
void removeBookmark(const QString& bookmarkName);
QVariantMap getBookmarks() { return _bookmarks; } QVariantMap getBookmarks() { return _bookmarks; }
protected: protected:
void addBookmarkToMenu(Menu* menubar, const QString& name, const QVariant& bookmark) override; void addBookmarkToMenu(Menu* menubar, const QString& name, const QVariant& bookmark) override;
void readFromFile() override; void readFromFile() override;
QVariantMap getAvatarDataToBookmark();
private: private:
const QString AVATARBOOKMARKS_FILENAME = "avatarbookmarks.json"; 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 insert(const QString& name, const QVariant& address); // Overwrites any existing entry with same name.
void sortActions(Menu* menubar, MenuWrapper* menu); void sortActions(Menu* menubar, MenuWrapper* menu);
int getMenuItemLocation(QList<QAction*> actions, const QString& name) const; int getMenuItemLocation(QList<QAction*> actions, const QString& name) const;
void removeBookmarkFromMenu(Menu* menubar, const QString& name);
bool contains(const QString& name) const; bool contains(const QString& name) const;
void remove(const QString& name);
QVariantMap _bookmarks; // { name: url, ... } QVariantMap _bookmarks; // { name: url, ... }
QPointer<MenuWrapper> _bookmarksMenu; QPointer<MenuWrapper> _bookmarksMenu;
QPointer<QAction> _deleteBookmarksAction; QPointer<QAction> _deleteBookmarksAction;
@ -59,12 +60,9 @@ protected slots:
void deleteBookmark(); void deleteBookmark();
private: private:
void remove(const QString& name);
static bool sortOrder(QAction* a, QAction* b); static bool sortOrder(QAction* a, QAction* b);
void persistToFile(); void persistToFile();
void removeBookmarkFromMenu(Menu* menubar, const QString& name);
}; };
#endif // hifi_Bookmarks_h #endif // hifi_Bookmarks_h

View file

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